Skip to content

Commit 438541b

Browse files
committed
Let some scrollbars have out of range values
This is necessary because options like mouse sensivity get replaced with their scrollbar max value every time you open their settings page.
1 parent 76acb6f commit 438541b

File tree

4 files changed

+20
-8
lines changed

4 files changed

+20
-8
lines changed

src/game/client/components/menus_callback.cpp

+4-4
Original file line numberDiff line numberDiff line change
@@ -145,11 +145,11 @@ float CMenus::RenderSettingsControlsMouse(CUIRect View)
145145

146146
View.HSplitTop(Spacing, 0, &View);
147147
View.HSplitTop(ButtonHeight, &Button, &View);
148-
UI()->DoScrollbarOption(&Config()->m_InpMousesens, &Config()->m_InpMousesens, &Button, Localize("In-game mouse sens."), 1, 500, &CUI::ms_LogarithmicScrollbarScale);
148+
UI()->DoScrollbarOption(&Config()->m_InpMousesens, &Config()->m_InpMousesens, &Button, Localize("In-game mouse sens."), 1, 500, &CUI::ms_LogarithmicScrollbarScale, CUI::SCROLLBAR_NO_STRICT_RANGE);
149149

150150
View.HSplitTop(Spacing, 0, &View);
151151
View.HSplitTop(ButtonHeight, &Button, &View);
152-
UI()->DoScrollbarOption(&Config()->m_UiMousesens, &Config()->m_UiMousesens, &Button, Localize("Menu mouse sens."), 1, 500, &CUI::ms_LogarithmicScrollbarScale);
152+
UI()->DoScrollbarOption(&Config()->m_UiMousesens, &Config()->m_UiMousesens, &Button, Localize("Menu mouse sens."), 1, 500, &CUI::ms_LogarithmicScrollbarScale, CUI::SCROLLBAR_NO_STRICT_RANGE);
153153

154154
return BackgroundHeight;
155155
}
@@ -217,12 +217,12 @@ float CMenus::RenderSettingsControlsJoystick(CUIRect View)
217217
{
218218
View.HSplitTop(Spacing, 0, &View);
219219
View.HSplitTop(ButtonHeight, &Button, &View);
220-
UI()->DoScrollbarOption(&Config()->m_JoystickSens, &Config()->m_JoystickSens, &Button, Localize("In-game joystick sensitivity"), 1, 500, &CUI::ms_LogarithmicScrollbarScale);
220+
UI()->DoScrollbarOption(&Config()->m_JoystickSens, &Config()->m_JoystickSens, &Button, Localize("In-game joystick sensitivity"), 1, 500, &CUI::ms_LogarithmicScrollbarScale, CUI::SCROLLBAR_NO_STRICT_RANGE);
221221
}
222222

223223
View.HSplitTop(Spacing, 0, &View);
224224
View.HSplitTop(ButtonHeight, &Button, &View);
225-
UI()->DoScrollbarOption(&Config()->m_UiJoystickSens, &Config()->m_UiJoystickSens, &Button, Localize("Menu/Editor joystick sensitivity"), 1, 500, &CUI::ms_LogarithmicScrollbarScale);
225+
UI()->DoScrollbarOption(&Config()->m_UiJoystickSens, &Config()->m_UiJoystickSens, &Button, Localize("Menu/Editor joystick sensitivity"), 1, 500, &CUI::ms_LogarithmicScrollbarScale, CUI::SCROLLBAR_NO_STRICT_RANGE);
226226

227227
View.HSplitTop(Spacing, 0, &View);
228228
View.HSplitTop(ButtonHeight, &Button, &View);

src/game/client/components/menus_settings.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -977,7 +977,7 @@ void CMenus::RenderSettingsGeneral(CUIRect MainView)
977977
Config()->m_ClAutoDemoRecord ^= 1;
978978

979979
if(Config()->m_ClAutoDemoRecord)
980-
UI()->DoScrollbarOption(&Config()->m_ClAutoDemoMax, &Config()->m_ClAutoDemoMax, &ClientRight, Localize("Max"), 0, 1000, &CUI::ms_LogarithmicScrollbarScale, true);
980+
UI()->DoScrollbarOption(&Config()->m_ClAutoDemoMax, &Config()->m_ClAutoDemoMax, &ClientRight, Localize("Max"), 0, 1000, &CUI::ms_LogarithmicScrollbarScale, CUI::SCROLLBAR_INFINITE);
981981

982982
Client.HSplitTop(Spacing, 0, &Client);
983983
Client.HSplitTop(ButtonHeight, &ClientLeft, &Client);
@@ -986,7 +986,7 @@ void CMenus::RenderSettingsGeneral(CUIRect MainView)
986986
Config()->m_ClAutoScreenshot ^= 1;
987987

988988
if(Config()->m_ClAutoScreenshot)
989-
UI()->DoScrollbarOption(&Config()->m_ClAutoScreenshotMax, &Config()->m_ClAutoScreenshotMax, &ClientRight, Localize("Max"), 0, 1000, &CUI::ms_LogarithmicScrollbarScale, true);
989+
UI()->DoScrollbarOption(&Config()->m_ClAutoScreenshotMax, &Config()->m_ClAutoScreenshotMax, &ClientRight, Localize("Max"), 0, 1000, &CUI::ms_LogarithmicScrollbarScale, CUI::SCROLLBAR_INFINITE);
990990

991991
MainView.HSplitTop(10.0f, 0, &MainView);
992992

src/game/client/ui.cpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -705,8 +705,10 @@ float CUI::DoScrollbarH(const void *pID, const CUIRect *pRect, float Current)
705705
return ReturnValue;
706706
}
707707

708-
void CUI::DoScrollbarOption(const void *pID, int *pOption, const CUIRect *pRect, const char *pStr, int Min, int Max, const IScrollbarScale *pScale, bool Infinite)
708+
void CUI::DoScrollbarOption(const void *pID, int *pOption, const CUIRect *pRect, const char *pStr, int Min, int Max, const IScrollbarScale *pScale, unsigned char Options)
709709
{
710+
const bool Infinite = Options & CUI::SCROLLBAR_INFINITE;
711+
const bool NoRangeEnforcement = Options & CUI::SCROLLBAR_NO_STRICT_RANGE;
710712
int Value = *pOption;
711713
if(Infinite)
712714
{
@@ -736,6 +738,10 @@ void CUI::DoScrollbarOption(const void *pID, int *pOption, const CUIRect *pRect,
736738

737739
ScrollBar.VMargin(4.0f, &ScrollBar);
738740
Value = pScale->ToAbsolute(DoScrollbarH(pID, &ScrollBar, pScale->ToRelative(Value, Min, Max)), Min, Max);
741+
if (NoRangeEnforcement && ((Value == Min && *pOption < Min) || (Value == Max && *pOption > Max)))
742+
{
743+
Value = *pOption;
744+
}
739745
if(Infinite && Value == Max)
740746
Value = 0;
741747

src/game/client/ui.h

+7-1
Original file line numberDiff line numberDiff line change
@@ -273,9 +273,15 @@ class CUI
273273
// scrollbars
274274
float DoScrollbarV(const void *pID, const CUIRect *pRect, float Current);
275275
float DoScrollbarH(const void *pID, const CUIRect *pRect, float Current);
276-
void DoScrollbarOption(const void *pID, int *pOption, const CUIRect *pRect, const char *pStr, int Min, int Max, const IScrollbarScale *pScale = &ms_LinearScrollbarScale, bool Infinite = false);
276+
void DoScrollbarOption(const void *pID, int *pOption, const CUIRect *pRect, const char *pStr, int Min, int Max, const IScrollbarScale *pScale = &ms_LinearScrollbarScale, unsigned char Options = 0);
277277
void DoScrollbarOptionLabeled(const void *pID, int *pOption, const CUIRect *pRect, const char *pStr, const char *apLabels[], int NumLabels, const IScrollbarScale *pScale = &ms_LinearScrollbarScale);
278278

279+
enum
280+
{
281+
SCROLLBAR_INFINITE = 1 << 0,
282+
SCROLLBAR_NO_STRICT_RANGE = 1 << 1,
283+
};
284+
279285
// tooltips
280286
void DoTooltip(const void *pID, const CUIRect *pRect, const char *pText);
281287
void RenderTooltip();

0 commit comments

Comments
 (0)