From 7d01e40e337e2bd7e56a67751e8d660b13ea5b76 Mon Sep 17 00:00:00 2001 From: Lightos1 <124387232+Lightos1@users.noreply.github.com> Date: Thu, 9 Jul 2026 16:31:25 +0200 Subject: [PATCH] full swapto transition in overlay --- .../hoc-clk/overlay/src/ui/gui/about_gui.cpp | 19 ++- .../hoc-clk/overlay/src/ui/gui/misc_gui.cpp | 111 ++++++++++++++++-- 2 files changed, 117 insertions(+), 13 deletions(-) diff --git a/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp index 2fc6d5dc..523a8d40 100644 --- a/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp +++ b/Source/hoc-clk/overlay/src/ui/gui/about_gui.cpp @@ -20,6 +20,7 @@ #include #include #include "cat.h" +#include "main_gui.h" #include "ult_ext.h" // tsl::elm::ListItem* custRevItem = NULL; @@ -176,13 +177,18 @@ void AboutGui::listUI() creditsItem = new tsl::elm::ListItem("Credits"); creditsItem->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; }); creditsItem->setValue(R_ARROW); this->listElement->addItem(creditsItem); + + if (!lastItemName.empty()) { + this->listElement->jumpToItem(lastItemName); + } + lastItemName = ""; } std::string AboutGui::formatRamModule() { @@ -327,9 +333,20 @@ class CreditsSubMenu : public AboutGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "Credits"; + tsl::swapTo(); + return true; + } return false; } + /* This is needed because AboutGui::Refresh() dereferences pointers that get freed after swapTo is called. */ + void refresh() override { + BaseMenuGui::refresh(); + } + protected: ImageElement* CatImage = NULL; HideableCategoryHeader* CatHeader = NULL; diff --git a/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp b/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp index 6755bf00..8e50a367 100644 --- a/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp +++ b/Source/hoc-clk/overlay/src/ui/gui/misc_gui.cpp @@ -649,7 +649,7 @@ void MiscGui::listUI() { tsl::elm::ListItem *sysmoduleSettingsSubMenu = new tsl::elm::ListItem("General Settings"); sysmoduleSettingsSubMenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -660,7 +660,7 @@ void MiscGui::listUI() { tsl::elm::ListItem *governorSettingsSubMenu = new tsl::elm::ListItem("Governor Settings"); governorSettingsSubMenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -671,7 +671,7 @@ void MiscGui::listUI() { tsl::elm::ListItem *safetySubmenu = new tsl::elm::ListItem("Safety Settings"); safetySubmenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -682,7 +682,7 @@ void MiscGui::listUI() { tsl::elm::ListItem *ramSubmenu = new tsl::elm::ListItem("RAM Settings"); ramSubmenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -693,7 +693,7 @@ void MiscGui::listUI() { tsl::elm::ListItem *cpuSubmenu = new tsl::elm::ListItem("CPU Settings"); cpuSubmenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -704,7 +704,7 @@ void MiscGui::listUI() { tsl::elm::ListItem *gpuSubmenu = new tsl::elm::ListItem("GPU Settings"); gpuSubmenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -715,7 +715,7 @@ void MiscGui::listUI() { tsl::elm::ListItem *displaySubMenu = new tsl::elm::ListItem("Display Settings"); displaySubMenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -727,7 +727,7 @@ void MiscGui::listUI() { tsl::elm::ListItem *experimentalSubMenu = new tsl::elm::ListItem("Experimental Settings"); experimentalSubMenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -735,6 +735,11 @@ void MiscGui::listUI() { experimentalSubMenu->setValue(R_ARROW); this->listElement->addItem(experimentalSubMenu); } + + if (!lastItemName.empty()) { + this->listElement->jumpToItem(lastItemName); + } + lastItemName = ""; } class GeneralSettingsSubMenuGui : public MiscGui { @@ -744,6 +749,12 @@ class GeneralSettingsSubMenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "General Settings"; + tsl::swapTo(); + return true; + } return false; } @@ -799,6 +810,12 @@ class ExperimentalSettingsSubMenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "Experimental Settings"; + tsl::swapTo(); + return true; + } return false; } @@ -918,6 +935,12 @@ class GovernorSettingsSubMenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "Governor Settings"; + tsl::swapTo(); + return true; + } return false; } @@ -948,6 +971,12 @@ class DisplaySubMenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "Display Settings"; + tsl::swapTo(); + return true; + } return false; } @@ -1002,6 +1031,12 @@ class SafetySubMenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "Safety Settings"; + tsl::swapTo(); + return true; + } return false; } @@ -1031,6 +1066,12 @@ class RamSubmenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "RAM Settings"; + tsl::swapTo(); + return true; + } return false; } @@ -1230,7 +1271,7 @@ class RamSubmenuGui : public MiscGui { tsl::elm::ListItem *latenciesSubmenu = new tsl::elm::ListItem("RAM Latency Editor"); latenciesSubmenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -1241,7 +1282,7 @@ class RamSubmenuGui : public MiscGui { tsl::elm::ListItem *timingsSubmenu = new tsl::elm::ListItem("RAM Timing Reductions"); timingsSubmenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -1253,7 +1294,7 @@ class RamSubmenuGui : public MiscGui { tsl::elm::ListItem *socVoltageTable = new tsl::elm::ListItem("SOC Voltage Table"); socVoltageTable->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; @@ -1261,6 +1302,11 @@ class RamSubmenuGui : public MiscGui { socVoltageTable->setValue(R_ARROW); this->listElement->addItem(socVoltageTable); } + + if (!lastItemName.empty()) { + this->listElement->jumpToItem(lastItemName); + } + lastItemName = ""; } }; @@ -1271,6 +1317,12 @@ class RamTimingsSubmenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "RAM Timing Reductions"; + tsl::swapTo(); + return true; + } return false; } @@ -1523,6 +1575,12 @@ class RamLatenciesSubmenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "RAM Latency Editor"; + tsl::swapTo(); + return true; + } return false; } @@ -2029,6 +2087,12 @@ class CpuSubmenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "CPU Settings"; + tsl::swapTo(); + return true; + } return false; } @@ -2192,6 +2256,12 @@ class GpuSubmenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "GPU Settings"; + tsl::swapTo(); + return true; + } return false; } @@ -2325,13 +2395,18 @@ class GpuSubmenuGui : public MiscGui { tsl::elm::ListItem *customTableSubmenu = new tsl::elm::ListItem("GPU Voltage Table"); customTableSubmenu->setClickListener([](u64 keys) { if (keys & HidNpadButton_A) { - tsl::changeTo(); + tsl::swapTo(); return true; } return false; }); customTableSubmenu->setValue(R_ARROW); this->listElement->addItem(customTableSubmenu); + + if (!lastItemName.empty()) { + this->listElement->jumpToItem(lastItemName); + } + lastItemName = ""; } }; @@ -2342,6 +2417,12 @@ class GpuCustomTableSubmenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "GPU Voltage Table"; + tsl::swapTo(); + return true; + } return false; } @@ -2582,6 +2663,12 @@ class SocCustomTableSubmenuGui : public MiscGui { bool handleInput(u64 keysDown, u64 keysHeld, const HidTouchState &touchPos, HidAnalogStickState leftJoyStick, HidAnalogStickState rightJoyStick) override { + if (keysDown & KEY_B) { + triggerExitFeedback(); + lastItemName = "SOC Voltage Table"; + tsl::swapTo(); + return true; + } return false; }