X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b38dc31ffa6eb372727a7b0e65001a1c3d107fcb..3721dc6efe6f9ffe550c4c83bee2da210043bcaa:/src/osx/cocoa/button.mm diff --git a/src/osx/cocoa/button.mm b/src/osx/cocoa/button.mm index 9dbcbee2da..d4560769be 100644 --- a/src/osx/cocoa/button.mm +++ b/src/osx/cocoa/button.mm @@ -20,7 +20,10 @@ wxSize wxButton::DoGetBestSize() const { - if ( GetId() == wxID_HELP ) + // We only use help button bezel if we don't have any (non standard) label + // to display in the button. Otherwise even wxID_HELP buttons look like + // normal push buttons. + if ( GetId() == wxID_HELP && GetLabel().empty() ) return wxSize( 23 , 23 ) ; wxRect r ; @@ -130,12 +133,34 @@ private: } }; +extern "C" void SetBezelStyleFromBorderFlags(NSButton *v, long style); + +// set bezel style depending on the wxBORDER_XXX flags specified by the style +void SetBezelStyleFromBorderFlags(NSButton *v, long style) +{ + if ( style & wxBORDER_NONE ) + { + [v setBezelStyle:NSShadowlessSquareBezelStyle]; + [v setBordered:NO]; + } + else // we do have a border + { + // see trac #11128 for a thorough discussion + if ( (style & wxBORDER_MASK) == wxBORDER_RAISED ) + [v setBezelStyle:NSRegularSquareBezelStyle]; + else if ( (style & wxBORDER_MASK) == wxBORDER_SUNKEN ) + [v setBezelStyle:NSSmallSquareBezelStyle]; + else + [v setBezelStyle:NSShadowlessSquareBezelStyle]; + } +} + } // anonymous namespace wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer, wxWindowMac* WXUNUSED(parent), wxWindowID id, - const wxString& WXUNUSED(label), + const wxString& label, const wxPoint& pos, const wxSize& size, long WXUNUSED(style), @@ -144,7 +169,11 @@ wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer, NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ; wxNSButton* v = [[wxNSButton alloc] initWithFrame:r]; - if ( id == wxID_HELP ) + // We can't display a custom label inside a button with help bezel style so + // we only use it if we are using the default label. wxButton itself checks + // if the label is just "Help" in which case it discards it and passes us + // an empty string. + if ( id == wxID_HELP && label.empty() ) { [v setBezelStyle:NSHelpButtonBezelStyle]; } @@ -167,8 +196,8 @@ void wxWidgetCocoaImpl::SetDefaultButton( bool isDefault ) void wxWidgetCocoaImpl::PerformClick() { - if ([m_osxView isKindOfClass:[NSControl class]]) - [(NSControl*)m_osxView performClick:nil]; + if ([m_osxView isKindOfClass:[NSControl class]]) + [(NSControl*)m_osxView performClick:nil]; } #if wxUSE_BMPBUTTON @@ -184,33 +213,18 @@ wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer, { NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ; wxNSButton* v = [[wxNSButton alloc] initWithFrame:r]; - - // trying to get as close as possible to flags - if ( style & wxBORDER_NONE ) - { - [v setBezelStyle:NSShadowlessSquareBezelStyle]; - [v setBordered:NO]; - } - else - { - // see trac #11128 for a thorough discussion - if ( (style & wxBORDER_MASK) == wxBORDER_RAISED ) - [v setBezelStyle:NSRegularSquareBezelStyle]; - else if ( (style & wxBORDER_MASK) == wxBORDER_SUNKEN ) - [v setBezelStyle:NSSmallSquareBezelStyle]; - else - [v setBezelStyle:NSShadowlessSquareBezelStyle]; - } - + + SetBezelStyleFromBorderFlags(v, style); + if (bitmap.Ok()) [v setImage:bitmap.GetNSImage() ]; - + [v setButtonType:NSMomentaryPushInButton]; wxWidgetCocoaImpl* c = new wxButtonCocoaImpl( wxpeer, v ); return c; } -#endif +#endif // wxUSE_BMPBUTTON // // wxDisclosureButton implementation @@ -262,7 +276,6 @@ static const char * disc_triangle_xpm[] = { - (id) initWithFrame:(NSRect) frame { self = [super initWithFrame:frame]; - [self setBezelStyle:NSSmallSquareBezelStyle]; isOpen = NO; [self setImagePosition:NSImageLeft]; [self updateImage]; @@ -348,16 +361,19 @@ public : wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer, wxWindowMac* WXUNUSED(parent), - wxWindowID WXUNUSED(id), + wxWindowID WXUNUSED(winid), const wxString& label, const wxPoint& pos, const wxSize& size, - long WXUNUSED(style), + long style, long WXUNUSED(extraStyle)) { NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ; wxDisclosureNSButton* v = [[wxDisclosureNSButton alloc] initWithFrame:r]; - [v setTitle:wxCFStringRef( label).AsNSString()]; - wxDisclosureTriangleCocoaImpl* c = new wxDisclosureTriangleCocoaImpl( wxpeer, v ); - return c; + if ( !label.empty() ) + [v setTitle:wxCFStringRef(label).AsNSString()]; + + SetBezelStyleFromBorderFlags(v, style); + + return new wxDisclosureTriangleCocoaImpl( wxpeer, v ); }