Merge branch 'master' of https://github.com/tildearrow/furnace into k053260

This commit is contained in:
cam900 2023-05-02 13:46:56 +09:00
commit 523e08ed5c
35 changed files with 677 additions and 193 deletions

View file

@ -722,6 +722,8 @@ enum NoteCtrl {
struct SelectionPoint {
int xCoarse, xFine;
int y;
SelectionPoint(int xc, int xf, int yp):
xCoarse(xc), xFine(xf), y(yp) {}
SelectionPoint():
xCoarse(0), xFine(0), y(0) {}
};
@ -743,10 +745,17 @@ enum ActionType {
GUI_UNDO_PATTERN_FLIP,
GUI_UNDO_PATTERN_COLLAPSE,
GUI_UNDO_PATTERN_EXPAND,
GUI_UNDO_PATTERN_COLLAPSE_SONG,
GUI_UNDO_PATTERN_EXPAND_SONG,
GUI_UNDO_PATTERN_DRAG,
GUI_UNDO_REPLACE
};
enum UndoOtherTarget {
GUI_UNDO_TARGET_SONG,
GUI_UNDO_TARGET_SUBSONG
};
struct UndoPatternData {
int subSong, chan, pat, row, col;
short oldVal, newVal;
@ -771,6 +780,19 @@ struct UndoOrderData {
newVal(v2) {}
};
struct UndoOtherData {
UndoOtherTarget target;
int subtarget;
size_t off;
unsigned char oldVal, newVal;
UndoOtherData(UndoOtherTarget t, int st, size_t o, unsigned char v1, unsigned char v2):
target(t),
subtarget(st),
off(o),
oldVal(v1),
newVal(v2) {}
};
struct UndoStep {
ActionType type;
SelectionPoint cursor, selStart, selEnd;
@ -780,6 +802,7 @@ struct UndoStep {
int oldPatLen, newPatLen;
std::vector<UndoOrderData> ord;
std::vector<UndoPatternData> pat;
std::vector<UndoOtherData> other;
};
// -1 = any
@ -2065,8 +2088,10 @@ class FurnaceGUI {
void doScale(float top);
void doRandomize(int bottom, int top, bool mode);
void doFlip();
void doCollapse(int divider);
void doExpand(int multiplier);
void doCollapse(int divider, const SelectionPoint& sStart, const SelectionPoint& sEnd);
void doExpand(int multiplier, const SelectionPoint& sStart, const SelectionPoint& sEnd);
void doCollapseSong(int divider);
void doExpandSong(int multiplier);
void doUndo();
void doRedo();
void doFind();
@ -2135,7 +2160,7 @@ class FurnaceGUI {
void runBackupThread();
void pushPartBlend();
void popPartBlend();
bool detectOutOfBoundsWindow();
bool detectOutOfBoundsWindow(SDL_Rect& failing);
int processEvent(SDL_Event* ev);
bool loop();
bool finish();