X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5369a0543e919a07f78f268fd0ef0c59e1b19e83..797e38dde12c5dc2d99070eef25d9b8c2549d621:/src/cocoa/scrolbar.mm diff --git a/src/cocoa/scrolbar.mm b/src/cocoa/scrolbar.mm index 9a21343de6..bfda3d2416 100644 --- a/src/cocoa/scrolbar.mm +++ b/src/cocoa/scrolbar.mm @@ -1,20 +1,22 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: cocoa/scrolbar.mm +// 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 -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #include "wx/wxprec.h" + #if wxUSE_SCROLLBAR +#include "wx/scrolbar.h" + #ifndef WX_PRECOMP #include "wx/app.h" - #include "wx/scrolbar.h" #endif //WX_PRECOMP #import @@ -24,17 +26,63 @@ 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; }