Centre labels above and below vertical wxSlider
Improve label position for specific combinations of wxSlider styles.
This commit is contained in:
@@ -401,10 +401,10 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
}
|
}
|
||||||
|
|
||||||
int tickOffset = 0;
|
int tickOffset = 0;
|
||||||
if ( HasFlag(wxSL_TICKS))
|
if ( HasFlag(wxSL_TICKS) )
|
||||||
tickOffset = TICK;
|
tickOffset = TICK;
|
||||||
if ( HasFlag(wxSL_BOTH))
|
if ( HasFlag(wxSL_BOTH) )
|
||||||
tickOffset *= 2;
|
tickOffset *= 2;
|
||||||
|
|
||||||
// be careful to position the slider itself after moving the labels as
|
// be careful to position the slider itself after moving the labels as
|
||||||
// otherwise our GetBoundingBox(), which is called from WM_SIZE handler,
|
// otherwise our GetBoundingBox(), which is called from WM_SIZE handler,
|
||||||
@@ -419,7 +419,7 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
sliderOffset += longestLabelWidth + HGAP;
|
sliderOffset += longestLabelWidth + HGAP;
|
||||||
}
|
}
|
||||||
|
|
||||||
int labelHeightUsed = 0 ;
|
int labelHeightUsed = 0;
|
||||||
|
|
||||||
if ( HasFlag(wxSL_MIN_MAX_LABELS) )
|
if ( HasFlag(wxSL_MIN_MAX_LABELS) )
|
||||||
{
|
{
|
||||||
@@ -429,9 +429,12 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
if ( HasFlag(wxSL_LEFT) )
|
if ( HasFlag(wxSL_LEFT) )
|
||||||
{
|
{
|
||||||
// Label aligned to the left edge of the slider.
|
// Label aligned to the left edge of the slider.
|
||||||
xPos = sliderOffset + tickOffset;
|
xPos = sliderOffset + THUMB / 2;
|
||||||
holdTopX = xPos;
|
if ( HasFlag(wxSL_TICKS) )
|
||||||
holdBottomX = xPos;
|
xPos += TICK;
|
||||||
|
|
||||||
|
holdTopX = xPos - minLabelWidth / 2;
|
||||||
|
holdBottomX = xPos - maxLabelWidth / 2;
|
||||||
if ( holdTopX + minLabelWidth > width )
|
if ( holdTopX + minLabelWidth > width )
|
||||||
holdTopX = width - minLabelWidth;
|
holdTopX = width - minLabelWidth;
|
||||||
if ( holdBottomX + maxLabelWidth > width )
|
if ( holdBottomX + maxLabelWidth > width )
|
||||||
@@ -440,24 +443,18 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
else // wxSL_RIGHT
|
else // wxSL_RIGHT
|
||||||
{
|
{
|
||||||
// Label aligned to the right edge of the slider.
|
// Label aligned to the right edge of the slider.
|
||||||
if ( HasFlag(wxSL_BOTH) )
|
xPos = sliderOffset + THUMB / 2;
|
||||||
xPos = sliderOffset + THUMB + tickOffset/2;
|
if ( HasFlag(wxSL_TICKS) && HasFlag(wxSL_BOTH) )
|
||||||
else
|
xPos += TICK;
|
||||||
xPos = sliderOffset + THUMB;
|
|
||||||
|
|
||||||
holdTopX = xPos - minLabelWidth;
|
holdTopX = xPos - minLabelWidth / 2;
|
||||||
holdBottomX = xPos - maxLabelWidth;
|
holdBottomX = xPos - maxLabelWidth / 2;
|
||||||
if ( holdTopX < 0 )
|
if ( holdTopX < 0 )
|
||||||
holdTopX = 0;
|
holdTopX = 0;
|
||||||
if ( holdBottomX < 0 )
|
if ( holdBottomX < 0 )
|
||||||
holdBottomX = 0;
|
holdBottomX = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( HasFlag(wxSL_INVERSE) )
|
|
||||||
{
|
|
||||||
wxSwap(holdTopX, holdBottomX);
|
|
||||||
}
|
|
||||||
|
|
||||||
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Min],
|
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Min],
|
||||||
x + holdTopX,
|
x + holdTopX,
|
||||||
y,
|
y,
|
||||||
@@ -467,14 +464,14 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
y + height - labelHeight,
|
y + height - labelHeight,
|
||||||
maxLabelWidth, labelHeight);
|
maxLabelWidth, labelHeight);
|
||||||
|
|
||||||
labelHeightUsed = labelHeight ;
|
labelHeightUsed = labelHeight;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( HasFlag(wxSL_VALUE_LABEL) )
|
if ( HasFlag(wxSL_VALUE_LABEL) )
|
||||||
{
|
{
|
||||||
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Value],
|
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Value],
|
||||||
x + ( HasFlag(wxSL_LEFT) ? THUMB + tickOffset + HGAP : 0 ),
|
x + ( HasFlag(wxSL_LEFT) ? THUMB + tickOffset + HGAP : 0 ),
|
||||||
y + (height - labelHeight)/2,
|
y + (height - labelHeight) / 2,
|
||||||
longestLabelWidth, labelHeight);
|
longestLabelWidth, labelHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -488,20 +485,20 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
else // horizontal
|
else // horizontal
|
||||||
{
|
{
|
||||||
int yLabelMinMax =
|
int yLabelMinMax =
|
||||||
(y + ((THUMB + tickOffset) / 2)) - (labelHeight / 2);
|
((THUMB + tickOffset) / 2) - (labelHeight / 2);
|
||||||
int xLabelValue =
|
int xLabelValue =
|
||||||
x + minLabelWidth +
|
minLabelWidth +
|
||||||
((width - (minLabelWidth + maxLabelWidth)) / 2) -
|
((width - (minLabelWidth + maxLabelWidth)) / 2) -
|
||||||
(longestLabelWidth / 2);
|
(longestLabelWidth / 2);
|
||||||
|
|
||||||
int ySlider = y;
|
int ySlider = 0;
|
||||||
int minLabelWidthUsed = 0 ;
|
int minLabelWidthUsed = 0;
|
||||||
int maxLabelWidthUsed = 0 ;
|
int maxLabelWidthUsed = 0;
|
||||||
|
|
||||||
if ( HasFlag(wxSL_VALUE_LABEL) )
|
if ( HasFlag(wxSL_VALUE_LABEL) )
|
||||||
{
|
{
|
||||||
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Value],
|
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Value],
|
||||||
xLabelValue,
|
x + xLabelValue,
|
||||||
y + (HasFlag(wxSL_BOTTOM) ? 0 : THUMB + tickOffset),
|
y + (HasFlag(wxSL_BOTTOM) ? 0 : THUMB + tickOffset),
|
||||||
longestLabelWidth, labelHeight);
|
longestLabelWidth, labelHeight);
|
||||||
|
|
||||||
@@ -516,21 +513,21 @@ void wxSlider::DoMoveWindow(int x, int y, int width, int height)
|
|||||||
{
|
{
|
||||||
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Min],
|
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Min],
|
||||||
x,
|
x,
|
||||||
yLabelMinMax,
|
y + yLabelMinMax,
|
||||||
minLabelWidth, labelHeight);
|
minLabelWidth, labelHeight);
|
||||||
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Max],
|
DoMoveSibling((HWND)(*m_labels)[SliderLabel_Max],
|
||||||
x + width - maxLabelWidth,
|
x + width - maxLabelWidth,
|
||||||
yLabelMinMax,
|
y + yLabelMinMax,
|
||||||
maxLabelWidth, labelHeight);
|
maxLabelWidth, labelHeight);
|
||||||
|
|
||||||
minLabelWidthUsed = minLabelWidth + VGAP ;
|
minLabelWidthUsed = minLabelWidth + VGAP;
|
||||||
maxLabelWidthUsed = maxLabelWidth + VGAP ;
|
maxLabelWidthUsed = maxLabelWidth + VGAP;
|
||||||
}
|
}
|
||||||
|
|
||||||
// position the slider itself along the top/bottom edge
|
// position the slider itself along the top/bottom edge
|
||||||
wxSliderBase::DoMoveWindow(
|
wxSliderBase::DoMoveWindow(
|
||||||
x + minLabelWidthUsed,
|
x + minLabelWidthUsed,
|
||||||
ySlider,
|
y + ySlider,
|
||||||
width - (minLabelWidthUsed + maxLabelWidthUsed),
|
width - (minLabelWidthUsed + maxLabelWidthUsed),
|
||||||
THUMB + tickOffset);
|
THUMB + tickOffset);
|
||||||
}
|
}
|
||||||
@@ -559,7 +556,7 @@ wxSize wxSlider::DoGetBestSize() const
|
|||||||
if ( HasFlag(wxSL_VALUE_LABEL) )
|
if ( HasFlag(wxSL_VALUE_LABEL) )
|
||||||
size.x += longestLabelWidth + HGAP;
|
size.x += longestLabelWidth + HGAP;
|
||||||
|
|
||||||
if (HasFlag(wxSL_MIN_MAX_LABELS))
|
if ( HasFlag(wxSL_MIN_MAX_LABELS) )
|
||||||
{
|
{
|
||||||
size.x = wxMax(size.x, longestLabelWidth);
|
size.x = wxMax(size.x, longestLabelWidth);
|
||||||
size.y += hLabel * 2;
|
size.y += hLabel * 2;
|
||||||
|
Reference in New Issue
Block a user