From edb48d47be3613ff0a5cf078ec6fe5803fd0be33 Mon Sep 17 00:00:00 2001 From: bbbradsmith Date: Wed, 12 Jul 2023 04:06:03 -0400 Subject: [PATCH 1/3] only force trickle text if interacting with mouse button or key events --- extern/imgui_patched/imgui.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/extern/imgui_patched/imgui.cpp b/extern/imgui_patched/imgui.cpp index b670b2ad8..ceb71b325 100644 --- a/extern/imgui_patched/imgui.cpp +++ b/extern/imgui_patched/imgui.cpp @@ -9574,7 +9574,9 @@ void ImGui::UpdateInputEvents(bool trickle_fast_inputs) } else if (e->Type == ImGuiInputEventType_Text) { - bool trickle_fast_inputs = true; // forcing trickle for Text event + // forcing trickle for Text event, but only when interacting with keydown or mouse button + if ((key_changed && trickle_interleaved_keys_and_text) || mouse_button_changed != 0) + break; // Trickling Rule: Stop processing queued events if keys/mouse have been interacted with if (trickle_fast_inputs && ((key_changed && trickle_interleaved_keys_and_text) || mouse_button_changed != 0 || mouse_moved || mouse_wheeled)) From a37260bcaa3ba985b77810fd2b5753b36b290b8a Mon Sep 17 00:00:00 2001 From: bbbradsmith Date: Wed, 12 Jul 2023 05:45:30 -0400 Subject: [PATCH 2/3] Move pattern finishSelection out of SDL-triggered pointUp, and replace with ImGui release trigger in drawPattern. This prevents down/up events from being processed out of order by two separate event systems, causing selection to be stuck on if the up event is recieved within 1 frame of the down event. --- src/gui/gui.cpp | 13 ------------- src/gui/pattern.cpp | 15 +++++++++++++++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index a1a5cb842..3da07580d 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -3235,19 +3235,6 @@ void FurnaceGUI::pointUp(int x, int y, int button) { if (dragMobileEditButton) { dragMobileEditButton=false; } - if (selecting) { - if (!selectingFull) cursor=selEnd; - finishSelection(); - if (!mobileUI) { - 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) { - if (!settings.cursorMoveNoScroll) { - updateScroll(cursor.y); - } - } - } - } } void FurnaceGUI::pointMotion(int x, int y, int xrel, int yrel) { diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index a34a856d8..ddce32a6e 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -934,6 +934,21 @@ void FurnaceGUI::drawPattern() { ImGui::TableNextColumn(); } } + // release selection if mouse released + if (ImGui::IsMouseReleased(ImGuiMouseButton_Left) && selecting) { + if (!selectingFull) cursor=selEnd; + finishSelection(); + if (!mobileUI) { + 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) { + if (!settings.cursorMoveNoScroll) { + updateScroll(cursor.y); + } + } + } + } + ImGui::EndDisabled(); ImGui::PopStyleVar(); oldRow=curRow; From fd27a41c080a7697ebd1481dcc141ee57f292d57 Mon Sep 17 00:00:00 2001 From: bbbradsmith Date: Thu, 27 Jul 2023 01:04:48 -0400 Subject: [PATCH 3/3] relocate pattern mouse release handling to FurnaceGui::Loop --- src/gui/gui.cpp | 15 +++++++++++++++ src/gui/pattern.cpp | 14 -------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/gui/gui.cpp b/src/gui/gui.cpp index 3da07580d..d1ba5d2f5 100644 --- a/src/gui/gui.cpp +++ b/src/gui/gui.cpp @@ -4488,6 +4488,21 @@ bool FurnaceGUI::loop() { MEASURE(effectList,drawEffectList()); } + // release selection if mouse released + if (ImGui::IsMouseReleased(ImGuiMouseButton_Left) && selecting) { + if (!selectingFull) cursor=selEnd; + finishSelection(); + if (!mobileUI) { + 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) { + if (!settings.cursorMoveNoScroll) { + updateScroll(cursor.y); + } + } + } + } + activateTutorial(GUI_TUTORIAL_OVERVIEW); if (inspectorOpen) ImGui::ShowMetricsWindow(&inspectorOpen); diff --git a/src/gui/pattern.cpp b/src/gui/pattern.cpp index ddce32a6e..0abd2a969 100644 --- a/src/gui/pattern.cpp +++ b/src/gui/pattern.cpp @@ -934,20 +934,6 @@ void FurnaceGUI::drawPattern() { ImGui::TableNextColumn(); } } - // release selection if mouse released - if (ImGui::IsMouseReleased(ImGuiMouseButton_Left) && selecting) { - if (!selectingFull) cursor=selEnd; - finishSelection(); - if (!mobileUI) { - 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) { - if (!settings.cursorMoveNoScroll) { - updateScroll(cursor.y); - } - } - } - } ImGui::EndDisabled(); ImGui::PopStyleVar();