diff --git a/src/gui/chanOsc.cpp b/src/gui/chanOsc.cpp index 5ca97f479..58f15d1f5 100644 --- a/src/gui/chanOsc.cpp +++ b/src/gui/chanOsc.cpp @@ -282,10 +282,12 @@ void FurnaceGUI::drawChanOsc() { updateChanOscGradTex=true; } + pushDestColor(); if (ImGui::Button("Remove")) { removePoint=index; ImGui::CloseCurrentPopup(); } + popDestColor(); ImGui::EndPopup(); } diff --git a/src/gui/dataList.cpp b/src/gui/dataList.cpp index 1506c5ff3..de5f3515d 100644 --- a/src/gui/dataList.cpp +++ b/src/gui/dataList.cpp @@ -172,10 +172,12 @@ void FurnaceGUI::waveListItem(int i, float* wavePreview, int dir, int asset) { wavePreview[i]=wave->data[i]; } 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; lastAssetType=1; } + ImGui::PopStyleVar(); if (wantScrollList && curWave==i) ImGui::SetScrollHereY(); if (ImGui::IsItemHovered()) { if (ImGui::IsMouseDoubleClicked(ImGuiMouseButton_Left)) { diff --git a/src/gui/findReplace.cpp b/src/gui/findReplace.cpp index 60976d31c..40e259eb3 100644 --- a/src/gui/findReplace.cpp +++ b/src/gui/findReplace.cpp @@ -811,9 +811,14 @@ void FurnaceGUI::drawFindReplace() { } ImGui::TableNextRow(); ImGui::TableNextColumn(); + pushDestColor(); if (ImGui::Button(ICON_FA_MINUS "##DelQuery")) { eraseIndex=index; } + popDestColor(); + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("Delete query"); + } ImGui::TableNextColumn(); if (i.effectCount<8) { if (ImGui::Button("Add effect")) { @@ -822,9 +827,11 @@ void FurnaceGUI::drawFindReplace() { } ImGui::TableNextColumn(); if (i.effectCount>0) { + pushDestColor(); if (ImGui::Button("Remove effect")) { i.effectCount--; } + popDestColor(); } ImGui::EndTable(); } @@ -1103,9 +1110,11 @@ void FurnaceGUI::drawFindReplace() { } ImGui::TableNextColumn(); if (queryReplaceEffectCount>0) { + pushDestColor(); if (ImGui::Button("Remove effect")) { queryReplaceEffectCount--; } + popDestColor(); } ImGui::EndTable(); diff --git a/src/gui/grooves.cpp b/src/gui/grooves.cpp index 560a09e68..eee8db56e 100644 --- a/src/gui/grooves.cpp +++ b/src/gui/grooves.cpp @@ -47,13 +47,14 @@ void FurnaceGUI::drawGrooves() { ImGui::TableNextColumn(); ImGui::Text("pattern"); ImGui::TableNextColumn(); - ImGui::Text("remove"); + // ImGui::Text("remove"); removed because the text clips from the fixed width int index=0; for (DivGroovePattern& i: e->song.grooves) { ImGui::TableNextRow(); ImGui::TableNextColumn(); ImGui::PushFont(patFont); + ImGui::AlignTextToFramePadding(); ImGui::Text("%.2X",index); ImGui::PopFont(); @@ -79,6 +80,7 @@ void FurnaceGUI::drawGrooves() { ImGui::SetKeyboardFocusHere(); } ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); + ImGui::AlignTextToFramePadding(); if (ImGui::InputText(grooveStr.c_str(),&grooveListString)) { decodeMMLStr(grooveListString,intVersion,intVersionLen,ignoredLoop,1,255,ignoredRel); if (intVersionLen<1) { @@ -120,10 +122,15 @@ void FurnaceGUI::drawGrooves() { } ImGui::TableNextColumn(); + pushDestColor(); String grooveID=fmt::sprintf(ICON_FA_TIMES "##GRR%d",index); if (ImGui::Button(grooveID.c_str())) { delGroove=index; } + popDestColor(); + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("remove"); + } index++; } diff --git a/src/gui/insEdit.cpp b/src/gui/insEdit.cpp index 98d02e3a2..d00295895 100644 --- a/src/gui/insEdit.cpp +++ b/src/gui/insEdit.cpp @@ -4333,6 +4333,7 @@ void FurnaceGUI::drawInsEdit() { MARK_MODIFIED; } ImGui::SameLine(); + pushDestColor(); if (ImGui::Button(ICON_FA_TIMES "##HWCmdDel")) { for (int j=i; jgb.hwSeqLen-1; j++) { ins->gb.hwSeq[j].cmd=ins->gb.hwSeq[j+1].cmd; @@ -4340,6 +4341,7 @@ void FurnaceGUI::drawInsEdit() { } ins->gb.hwSeqLen--; } + popDestColor(); ImGui::PopID(); } ImGui::EndTable(); diff --git a/src/gui/orders.cpp b/src/gui/orders.cpp index dad280d46..0bce014aa 100644 --- a/src/gui/orders.cpp +++ b/src/gui/orders.cpp @@ -115,10 +115,12 @@ void FurnaceGUI::drawOrderButtons() { } NEXT_BUTTON; + pushDestColor(); if (ImGui::Button(ICON_FA_MINUS)) { handleUnimportant // remove this order row doAction(GUI_ACTION_ORDERS_REMOVE); } + popDestColor(); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Remove order"); } diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index 348671bb7..753abc3bb 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -577,7 +577,7 @@ void FurnaceGUI::drawSettings() { float vol=fabs(sysVol); 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))) { for (int j=0; availableSystems[j]; j++) { if (ImGui::Selectable(getSystemName((DivSystem)availableSystems[j]),sysID==availableSystems[j])) { @@ -596,11 +596,13 @@ void FurnaceGUI::drawSettings() { } ImGui::SameLine(); //ImGui::BeginDisabled(settings.initialSys.size()<=4); + pushDestColor(); if (ImGui::Button(ICON_FA_MINUS "##InitSysRemove")) { doRemove=i; } + popDestColor(); //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 (doInvert) { if (vol<0.0001) vol=0.0001; @@ -610,13 +612,13 @@ void FurnaceGUI::drawSettings() { sysVol=doInvert?-vol:vol; settings.initialSys.set(fmt::sprintf("vol%d",i),(float)sysVol); } 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 (sysPan<-1.0f) sysPan=-1.0f; if (sysPan>1.0f) sysPan=1.0f; settings.initialSys.set(fmt::sprintf("pan%d",i),(float)sysPan); } 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 (sysPanFR<-1.0f) sysPanFR=-1.0f; if (sysPanFR>1.0f) sysPanFR=1.0f; @@ -719,105 +721,123 @@ void FurnaceGUI::drawSettings() { CONFIG_SECTION("Audio") { // SUBSECTION OUTPUT CONFIG_SUBSECTION("Output"); + if (ImGui::BeginTable("##Output",2)) { + ImGui::TableSetupColumn("##Label",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("##Combo",ImGuiTableColumnFlags_WidthStretch); #ifdef HAVE_JACK - ImGui::AlignTextToFramePadding(); - ImGui::Text("Backend"); - ImGui::SameLine(); - int prevAudioEngine=settings.audioEngine; - if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) { - if (settings.audioEngine!=prevAudioEngine) { - if (!isProAudio[settings.audioEngine]) settings.audioChans=2; + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Backend"); + ImGui::TableNextColumn(); + int prevAudioEngine=settings.audioEngine; + if (ImGui::Combo("##Backend",&settings.audioEngine,audioBackends,2)) { + if (settings.audioEngine!=prevAudioEngine) { + if (!isProAudio[settings.audioEngine]) settings.audioChans=2; + } } - } #endif - if (settings.audioEngine==DIV_AUDIO_SDL) { - ImGui::AlignTextToFramePadding(); - ImGui::Text("Driver"); - ImGui::SameLine(); - if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) { - if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) { - settings.sdlAudioDriver=""; + if (settings.audioEngine==DIV_AUDIO_SDL) { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Driver"); + ImGui::TableNextColumn(); + if (ImGui::BeginCombo("##SDLADriver",settings.sdlAudioDriver.empty()?"Automatic":settings.sdlAudioDriver.c_str())) { + if (ImGui::Selectable("Automatic",settings.sdlAudioDriver.empty())) { + settings.sdlAudioDriver=""; + } + for (String& i: availAudioDrivers) { + if (ImGui::Selectable(i.c_str(),i==settings.sdlAudioDriver)) { + settings.sdlAudioDriver=i; + } + } + ImGui::EndCombo(); } - for (String& i: availAudioDrivers) { - if (ImGui::Selectable(i.c_str(),i==settings.sdlAudioDriver)) { - settings.sdlAudioDriver=i; + if (ImGui::IsItemHovered()) { + ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect."); + } + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Device"); + ImGui::TableNextColumn(); + String audioDevName=settings.audioDevice.empty()?"":settings.audioDevice; + if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) { + if (ImGui::Selectable("",settings.audioDevice.empty())) { + settings.audioDevice=""; + } + for (String& i: e->getAudioDevices()) { + if (ImGui::Selectable(i.c_str(),i==settings.audioDevice)) { + settings.audioDevice=i; } } ImGui::EndCombo(); } - if (ImGui::IsItemHovered()) { - ImGui::SetTooltip("you may need to restart Furnace for this setting to take effect."); - } - } - ImGui::AlignTextToFramePadding(); - ImGui::Text("Device"); - ImGui::SameLine(); - String audioDevName=settings.audioDevice.empty()?"":settings.audioDevice; - if (ImGui::BeginCombo("##AudioDevice",audioDevName.c_str())) { - if (ImGui::Selectable("",settings.audioDevice.empty())) { - settings.audioDevice=""; - } - for (String& i: e->getAudioDevices()) { - if (ImGui::Selectable(i.c_str(),i==settings.audioDevice)) { - settings.audioDevice=i; - } - } - ImGui::EndCombo(); - } - - ImGui::AlignTextToFramePadding(); - ImGui::Text("Sample rate"); - ImGui::SameLine(); - String sr=fmt::sprintf("%d",settings.audioRate); - if (ImGui::BeginCombo("##SampleRate",sr.c_str())) { - SAMPLE_RATE_SELECTABLE(8000); - SAMPLE_RATE_SELECTABLE(16000); - SAMPLE_RATE_SELECTABLE(22050); - SAMPLE_RATE_SELECTABLE(32000); - SAMPLE_RATE_SELECTABLE(44100); - SAMPLE_RATE_SELECTABLE(48000); - SAMPLE_RATE_SELECTABLE(88200); - SAMPLE_RATE_SELECTABLE(96000); - SAMPLE_RATE_SELECTABLE(192000); - ImGui::EndCombo(); - } - - if (isProAudio[settings.audioEngine]) { - ImGui::Text("Outputs"); - ImGui::SameLine(); - if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) { - if (settings.audioChans<1) settings.audioChans=1; - if (settings.audioChans>16) settings.audioChans=16; - } - } else { + ImGui::TableNextRow(); + ImGui::TableNextColumn(); ImGui::AlignTextToFramePadding(); - ImGui::Text("Channels"); - ImGui::SameLine(); - String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1]; - if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) { - CHANS_SELECTABLE(1); - CHANS_SELECTABLE(2); - CHANS_SELECTABLE(4); - CHANS_SELECTABLE(6); - CHANS_SELECTABLE(8); + ImGui::Text("Sample rate"); + ImGui::TableNextColumn(); + String sr=fmt::sprintf("%d",settings.audioRate); + if (ImGui::BeginCombo("##SampleRate",sr.c_str())) { + SAMPLE_RATE_SELECTABLE(8000); + SAMPLE_RATE_SELECTABLE(16000); + SAMPLE_RATE_SELECTABLE(22050); + SAMPLE_RATE_SELECTABLE(32000); + SAMPLE_RATE_SELECTABLE(44100); + SAMPLE_RATE_SELECTABLE(48000); + SAMPLE_RATE_SELECTABLE(88200); + SAMPLE_RATE_SELECTABLE(96000); + SAMPLE_RATE_SELECTABLE(192000); ImGui::EndCombo(); } - } - ImGui::AlignTextToFramePadding(); - ImGui::Text("Buffer size"); - ImGui::SameLine(); - 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())) { - BUFFER_SIZE_SELECTABLE(64); - BUFFER_SIZE_SELECTABLE(128); - BUFFER_SIZE_SELECTABLE(256); - BUFFER_SIZE_SELECTABLE(512); - BUFFER_SIZE_SELECTABLE(1024); - BUFFER_SIZE_SELECTABLE(2048); - ImGui::EndCombo(); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + if (isProAudio[settings.audioEngine]) { + ImGui::AlignTextToFramePadding(); + ImGui::Text("Outputs"); + ImGui::TableNextColumn(); + if (ImGui::InputInt("##AudioChansI",&settings.audioChans,1,1)) { + if (settings.audioChans<1) settings.audioChans=1; + if (settings.audioChans>16) settings.audioChans=16; + } + } else { + ImGui::AlignTextToFramePadding(); + ImGui::Text("Channels"); + ImGui::TableNextColumn(); + String chStr=(settings.audioChans<1 || settings.audioChans>8)?"What?":nonProAudioOuts[settings.audioChans-1]; + if (ImGui::BeginCombo("##AudioChans",chStr.c_str())) { + CHANS_SELECTABLE(1); + CHANS_SELECTABLE(2); + CHANS_SELECTABLE(4); + CHANS_SELECTABLE(6); + CHANS_SELECTABLE(8); + ImGui::EndCombo(); + } + } + + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Buffer size"); + ImGui::TableNextColumn(); + 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())) { + BUFFER_SIZE_SELECTABLE(64); + BUFFER_SIZE_SELECTABLE(128); + BUFFER_SIZE_SELECTABLE(256); + BUFFER_SIZE_SELECTABLE(512); + BUFFER_SIZE_SELECTABLE(1024); + BUFFER_SIZE_SELECTABLE(2048); + ImGui::EndCombo(); + } + ImGui::EndTable(); } bool lowLatencyB=settings.lowLatency; @@ -2015,57 +2035,62 @@ void FurnaceGUI::drawSettings() { // SUBSECTION TEXT CONFIG_SUBSECTION("Text"); - ImGui::AlignTextToFramePadding(); - ImGui::Text("Main font"); - ImGui::SameLine(); - ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7); - ImGui::Indent(); - if (settings.mainFont==6) { - ImGui::InputText("##MainFontPath",&settings.mainFontPath); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##MainFontLoad")) { - openFileDialog(GUI_FILE_LOAD_MAIN_FONT); + if (ImGui::BeginTable("##Text",2)) { + ImGui::TableSetupColumn("##Label",ImGuiTableColumnFlags_WidthFixed); + ImGui::TableSetupColumn("##Combos",ImGuiTableColumnFlags_WidthStretch); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Main font"); + ImGui::TableNextColumn(); + ImGui::Combo("##MainFont",&settings.mainFont,mainFonts,7); + if (settings.mainFont==6) { + ImGui::InputText("##MainFontPath",&settings.mainFontPath); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##MainFontLoad")) { + openFileDialog(GUI_FILE_LOAD_MAIN_FONT); + } } - } - if (ImGui::InputInt("Size##MainFontSize",&settings.mainFontSize)) { - if (settings.mainFontSize<3) settings.mainFontSize=3; - if (settings.mainFontSize>96) settings.mainFontSize=96; - } - ImGui::Unindent(); - ImGui::AlignTextToFramePadding(); - ImGui::Text("Header font"); - ImGui::SameLine(); - ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7); - ImGui::Indent(); - if (settings.headFont==6) { - ImGui::InputText("##HeadFontPath",&settings.headFontPath); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##HeadFontLoad")) { - openFileDialog(GUI_FILE_LOAD_HEAD_FONT); + if (ImGui::InputInt("Size##MainFontSize",&settings.mainFontSize)) { + if (settings.mainFontSize<3) settings.mainFontSize=3; + if (settings.mainFontSize>96) settings.mainFontSize=96; } - } - if (ImGui::InputInt("Size##HeadFontSize",&settings.headFontSize)) { - if (settings.headFontSize<3) settings.headFontSize=3; - if (settings.headFontSize>96) settings.headFontSize=96; - } - ImGui::Unindent(); - ImGui::AlignTextToFramePadding(); - ImGui::Text("Pattern font"); - ImGui::SameLine(); - ImGui::Combo("##PatFont",&settings.patFont,patFonts,7); - ImGui::Indent(); - if (settings.patFont==6) { - ImGui::InputText("##PatFontPath",&settings.patFontPath); - ImGui::SameLine(); - if (ImGui::Button(ICON_FA_FOLDER "##PatFontLoad")) { - openFileDialog(GUI_FILE_LOAD_PAT_FONT); + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Header font"); + ImGui::TableNextColumn(); + ImGui::Combo("##HeadFont",&settings.headFont,headFonts,7); + if (settings.headFont==6) { + ImGui::InputText("##HeadFontPath",&settings.headFontPath); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##HeadFontLoad")) { + openFileDialog(GUI_FILE_LOAD_HEAD_FONT); + } } + if (ImGui::InputInt("Size##HeadFontSize",&settings.headFontSize)) { + if (settings.headFontSize<3) settings.headFontSize=3; + if (settings.headFontSize>96) settings.headFontSize=96; + } + ImGui::TableNextRow(); + ImGui::TableNextColumn(); + ImGui::AlignTextToFramePadding(); + ImGui::Text("Pattern font"); + ImGui::TableNextColumn(); + ImGui::Combo("##PatFont",&settings.patFont,patFonts,7); + if (settings.patFont==6) { + ImGui::InputText("##PatFontPath",&settings.patFontPath); + ImGui::SameLine(); + if (ImGui::Button(ICON_FA_FOLDER "##PatFontLoad")) { + openFileDialog(GUI_FILE_LOAD_PAT_FONT); + } + } + if (ImGui::InputInt("Size##PatFontSize",&settings.patFontSize)) { + if (settings.patFontSize<3) settings.patFontSize=3; + if (settings.patFontSize>96) settings.patFontSize=96; + } + ImGui::EndTable(); } - if (ImGui::InputInt("Size##PatFontSize",&settings.patFontSize)) { - if (settings.patFontSize<3) settings.patFontSize=3; - if (settings.patFontSize>96) settings.patFontSize=96; - } - ImGui::Unindent(); bool loadJapaneseB=settings.loadJapanese; if (ImGui::Checkbox("Display Japanese characters",&loadJapaneseB)) { diff --git a/src/gui/sysManager.cpp b/src/gui/sysManager.cpp index 7a214beca..ad71e0e86 100644 --- a/src/gui/sysManager.cpp +++ b/src/gui/sysManager.cpp @@ -102,10 +102,12 @@ void FurnaceGUI::drawSysManager() { } ImGui::SameLine(); ImGui::BeginDisabled(e->song.systemLen<=1); + pushDestColor(); if (ImGui::Button(ICON_FA_TIMES "##SysRemove")) { sysToDelete=i; showWarning("Are you sure you want to remove this chip?",GUI_WARN_SYSTEM_DEL); } + popDestColor(); if (ImGui::IsItemHovered()) { ImGui::SetTooltip("Remove"); }