Merge branch 'master' into ZSMv1

This commit is contained in:
ZeroByteOrg 2022-09-15 12:03:53 -05:00
commit b14bf9ea33
202 changed files with 10451 additions and 1470 deletions

View file

@ -47,8 +47,6 @@
#define MARK_MODIFIED modified=true;
#define WAKE_UP drawHalt=16;
#define TOGGLE_COLOR(x) ((x)?uiColors[GUI_COLOR_TOGGLE_ON]:uiColors[GUI_COLOR_TOGGLE_OFF])
#define BIND_FOR(x) getKeyName(actionKeys[x],true).c_str()
// TODO:
@ -261,16 +259,32 @@ enum FurnaceGUIWindows {
GUI_WINDOW_SPOILER
};
enum FurnaceGUIMobileScenes {
GUI_SCENE_PATTERN,
GUI_SCENE_ORDERS,
GUI_SCENE_INSTRUMENT,
GUI_SCENE_WAVETABLE,
GUI_SCENE_SAMPLE,
GUI_SCENE_SONG,
GUI_SCENE_CHANNELS,
GUI_SCENE_CHIPS,
GUI_SCENE_OTHER,
};
enum FurnaceGUIFileDialogs {
GUI_FILE_OPEN,
GUI_FILE_SAVE,
GUI_FILE_SAVE_DMF,
GUI_FILE_SAVE_DMF_LEGACY,
GUI_FILE_INS_OPEN,
GUI_FILE_INS_OPEN_REPLACE,
GUI_FILE_INS_SAVE,
GUI_FILE_INS_SAVE_DMP,
GUI_FILE_WAVE_OPEN,
GUI_FILE_WAVE_OPEN_REPLACE,
GUI_FILE_WAVE_SAVE,
GUI_FILE_WAVE_SAVE_DMW,
GUI_FILE_WAVE_SAVE_RAW,
GUI_FILE_SAMPLE_OPEN,
GUI_FILE_SAMPLE_OPEN_RAW,
GUI_FILE_SAMPLE_OPEN_REPLACE,
@ -457,6 +471,7 @@ enum FurnaceGUIActions {
GUI_ACTION_INS_LIST_OPEN,
GUI_ACTION_INS_LIST_OPEN_REPLACE,
GUI_ACTION_INS_LIST_SAVE,
GUI_ACTION_INS_LIST_SAVE_DMP,
GUI_ACTION_INS_LIST_MOVE_UP,
GUI_ACTION_INS_LIST_MOVE_DOWN,
GUI_ACTION_INS_LIST_DELETE,
@ -471,6 +486,8 @@ enum FurnaceGUIActions {
GUI_ACTION_WAVE_LIST_OPEN,
GUI_ACTION_WAVE_LIST_OPEN_REPLACE,
GUI_ACTION_WAVE_LIST_SAVE,
GUI_ACTION_WAVE_LIST_SAVE_DMW,
GUI_ACTION_WAVE_LIST_SAVE_RAW,
GUI_ACTION_WAVE_LIST_MOVE_UP,
GUI_ACTION_WAVE_LIST_MOVE_DOWN,
GUI_ACTION_WAVE_LIST_DELETE,
@ -527,6 +544,7 @@ enum FurnaceGUIActions {
GUI_ACTION_SAMPLE_ZOOM_AUTO,
GUI_ACTION_SAMPLE_MAKE_INS,
GUI_ACTION_SAMPLE_SET_LOOP,
GUI_ACTION_SAMPLE_CREATE_WAVE,
GUI_ACTION_SAMPLE_MAX,
GUI_ACTION_ORDERS_MIN,
@ -873,9 +891,10 @@ struct FurnaceGUIMacroDesc {
ImVec4 color;
unsigned int bitOffset;
bool isBitfield, blockMode, bit30;
String (*hoverFunc)(int,float);
String (*hoverFunc)(int,float,void*);
void* hoverFuncUser;
FurnaceGUIMacroDesc(const char* name, DivInstrumentMacro* m, int macroMin, int macroMax, float macroHeight, ImVec4 col=ImVec4(1.0f,1.0f,1.0f,1.0f), bool block=false, const char* mName=NULL, String (*hf)(int,float)=NULL, bool bitfield=false, const char** bfVal=NULL, unsigned int bitOff=0, bool bit30Special=false):
FurnaceGUIMacroDesc(const char* name, DivInstrumentMacro* m, int macroMin, int macroMax, float macroHeight, ImVec4 col=ImVec4(1.0f,1.0f,1.0f,1.0f), bool block=false, const char* mName=NULL, String (*hf)(int,float,void*)=NULL, bool bitfield=false, const char** bfVal=NULL, unsigned int bitOff=0, bool bit30Special=false, void* hfu=NULL):
macro(m),
height(macroHeight),
displayName(name),
@ -886,7 +905,8 @@ struct FurnaceGUIMacroDesc {
isBitfield(bitfield),
blockMode(block),
bit30(bit30Special),
hoverFunc(hf) {
hoverFunc(hf),
hoverFuncUser(hfu) {
// MSVC -> hell
this->min=macroMin;
this->max=macroMax;
@ -980,8 +1000,10 @@ class FurnaceGUI {
std::vector<DivSystem> sysSearchResults;
std::vector<FurnaceGUISysDef> newSongSearchResults;
std::deque<String> recentFile;
bool quit, warnQuit, willCommit, edit, modified, displayError, displayExporting, vgmExportLoop, zsmExportLoop, vgmExportPatternHints;
bool portrait, mobileMenuOpen;
bool wantCaptureKeyboard, oldWantCaptureKeyboard, displayMacroMenu;
bool displayNew, fullScreen, preserveChanPos, wantScrollList, noteInputPoly;
bool displayPendingIns, pendingInsSingle, displayPendingRawSample;
@ -991,6 +1013,7 @@ class FurnaceGUI {
int zsmExportTickRate;
int macroPointSize;
int waveEditStyle;
float mobileMenuPos;
const int* curSysSection;
String pendingRawSample;
@ -1002,10 +1025,13 @@ class FurnaceGUI {
FurnaceGUIFileDialogs curFileDialog;
FurnaceGUIWarnings warnAction;
FurnaceGUIWarnings postWarnAction;
FurnaceGUIMobileScenes mobScene;
FurnaceGUIFileDialog* fileDialog;
int scrW, scrH;
int scrW, scrH, scrConfW, scrConfH;
int scrX, scrY, scrConfX, scrConfY;
bool scrMax;
double dpiScale;
@ -1052,6 +1078,7 @@ class FurnaceGUI {
int snCore;
int nesCore;
int fdsCore;
int c64Core;
int pcSpeakerOutMethod;
String yrw801Path;
String tg100Path;
@ -1138,6 +1165,7 @@ class FurnaceGUI {
int dragMovesSelection;
int unsignedDetune;
int noThreadedInput;
int saveWindowPos;
int clampSamples;
int saveUnusedPatterns;
int channelColors;
@ -1145,6 +1173,7 @@ class FurnaceGUI {
int channelStyle;
int channelVolStyle;
int channelFeedbackStyle;
int maxRecentFile;
unsigned int maxUndoSteps;
String mainFontPath;
String patFontPath;
@ -1171,6 +1200,7 @@ class FurnaceGUI {
snCore(0),
nesCore(0),
fdsCore(0),
c64Core(1),
pcSpeakerOutMethod(0),
yrw801Path(""),
tg100Path(""),
@ -1264,6 +1294,7 @@ class FurnaceGUI {
channelStyle(0),
channelVolStyle(0),
channelFeedbackStyle(1),
maxRecentFile(10),
maxUndoSteps(100),
mainFontPath(""),
patFontPath(""),
@ -1297,7 +1328,7 @@ class FurnaceGUI {
SelectionPoint selStart, selEnd, cursor, cursorDrag, dragStart, dragEnd;
bool selecting, selectingFull, dragging, curNibble, orderNibble, followOrders, followPattern, changeAllOrders, mobileUI;
bool collapseWindow, demandScrollX, fancyPattern, wantPatName, firstFrame, tempoView, waveHex, waveGenVisible, lockLayout, editOptsVisible, latchNibble, nonLatchNibble;
bool collapseWindow, demandScrollX, fancyPattern, wantPatName, firstFrame, tempoView, waveHex, waveSigned, waveGenVisible, lockLayout, editOptsVisible, latchNibble, nonLatchNibble;
FurnaceGUIWindows curWindow, nextWindow, curWindowLast;
float peak[2];
float patChanX[DIV_MAX_CHANS+1];
@ -1441,7 +1472,7 @@ class FurnaceGUI {
int renderTimeBegin, renderTimeEnd, renderTimeDelta;
int eventTimeBegin, eventTimeEnd, eventTimeDelta;
int chanToMove, sysToMove, sysToDelete;
int chanToMove, sysToMove, sysToDelete, opToMove;
ImVec2 patWindowPos, patWindowSize;
@ -1545,7 +1576,9 @@ class FurnaceGUI {
float waveGenPhase[16];
float waveGenTL[4];
int waveGenMult[4];
float waveGenFB[4];
int waveGenFB[4];
int waveGenScaleX, waveGenScaleY, waveGenOffsetX, waveGenOffsetY, waveGenSmooth;
float waveGenAmplify;
bool waveGenFMCon1[4];
bool waveGenFMCon2[3];
bool waveGenFMCon3[2];
@ -1584,16 +1617,19 @@ class FurnaceGUI {
void toggleMobileUI(bool enable, bool force=false);
void pushToggleColors(bool status);
void popToggleColors();
void drawMobileControls();
void drawEditControls();
void drawSongInfo();
void drawOrders();
void drawPattern();
void drawInsList();
void drawInsList(bool asChild=false);
void drawInsEdit();
void drawWaveList();
void drawWaveList(bool asChild=false);
void drawWaveEdit();
void drawSampleList();
void drawSampleList(bool asChild=false);
void drawSampleEdit();
void drawMixer();
void drawOsc();
@ -1692,9 +1728,14 @@ class FurnaceGUI {
void keyDown(SDL_Event& ev);
void keyUp(SDL_Event& ev);
void pointDown(int x, int y, int button);
void pointUp(int x, int y, int button);
void pointMotion(int x, int y, int xrel, int yrel);
void openFileDialog(FurnaceGUIFileDialogs type);
int save(String path, int dmfVersion);
int load(String path);
void pushRecentFile(String path);
void exportAudio(String path, DivAudioExportModes mode);
bool parseSysEx(unsigned char* data, size_t len);
@ -1704,7 +1745,7 @@ class FurnaceGUI {
void encodeMMLStr(String& target, int* macro, int macroLen, int macroLoop, int macroRel, bool hex=false, bool bit30=false);
void decodeMMLStr(String& source, int* macro, unsigned char& macroLen, unsigned char& macroLoop, int macroMin, int macroMax, unsigned char& macroRel, bool bit30=false);
void decodeMMLStrW(String& source, int* macro, int& macroLen, int macroMax, bool hex=false);
void decodeMMLStrW(String& source, int* macro, int& macroLen, int macroMin, int macroMax, bool hex=false);
String encodeKeyMap(std::map<int,int>& map);
void decodeKeyMap(std::map<int,int>& map, String source);
@ -1724,6 +1765,7 @@ class FurnaceGUI {
void runBackupThread();
void pushPartBlend();
void popPartBlend();
bool detectOutOfBoundsWindow();
int processEvent(SDL_Event* ev);
bool loop();
bool finish();