Merge pull request #1422 from Eknous-P/guimprove

Numerous GUI improvements
This commit is contained in:
tildearrow 2023-08-28 03:02:50 -05:00 committed by GitHub
commit 7ea7f72b45
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 189 additions and 138 deletions

View file

@ -282,10 +282,12 @@ void FurnaceGUI::drawChanOsc() {
updateChanOscGradTex=true; updateChanOscGradTex=true;
} }
pushDestColor();
if (ImGui::Button("Remove")) { if (ImGui::Button("Remove")) {
removePoint=index; removePoint=index;
ImGui::CloseCurrentPopup(); ImGui::CloseCurrentPopup();
} }
popDestColor();
ImGui::EndPopup(); ImGui::EndPopup();
} }

View file

@ -172,10 +172,12 @@ void FurnaceGUI::waveListItem(int i, float* wavePreview, int dir, int asset) {
wavePreview[i]=wave->data[i]; wavePreview[i]=wave->data[i];
} }
if (wave->len>0) wavePreview[wave->len]=wave->data[wave->len-1]; if (wave->len>0) wavePreview[wave->len]=wave->data[wave->len-1];
if (ImGui::Selectable(fmt::sprintf("%d##_WAVE%d\n",i,i).c_str(),curWave==i)) { ImGui::PushStyleVar(ImGuiStyleVar_SelectableTextAlign, ImVec2(0,0.5f));
if (ImGui::Selectable(fmt::sprintf(" %d##_WAVE%d\n",i,i).c_str(),curWave==i,0,ImVec2(0,23*dpiScale))) { // i didnt think that the 0 would work, but it does
curWave=i; curWave=i;
lastAssetType=1; lastAssetType=1;
} }
ImGui::PopStyleVar();
if (wantScrollList && curWave==i) ImGui::SetScrollHereY(); if (wantScrollList && curWave==i) ImGui::SetScrollHereY();
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered()) {
if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) { if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) {

View file

@ -811,9 +811,14 @@ void FurnaceGUI::drawFindReplace() {
} }
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
pushDestColor();
if (ImGui::Button(ICON_FA_MINUS "##DelQuery")) { if (ImGui::Button(ICON_FA_MINUS "##DelQuery")) {
eraseIndex=index; eraseIndex=index;
} }
popDestColor();
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Delete query");
}
ImGui::TableNextColumn(); ImGui::TableNextColumn();
if (i.effectCount<8) { if (i.effectCount<8) {
if (ImGui::Button("Add effect")) { if (ImGui::Button("Add effect")) {
@ -822,9 +827,11 @@ void FurnaceGUI::drawFindReplace() {
} }
ImGui::TableNextColumn(); ImGui::TableNextColumn();
if (i.effectCount>0) { if (i.effectCount>0) {
pushDestColor();
if (ImGui::Button("Remove effect")) { if (ImGui::Button("Remove effect")) {
i.effectCount--; i.effectCount--;
} }
popDestColor();
} }
ImGui::EndTable(); ImGui::EndTable();
} }
@ -1103,9 +1110,11 @@ void FurnaceGUI::drawFindReplace() {
} }
ImGui::TableNextColumn(); ImGui::TableNextColumn();
if (queryReplaceEffectCount>0) { if (queryReplaceEffectCount>0) {
pushDestColor();
if (ImGui::Button("Remove effect")) { if (ImGui::Button("Remove effect")) {
queryReplaceEffectCount--; queryReplaceEffectCount--;
} }
popDestColor();
} }
ImGui::EndTable(); ImGui::EndTable();

View file

@ -47,13 +47,14 @@ void FurnaceGUI::drawGrooves() {
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Text("pattern"); ImGui::Text("pattern");
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::Text("remove"); // ImGui::Text("remove"); removed because the text clips from the fixed width
int index=0; int index=0;
for (DivGroovePattern& i: e->song.grooves) { for (DivGroovePattern& i: e->song.grooves) {
ImGui::TableNextRow(); ImGui::TableNextRow();
ImGui::TableNextColumn(); ImGui::TableNextColumn();
ImGui::PushFont(patFont); ImGui::PushFont(patFont);
ImGui::AlignTextToFramePadding();
ImGui::Text("%.2X",index); ImGui::Text("%.2X",index);
ImGui::PopFont(); ImGui::PopFont();
@ -79,6 +80,7 @@ void FurnaceGUI::drawGrooves() {
ImGui::SetKeyboardFocusHere(); ImGui::SetKeyboardFocusHere();
} }
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x);
ImGui::AlignTextToFramePadding();
if (ImGui::InputText(grooveStr.c_str(),&grooveListString)) { if (ImGui::InputText(grooveStr.c_str(),&grooveListString)) {
decodeMMLStr(grooveListString,intVersion,intVersionLen,ignoredLoop,1,255,ignoredRel); decodeMMLStr(grooveListString,intVersion,intVersionLen,ignoredLoop,1,255,ignoredRel);
if (intVersionLen<1) { if (intVersionLen<1) {
@ -120,10 +122,15 @@ void FurnaceGUI::drawGrooves() {
} }
ImGui::TableNextColumn(); ImGui::TableNextColumn();
pushDestColor();
String grooveID=fmt::sprintf(ICON_FA_TIMES "##GRR%d",index); String grooveID=fmt::sprintf(ICON_FA_TIMES "##GRR%d",index);
if (ImGui::Button(grooveID.c_str())) { if (ImGui::Button(grooveID.c_str())) {
delGroove=index; delGroove=index;
} }
popDestColor();
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("remove");
}
index++; index++;
} }

View file

@ -4333,6 +4333,7 @@ void FurnaceGUI::drawInsEdit() {
MARK_MODIFIED; MARK_MODIFIED;
} }
ImGui::SameLine(); ImGui::SameLine();
pushDestColor();
if (ImGui::Button(ICON_FA_TIMES "##HWCmdDel")) { if (ImGui::Button(ICON_FA_TIMES "##HWCmdDel")) {
for (int j=i; j<ins->gb.hwSeqLen-1; j++) { for (int j=i; j<ins->gb.hwSeqLen-1; j++) {
ins->gb.hwSeq[j].cmd=ins->gb.hwSeq[j+1].cmd; ins->gb.hwSeq[j].cmd=ins->gb.hwSeq[j+1].cmd;
@ -4340,6 +4341,7 @@ void FurnaceGUI::drawInsEdit() {
} }
ins->gb.hwSeqLen--; ins->gb.hwSeqLen--;
} }
popDestColor();
ImGui::PopID(); ImGui::PopID();
} }
ImGui::EndTable(); ImGui::EndTable();

View file

@ -115,10 +115,12 @@ void FurnaceGUI::drawOrderButtons() {
} }
NEXT_BUTTON; NEXT_BUTTON;
pushDestColor();
if (ImGui::Button(ICON_FA_MINUS)) { handleUnimportant if (ImGui::Button(ICON_FA_MINUS)) { handleUnimportant
// remove this order row // remove this order row
doAction(GUI_ACTION_ORDERS_REMOVE); doAction(GUI_ACTION_ORDERS_REMOVE);
} }
popDestColor();
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Remove order"); ImGui::SetTooltip("Remove order");
} }

View file

@ -577,7 +577,7 @@ void FurnaceGUI::drawSettings() {
float vol=fabs(sysVol); float vol=fabs(sysVol);
ImGui::PushID(i); ImGui::PushID(i);
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::CalcTextSize("Invert").x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
if (ImGui::BeginCombo("##System",getSystemName(sysID))) { if (ImGui::BeginCombo("##System",getSystemName(sysID))) {
for (int j=0; availableSystems[j]; j++) { for (int j=0; availableSystems[j]; j++) {
if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),sysID==availableSystems[j])) { if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),sysID==availableSystems[j])) {
@ -596,11 +596,13 @@ void FurnaceGUI::drawSettings() {
} }
ImGui::SameLine(); ImGui::SameLine();
//ImGui::BeginDisabled(settings.initialSys.size()<=4); //ImGui::BeginDisabled(settings.initialSys.size()<=4);
pushDestColor();
if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) { if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) {
doRemove=i; doRemove=i;
} }
popDestColor();
//ImGui::EndDisabled(); //ImGui::EndDisabled();
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
if (CWSliderFloat("Volume",&vol,0.0f,3.0f)) { if (CWSliderFloat("Volume",&vol,0.0f,3.0f)) {
if (doInvert) { if (doInvert) {
if (vol<0.0001) vol=0.0001; if (vol<0.0001) vol=0.0001;
@ -610,13 +612,13 @@ void FurnaceGUI::drawSettings() {
sysVol=doInvert?-vol:vol; sysVol=doInvert?-vol:vol;
settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol); settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol);
} rightClickable } rightClickable
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
if (CWSliderFloat("Panning",&sysPan,-1.0f,1.0f)) { if (CWSliderFloat("Panning",&sysPan,-1.0f,1.0f)) {
if (sysPan<-1.0f) sysPan=-1.0f; if (sysPan<-1.0f) sysPan=-1.0f;
if (sysPan>1.0f) sysPan=1.0f; if (sysPan>1.0f) sysPan=1.0f;
settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan); settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan);
} rightClickable } rightClickable
ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x-ImGui::GetFrameHeightWithSpacing()*2.0-ImGui::GetStyle().ItemSpacing.x*2.0);
if (CWSliderFloat("Front/Rear",&sysPanFR,-1.0f,1.0f)) { if (CWSliderFloat("Front/Rear",&sysPanFR,-1.0f,1.0f)) {
if (sysPanFR<-1.0f) sysPanFR=-1.0f; if (sysPanFR<-1.0f) sysPanFR=-1.0f;
if (sysPanFR>1.0f) sysPanFR=1.0f; if (sysPanFR>1.0f) sysPanFR=1.0f;
@ -719,10 +721,15 @@ void FurnaceGUI::drawSettings() {
CONFIG_SECTION("Audio") { CONFIG_SECTION("Audio") {
// SUBSECTION OUTPUT // SUBSECTION OUTPUT
CONFIG_SUBSECTION("Output"); CONFIG_SUBSECTION("Output");
if (ImGui::BeginTable("##Output",2)) {
ImGui::TableSetupColumn("##Label",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupColumn("##Combo",ImGuiTableColumnFlags_WidthStretch);
#ifdef HAVE_JACK #ifdef HAVE_JACK
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Backend"); ImGui::Text("Backend");
ImGui::SameLine(); ImGui::TableNextColumn();
int prevAudioEngine=settings.audioEngine; int prevAudioEngine=settings.audioEngine;
if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) { if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) {
if (settings.audioEngine!=prevAudioEngine) { if (settings.audioEngine!=prevAudioEngine) {
@ -732,9 +739,11 @@ void FurnaceGUI::drawSettings() {
#endif #endif
if (settings.audioEngine==DIV_AUDIO_SDL) { if (settings.audioEngine==DIV_AUDIO_SDL) {
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Driver"); ImGui::Text("Driver");
ImGui::SameLine(); ImGui::TableNextColumn();
if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) { if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) {
if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) { if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) {
settings.sdlAudioDriver=""; settings.sdlAudioDriver="";
@ -751,9 +760,11 @@ void FurnaceGUI::drawSettings() {
} }
} }
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Device"); ImGui::Text("Device");
ImGui::SameLine(); ImGui::TableNextColumn();
String audioDevName=settings.audioDevice.empty()?"<System default>":settings.audioDevice; String audioDevName=settings.audioDevice.empty()?"<System default>":settings.audioDevice;
if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) { if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) {
if (ImGui::Selectable("<System default>",settings.audioDevice.empty())) { if (ImGui::Selectable("<System default>",settings.audioDevice.empty())) {
@ -767,9 +778,11 @@ void FurnaceGUI::drawSettings() {
ImGui::EndCombo(); ImGui::EndCombo();
} }
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Sample rate"); ImGui::Text("Sample rate");
ImGui::SameLine(); ImGui::TableNextColumn();
String sr=fmt::sprintf("%d",settings.audioRate); String sr=fmt::sprintf("%d",settings.audioRate);
if (ImGui::BeginCombo("##SampleRate",sr.c_str())) { if (ImGui::BeginCombo("##SampleRate",sr.c_str())) {
SAMPLE_RATE_SELECTABLE(8000); SAMPLE_RATE_SELECTABLE(8000);
@ -784,9 +797,12 @@ void FurnaceGUI::drawSettings() {
ImGui::EndCombo(); ImGui::EndCombo();
} }
ImGui::TableNextRow();
ImGui::TableNextColumn();
if (isProAudio[settings.audioEngine]) { if (isProAudio[settings.audioEngine]) {
ImGui::AlignTextToFramePadding();
ImGui::Text("Outputs"); ImGui::Text("Outputs");
ImGui::SameLine(); ImGui::TableNextColumn();
if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) { if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) {
if (settings.audioChans<1) settings.audioChans=1; if (settings.audioChans<1) settings.audioChans=1;
if (settings.audioChans>16) settings.audioChans=16; if (settings.audioChans>16) settings.audioChans=16;
@ -794,7 +810,7 @@ void FurnaceGUI::drawSettings() {
} else { } else {
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Channels"); ImGui::Text("Channels");
ImGui::SameLine(); ImGui::TableNextColumn();
String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1]; String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1];
if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) { if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) {
CHANS_SELECTABLE(1); CHANS_SELECTABLE(1);
@ -806,9 +822,11 @@ void FurnaceGUI::drawSettings() {
} }
} }
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Buffer size"); ImGui::Text("Buffer size");
ImGui::SameLine(); ImGui::TableNextColumn();
String bs=fmt::sprintf("%d (latency: ~%.1fms)",settings.audioBufSize,2000.0*(double)settings.audioBufSize/(double)MAX(1,settings.audioRate)); String bs=fmt::sprintf("%d (latency: ~%.1fms)",settings.audioBufSize,2000.0*(double)settings.audioBufSize/(double)MAX(1,settings.audioRate));
if (ImGui::BeginCombo("##BufferSize",bs.c_str())) { if (ImGui::BeginCombo("##BufferSize",bs.c_str())) {
BUFFER_SIZE_SELECTABLE(64); BUFFER_SIZE_SELECTABLE(64);
@ -819,6 +837,8 @@ void FurnaceGUI::drawSettings() {
BUFFER_SIZE_SELECTABLE(2048); BUFFER_SIZE_SELECTABLE(2048);
ImGui::EndCombo(); ImGui::EndCombo();
} }
ImGui::EndTable();
}
bool lowLatencyB=settings.lowLatency; bool lowLatencyB=settings.lowLatency;
if (ImGui::Checkbox("Low-latency mode (experimental!)",&lowLatencyB)) { if (ImGui::Checkbox("Low-latency mode (experimental!)",&lowLatencyB)) {
@ -2015,11 +2035,15 @@ void FurnaceGUI::drawSettings() {
// SUBSECTION TEXT // SUBSECTION TEXT
CONFIG_SUBSECTION("Text"); CONFIG_SUBSECTION("Text");
if (ImGui::BeginTable("##Text",2)) {
ImGui::TableSetupColumn("##Label",ImGuiTableColumnFlags_WidthFixed);
ImGui::TableSetupColumn("##Combos",ImGuiTableColumnFlags_WidthStretch);
ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Main font"); ImGui::Text("Main font");
ImGui::SameLine(); ImGui::TableNextColumn();
ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7); ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7);
ImGui::Indent();
if (settings.mainFont==6) { if (settings.mainFont==6) {
ImGui::InputText("##MainFontPath",&settings.mainFontPath); ImGui::InputText("##MainFontPath",&settings.mainFontPath);
ImGui::SameLine(); ImGui::SameLine();
@ -2031,12 +2055,12 @@ void FurnaceGUI::drawSettings() {
if (settings.mainFontSize<3) settings.mainFontSize=3; if (settings.mainFontSize<3) settings.mainFontSize=3;
if (settings.mainFontSize>96) settings.mainFontSize=96; if (settings.mainFontSize>96) settings.mainFontSize=96;
} }
ImGui::Unindent(); ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Header font"); ImGui::Text("Header font");
ImGui::SameLine(); ImGui::TableNextColumn();
ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7); ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7);
ImGui::Indent();
if (settings.headFont==6) { if (settings.headFont==6) {
ImGui::InputText("##HeadFontPath",&settings.headFontPath); ImGui::InputText("##HeadFontPath",&settings.headFontPath);
ImGui::SameLine(); ImGui::SameLine();
@ -2048,12 +2072,12 @@ void FurnaceGUI::drawSettings() {
if (settings.headFontSize<3) settings.headFontSize=3; if (settings.headFontSize<3) settings.headFontSize=3;
if (settings.headFontSize>96) settings.headFontSize=96; if (settings.headFontSize>96) settings.headFontSize=96;
} }
ImGui::Unindent(); ImGui::TableNextRow();
ImGui::TableNextColumn();
ImGui::AlignTextToFramePadding(); ImGui::AlignTextToFramePadding();
ImGui::Text("Pattern font"); ImGui::Text("Pattern font");
ImGui::SameLine(); ImGui::TableNextColumn();
ImGui::Combo("##PatFont",&settings.patFont,patFonts,7); ImGui::Combo("##PatFont",&settings.patFont,patFonts,7);
ImGui::Indent();
if (settings.patFont==6) { if (settings.patFont==6) {
ImGui::InputText("##PatFontPath",&settings.patFontPath); ImGui::InputText("##PatFontPath",&settings.patFontPath);
ImGui::SameLine(); ImGui::SameLine();
@ -2065,7 +2089,8 @@ void FurnaceGUI::drawSettings() {
if (settings.patFontSize<3) settings.patFontSize=3; if (settings.patFontSize<3) settings.patFontSize=3;
if (settings.patFontSize>96) settings.patFontSize=96; if (settings.patFontSize>96) settings.patFontSize=96;
} }
ImGui::Unindent(); ImGui::EndTable();
}
bool loadJapaneseB=settings.loadJapanese; bool loadJapaneseB=settings.loadJapanese;
if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) { if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) {

View file

@ -102,10 +102,12 @@ void FurnaceGUI::drawSysManager() {
} }
ImGui::SameLine(); ImGui::SameLine();
ImGui::BeginDisabled(e->song.systemLen<=1); ImGui::BeginDisabled(e->song.systemLen<=1);
pushDestColor();
if (ImGui::Button(ICON_FA_TIMES "##SysRemove")) { if (ImGui::Button(ICON_FA_TIMES "##SysRemove")) {
sysToDelete=i; sysToDelete=i;
showWarning("Are you sure you want to remove this chip?",GUI_WARN_SYSTEM_DEL); showWarning("Are you sure you want to remove this chip?",GUI_WARN_SYSTEM_DEL);
} }
popDestColor();
if (ImGui::IsItemHovered()) { if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("Remove"); ImGui::SetTooltip("Remove");
} }