From 77d4b9cb624a31176ac8ba258d39d0441ce387a1 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 15 Feb 2022 02:59:20 -0500 Subject: [PATCH] GUI: scroll horizontally when cursor moves fixes #171 --- src/gui/gui.cpp | 18 ++++++++++++++++++ src/gui/gui.h | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 4439329d..e5aed233 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3095,6 +3095,7 @@ void FurnaceGUI::drawPattern() { } if (!patternOpen) return; if (e->isPlaying() && followPattern) cursor.y=oldRow; + int demandX=0; SelectionPoint sel1=selStart; SelectionPoint sel2=selEnd; if (sel2.y(ImGui::GetWindowWidth()-200*dpiScale)) { + ImGui::SetScrollX(demandX+200*dpiScale); + } + demandScrollX=false; + } ImGui::EndTable(); } ImGui::PopStyleColor(3); @@ -5227,6 +5242,7 @@ void FurnaceGUI::moveCursor(int x, int y, bool select) { curNibble=false; if (x!=0) { + demandScrollX=true; if (x>0) { for (int i=0; i=(e->song.chanCollapse[cursor.xCoarse]?1:(3+e->song.pat[cursor.xCoarse].effectRows*2))) { @@ -7279,6 +7295,7 @@ bool FurnaceGUI::loop() { if (selecting) { cursor=selEnd; finishSelection(); + demandScrollX=true; if (cursor.xCoarse==selStart.xCoarse && cursor.xFine==selStart.xFine && cursor.y==selStart.y && cursor.xCoarse==selEnd.xCoarse && cursor.xFine==selEnd.xFine && cursor.y==selEnd.y) { updateScroll(cursor.y); @@ -8649,6 +8666,7 @@ FurnaceGUI::FurnaceGUI(): followPattern(true), changeAllOrders(false), collapseWindow(false), + demandScrollX(false), curWindow(GUI_WINDOW_NOTHING), nextWindow(GUI_WINDOW_NOTHING), wavePreviewOn(false), diff --git a/src/gui/gui.h b/src/gui/gui.h index 50795955..17145734 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -480,7 +480,7 @@ class FurnaceGUI { bool pianoOpen, notesOpen, channelsOpen; SelectionPoint selStart, selEnd, cursor; bool selecting, curNibble, orderNibble, extraChannelButtons, followOrders, followPattern, changeAllOrders; - bool collapseWindow; + bool collapseWindow, demandScrollX; FurnaceGUIWindows curWindow, nextWindow; float peak[2];