X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/851dee09b5ab50a69519a39b0f3f6b95b1a63373..12bb29f5432174ecbd65549bda832d70d34a98ae:/src/cocoa/scrolbar.mm?ds=sidebyside diff --git a/src/cocoa/scrolbar.mm b/src/cocoa/scrolbar.mm index 81fa2c95fc..4ce46ec462 100644 --- a/src/cocoa/scrolbar.mm +++ b/src/cocoa/scrolbar.mm @@ -2,7 +2,7 @@ // Name: src/cocoa/scrolbar.mm // Purpose: wxScrollBar // Author: David Elliott -// Modified by: +// Modified by: Mark Oxenham // Created: 2004/04/25 // RCS-ID: $Id$ // Copyright: (c) 2004 David Elliott @@ -21,22 +21,67 @@ #import -IMPLEMENT_DYNAMIC_CLASS(wxScrollBar, wxControl) BEGIN_EVENT_TABLE(wxScrollBar, wxScrollBarBase) END_EVENT_TABLE() WX_IMPLEMENT_COCOA_OWNER(wxScrollBar,NSScroller,NSControl,NSView) +inline NSControlSize AdjustDimension( + int &pos, + wxSize &size, + int (wxSize::*GetDimension)() const, + void (wxSize::*SetDimension)(int)) +{ + NSControlSize controlSize = NSRegularControlSize; + const int dimension = (size.*GetDimension)(); + + if ((size.GetHeight() == -1) || (size.GetWidth() == -1) || (dimension >= 15)) + { + (size.*SetDimension)(15); + } + else + { + (size.*SetDimension)(11); + controlSize = NSSmallControlSize; + } + + pos += (dimension - (size.*GetDimension)() + 1) / 2; + + return (controlSize); +} + bool wxScrollBar::Create(wxWindow *parent, wxWindowID winid, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { - if(!CreateControl(parent,winid,pos,size,style,validator,name)) + NSControlSize controlSize = NSRegularControlSize; + wxSize adjustedSize(size); + wxPoint adjustedPos(pos); + + if ((style & wxSB_HORIZONTAL) && ((size.GetHeight() != wxDefaultCoord) || (size.GetHeight() == -1))) + { + controlSize = AdjustDimension(adjustedPos.y, adjustedSize, &wxSize::GetHeight, &wxSize::SetHeight); + } + else if ((style & wxSB_VERTICAL) && (size.GetWidth() != wxDefaultCoord || (size.GetWidth() == -1))) + { + controlSize = AdjustDimension(adjustedPos.x, adjustedSize, &wxSize::GetWidth, &wxSize::SetWidth); + } + + if(!CreateControl(parent,winid,adjustedPos,adjustedSize,style,validator,name)) return false; - SetNSScroller([[NSScroller alloc] initWithFrame: MakeDefaultNSRect(size)]); + SetNSScroller([[NSScroller alloc] initWithFrame: MakeDefaultNSRect(adjustedSize)]); [m_cocoaNSView release]; if(m_parent) m_parent->CocoaAddChild(this); - SetInitialFrameRect(pos,size); + SetInitialFrameRect(adjustedPos,adjustedSize); + + BOOL nsEnabled = [GetNSScroller() isEnabled]; + + if (IsEnabled() != (nsEnabled != NO)) + { + [GetNSScroller() setEnabled: !nsEnabled]; + } + + [GetNSScroller() setControlSize: controlSize]; return true; } @@ -130,7 +175,7 @@ void wxScrollBar::Cocoa_wxNSScrollerAction() wxScrollEvent event(command, GetId(), GetThumbPosition(), HasFlag(wxSB_VERTICAL)?wxVERTICAL:wxHORIZONTAL); event.SetEventObject(this); - GetEventHandler()->ProcessEvent(event); + HandleWindowEvent(event); } #endif // wxUSE_SCROLLBAR