No real change, just make bezel setting code in wxOSX more clear.
Avoid code duplication between SetAcceleratorFromLabel() and wxWidgetImpl::CreateButton(), generalize the former to handle the special cases taken into account only in the latter previously. Also use a switch on border flags instead of series of nested ifs as this seems to be more clear. No changes in behaviour. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72884 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -215,34 +215,71 @@ void wxButton::OSXSetAcceleratorFromLabel(const wxString& label)
|
|||||||
impl->SetAcceleratorFromLabel(label);
|
impl->SetAcceleratorFromLabel(label);
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" void SetBezelStyleFromBorderFlags(NSButton *v, long style);
|
// Set bezel style depending on the wxBORDER_XXX flags specified by the style
|
||||||
|
// and also accounting for the label (bezels are different for multiline
|
||||||
// set bezel style depending on the wxBORDER_XXX flags specified by the style
|
// buttons and normal ones) and the ID (special bezel is used for help button).
|
||||||
void SetBezelStyleFromBorderFlags(NSButton *v, long style)
|
//
|
||||||
|
// This is extern because it's also used in src/osx/cocoa/tglbtn.mm.
|
||||||
|
extern "C"
|
||||||
|
void
|
||||||
|
SetBezelStyleFromBorderFlags(NSButton *v,
|
||||||
|
long style,
|
||||||
|
wxWindowID winid,
|
||||||
|
const wxString& label = wxString())
|
||||||
{
|
{
|
||||||
if ( style & wxBORDER_NONE )
|
// 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 ( winid == wxID_HELP && label.empty() )
|
||||||
{
|
{
|
||||||
[v setBezelStyle:NSShadowlessSquareBezelStyle];
|
[v setBezelStyle:NSHelpButtonBezelStyle];
|
||||||
[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 if ( (style & wxBORDER_MASK) == wxBORDER_SIMPLE )
|
|
||||||
[v setBezelStyle:NSShadowlessSquareBezelStyle];
|
|
||||||
else
|
else
|
||||||
[v setBezelStyle:NSRegularSquareBezelStyle];
|
{
|
||||||
|
// We can't use rounded bezel styles for multiline buttons as they are
|
||||||
|
// only meant to be used at certain sizes, so the style used depends on
|
||||||
|
// whether the label is single or multi line.
|
||||||
|
const bool isSingleLine = label.find_first_of("\n\r") == wxString::npos;
|
||||||
|
|
||||||
|
NSBezelStyle bezel;
|
||||||
|
switch ( style & wxBORDER_MASK )
|
||||||
|
{
|
||||||
|
case wxBORDER_NONE:
|
||||||
|
bezel = NSShadowlessSquareBezelStyle;
|
||||||
|
[v setBordered:NO];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxBORDER_SIMPLE:
|
||||||
|
bezel = NSShadowlessSquareBezelStyle;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxBORDER_SUNKEN:
|
||||||
|
bezel = isSingleLine ? NSTexturedRoundedBezelStyle
|
||||||
|
: NSSmallSquareBezelStyle;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
wxFAIL_MSG( "Unknown border style" );
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
case 0:
|
||||||
|
case wxBORDER_STATIC:
|
||||||
|
case wxBORDER_RAISED:
|
||||||
|
case wxBORDER_THEME:
|
||||||
|
bezel = isSingleLine ? NSRoundedBezelStyle
|
||||||
|
: NSRegularSquareBezelStyle;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
[v setBezelStyle:bezel];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
|
wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
|
||||||
wxWindowMac* WXUNUSED(parent),
|
wxWindowMac* WXUNUSED(parent),
|
||||||
wxWindowID id,
|
wxWindowID winid,
|
||||||
const wxString& label,
|
const wxString& label,
|
||||||
const wxPoint& pos,
|
const wxPoint& pos,
|
||||||
const wxSize& size,
|
const wxSize& size,
|
||||||
@@ -252,50 +289,7 @@ wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer,
|
|||||||
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
|
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
|
||||||
wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
|
wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
|
||||||
|
|
||||||
// We can't display a custom label inside a button with help bezel style so
|
SetBezelStyleFromBorderFlags(v, style, winid, label);
|
||||||
// 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];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( style & wxBORDER_NONE )
|
|
||||||
{
|
|
||||||
[v setBezelStyle:NSShadowlessSquareBezelStyle];
|
|
||||||
[v setBordered:NO];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// the following styles only exist for certain sizes, so avoid them for
|
|
||||||
// multi-line
|
|
||||||
if ( label.Find('\n' ) == wxNOT_FOUND && label.Find('\r' ) == wxNOT_FOUND)
|
|
||||||
{
|
|
||||||
if ( (style & wxBORDER_MASK) == wxBORDER_RAISED )
|
|
||||||
[v setBezelStyle:NSRoundedBezelStyle];
|
|
||||||
else if ( (style & wxBORDER_MASK) == wxBORDER_SUNKEN )
|
|
||||||
[v setBezelStyle:NSTexturedRoundedBezelStyle];
|
|
||||||
else if ( (style & wxBORDER_MASK) == wxBORDER_SIMPLE )
|
|
||||||
[v setBezelStyle:NSShadowlessSquareBezelStyle];
|
|
||||||
else
|
|
||||||
[v setBezelStyle:NSRoundedBezelStyle];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( (style & wxBORDER_MASK) == wxBORDER_RAISED )
|
|
||||||
[v setBezelStyle:NSRegularSquareBezelStyle];
|
|
||||||
else if ( (style & wxBORDER_MASK) == wxBORDER_SUNKEN )
|
|
||||||
[v setBezelStyle:NSSmallSquareBezelStyle];
|
|
||||||
else if ( (style & wxBORDER_MASK) == wxBORDER_SIMPLE )
|
|
||||||
[v setBezelStyle:NSShadowlessSquareBezelStyle];
|
|
||||||
else
|
|
||||||
[v setBezelStyle:NSRegularSquareBezelStyle];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
[v setButtonType:NSMomentaryPushInButton];
|
[v setButtonType:NSMomentaryPushInButton];
|
||||||
wxButtonCocoaImpl* const impl = new wxButtonCocoaImpl( wxpeer, v );
|
wxButtonCocoaImpl* const impl = new wxButtonCocoaImpl( wxpeer, v );
|
||||||
@@ -327,7 +321,7 @@ void wxWidgetCocoaImpl::PerformClick()
|
|||||||
|
|
||||||
wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
|
wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
|
||||||
wxWindowMac* WXUNUSED(parent),
|
wxWindowMac* WXUNUSED(parent),
|
||||||
wxWindowID WXUNUSED(id),
|
wxWindowID winid,
|
||||||
const wxBitmap& bitmap,
|
const wxBitmap& bitmap,
|
||||||
const wxPoint& pos,
|
const wxPoint& pos,
|
||||||
const wxSize& size,
|
const wxSize& size,
|
||||||
@@ -337,7 +331,7 @@ wxWidgetImplType* wxWidgetImpl::CreateBitmapButton( wxWindowMac* wxpeer,
|
|||||||
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
|
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
|
||||||
wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
|
wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
|
||||||
|
|
||||||
SetBezelStyleFromBorderFlags(v, style);
|
SetBezelStyleFromBorderFlags(v, style, winid);
|
||||||
|
|
||||||
if (bitmap.IsOk())
|
if (bitmap.IsOk())
|
||||||
[v setImage:bitmap.GetNSImage() ];
|
[v setImage:bitmap.GetNSImage() ];
|
||||||
@@ -484,7 +478,7 @@ public :
|
|||||||
|
|
||||||
wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer,
|
wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer,
|
||||||
wxWindowMac* WXUNUSED(parent),
|
wxWindowMac* WXUNUSED(parent),
|
||||||
wxWindowID WXUNUSED(winid),
|
wxWindowID winid,
|
||||||
const wxString& label,
|
const wxString& label,
|
||||||
const wxPoint& pos,
|
const wxPoint& pos,
|
||||||
const wxSize& size,
|
const wxSize& size,
|
||||||
@@ -496,7 +490,7 @@ wxWidgetImplType* wxWidgetImpl::CreateDisclosureTriangle( wxWindowMac* wxpeer,
|
|||||||
if ( !label.empty() )
|
if ( !label.empty() )
|
||||||
[v setTitle:wxCFStringRef(label).AsNSString()];
|
[v setTitle:wxCFStringRef(label).AsNSString()];
|
||||||
|
|
||||||
SetBezelStyleFromBorderFlags(v, style);
|
SetBezelStyleFromBorderFlags(v, style, winid, label);
|
||||||
|
|
||||||
return new wxDisclosureTriangleCocoaImpl( wxpeer, v );
|
return new wxDisclosureTriangleCocoaImpl( wxpeer, v );
|
||||||
}
|
}
|
||||||
|
@@ -27,12 +27,15 @@
|
|||||||
|
|
||||||
// from button.mm
|
// from button.mm
|
||||||
|
|
||||||
extern "C" void SetBezelStyleFromBorderFlags(NSButton *v, long style);
|
extern "C" void SetBezelStyleFromBorderFlags(NSButton *v,
|
||||||
|
long style,
|
||||||
|
wxWindowID winid = wxID_ANY,
|
||||||
|
const wxString& label = wxString());
|
||||||
|
|
||||||
wxWidgetImplType* wxWidgetImpl::CreateToggleButton( wxWindowMac* wxpeer,
|
wxWidgetImplType* wxWidgetImpl::CreateToggleButton( wxWindowMac* wxpeer,
|
||||||
wxWindowMac* WXUNUSED(parent),
|
wxWindowMac* WXUNUSED(parent),
|
||||||
wxWindowID WXUNUSED(id),
|
wxWindowID winid,
|
||||||
const wxString& WXUNUSED(label),
|
const wxString& label,
|
||||||
const wxPoint& pos,
|
const wxPoint& pos,
|
||||||
const wxSize& size,
|
const wxSize& size,
|
||||||
long style,
|
long style,
|
||||||
@@ -41,7 +44,7 @@ wxWidgetImplType* wxWidgetImpl::CreateToggleButton( wxWindowMac* wxpeer,
|
|||||||
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
|
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
|
||||||
wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
|
wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
|
||||||
|
|
||||||
SetBezelStyleFromBorderFlags(v, style);
|
SetBezelStyleFromBorderFlags(v, style, winid, label);
|
||||||
|
|
||||||
[v setButtonType:NSOnOffButton];
|
[v setButtonType:NSOnOffButton];
|
||||||
wxWidgetCocoaImpl* c = new wxButtonCocoaImpl( wxpeer, v );
|
wxWidgetCocoaImpl* c = new wxButtonCocoaImpl( wxpeer, v );
|
||||||
@@ -50,7 +53,7 @@ wxWidgetImplType* wxWidgetImpl::CreateToggleButton( wxWindowMac* wxpeer,
|
|||||||
|
|
||||||
wxWidgetImplType* wxWidgetImpl::CreateBitmapToggleButton( wxWindowMac* wxpeer,
|
wxWidgetImplType* wxWidgetImpl::CreateBitmapToggleButton( wxWindowMac* wxpeer,
|
||||||
wxWindowMac* WXUNUSED(parent),
|
wxWindowMac* WXUNUSED(parent),
|
||||||
wxWindowID WXUNUSED(id),
|
wxWindowID winid,
|
||||||
const wxBitmap& label,
|
const wxBitmap& label,
|
||||||
const wxPoint& pos,
|
const wxPoint& pos,
|
||||||
const wxSize& size,
|
const wxSize& size,
|
||||||
@@ -60,7 +63,7 @@ wxWidgetImplType* wxWidgetImpl::CreateBitmapToggleButton( wxWindowMac* wxpeer,
|
|||||||
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
|
NSRect r = wxOSXGetFrameForControl( wxpeer, pos , size ) ;
|
||||||
wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
|
wxNSButton* v = [[wxNSButton alloc] initWithFrame:r];
|
||||||
|
|
||||||
SetBezelStyleFromBorderFlags(v, style);
|
SetBezelStyleFromBorderFlags(v, style, winid);
|
||||||
|
|
||||||
if (label.IsOk())
|
if (label.IsOk())
|
||||||
[v setImage:label.GetNSImage() ];
|
[v setImage:label.GetNSImage() ];
|
||||||
|
Reference in New Issue
Block a user