Improve wxCollapsiblePane appearance under OS X.
By default, don't use border in wxDisclosureTriangle because the native applications do not. However do honour wxBORDER_XXX style if specified in case this becomes useful in the future (this required no effort as the code was already there for bitmap buttons and just had to be extracted into a reusable function). Don't expand the disclosure triangle in wxCollapsiblePane sizer, as this resulted in the text being centered instead of remaining left-aligned. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62431 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -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);
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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,
|
||||
@@ -185,22 +205,7 @@ 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() ];
|
||||
@@ -210,7 +215,7 @@ wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
|
||||
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];
|
||||
if ( !label.empty() )
|
||||
[v setTitle:wxCFStringRef(label).AsNSString()];
|
||||
wxDisclosureTriangleCocoaImpl* c = new wxDisclosureTriangleCocoaImpl( wxpeer, v );
|
||||
return c;
|
||||
|
||||
SetBezelStyleFromBorderFlags(v, style);
|
||||
|
||||
return new wxDisclosureTriangleCocoaImpl( wxpeer, v );
|
||||
}
|
||||
|
Reference in New Issue
Block a user