diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 2adbf89b..f9e1237f 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -5420,6 +5420,7 @@ FurnaceGUI::FurnaceGUI(): curWindow(GUI_WINDOW_NOTHING), nextWindow(GUI_WINDOW_NOTHING), curWindowLast(GUI_WINDOW_NOTHING), + lastPatternWidth(0.0f), nextDesc(NULL), latchNote(-1), latchIns(-2), diff --git a/src/gui/gui.h b/src/gui/gui.h index 203fd20e..bb23ccee 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -1209,6 +1209,7 @@ class FurnaceGUI { int midiOutClock; int midiOutMode; int maxRecentFile; + int centerPattern; unsigned int maxUndoSteps; String mainFontPath; String patFontPath; @@ -1334,6 +1335,7 @@ class FurnaceGUI { midiOutClock(0), midiOutMode(1), maxRecentFile(10), + centerPattern(0), maxUndoSteps(100), mainFontPath(""), patFontPath(""), @@ -1373,6 +1375,7 @@ class FurnaceGUI { float peak[2]; float patChanX[DIV_MAX_CHANS+1]; float patChanSlideY[DIV_MAX_CHANS+1]; + float lastPatternWidth; const int* nextDesc; String nextDescName; diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index ae194925..fb65cee8 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -403,6 +403,12 @@ void FurnaceGUI::drawPattern() { ImGui::PushStyleColor(ImGuiCol_Header,uiColors[GUI_COLOR_PATTERN_SELECTION]); ImGui::PushStyleColor(ImGuiCol_HeaderHovered,uiColors[GUI_COLOR_PATTERN_SELECTION_HOVER]); ImGui::PushStyleColor(ImGuiCol_HeaderActive,uiColors[GUI_COLOR_PATTERN_SELECTION_ACTIVE]); + if (settings.centerPattern) { + float centerOff=(ImGui::GetContentRegionAvail().x-lastPatternWidth)*0.5; + if (centerOff>0.0f) { + ImGui::SetCursorPosX(ImGui::GetCursorPosX()+centerOff); + } + } if (ImGui::BeginTable("PatternView",displayChans+2,ImGuiTableFlags_BordersInnerV|ImGuiTableFlags_ScrollX|ImGuiTableFlags_ScrollY|ImGuiTableFlags_NoPadInnerX|ImGuiTableFlags_NoBordersInFrozenArea)) { ImGui::TableSetupColumn("pos",ImGuiTableColumnFlags_WidthFixed); char chanID[2048]; @@ -427,6 +433,7 @@ void FurnaceGUI::drawPattern() { } ImGui::TableNextRow(); ImGui::TableNextColumn(); + float lpwStart=ImGui::GetCursorPosX(); if (ImGui::Selectable((extraChannelButtons==2)?" --##ExtraChannelButtons":" ++##ExtraChannelButtons",false,ImGuiSelectableFlags_NoPadWithHalfSpacing,ImVec2(0.0f,lineHeight+1.0f*dpiScale))) { if (++extraChannelButtons>2) extraChannelButtons=0; } @@ -839,6 +846,7 @@ void FurnaceGUI::drawPattern() { } } ImGui::TableNextColumn(); + lastPatternWidth=ImGui::GetCursorPosX()-lpwStart+ImGui::GetStyle().ScrollbarSize; if (e->hasExtValue()) { ImGui::TextColored(uiColors[GUI_COLOR_EE_VALUE]," %.2X",e->getExtValue()); } diff --git a/src/gui/settings.cpp b/src/gui/settings.cpp index e4c40cae..f16f2588 100644 --- a/src/gui/settings.cpp +++ b/src/gui/settings.cpp @@ -1443,6 +1443,11 @@ void FurnaceGUI::drawSettings() { settings.germanNotation=germanNotationB; } + bool centerPatternB=settings.centerPattern; + if (ImGui::Checkbox("Center pattern view",¢erPatternB)) { + settings.centerPattern=centerPatternB; + } + bool unsignedDetuneB=settings.unsignedDetune; if (ImGui::Checkbox("Unsigned FM detune values",&unsignedDetuneB)) { settings.unsignedDetune=unsignedDetuneB; @@ -2363,6 +2368,7 @@ void FurnaceGUI::syncSettings() { settings.maxRecentFile=e->getConfInt("maxRecentFile",10); settings.midiOutClock=e->getConfInt("midiOutClock",0); settings.midiOutMode=e->getConfInt("midiOutMode",1); + settings.centerPattern=e->getConfInt("centerPattern",0); clampSetting(settings.mainFontSize,2,96); clampSetting(settings.patFontSize,2,96); @@ -2466,6 +2472,7 @@ void FurnaceGUI::syncSettings() { clampSetting(settings.maxRecentFile,0,30); clampSetting(settings.midiOutClock,0,1); clampSetting(settings.midiOutMode,0,2); + clampSetting(settings.centerPattern,0,1); String initialSys2=e->getConfString("initialSys2",""); if (initialSys2.empty()) { @@ -2630,6 +2637,7 @@ void FurnaceGUI::commitSettings() { e->setConf("maxRecentFile",settings.maxRecentFile); e->setConf("midiOutClock",settings.midiOutClock); e->setConf("midiOutMode",settings.midiOutMode); + e->setConf("centerPattern",settings.centerPattern); // colors for (int i=0; i