2
0
Эх сурвалжийг харах

Do not use a layout on a ScrollBar as using it can lead to resizing the ScrollBar itself, which is irreversible. Fixes #11.

Lasse Öörni 12 жил өмнө
parent
commit
dc2e59af7f

+ 6 - 6
Bin/Data/UI/DefaultStyle.xml

@@ -118,16 +118,16 @@
         <attribute name="Right Image Rect" value="48 32 64 48" />
         <attribute name="Down Image Rect" value="16 32 32 48" />
         <element type="Button" internal="true">
-            <attribute name="Size" value="12 12" />
+            <attribute name="Size" value="16 16" />
             <attribute name="Border" value="4 4 4 4" />
             <attribute name="Pressed Image Offset" value="64 0" />
             <attribute name="Hover Image Offset" value="0 16" />
         </element>
         <element type="Slider" internal="true">
-            <attribute name="Size" value="12 12" />
+            <attribute name="Size" value="16 16" />
         </element>
         <element type="Button" internal="true">
-            <attribute name="Size" value="12 12" />
+            <attribute name="Size" value="16 16" />
             <attribute name="Border" value="4 4 4 4" />
             <attribute name="Pressed Image Offset" value="64 0" />
             <attribute name="Hover Image Offset" value="0 16" />
@@ -135,10 +135,10 @@
     </element>
     <element type="ScrollView">
         <element type="ScrollBar" internal="true">
-            <attribute name="Size" value="0 12" />
+            <attribute name="Size" value="0 16" />
         </element>
         <element type="ScrollBar" internal="true">
-            <attribute name="Size" value="12 0" />
+            <attribute name="Size" value="16 0" />
         </element>
         <element type="BorderImage" internal="true">
             <attribute name="Image Rect" value="48 0 64 16" />
@@ -147,7 +147,7 @@
         </element>
     </element>
     <element type="Slider" style="BorderImage">
-        <attribute name="Size" value="12 12" />
+        <attribute name="Size" value="16 16" />
         <attribute name="Image Rect" value="48 0 64 16" />
         <attribute name="Border" value="4 4 4 4" />
         <element type="BorderImage" internal="true">

+ 19 - 14
Source/Engine/UI/ScrollBar.cpp

@@ -64,7 +64,7 @@ ScrollBar::ScrollBar(Context* context) :
     SubscribeToEvent(slider_, E_SLIDERCHANGED, HANDLER(ScrollBar, HandleSliderChanged));
     SubscribeToEvent(slider_, E_SLIDERPAGED, HANDLER(ScrollBar, HandleSliderPaged));
 
-    // Set default orientation/layout
+    // Set default orientation
     SetOrientation(O_HORIZONTAL);
 }
 
@@ -108,23 +108,32 @@ void ScrollBar::ApplyAttributes()
 
 void ScrollBar::OnResize()
 {
-    // Disable layout operations while setting the button sizes is incomplete
-    DisableLayoutUpdate();
-
     if (slider_->GetOrientation() == O_HORIZONTAL)
     {
         int height = GetHeight();
-        backButton_->SetFixedSize(height, height);
-        forwardButton_->SetFixedSize(height, height);
+        int sliderWidth = Max(GetWidth() - 2 * height, 0);
+
+        backButton_->SetSize(height, height);
+        slider_->SetSize(sliderWidth, height);
+        forwardButton_->SetSize(height, height);
+        
+        backButton_->SetPosition(0, 0);
+        slider_->SetPosition(height, 0);
+        forwardButton_->SetPosition(height + sliderWidth, 0);
     }
     else
     {
         int width = GetWidth();
-        backButton_->SetFixedSize(width, width);
-        forwardButton_->SetFixedSize(width, width);
+        int sliderHeight = Max(GetHeight() - 2 * width, 0);
+
+        backButton_->SetSize(width, width);
+        slider_->SetSize(width, sliderHeight);
+        forwardButton_->SetSize(width, width);
+        
+        backButton_->SetPosition(0, 0);
+        slider_->SetPosition(0, width);
+        forwardButton_->SetPosition(0, sliderHeight + width);
     }
-
-    EnableLayoutUpdate();
 }
 
 void ScrollBar::OnSetEditable()
@@ -148,10 +157,6 @@ void ScrollBar::SetOrientation(Orientation orientation)
     }
 
     OnResize();
-    if (orientation == O_HORIZONTAL)
-        SetLayout(LM_HORIZONTAL);
-    else
-        SetLayout(LM_VERTICAL);
 }
 
 void ScrollBar::SetRange(float range)