]> git.saurik.com Git - wxWidgets.git/commitdiff
Fixed min and max label values not being swapped when using wxSL_INVERSE in a horizon...
authorDimitri Schoolwerth <dimitri.schoolwerth@gmail.com>
Mon, 19 Dec 2011 12:28:42 +0000 (12:28 +0000)
committerDimitri Schoolwerth <dimitri.schoolwerth@gmail.com>
Mon, 19 Dec 2011 12:28:42 +0000 (12:28 +0000)
Changed wxSlider::GetLabelsSize to let the widthMin and widthMax values contain the width of what the minimum (always on the left/top) and maximum (always on the right/bottom) _label_ will contain. This is not the same as the minimum and maximum _value_ in case of using wxSL_INVERSE.

Also don't swap the position of the min/max labels in a horizontal slider with wxSL_INVERSE (just how the labels already stay in place in a vertical slider, regardless of wxSL_INVERSE usage), nor their width.

Regression since r65941.

Fixes #13416.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@70048 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/msw/slider.cpp

index 3c5c561fec2e35c9dec0314cc5263cc3f72a4479..d7b2d7cf9e9e425ca74314fe71595ef0039ba6a5 100644 (file)
@@ -371,6 +371,11 @@ int wxSlider::GetLabelsSize(int *widthMin, int *widthMax) const
     {
         *widthMin = GetTextExtent(Format(m_rangeMin)).x;
         *widthMax = GetTextExtent(Format(m_rangeMax)).x;
+
+        if ( HasFlag(wxSL_INVERSE) )
+        {
+            wxSwap(*widthMin, *widthMax);
+        }
     }
 
     return HasFlag(wxSL_LABELS) ? GetCharHeight() : 0;
@@ -420,11 +425,10 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
             {
                 holdTopX = xLabel;
                 holdTopWidth = minLabelWidth;
-                holdBottomX = xLabel - ((maxLabelWidth - minLabelWidth) / 2);
+                holdBottomX = xLabel - (abs(maxLabelWidth - minLabelWidth) / 2);
                 holdBottomWidth = maxLabelWidth;
                 if ( HasFlag(wxSL_INVERSE) )
                 {
-                    wxSwap(holdTopWidth, holdBottomWidth);
                     wxSwap(holdTopX, holdBottomX);
                 }
                 DoMoveSibling((HWND)(*m_labels)[SliderLabel_Min],
@@ -446,13 +450,12 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
         {
             if ( HasFlag(wxSL_MIN_MAX_LABELS) )
             {
-                holdTopX = xLabel + longestLabelWidth + ((maxLabelWidth - minLabelWidth) / 2);
+                holdTopX = xLabel + longestLabelWidth + (abs(maxLabelWidth - minLabelWidth) / 2);
                 holdTopWidth = minLabelWidth;
                 holdBottomX = xLabel + longestLabelWidth;
                 holdBottomWidth = maxLabelWidth;
                 if ( HasFlag(wxSL_INVERSE) )
                 {
-                    wxSwap(holdTopWidth, holdBottomWidth);
                     wxSwap(holdTopX, holdBottomX);
                 }
                 DoMoveSibling((HWND)(*m_labels)[SliderLabel_Min],
@@ -515,11 +518,6 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
                 holdLeftWidth = minLabelWidth;
                 holdRightX = x + width - maxLabelWidth;
                 holdRightWidth = maxLabelWidth;
-                if ( HasFlag(wxSL_INVERSE) )
-                {
-                    wxSwap(holdLeftWidth, holdRightWidth);
-                    wxSwap(holdLeftX, holdRightX);
-                }
                 DoMoveSibling((HWND)(*m_labels)[SliderLabel_Min],
                     holdLeftX,
                     yLabelMinMax,
@@ -546,11 +544,6 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
                 holdLeftWidth = minLabelWidth;
                 holdRightX = x + width - maxLabelWidth;
                 holdRightWidth = maxLabelWidth;
-                if ( HasFlag(wxSL_INVERSE) )
-                {
-                    wxSwap(holdLeftWidth, holdRightWidth);
-                    wxSwap(holdLeftX, holdRightX);
-                }
                 DoMoveSibling((HWND)(*m_labels)[SliderLabel_Min],
                     holdLeftX,
                     yLabelMinMax,