X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/5f7bcb48fd9a642036a3bf5c70e2b0c9576df1b1..13b4df952c77383f50696e51fcbaa2d8bbd3b3b9:/src/motif/button.cpp?ds=sidebyside diff --git a/src/motif/button.cpp b/src/motif/button.cpp index 93189fd2a7..9df9eab55c 100644 --- a/src/motif/button.cpp +++ b/src/motif/button.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: button.cpp +// Name: src/motif/button.cpp // Purpose: wxButton // Author: Julian Smart // Modified by: @@ -9,19 +9,9 @@ // 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" -#ifdef __VMS -#define XtDisplay XTDISPLAY -#endif - -#include "wx/defs.h" - #include "wx/button.h" #ifdef __VMS__ @@ -33,14 +23,17 @@ #pragma message enable nosimpint #endif + +#ifndef WX_PRECOMP + #include "wx/toplevel.h" +#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 @@ -55,12 +48,12 @@ bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& lbl, wxString label(lbl); if (label.empty() && wxIsStockID(id)) label = wxGetStockLabel(id); - + if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; + PreCreation(); - wxString label1(wxStripMenuCodes(label)); - wxXmString text( label1 ); + wxXmString text( GetLabelText(label) ); Widget parentWidget = (Widget) parent->GetClientWidget(); @@ -76,11 +69,11 @@ bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& lbl, 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 - // XmNdefaultButtonShadowThickness, 1, + // XmNdefaultButtonShadowThickness, 1, NULL); XtAddCallback ((Widget) m_mainWidget, @@ -91,11 +84,10 @@ bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString& lbl, if( size.x != -1 ) best.x = size.x; if( size.y != -1 ) best.y = size.y; + PostCreation(); AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, best.x, best.y); - ChangeBackgroundColour(); - return true; } @@ -123,14 +115,13 @@ void wxButton::SetDefaultShadowThicknessAndResize() if( best != actual ) SetSize( best ); #endif + InvalidateBestSize(); } -void wxButton::SetDefault() +wxWindow *wxButton::SetDefault() { - wxWindow *parent = GetParent(); - if ( parent ) - parent->SetDefaultItem(this); + wxWindow *oldDefault = wxButtonBase::SetDefault(); // We initially do not set XmNdefaultShadowThickness, to have // small buttons. Unfortunately, buttons are now mis-aligned. We @@ -139,6 +130,7 @@ void wxButton::SetDefault() // wxButton in the same row, correction is straighforward: we set // resource for all wxButton in this parent (but not sub panels) + wxWindow *parent = GetParent(); for (wxWindowList::compatibility_iterator node = parent->GetChildren().GetFirst (); node; node = node->GetNext ()) { @@ -151,6 +143,8 @@ void wxButton::SetDefault() XtVaSetValues ((Widget) parent->GetMainWidget(), XmNdefaultButton, (Widget) GetMainWidget(), NULL); + + return oldDefault; } static inline bool wxMotifLargeButtons() @@ -182,6 +176,19 @@ wxSize wxButton::DoGetBestSize() const 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; @@ -199,6 +206,7 @@ wxSize wxButton::OldGetBestSize() const int margin = highlight * 2 + ( defThickness ? ( ( shadow + defThickness ) * 4 ) : ( shadow * 2 ) ); + wxSize best( x + xmargin * 2 + margin, y + ymargin * 2 + margin );