diff --git a/Generals/Code/GameEngine/Include/Common/GlobalData.h b/Generals/Code/GameEngine/Include/Common/GlobalData.h index 4b0314497c7..b904cd96d9d 100644 --- a/Generals/Code/GameEngine/Include/Common/GlobalData.h +++ b/Generals/Code/GameEngine/Include/Common/GlobalData.h @@ -364,6 +364,8 @@ class GlobalData : public SubsystemInterface Real m_keyboardScrollFactor; ///< Factor applied to game scrolling speed via keyboard scrolling Real m_keyboardDefaultScrollFactor; ///< Factor applied to game scrolling speed via keyboard scrolling + Bool m_drawScrollAnchor; ///< Set that the scroll anchor should be enabled + Bool m_moveScrollAnchor; ///< set that the scroll anchor should move Bool m_animateWindows; ///< Should we animate window transitions? diff --git a/Generals/Code/GameEngine/Include/Common/UserPreferences.h b/Generals/Code/GameEngine/Include/Common/UserPreferences.h index 85030853e06..22c6cdbc35f 100644 --- a/Generals/Code/GameEngine/Include/Common/UserPreferences.h +++ b/Generals/Code/GameEngine/Include/Common/UserPreferences.h @@ -92,6 +92,8 @@ class OptionPreferences : public UserPreferences void setOnlineIPAddress(UnsignedInt IP); // convenience function Bool getAlternateMouseModeEnabled(void); // convenience function Real getScrollFactor(void); // convenience function + Bool getDrawScrollAnchor(void); + Bool getMoveScrollAnchor(void); CursorCaptureMode getCursorCaptureMode() const; Bool getSendDelay(void); // convenience function Int getFirewallBehavior(void); // convenience function diff --git a/Generals/Code/GameEngine/Source/Common/GlobalData.cpp b/Generals/Code/GameEngine/Source/Common/GlobalData.cpp index 24f9e0e342d..0ea488d11dc 100644 --- a/Generals/Code/GameEngine/Source/Common/GlobalData.cpp +++ b/Generals/Code/GameEngine/Source/Common/GlobalData.cpp @@ -982,6 +982,8 @@ GlobalData::GlobalData() m_loadScreenRender = FALSE; m_keyboardDefaultScrollFactor = m_keyboardScrollFactor = 0.5f; + m_drawScrollAnchor = FALSE; + m_moveScrollAnchor = FALSE; m_scrollAmountCutoff = 10.0f; m_cameraAdjustSpeed = 0.1f; m_enforceMaxCameraHeight = TRUE; @@ -1164,6 +1166,8 @@ void GlobalData::parseGameDataDefinition( INI* ini ) OptionPreferences optionPref; TheWritableGlobalData->m_useAlternateMouse = optionPref.getAlternateMouseModeEnabled(); TheWritableGlobalData->m_keyboardScrollFactor = optionPref.getScrollFactor(); + TheWritableGlobalData->m_drawScrollAnchor = optionPref.getDrawScrollAnchor(); + TheWritableGlobalData->m_moveScrollAnchor = optionPref.getMoveScrollAnchor(); TheWritableGlobalData->m_defaultIP = optionPref.getLANIPAddress(); TheWritableGlobalData->m_firewallSendDelay = optionPref.getSendDelay(); TheWritableGlobalData->m_firewallBehavior = optionPref.getFirewallBehavior(); 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 47f8c34a922..b6d74b6f24e 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -346,6 +346,32 @@ Real OptionPreferences::getScrollFactor(void) return factor/100.0f; } +Bool OptionPreferences::getDrawScrollAnchor(void) +{ + OptionPreferences::const_iterator it = find("DrawScrollAnchor"); + // TheSuperHackers @info this default is based on the same variable within InGameUi.ini + if (it == end()) + return FALSE; + + if (stricmp(it->second.str(), "yes") == 0) { + return TRUE; + } + return FALSE; +} + +Bool OptionPreferences::getMoveScrollAnchor(void) +{ + OptionPreferences::const_iterator it = find("MoveScrollAnchor"); + // TheSuperHackers @info this default is based on the same variable within InGameUi.ini + if (it == end()) + return TRUE; + + if (stricmp(it->second.str(), "yes") == 0) { + return TRUE; + } + return FALSE; +} + CursorCaptureMode OptionPreferences::getCursorCaptureMode() const { CursorCaptureMode mode = CursorCaptureMode_Default; @@ -1177,6 +1203,24 @@ static void saveOptions( void ) (*pref)["ScrollFactor"] = prefString; } + //------------------------------------------------------------------------------------------------- + // draw scroll anchor + { + if( TheInGameUI->getDrawRMBScrollAnchor() ) + (*pref)["DrawScrollAnchor"] = "yes"; + else + (*pref)["DrawScrollAnchor"] = "no"; + } + + //------------------------------------------------------------------------------------------------- + // move scroll anchor + { + if( TheInGameUI->getMoveRMBScrollAnchor() ) + (*pref)["MoveScrollAnchor"] = "yes"; + else + (*pref)["MoveScrollAnchor"] = "no"; + } + //------------------------------------------------------------------------------------------------- // slider music volume val = GadgetSliderGetPosition(sliderMusicVolume); @@ -1785,7 +1829,7 @@ void OptionsMenuInit( WindowLayout *layout, void *userData ) //set scroll options AsciiString test = (*pref)["DrawScrollAnchor"]; DEBUG_LOG(("DrawScrollAnchor == [%s]", test.str())); - if (test == "Yes" || (test.isEmpty() && TheInGameUI->getDrawRMBScrollAnchor())) + if (test == "yes" || (test.isEmpty() && TheInGameUI->getDrawRMBScrollAnchor())) { GadgetCheckBoxSetChecked( checkDrawAnchor, true); TheInGameUI->setDrawRMBScrollAnchor(true); @@ -1797,7 +1841,7 @@ void OptionsMenuInit( WindowLayout *layout, void *userData ) } test = (*pref)["MoveScrollAnchor"]; DEBUG_LOG(("MoveScrollAnchor == [%s]", test.str())); - if (test == "Yes" || (test.isEmpty() && TheInGameUI->getMoveRMBScrollAnchor())) + if (test == "yes" || (test.isEmpty() && TheInGameUI->getMoveRMBScrollAnchor())) { GadgetCheckBoxSetChecked( checkMoveAnchor, true); TheInGameUI->setMoveRMBScrollAnchor(true); @@ -2126,12 +2170,12 @@ WindowMsgHandledType OptionsMenuSystem( GameWindow *window, UnsignedInt msg, if( GadgetCheckBoxIsChecked( control ) ) { TheInGameUI->setDrawRMBScrollAnchor(true); - (*pref)["DrawScrollAnchor"] = "Yes"; + (*pref)["DrawScrollAnchor"] = "yes"; } else { TheInGameUI->setDrawRMBScrollAnchor(false); - (*pref)["DrawScrollAnchor"] = "No"; + (*pref)["DrawScrollAnchor"] = "no"; } } else if(controlID == checkMoveAnchorID ) @@ -2139,12 +2183,12 @@ WindowMsgHandledType OptionsMenuSystem( GameWindow *window, UnsignedInt msg, if( GadgetCheckBoxIsChecked( control ) ) { TheInGameUI->setMoveRMBScrollAnchor(true); - (*pref)["MoveScrollAnchor"] = "Yes"; + (*pref)["MoveScrollAnchor"] = "yes"; } else { TheInGameUI->setMoveRMBScrollAnchor(false); - (*pref)["MoveScrollAnchor"] = "No"; + (*pref)["MoveScrollAnchor"] = "no"; } } else if(controlID == checkSaveCameraID ) diff --git a/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp b/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp index 40dd7183ad6..a5c62d2b0bc 100644 --- a/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/InGameUI.cpp @@ -1186,6 +1186,8 @@ void InGameUI::init( void ) m_soloNexusSelectedDrawableID = INVALID_DRAWABLE_ID; + setDrawRMBScrollAnchor(TheGlobalData->m_drawScrollAnchor); + setMoveRMBScrollAnchor(TheGlobalData->m_moveScrollAnchor); } // end init diff --git a/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h b/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h index ed3bbcc1d1d..aafc7316acb 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/GlobalData.h @@ -372,6 +372,8 @@ class GlobalData : public SubsystemInterface Real m_keyboardScrollFactor; ///< Factor applied to game scrolling speed via keyboard scrolling Real m_keyboardDefaultScrollFactor; ///< Factor applied to game scrolling speed via keyboard scrolling + Bool m_drawScrollAnchor; ///< Set that the scroll anchor should be enabled + Bool m_moveScrollAnchor; ///< set that the scroll anchor should move Bool m_animateWindows; ///< Should we animate window transitions? diff --git a/GeneralsMD/Code/GameEngine/Include/Common/UserPreferences.h b/GeneralsMD/Code/GameEngine/Include/Common/UserPreferences.h index 9e4d83a4bf3..ac2c7e8cbaf 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/UserPreferences.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/UserPreferences.h @@ -95,6 +95,8 @@ class OptionPreferences : public UserPreferences Bool getRetaliationModeEnabled(); // convenience function Bool getDoubleClickAttackMoveEnabled(void); // convenience function Real getScrollFactor(void); // convenience function + Bool getDrawScrollAnchor(void); + Bool getMoveScrollAnchor(void); CursorCaptureMode getCursorCaptureMode() const; Bool getSendDelay(void); // convenience function Int getFirewallBehavior(void); // convenience function diff --git a/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp b/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp index be4b8962e27..a6b2303b83c 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/GlobalData.cpp @@ -991,6 +991,8 @@ GlobalData::GlobalData() m_loadScreenRender = FALSE; m_keyboardDefaultScrollFactor = m_keyboardScrollFactor = 0.5f; + m_drawScrollAnchor = FALSE; + m_moveScrollAnchor = FALSE; m_scrollAmountCutoff = 10.0f; m_cameraAdjustSpeed = 0.1f; m_enforceMaxCameraHeight = TRUE; @@ -1192,6 +1194,8 @@ void GlobalData::parseGameDataDefinition( INI* ini ) TheWritableGlobalData->m_clientRetaliationModeEnabled = optionPref.getRetaliationModeEnabled(); TheWritableGlobalData->m_doubleClickAttackMove = optionPref.getDoubleClickAttackMoveEnabled(); TheWritableGlobalData->m_keyboardScrollFactor = optionPref.getScrollFactor(); + TheWritableGlobalData->m_drawScrollAnchor = optionPref.getDrawScrollAnchor(); + TheWritableGlobalData->m_moveScrollAnchor = optionPref.getMoveScrollAnchor(); TheWritableGlobalData->m_defaultIP = optionPref.getLANIPAddress(); TheWritableGlobalData->m_firewallSendDelay = optionPref.getSendDelay(); TheWritableGlobalData->m_firewallBehavior = optionPref.getFirewallBehavior(); 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 2f4a306071e..b671e5c5fea 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/OptionsMenu.cpp @@ -378,6 +378,32 @@ Real OptionPreferences::getScrollFactor(void) return factor/100.0f; } +Bool OptionPreferences::getDrawScrollAnchor(void) +{ + OptionPreferences::const_iterator it = find("DrawScrollAnchor"); + // TheSuperHackers @info this default is based on the same variable within InGameUi.ini + if (it == end()) + return FALSE; + + if (stricmp(it->second.str(), "yes") == 0) { + return TRUE; + } + return FALSE; +} + +Bool OptionPreferences::getMoveScrollAnchor(void) +{ + OptionPreferences::const_iterator it = find("MoveScrollAnchor"); + // TheSuperHackers @info this default is based on the same variable within InGameUi.ini + if (it == end()) + return TRUE; + + if (stricmp(it->second.str(), "yes") == 0) { + return TRUE; + } + return FALSE; +} + CursorCaptureMode OptionPreferences::getCursorCaptureMode() const { CursorCaptureMode mode = CursorCaptureMode_Default; @@ -1237,6 +1263,24 @@ static void saveOptions( void ) (*pref)["ScrollFactor"] = prefString; } + //------------------------------------------------------------------------------------------------- + // draw scroll anchor + { + if( TheInGameUI->getDrawRMBScrollAnchor() ) + (*pref)["DrawScrollAnchor"] = "yes"; + else + (*pref)["DrawScrollAnchor"] = "no"; + } + + //------------------------------------------------------------------------------------------------- + // move scroll anchor + { + if( TheInGameUI->getMoveRMBScrollAnchor() ) + (*pref)["MoveScrollAnchor"] = "yes"; + else + (*pref)["MoveScrollAnchor"] = "no"; + } + //------------------------------------------------------------------------------------------------- // slider music volume val = GadgetSliderGetPosition(sliderMusicVolume); @@ -1854,7 +1898,7 @@ void OptionsMenuInit( WindowLayout *layout, void *userData ) //set scroll options AsciiString test = (*pref)["DrawScrollAnchor"]; DEBUG_LOG(("DrawScrollAnchor == [%s]", test.str())); - if (test == "Yes" || (test.isEmpty() && TheInGameUI->getDrawRMBScrollAnchor())) + if (test == "yes" || (test.isEmpty() && TheInGameUI->getDrawRMBScrollAnchor())) { GadgetCheckBoxSetChecked( checkDrawAnchor, true); TheInGameUI->setDrawRMBScrollAnchor(true); @@ -1866,7 +1910,7 @@ void OptionsMenuInit( WindowLayout *layout, void *userData ) } test = (*pref)["MoveScrollAnchor"]; DEBUG_LOG(("MoveScrollAnchor == [%s]", test.str())); - if (test == "Yes" || (test.isEmpty() && TheInGameUI->getMoveRMBScrollAnchor())) + if (test == "yes" || (test.isEmpty() && TheInGameUI->getMoveRMBScrollAnchor())) { GadgetCheckBoxSetChecked( checkMoveAnchor, true); TheInGameUI->setMoveRMBScrollAnchor(true); @@ -2197,12 +2241,12 @@ WindowMsgHandledType OptionsMenuSystem( GameWindow *window, UnsignedInt msg, if( GadgetCheckBoxIsChecked( control ) ) { TheInGameUI->setDrawRMBScrollAnchor(true); - (*pref)["DrawScrollAnchor"] = "Yes"; + (*pref)["DrawScrollAnchor"] = "yes"; } else { TheInGameUI->setDrawRMBScrollAnchor(false); - (*pref)["DrawScrollAnchor"] = "No"; + (*pref)["DrawScrollAnchor"] = "no"; } } else if(controlID == checkMoveAnchorID ) @@ -2210,12 +2254,12 @@ WindowMsgHandledType OptionsMenuSystem( GameWindow *window, UnsignedInt msg, if( GadgetCheckBoxIsChecked( control ) ) { TheInGameUI->setMoveRMBScrollAnchor(true); - (*pref)["MoveScrollAnchor"] = "Yes"; + (*pref)["MoveScrollAnchor"] = "yes"; } else { TheInGameUI->setMoveRMBScrollAnchor(false); - (*pref)["MoveScrollAnchor"] = "No"; + (*pref)["MoveScrollAnchor"] = "no"; } } else if(controlID == checkSaveCameraID ) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp index 7d3cabbb85d..a297e567305 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/InGameUI.cpp @@ -1216,6 +1216,8 @@ void InGameUI::init( void ) m_soloNexusSelectedDrawableID = INVALID_DRAWABLE_ID; + setDrawRMBScrollAnchor(TheGlobalData->m_drawScrollAnchor); + setMoveRMBScrollAnchor(TheGlobalData->m_moveScrollAnchor); } // end init