X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1248b41f9f71110347659db8c54c75786eba23c6..926ce9e3ac32e1a33cc43420f76876fac8868436:/src/motif/button.cpp diff --git a/src/motif/button.cpp b/src/motif/button.cpp index c8bdc6af89..b5ce08a960 100644 --- a/src/motif/button.cpp +++ b/src/motif/button.cpp @@ -9,10 +9,6 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "button.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -33,20 +29,29 @@ #pragma message enable nosimpint #endif +#include "wx/stockitem.h" #include "wx/motif/private.h" +#include "wx/sysopt.h" void wxButtonCallback (Widget w, XtPointer clientData, XtPointer ptr); IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl) +#define MIN_WIDTH 78 +#define MIN_LARGE_HEIGHT 30 + // Button -bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& label, +bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& lbl, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { + wxString label(lbl); + if (label.empty() && wxIsStockID(id)) + label = wxGetStockLabel(id); + if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; @@ -67,7 +72,7 @@ bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& label, m_mainWidget = (WXWidget) XtVaCreateManagedWidget ("button", xmPushButtonWidgetClass, parentWidget, - wxFont::GetFontTag(), m_font.GetFontType(XtDisplay(parentWidget)), + wxFont::GetFontTag(), m_font.GetFontTypeC(XtDisplay(parentWidget)), XmNlabelString, text(), XmNrecomputeSize, False, // See comment for wxButton::SetDefault @@ -87,7 +92,7 @@ bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& label, ChangeBackgroundColour(); - return TRUE; + return true; } void wxButton::SetDefaultShadowThicknessAndResize() @@ -114,6 +119,7 @@ void wxButton::SetDefaultShadowThicknessAndResize() if( best != actual ) SetSize( best ); #endif + InvalidateBestSize(); } @@ -144,15 +150,49 @@ void wxButton::SetDefault() NULL); } +static inline bool wxMotifLargeButtons() +{ + return wxSystemOptions::HasOption("motif.largebuttons") + && wxSystemOptions::GetOptionInt("motif.largebuttons") != 0; +} + /* static */ wxSize wxButton::GetDefaultSize() { // TODO: check font size as in wxMSW ? MB // Note: this is the button size (text + margin + shadow + defaultBorder) - return wxSize(78,30); + return wxSize( MIN_WIDTH, MIN_LARGE_HEIGHT ); } wxSize wxButton::DoGetBestSize() const +{ + if( wxMotifLargeButtons() ) + return OldGetBestSize(); + + wxSize best = wxControl::DoGetBestSize(); + + if( HasFlag( wxBU_EXACTFIT ) ) + return best; + else if( best.x < MIN_WIDTH ) + best.x = MIN_WIDTH; + + return best; +} + +wxSize wxButton::GetMinSize() const +{ + if( wxMotifLargeButtons() ) + return OldGetMinSize(); + + return DoGetBestSize(); +} + +wxSize wxButton::OldGetMinSize() const +{ + return OldGetBestSize(); +} + +wxSize wxButton::OldGetBestSize() const { Dimension xmargin, ymargin, highlight, shadow, defThickness; @@ -169,6 +209,7 @@ wxSize wxButton::DoGetBestSize() const int margin = highlight * 2 + ( defThickness ? ( ( shadow + defThickness ) * 4 ) : ( shadow * 2 ) ); + wxSize best( x + xmargin * 2 + margin, y + ymargin * 2 + margin );