diff --git a/include/wx/osx/button.h b/include/wx/osx/button.h index 8959d9b142..75108eeb24 100644 --- a/include/wx/osx/button.h +++ b/include/wx/osx/button.h @@ -89,7 +89,7 @@ public: const wxString& label = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, + long style = wxBORDER_NONE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr) { @@ -101,7 +101,7 @@ public: const wxString& label = wxEmptyString, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = 0, + long style = wxBORDER_NONE, const wxValidator& validator = wxDefaultValidator, const wxString& name = wxButtonNameStr); diff --git a/src/generic/collpaneg.cpp b/src/generic/collpaneg.cpp index b032263be6..894345be6b 100644 --- a/src/generic/collpaneg.cpp +++ b/src/generic/collpaneg.cpp @@ -87,22 +87,22 @@ bool wxGenericCollapsiblePane::Create(wxWindow *parent, m_strLabel = label; -#if defined( __WXMAC__ ) && !defined(__WXUNIVERSAL__) - // on Mac we use the disclosure triangle - m_pStaticLine = NULL; - m_pButton = new wxDisclosureTriangle(this, wxID_ANY, GetBtnLabel(), - wxDefaultPosition, wxDefaultSize, - style & wxBORDER_MASK); + // sizer containing the expand button and possibly a static line m_sz = new wxBoxSizer(wxHORIZONTAL); - m_sz->Add(m_pButton, wxSizerFlags(1).Expand()); + +#if defined( __WXMAC__ ) && !defined(__WXUNIVERSAL__) + // on Mac we use the special disclosure triangle button + m_pStaticLine = NULL; + m_pButton = new wxDisclosureTriangle(this, wxID_ANY, GetBtnLabel()); + m_sz->Add(m_pButton); #else // create children and lay them out using a wxBoxSizer // (so that we automatically get RTL features) m_pButton = new wxButton(this, wxID_ANY, GetBtnLabel(), wxPoint(0, 0), wxDefaultSize, wxBU_EXACTFIT); m_pStaticLine = new wxStaticLine(this, wxID_ANY); + // on other platforms we put the static line and the button horizontally - m_sz = new wxBoxSizer(wxHORIZONTAL); m_sz->Add(m_pButton, 0, wxLEFT|wxTOP|wxBOTTOM, GetBorder()); m_sz->Add(m_pStaticLine, 1, wxALIGN_CENTER|wxLEFT|wxRIGHT, GetBorder()); #endif diff --git a/src/osx/cocoa/button.mm b/src/osx/cocoa/button.mm index 9dbcbee2da..355b77707a 100644 --- a/src/osx/cocoa/button.mm +++ b/src/osx/cocoa/button.mm @@ -130,6 +130,26 @@ private: } }; +// 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, @@ -167,8 +187,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 +204,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 +267,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 +352,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 ); }