Make a slider control created with a particular size/position adjust itself to the only size that works and adjust the positioning accordingly.

Implement the wxSL_AUTOTICKS style.
Patch from Mark Oxenham.  Copyright 2007 Software 2000 Ltd.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@48589 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
David Elliott 2007-09-06 16:41:31 +00:00
parent 50fae378f2
commit 780220b099

View File

@ -42,11 +42,14 @@ inline void AdjustDimension(
const int dimension = (size.*GetDimension)();
const int minSize = (isTicksStyle) ? 23 : 20;
// prevent clipping of overly "thin" sliders
if (dimension < minSize)
{
(size.*SetDimension)(minSize);
}
// move the slider control to the middle of the dimension that is not
// being used to define its length
pos += (dimension - (size.*GetDimension)() + 1) / 2;
}
@ -68,17 +71,25 @@ bool wxSlider::Create(wxWindow *parent, wxWindowID winid,
AdjustDimension(isTicksStyle, adjustedPos.x, adjustedSize, &wxSize::GetWidth, &wxSize::SetWidth);
}
if(!CreateControl(parent,winid,pos,size,style,validator,name))
if(!CreateControl(parent,winid,adjustedPos,adjustedSize,style,validator,name))
return false;
SetNSSlider([[WX_GET_OBJC_CLASS(WXNSSlider) alloc] initWithFrame: MakeDefaultNSRect(size)]);
SetNSSlider([[WX_GET_OBJC_CLASS(WXNSSlider) alloc] initWithFrame: MakeDefaultNSRect(adjustedSize)]);
[m_cocoaNSView release];
if(m_parent)
m_parent->CocoaAddChild(this);
SetInitialFrameRect(pos,size);
SetInitialFrameRect(adjustedPos,adjustedSize);
SetRange(minValue, maxValue);
SetValue(value);
// -1 default for wxSL_AUTOTICKS == false
int tickMarks = -1;
// minValue > maxValue not handled, tickMarks set to 0
if ( style & wxSL_AUTOTICKS )
tickMarks = ((maxValue - minValue >= 0) ? (maxValue - minValue) : 0);
// arg2 needed a value, doesnt do anything
SetTickFreq(tickMarks,1);
return true;
}