From 8f2c28869826d77a546ca5e2d07b00ef9a32e9ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20M=C3=BCller?= Date: Sun, 15 Sep 2024 11:42:54 +0200 Subject: [PATCH] Fix scrollbar rail clicking being active while popups open Scrollbars are now also set as the hot item when the rail is hovered and the rail clicking function is now only enabled for the scrollbar that is the hot item. Closes #8954. --- src/game/client/ui.cpp | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/game/client/ui.cpp b/src/game/client/ui.cpp index e0c859ac0..62658be81 100644 --- a/src/game/client/ui.cpp +++ b/src/game/client/ui.cpp @@ -1301,21 +1301,24 @@ float CUi::DoScrollbarV(const void *pId, const CUIRect *pRect, float Current) } else if(HotItem() == pId) { - if(MouseButton(0)) + if(InsideHandle) + { + if(MouseButton(0)) + { + SetActiveItem(pId); + m_ActiveScrollbarOffset = MouseY() - Handle.y; + Grabbed = true; + } + } + else if(MouseButtonClicked(0)) { SetActiveItem(pId); - m_ActiveScrollbarOffset = MouseY() - Handle.y; + m_ActiveScrollbarOffset = Handle.h / 2.0f; Grabbed = true; } } - else if(MouseButtonClicked(0) && !InsideHandle && InsideRail) - { - SetActiveItem(pId); - m_ActiveScrollbarOffset = Handle.h / 2.0f; - Grabbed = true; - } - if(InsideHandle && !MouseButton(0)) + if(InsideRail && !MouseButton(0)) { SetHotItem(pId); } @@ -1380,19 +1383,22 @@ float CUi::DoScrollbarH(const void *pId, const CUIRect *pRect, float Current, co } else if(HotItem() == pId) { - if(MouseButton(0)) + if(InsideHandle) + { + if(MouseButton(0)) + { + SetActiveItem(pId); + m_ActiveScrollbarOffset = MouseX() - Handle.x; + Grabbed = true; + } + } + else if(MouseButtonClicked(0)) { SetActiveItem(pId); - m_ActiveScrollbarOffset = MouseX() - Handle.x; + m_ActiveScrollbarOffset = Handle.w / 2.0f; Grabbed = true; } } - else if(MouseButtonClicked(0) && !InsideHandle && InsideRail) - { - SetActiveItem(pId); - m_ActiveScrollbarOffset = Handle.w / 2.0f; - Grabbed = true; - } if(!pColorInner && (InsideHandle || Grabbed) && (CheckActiveItem(pId) || HotItem() == pId)) { @@ -1400,7 +1406,7 @@ float CUi::DoScrollbarH(const void *pId, const CUIRect *pRect, float Current, co Handle.y -= 1.5f; } - if(InsideHandle && !MouseButton(0)) + if(InsideRail && !MouseButton(0)) { SetHotItem(pId); }