GUI: prepare for modern macro view

This commit is contained in:
tildearrow 2022-01-23 17:01:19 -05:00
parent 5e2a827e68
commit beeb074975
1 changed files with 230 additions and 222 deletions

View File

@ -1092,6 +1092,55 @@ void FurnaceGUI::drawInsEdit() {
int asInt[256]; int asInt[256];
float loopIndicator[256]; float loopIndicator[256];
int volMax=(ins->type==DIV_INS_PCE || ins->type==DIV_INS_AY8930)?31:15;
int volMin=0;
if (ins->type==DIV_INS_C64) {
if (ins->c64.volIsCutoff) {
if (ins->c64.filterIsAbs) {
volMax=2047;
} else {
volMin=-18;
volMax=18;
}
}
}
if (ins->type==DIV_INS_AMIGA) {
volMax=64;
}
if (ins->type==DIV_INS_FM) {
volMax=127;
}
bool arpMode=ins->std.arpMacroMode;
int dutyMax=(ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930)?31:3;
if (ins->type==DIV_INS_C64) {
if (ins->c64.dutyIsAbs) {
dutyMax=4095;
} else {
dutyMax=24;
}
}
if (ins->type==DIV_INS_AY8930) {
dutyMax=255;
}
if (ins->type==DIV_INS_TIA || ins->type==DIV_INS_PCE || ins->type==DIV_INS_FM) {
dutyMax=0;
}
bool dutyIsRel=(ins->type==DIV_INS_C64 && !ins->c64.dutyIsAbs);
int waveMax=(ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930)?3:63;
bool bitMode=false;
if (ins->type==DIV_INS_TIA) waveMax=15;
if (ins->type==DIV_INS_C64) waveMax=4;
if (ins->type==DIV_INS_SAA1099) waveMax=2;
if (ins->type==DIV_INS_FM) waveMax=0;
int ex1Max=(ins->type==DIV_INS_AY8930)?8:0;
if (settings.macroView==0) { // modern view
} else { // classic view
// volume macro // volume macro
ImGui::Separator(); ImGui::Separator();
if (ins->type==DIV_INS_C64 && ins->c64.volIsCutoff) { if (ins->type==DIV_INS_C64 && ins->c64.volIsCutoff) {
@ -1112,24 +1161,6 @@ void FurnaceGUI::drawInsEdit() {
loopIndicator[i]=(ins->std.volMacroLoop!=-1 && i>=ins->std.volMacroLoop); loopIndicator[i]=(ins->std.volMacroLoop!=-1 && i>=ins->std.volMacroLoop);
} }
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,ImVec2(0.0f,0.0f)); ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,ImVec2(0.0f,0.0f));
int volMax=(ins->type==DIV_INS_PCE || ins->type==DIV_INS_AY8930)?31:15;
int volMin=0;
if (ins->type==DIV_INS_C64) {
if (ins->c64.volIsCutoff) {
if (ins->c64.filterIsAbs) {
volMax=2047;
} else {
volMin=-18;
volMax=18;
}
}
}
if (ins->type==DIV_INS_AMIGA) {
volMax=64;
}
if (ins->type==DIV_INS_FM) {
volMax=127;
}
macroDragScroll=0; macroDragScroll=0;
ImGui::PlotHistogram("##IVolMacro",asFloat,ins->std.volMacroLen,0,NULL,volMin,volMax,ImVec2(400.0f*dpiScale,200.0f*dpiScale)); ImGui::PlotHistogram("##IVolMacro",asFloat,ins->std.volMacroLen,0,NULL,volMin,volMax,ImVec2(400.0f*dpiScale,200.0f*dpiScale));
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) { if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) {
@ -1163,7 +1194,6 @@ void FurnaceGUI::drawInsEdit() {
// arp macro // arp macro
ImGui::Separator(); ImGui::Separator();
ImGui::Text("Arpeggio Macro"); ImGui::Text("Arpeggio Macro");
bool arpMode=ins->std.arpMacroMode;
for (int i=0; i<ins->std.arpMacroLen; i++) { for (int i=0; i<ins->std.arpMacroLen; i++) {
asFloat[i]=arpMode?ins->std.arpMacro[i]:(ins->std.arpMacro[i]-12); asFloat[i]=arpMode?ins->std.arpMacro[i]:(ins->std.arpMacro[i]-12);
loopIndicator[i]=(ins->std.arpMacroLoop!=-1 && i>=ins->std.arpMacroLoop); loopIndicator[i]=(ins->std.arpMacroLoop!=-1 && i>=ins->std.arpMacroLoop);
@ -1207,20 +1237,6 @@ void FurnaceGUI::drawInsEdit() {
} }
// duty macro // duty macro
int dutyMax=(ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930)?31:3;
if (ins->type==DIV_INS_C64) {
if (ins->c64.dutyIsAbs) {
dutyMax=4095;
} else {
dutyMax=24;
}
}
if (ins->type==DIV_INS_AY8930) {
dutyMax=255;
}
if (ins->type==DIV_INS_TIA || ins->type==DIV_INS_PCE || ins->type==DIV_INS_FM) {
dutyMax=0;
}
if (dutyMax>0) { if (dutyMax>0) {
ImGui::Separator(); ImGui::Separator();
if (ins->type==DIV_INS_C64) { if (ins->type==DIV_INS_C64) {
@ -1236,7 +1252,6 @@ void FurnaceGUI::drawInsEdit() {
ImGui::Text("Duty/Noise Mode Macro"); ImGui::Text("Duty/Noise Mode Macro");
} }
} }
bool dutyIsRel=(ins->type==DIV_INS_C64 && !ins->c64.dutyIsAbs);
for (int i=0; i<ins->std.dutyMacroLen; i++) { for (int i=0; i<ins->std.dutyMacroLen; i++) {
asFloat[i]=ins->std.dutyMacro[i]-(dutyIsRel?12:0); asFloat[i]=ins->std.dutyMacro[i]-(dutyIsRel?12:0);
loopIndicator[i]=(ins->std.dutyMacroLoop!=-1 && i>=ins->std.dutyMacroLoop); loopIndicator[i]=(ins->std.dutyMacroLoop!=-1 && i>=ins->std.dutyMacroLoop);
@ -1274,12 +1289,6 @@ void FurnaceGUI::drawInsEdit() {
} }
// wave macro // wave macro
int waveMax=(ins->type==DIV_INS_AY || ins->type==DIV_INS_AY8930)?3:63;
bool bitMode=false;
if (ins->type==DIV_INS_TIA) waveMax=15;
if (ins->type==DIV_INS_C64) waveMax=4;
if (ins->type==DIV_INS_SAA1099) waveMax=2;
if (ins->type==DIV_INS_FM) waveMax=0;
if (waveMax>0) { if (waveMax>0) {
ImGui::Separator(); ImGui::Separator();
ImGui::Text("Waveform Macro"); ImGui::Text("Waveform Macro");
@ -1336,7 +1345,6 @@ void FurnaceGUI::drawInsEdit() {
} }
// extra 1 macro // extra 1 macro
int ex1Max=(ins->type==DIV_INS_AY8930)?8:0;
if (ex1Max>0) { if (ex1Max>0) {
ImGui::Separator(); ImGui::Separator();
if (ins->type==DIV_INS_AY8930) { if (ins->type==DIV_INS_AY8930) {
@ -1379,7 +1387,7 @@ void FurnaceGUI::drawInsEdit() {
if (ins->std.ex1MacroLen>127) ins->std.ex1MacroLen=127; if (ins->std.ex1MacroLen>127) ins->std.ex1MacroLen=127;
} }
} }
}
ImGui::EndTabItem(); ImGui::EndTabItem();
} }
ImGui::EndTabBar(); ImGui::EndTabBar();
@ -2328,7 +2336,7 @@ void FurnaceGUI::drawSettings() {
ImGui::Separator(); ImGui::Separator();
bool macroViewB=settings.macroView; bool macroViewB=settings.macroView;
if (ImGui::Checkbox("Legacy macro view (standard macros only)",&macroViewB)) { if (ImGui::Checkbox("Classic macro view (standard macros only)",&macroViewB)) {
settings.macroView=macroViewB; settings.macroView=macroViewB;
} }