From 9a76f9eb7ac54d62f9d355adee35eecf5efe047e Mon Sep 17 00:00:00 2001 From: xezon <4720891+xezon@users.noreply.github.com> Date: Fri, 11 Jul 2025 19:02:26 +0200 Subject: [PATCH 1/2] [ZH] Fix and remove lower and upper Scroll Speed boundaries --- .../GUI/GUICallbacks/Menus/OptionsMenu.cpp | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index ef3dac3d1f1..1b5a51b9750 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -368,11 +368,13 @@ Real OptionPreferences::getScrollFactor(void) return TheGlobalData->m_keyboardDefaultScrollFactor; Int factor = atoi(it->second.str()); - if (factor < 0) - factor = 0; - if (factor > 100) - factor = 100; - + + // TheSuperHackers @tweak xezon 11/07/2025 + // No longer caps the upper limit to 100, because the options setting can go beyond that. + // No longer caps the lower limit to 0, because that would mean standstill. + if (factor < 1) + factor = 1; + return factor/100.0f; } @@ -864,13 +866,12 @@ static void setDefaults( void ) //------------------------------------------------------------------------------------------------- // // scroll speed val - Int valMin, valMax; -// GadgetSliderGetMinMax(sliderScrollSpeed,&valMin, &valMax); -// GadgetSliderSetPosition(sliderScrollSpeed, ((valMax - valMin) / 2 + valMin)); Int scrollPos = (Int)(TheGlobalData->m_keyboardDefaultScrollFactor*100.0f); GadgetSliderSetPosition( sliderScrollSpeed, scrollPos ); + Int valMin, valMax; + //------------------------------------------------------------------------------------------------- // slider music volume GadgetSliderGetMinMax(sliderMusicVolume,&valMin, &valMax); @@ -1189,7 +1190,7 @@ static void saveOptions( void ) //------------------------------------------------------------------------------------------------- // scroll speed val val = GadgetSliderGetPosition(sliderScrollSpeed); - if(val != -1) + if(val > 0) { TheWritableGlobalData->m_keyboardScrollFactor = val/100.0f; DEBUG_LOG(("Scroll Spped val %d, keyboard scroll factor %f", val, TheGlobalData->m_keyboardScrollFactor)); @@ -1838,9 +1839,17 @@ void OptionsMenuInit( WindowLayout *layout, void *userData ) GadgetCheckBoxSetChecked( checkDoubleClickAttackMove, TheGlobalData->m_doubleClickAttackMove ); // set scroll speed slider + // TheSuperHackers @tweak xezon 11/07/2025 No longer sets the slider position if the user setting + // is set beyond the slider limits. This gives the user more freedom to customize the scroll + // speed. The slider value remains 0. Int scrollPos = (Int)(TheGlobalData->m_keyboardScrollFactor*100.0f); - GadgetSliderSetPosition( sliderScrollSpeed, scrollPos ); - DEBUG_LOG(("Scroll SPeed %d", scrollPos)); + Int scrollMin, scrollMax; + GadgetSliderGetMinMax( sliderScrollSpeed, &scrollMin, &scrollMax ); + if (scrollPos >= scrollMin && scrollPos <= scrollMax) + { + GadgetSliderSetPosition( sliderScrollSpeed, scrollPos ); + } + DEBUG_LOG(("Scroll Speed %d", scrollPos)); // set the send delay check box GadgetCheckBoxSetChecked(checkSendDelay, TheGlobalData->m_firewallSendDelay); From d69f72eb8407786141846b569b4088bf6e10e8b6 Mon Sep 17 00:00:00 2001 From: xezon <4720891+xezon@users.noreply.github.com> Date: Sun, 13 Jul 2025 12:04:03 +0200 Subject: [PATCH 2/2] Replicate in Generals --- .../GUI/GUICallbacks/Menus/OptionsMenu.cpp | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp index eb2f76f9a4f..0fcad954b53 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -336,11 +336,13 @@ Real OptionPreferences::getScrollFactor(void) return TheGlobalData->m_keyboardDefaultScrollFactor; Int factor = atoi(it->second.str()); - if (factor < 0) - factor = 0; - if (factor > 100) - factor = 100; - + + // TheSuperHackers @tweak xezon 11/07/2025 + // No longer caps the upper limit to 100, because the options setting can go beyond that. + // No longer caps the lower limit to 0, because that would mean standstill. + if (factor < 1) + factor = 1; + return factor/100.0f; } @@ -818,13 +820,12 @@ static void setDefaults( void ) //------------------------------------------------------------------------------------------------- // // scroll speed val - Int valMin, valMax; -// GadgetSliderGetMinMax(sliderScrollSpeed,&valMin, &valMax); -// GadgetSliderSetPosition(sliderScrollSpeed, ((valMax - valMin) / 2 + valMin)); Int scrollPos = (Int)(TheGlobalData->m_keyboardDefaultScrollFactor*100.0f); GadgetSliderSetPosition( sliderScrollSpeed, scrollPos ); + Int valMin, valMax; + //------------------------------------------------------------------------------------------------- // slider music volume GadgetSliderGetMinMax(sliderMusicVolume,&valMin, &valMax); @@ -1129,7 +1130,7 @@ static void saveOptions( void ) //------------------------------------------------------------------------------------------------- // scroll speed val val = GadgetSliderGetPosition(sliderScrollSpeed); - if(val != -1) + if(val > 0) { TheWritableGlobalData->m_keyboardScrollFactor = val/100.0f; DEBUG_LOG(("Scroll Spped val %d, keyboard scroll factor %f", val, TheGlobalData->m_keyboardScrollFactor)); @@ -1768,9 +1769,17 @@ void OptionsMenuInit( WindowLayout *layout, void *userData ) GadgetCheckBoxSetChecked(checkAlternateMouse, TheGlobalData->m_useAlternateMouse); // set scroll speed slider + // TheSuperHackers @tweak xezon 11/07/2025 No longer sets the slider position if the user setting + // is set beyond the slider limits. This gives the user more freedom to customize the scroll + // speed. The slider value remains 0. Int scrollPos = (Int)(TheGlobalData->m_keyboardScrollFactor*100.0f); - GadgetSliderSetPosition( sliderScrollSpeed, scrollPos ); - DEBUG_LOG(("Scroll SPeed %d", scrollPos)); + Int scrollMin, scrollMax; + GadgetSliderGetMinMax( sliderScrollSpeed, &scrollMin, &scrollMax ); + if (scrollPos >= scrollMin && scrollPos <= scrollMax) + { + GadgetSliderSetPosition( sliderScrollSpeed, scrollPos ); + } + DEBUG_LOG(("Scroll Speed %d", scrollPos)); // set the send delay check box GadgetCheckBoxSetChecked(checkSendDelay, TheGlobalData->m_firewallSendDelay);