From 7dbc55fa2bda6d30cd5d2ef6b12be2e6ff0dc173 Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Fri, 7 Mar 2025 05:22:20 +0300 Subject: [PATCH 1/4] Probably a finally proper fix for #2076 --- source/Core/Threads/GUIThread.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/source/Core/Threads/GUIThread.cpp b/source/Core/Threads/GUIThread.cpp index cbb71881..83400a9b 100644 --- a/source/Core/Threads/GUIThread.cpp +++ b/source/Core/Threads/GUIThread.cpp @@ -160,6 +160,13 @@ void guiRenderLoop(void) { memset(&context.scratch_state, 0, sizeof(context.scratch_state)); currentOperatingMode = newMode; } + + bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering); + if (detailedView && ((newMode == OperatingMode::HomeScreen && context.previousMode == OperatingMode::Soldering) || (newMode == OperatingMode::Soldering && context.previousMode == OperatingMode::HomeScreen))) { + // Exclude side-slide-scroll animation if we do transition between soldering/home back and forth while detailed view setting for both modes is set + return OLED::refresh(); + } + // If the transition marker is set, we need to make the next draw occur to the secondary buffer so we have something to transition to if (context.transitionMode != TransitionAnimation::None) { OLED::useSecondaryFramebuffer(true); From 11d9f1ab1dbf490a49922d72a152f416f0e7a5fd Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Fri, 7 Mar 2025 05:35:53 +0300 Subject: [PATCH 2/4] Fix code style --- source/Core/Threads/GUIThread.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/Core/Threads/GUIThread.cpp b/source/Core/Threads/GUIThread.cpp index 83400a9b..9c35ee2c 100644 --- a/source/Core/Threads/GUIThread.cpp +++ b/source/Core/Threads/GUIThread.cpp @@ -162,7 +162,8 @@ void guiRenderLoop(void) { } bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering); - if (detailedView && ((newMode == OperatingMode::HomeScreen && context.previousMode == OperatingMode::Soldering) || (newMode == OperatingMode::Soldering && context.previousMode == OperatingMode::HomeScreen))) { + if (detailedView && + ((newMode == OperatingMode::HomeScreen && context.previousMode == OperatingMode::Soldering) || (newMode == OperatingMode::Soldering && context.previousMode == OperatingMode::HomeScreen))) { // Exclude side-slide-scroll animation if we do transition between soldering/home back and forth while detailed view setting for both modes is set return OLED::refresh(); } From 42aeee1c0b85632b32e888242075da34b8ed3a77 Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Fri, 7 Mar 2025 06:59:33 +0300 Subject: [PATCH 3/4] Alternative solution with more code lines in different functions --- source/Core/Threads/GUIThread.cpp | 7 ------- source/Core/Threads/UI/logic/HomeScreen.cpp | 3 ++- source/Core/Threads/UI/logic/Soldering.cpp | 10 +++++++--- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/source/Core/Threads/GUIThread.cpp b/source/Core/Threads/GUIThread.cpp index 9c35ee2c..d3d225e5 100644 --- a/source/Core/Threads/GUIThread.cpp +++ b/source/Core/Threads/GUIThread.cpp @@ -161,13 +161,6 @@ void guiRenderLoop(void) { currentOperatingMode = newMode; } - bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering); - if (detailedView && - ((newMode == OperatingMode::HomeScreen && context.previousMode == OperatingMode::Soldering) || (newMode == OperatingMode::Soldering && context.previousMode == OperatingMode::HomeScreen))) { - // Exclude side-slide-scroll animation if we do transition between soldering/home back and forth while detailed view setting for both modes is set - return OLED::refresh(); - } - // If the transition marker is set, we need to make the next draw occur to the secondary buffer so we have something to transition to if (context.transitionMode != TransitionAnimation::None) { OLED::useSecondaryFramebuffer(true); diff --git a/source/Core/Threads/UI/logic/HomeScreen.cpp b/source/Core/Threads/UI/logic/HomeScreen.cpp index 3be11340..388d5151 100644 --- a/source/Core/Threads/UI/logic/HomeScreen.cpp +++ b/source/Core/Threads/UI/logic/HomeScreen.cpp @@ -37,7 +37,8 @@ OperatingMode handleHomeButtons(const ButtonState buttons, guiContext *cxt) { break; case BUTTON_F_SHORT: if (!isTipDisconnected()) { - cxt->transitionMode = TransitionAnimation::Left; + bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering); + cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Left; return OperatingMode::Soldering; } break; diff --git a/source/Core/Threads/UI/logic/Soldering.cpp b/source/Core/Threads/UI/logic/Soldering.cpp index 587308a9..549eb8f2 100644 --- a/source/Core/Threads/UI/logic/Soldering.cpp +++ b/source/Core/Threads/UI/logic/Soldering.cpp @@ -47,6 +47,8 @@ OperatingMode handleSolderingButtons(const ButtonState buttons, guiContext *cxt) } return OperatingMode::Soldering; } + + bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering); // otherwise we are unlocked switch (buttons) { case BUTTON_NONE: @@ -56,7 +58,7 @@ OperatingMode handleSolderingButtons(const ButtonState buttons, guiContext *cxt) case BUTTON_BOTH: /*Fall through*/ case BUTTON_B_LONG: - cxt->transitionMode = TransitionAnimation::Right; + cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Right; return OperatingMode::HomeScreen; case BUTTON_F_LONG: // if boost mode is enabled turn it on @@ -142,10 +144,12 @@ OperatingMode gui_solderingMode(const ButtonState buttons, guiContext *cxt) { } else { ui_draw_soldering_basic_status(cxt->scratch_state.state2); } + + bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering); // Check if we should bail due to undervoltage for example if (checkExitSoldering()) { setBuzzer(false); - cxt->transitionMode = TransitionAnimation::Right; + cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Right; return OperatingMode::HomeScreen; } #ifdef NO_SLEEP_MODE @@ -153,7 +157,7 @@ OperatingMode gui_solderingMode(const ButtonState buttons, guiContext *cxt) { if (shouldShutdown()) { // shutdown currentTempTargetDegC = 0; - cxt->transitionMode = TransitionAnimation::Right; + cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Right; return OperatingMode::HomeScreen; } #endif From c698c58e3af7e5661435a2ab1f3943ea729aea7b Mon Sep 17 00:00:00 2001 From: Ivan Zorin Date: Fri, 7 Mar 2025 07:03:24 +0300 Subject: [PATCH 4/4] Making clang-format happy --- source/Core/Threads/UI/logic/HomeScreen.cpp | 2 +- source/Core/Threads/UI/logic/Soldering.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/Core/Threads/UI/logic/HomeScreen.cpp b/source/Core/Threads/UI/logic/HomeScreen.cpp index 388d5151..fd033410 100644 --- a/source/Core/Threads/UI/logic/HomeScreen.cpp +++ b/source/Core/Threads/UI/logic/HomeScreen.cpp @@ -37,7 +37,7 @@ OperatingMode handleHomeButtons(const ButtonState buttons, guiContext *cxt) { break; case BUTTON_F_SHORT: if (!isTipDisconnected()) { - bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering); + bool detailedView = getSettingValue(SettingsOptions::DetailedIDLE) && getSettingValue(SettingsOptions::DetailedSoldering); cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Left; return OperatingMode::Soldering; } diff --git a/source/Core/Threads/UI/logic/Soldering.cpp b/source/Core/Threads/UI/logic/Soldering.cpp index 549eb8f2..c16525ad 100644 --- a/source/Core/Threads/UI/logic/Soldering.cpp +++ b/source/Core/Threads/UI/logic/Soldering.cpp @@ -157,7 +157,7 @@ OperatingMode gui_solderingMode(const ButtonState buttons, guiContext *cxt) { if (shouldShutdown()) { // shutdown currentTempTargetDegC = 0; - cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Right; + cxt->transitionMode = detailedView ? TransitionAnimation::None : TransitionAnimation::Right; return OperatingMode::HomeScreen; } #endif