mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-30 16:33:01 +00:00
GUI: final refinements to macro editor (hopefully)
This commit is contained in:
parent
9f14d1959c
commit
3fdcd3a4fc
1 changed files with 61 additions and 12 deletions
|
@ -752,6 +752,20 @@ void FurnaceGUI::drawInsEdit() {
|
||||||
ImGui::Text("Relative Cutoff Macro");
|
ImGui::Text("Relative Cutoff Macro");
|
||||||
} else {
|
} else {
|
||||||
ImGui::Text("Volume Macro");
|
ImGui::Text("Volume Macro");
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::SmallButton("15##VMH15")) {
|
||||||
|
volMacroHeight=15;
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemHovered()) {
|
||||||
|
ImGui::SetTooltip("Rest of platforms");
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::SmallButton("31##VMH31")) {
|
||||||
|
volMacroHeight=31;
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemHovered()) {
|
||||||
|
ImGui::SetTooltip("PC Engine only");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (int i=0; i<ins->std.volMacroLen; i++) {
|
for (int i=0; i<ins->std.volMacroLen; i++) {
|
||||||
if (ins->type==DIV_INS_C64 && ins->c64.volIsCutoff) {
|
if (ins->type==DIV_INS_C64 && ins->c64.volIsCutoff) {
|
||||||
|
@ -762,15 +776,19 @@ 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=15; // TODO: PCE
|
int volMax=volMacroHeight;
|
||||||
|
int volMin=0;
|
||||||
if (ins->type==DIV_INS_C64) {
|
if (ins->type==DIV_INS_C64) {
|
||||||
if (ins->c64.volIsCutoff) volMax=36;
|
if (ins->c64.volIsCutoff) {
|
||||||
|
volMin=-18;
|
||||||
|
volMax=18;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
ImGui::PlotHistogram("##IVolMacro",asFloat,ins->std.volMacroLen,0,NULL,0,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)) {
|
||||||
macroDragStart=ImGui::GetItemRectMin();
|
macroDragStart=ImGui::GetItemRectMin();
|
||||||
macroDragAreaSize=ImVec2(400.0f*dpiScale,200.0f*dpiScale);
|
macroDragAreaSize=ImVec2(400.0f*dpiScale,200.0f*dpiScale);
|
||||||
macroDragMin=0;
|
macroDragMin=volMin;
|
||||||
macroDragMax=volMax;
|
macroDragMax=volMax;
|
||||||
macroDragLen=ins->std.volMacroLen;
|
macroDragLen=ins->std.volMacroLen;
|
||||||
macroDragActive=true;
|
macroDragActive=true;
|
||||||
|
@ -833,22 +851,39 @@ void FurnaceGUI::drawInsEdit() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// duty macro TODO
|
// duty macro
|
||||||
int dutyMax=31;
|
int dutyMax=dutyMacroHeight;
|
||||||
|
if (ins->type==DIV_INS_C64) {
|
||||||
|
dutyMax=24;
|
||||||
|
}
|
||||||
if (dutyMax>0) {
|
if (dutyMax>0) {
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
if (ins->type==DIV_INS_C64) {
|
if (ins->type==DIV_INS_C64) {
|
||||||
ImGui::Text("Relative Duty Macro");
|
ImGui::Text("Relative Duty Macro");
|
||||||
} else {
|
} else {
|
||||||
ImGui::Text("Duty/Noise Mode Macro");
|
ImGui::Text("Duty/Noise Mode Macro");
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::SmallButton("3##DMH3")) {
|
||||||
|
dutyMacroHeight=3;
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemHovered()) {
|
||||||
|
ImGui::SetTooltip("Most platforms");
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::SmallButton("31##DMH31")) {
|
||||||
|
dutyMacroHeight=31;
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemHovered()) {
|
||||||
|
ImGui::SetTooltip("Neo Geo SSG/AY-3-8910/YM2149 only");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (int i=0; i<ins->std.dutyMacroLen; i++) {
|
for (int i=0; i<ins->std.dutyMacroLen; i++) {
|
||||||
asFloat[i]=ins->std.dutyMacro[i];
|
asFloat[i]=ins->std.dutyMacro[i]-(ins->type==DIV_INS_C64?12:0);
|
||||||
loopIndicator[i]=(ins->std.dutyMacroLoop!=-1 && i>=ins->std.dutyMacroLoop);
|
loopIndicator[i]=(ins->std.dutyMacroLoop!=-1 && i>=ins->std.dutyMacroLoop);
|
||||||
}
|
}
|
||||||
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,ImVec2(0.0f,0.0f));
|
ImGui::PushStyleVar(ImGuiStyleVar_FramePadding,ImVec2(0.0f,0.0f));
|
||||||
|
|
||||||
ImGui::PlotHistogram("##IDutyMacro",asFloat,ins->std.dutyMacroLen,0,NULL,0,dutyMax,ImVec2(400.0f*dpiScale,200.0f*dpiScale));
|
ImGui::PlotHistogram("##IDutyMacro",asFloat,ins->std.dutyMacroLen,0,NULL,ins->type==DIV_INS_C64?-12:0,dutyMax-(ins->type==DIV_INS_C64?12:0),ImVec2(400.0f*dpiScale,200.0f*dpiScale));
|
||||||
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) {
|
if (ImGui::IsItemClicked(ImGuiMouseButton_Left)) {
|
||||||
macroDragStart=ImGui::GetItemRectMin();
|
macroDragStart=ImGui::GetItemRectMin();
|
||||||
macroDragAreaSize=ImVec2(400.0f*dpiScale,200.0f*dpiScale);
|
macroDragAreaSize=ImVec2(400.0f*dpiScale,200.0f*dpiScale);
|
||||||
|
@ -875,11 +910,25 @@ void FurnaceGUI::drawInsEdit() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// wave macro
|
// wave macro
|
||||||
int waveMax=63;
|
int waveMax=waveMacroHeight;
|
||||||
if (ins->type==DIV_INS_C64) waveMax=8;
|
if (ins->type==DIV_INS_C64) waveMax=8;
|
||||||
if (waveMax>0) {
|
if (waveMax>0) {
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
ImGui::Text("Waveform Macro");
|
ImGui::Text("Waveform Macro");
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::SmallButton("7##WMH7")) {
|
||||||
|
waveMacroHeight=7;
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemHovered()) {
|
||||||
|
ImGui::SetTooltip("Neo Geo SSG/AY-3-8910/YM2149 only");
|
||||||
|
}
|
||||||
|
ImGui::SameLine();
|
||||||
|
if (ImGui::SmallButton("63##WMH63")) {
|
||||||
|
waveMacroHeight=63;
|
||||||
|
}
|
||||||
|
if (ImGui::IsItemHovered()) {
|
||||||
|
ImGui::SetTooltip("Rest of platforms");
|
||||||
|
}
|
||||||
for (int i=0; i<ins->std.waveMacroLen; i++) {
|
for (int i=0; i<ins->std.waveMacroLen; i++) {
|
||||||
asFloat[i]=ins->std.waveMacro[i];
|
asFloat[i]=ins->std.waveMacro[i];
|
||||||
loopIndicator[i]=(ins->std.waveMacroLoop!=-1 && i>=ins->std.waveMacroLoop);
|
loopIndicator[i]=(ins->std.waveMacroLoop!=-1 && i>=ins->std.waveMacroLoop);
|
||||||
|
@ -3167,9 +3216,9 @@ FurnaceGUI::FurnaceGUI():
|
||||||
noteOffOnReleaseKey(0),
|
noteOffOnReleaseKey(0),
|
||||||
noteOffOnReleaseChan(0),
|
noteOffOnReleaseChan(0),
|
||||||
arpMacroScroll(0),
|
arpMacroScroll(0),
|
||||||
volMacroHeight(0),
|
volMacroHeight(15),
|
||||||
dutyMacroHeight(0),
|
dutyMacroHeight(3),
|
||||||
waveMacroHeight(0),
|
waveMacroHeight(63),
|
||||||
macroDragStart(0,0),
|
macroDragStart(0,0),
|
||||||
macroDragAreaSize(0,0),
|
macroDragAreaSize(0,0),
|
||||||
macroDragTarget(NULL),
|
macroDragTarget(NULL),
|
||||||
|
|
Loading…
Reference in a new issue