From 5a3a6c6914b9c7a3b8e9f51075035326329d947d Mon Sep 17 00:00:00 2001
From: Rye Mutt <rye@alchemyviewer.org>
Date: Tue, 23 Jul 2024 21:38:43 -0400
Subject: Fix excessive getChild calls from LLScrollBar reshape

---
 indra/llui/llscrollbar.cpp | 24 ++++++++++++------------
 indra/llui/llscrollbar.h   |  3 +++
 2 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp
index 9c73b1ba3f..d0eec387bd 100644
--- a/indra/llui/llscrollbar.cpp
+++ b/indra/llui/llscrollbar.cpp
@@ -113,7 +113,8 @@ LLScrollbar::LLScrollbar(const Params & p)
     up_btn.tab_stop(false);
     up_btn.follows.flags = (mOrientation == VERTICAL ? (FOLLOWS_RIGHT | FOLLOWS_TOP) : (FOLLOWS_LEFT | FOLLOWS_BOTTOM));
 
-    addChild(LLUICtrlFactory::create<LLButton>(up_btn));
+    mLineUpBtn = LLUICtrlFactory::create<LLButton>(up_btn);
+    addChild(mLineUpBtn);
 
     LLButton::Params down_btn(mOrientation == VERTICAL ? p.down_button : p.right_button);
     down_btn.name(std::string("Line Down"));
@@ -123,7 +124,8 @@ LLScrollbar::LLScrollbar(const Params & p)
     down_btn.mouse_held_callback.function(boost::bind(&LLScrollbar::onLineDownBtnPressed, this, _2));
     down_btn.tab_stop(false);
 
-    addChild(LLUICtrlFactory::create<LLButton>(down_btn));
+    mLineDownBtn = LLUICtrlFactory::create<LLButton>(down_btn);
+    addChild(mLineDownBtn);
 }
 
 
@@ -468,22 +470,20 @@ void LLScrollbar::reshape(S32 width, S32 height, bool called_from_parent)
 {
     if (width == getRect().getWidth() && height == getRect().getHeight()) return;
     LLView::reshape( width, height, called_from_parent );
-    LLButton* up_button = getChild<LLButton>("Line Up");
-    LLButton* down_button = getChild<LLButton>("Line Down");
 
     if (mOrientation == VERTICAL)
     {
-        up_button->reshape(up_button->getRect().getWidth(), llmin(getRect().getHeight() / 2, mThickness));
-        down_button->reshape(down_button->getRect().getWidth(), llmin(getRect().getHeight() / 2, mThickness));
-        up_button->setOrigin(0, getRect().getHeight() - up_button->getRect().getHeight());
-        down_button->setOrigin(0, 0);
+        mLineUpBtn->reshape(mLineUpBtn->getRect().getWidth(), llmin(getRect().getHeight() / 2, mThickness));
+        mLineDownBtn->reshape(mLineDownBtn->getRect().getWidth(), llmin(getRect().getHeight() / 2, mThickness));
+        mLineUpBtn->setOrigin(0, getRect().getHeight() - mLineUpBtn->getRect().getHeight());
+        mLineDownBtn->setOrigin(0, 0);
     }
     else
     {
-        up_button->reshape(llmin(getRect().getWidth() / 2, mThickness), up_button->getRect().getHeight());
-        down_button->reshape(llmin(getRect().getWidth() / 2, mThickness), down_button->getRect().getHeight());
-        up_button->setOrigin(0, 0);
-        down_button->setOrigin(getRect().getWidth() - down_button->getRect().getWidth(), 0);
+        mLineUpBtn->reshape(llmin(getRect().getWidth() / 2, mThickness), mLineUpBtn->getRect().getHeight());
+        mLineDownBtn->reshape(llmin(getRect().getWidth() / 2, mThickness), mLineDownBtn->getRect().getHeight());
+        mLineUpBtn->setOrigin(0, 0);
+        mLineDownBtn->setOrigin(getRect().getWidth() - mLineDownBtn->getRect().getWidth(), 0);
     }
     updateThumbRect();
 }
diff --git a/indra/llui/llscrollbar.h b/indra/llui/llscrollbar.h
index 7b935aa51b..9607355a9d 100644
--- a/indra/llui/llscrollbar.h
+++ b/indra/llui/llscrollbar.h
@@ -161,6 +161,9 @@ private:
     LLUIImagePtr        mTrackImageH;
 
     S32                 mThickness;
+
+    LLButton*           mLineUpBtn = nullptr;
+    LLButton*           mLineDownBtn = nullptr;
 };
 
 
-- 
cgit v1.2.3