X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/4b5f3fe655deeb91d5d3abe8fad30c4a1cae63dc..5e3841bf8069fbcc2b1da3ef36af4f569c604265:/src/motif/bmpbuttn.cpp diff --git a/src/motif/bmpbuttn.cpp b/src/motif/bmpbuttn.cpp index 2be27c9439..54d735b856 100644 --- a/src/motif/bmpbuttn.cpp +++ b/src/motif/bmpbuttn.cpp @@ -6,17 +6,29 @@ // Created: 17/09/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifdef __GNUG__ #pragma implementation "bmpbuttn.h" #endif +#ifdef __VMS +#define XtScreen XTSCREEN +#endif + +#include "wx/defs.h" + #include "wx/bmpbuttn.h" +#ifdef __VMS__ +#pragma message disable nosimpint +#endif #include #include +#ifdef __VMS__ +#pragma message enable nosimpint +#endif #include "wx/motif/private.h" @@ -25,9 +37,7 @@ void wxButtonCallback (Widget w, XtPointer clientData, XtPointer ptr); Pixmap XCreateInsensitivePixmap( Display *display, Pixmap pixmap ); -#if !USE_SHARED_LIBRARY IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton) -#endif wxBitmapButton::wxBitmapButton() { @@ -36,10 +46,10 @@ wxBitmapButton::wxBitmapButton() } bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, - const wxPoint& pos, - const wxSize& size, long style, - const wxValidator& validator, - const wxString& name) + const wxPoint& pos, + const wxSize& size, long style, + const wxValidator& validator, + const wxString& name) { m_buttonBitmap = bitmap; m_buttonBitmapOriginal = bitmap; @@ -56,10 +66,12 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit m_marginX = 0; m_marginY = 0; + /* int x = pos.x; int y = pos.y; int width = size.x; int height = size.y; + */ if (id == -1) m_windowId = NewControlId(); @@ -68,29 +80,29 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit Widget parentWidget = (Widget) parent->GetClientWidget(); - /* - * Patch Note (important) - * There is no major reason to put a defaultButtonThickness here. - * Not requesting it give the ability to put wxButton with a spacing - * as small as requested. However, if some button become a DefaultButton, - * other buttons are no more aligned -- This is why we set - * defaultButtonThickness of ALL buttons belonging to the same wxPanel, - * in the ::SetDefaultButton method. - */ + /* + * Patch Note (important) + * There is no major reason to put a defaultButtonThickness here. + * Not requesting it give the ability to put wxButton with a spacing + * as small as requested. However, if some button become a DefaultButton, + * other buttons are no more aligned -- This is why we set + * defaultButtonThickness of ALL buttons belonging to the same wxPanel, + * in the ::SetDefaultButton method. + */ Widget buttonWidget = XtVaCreateManagedWidget ("button", - // Gadget causes problems for default button operation. + // Gadget causes problems for default button operation. #if wxUSE_GADGETS - xmPushButtonGadgetClass, parentWidget, + xmPushButtonGadgetClass, parentWidget, #else - xmPushButtonWidgetClass, parentWidget, + xmPushButtonWidgetClass, parentWidget, #endif -// XmNdefaultButtonShadowThickness, 1, // See comment for wxButton::SetDefault - NULL); + // XmNdefaultButtonShadowThickness, 1, // See comment for wxButton::SetDefault + NULL); m_mainWidget = (WXWidget) buttonWidget; - m_windowFont = parent->GetFont(); + m_font = parent->GetFont(); ChangeFont(FALSE); ChangeBackgroundColour (); @@ -98,10 +110,22 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit DoSetBitmap(); XtAddCallback (buttonWidget, XmNactivateCallback, (XtCallbackProc) wxButtonCallback, - (XtPointer) this); + (XtPointer) this); SetCanAddEventHandler(TRUE); - AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, size.x, size.y); + + wxSize newSize = size; + + if (m_buttonBitmap.Ok()) + { + int border = (style & wxNO_BORDER) ? 4 : 10; + if (newSize.x == -1) + newSize.x = m_buttonBitmap.GetWidth()+border; + if (newSize.y == -1) + newSize.y = m_buttonBitmap.GetHeight()+border; + } + + AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, newSize.x, newSize.y); return TRUE; } @@ -158,11 +182,11 @@ void wxBitmapButton::DoSetBitmap() { int backgroundPixel; XtVaGetValues((Widget) m_mainWidget, XmNbackground, &backgroundPixel, - NULL); + NULL); wxColour col; col.SetPixel(backgroundPixel); - + wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapOriginal, col); m_buttonBitmap = newBitmap; @@ -177,11 +201,11 @@ void wxBitmapButton::DoSetBitmap() { int backgroundPixel; XtVaGetValues((Widget) m_mainWidget, XmNbackground, &backgroundPixel, - NULL); + NULL); wxColour col; col.SetPixel(backgroundPixel); - + wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapDisabledOriginal, col); m_buttonBitmapDisabled = newBitmap; @@ -200,21 +224,21 @@ void wxBitmapButton::DoSetBitmap() { int backgroundPixel; XtVaGetValues((Widget) m_mainWidget, XmNarmColor, &backgroundPixel, - NULL); + NULL); wxColour col; col.SetPixel(backgroundPixel); - + wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapSelectedOriginal, col); m_buttonBitmapSelected = newBitmap; armPixmap = (Pixmap) m_buttonBitmapSelected.GetPixmap(); } else - armPixmap = (Pixmap) m_buttonBitmap.GetArmPixmap(m_mainWidget); + armPixmap = (Pixmap) m_buttonBitmap.GetArmPixmap(m_mainWidget); } else - armPixmap = (Pixmap) m_buttonBitmap.GetArmPixmap(m_mainWidget); + armPixmap = (Pixmap) m_buttonBitmap.GetArmPixmap(m_mainWidget); if (insensPixmap == pixmap) // <- the Get...Pixmap()-functions return the same pixmap! { @@ -237,7 +261,7 @@ void wxBitmapButton::DoSetBitmap() XtVaSetValues ((Widget) m_mainWidget, XmNlabelType, XmSTRING, XmNlabelPixmap, XmUNSPECIFIED_PIXMAP, - XmNlabelInsensitivePixmap, XmUNSPECIFIED_PIXMAP, + XmNlabelInsensitivePixmap, XmUNSPECIFIED_PIXMAP, XmNarmPixmap, XmUNSPECIFIED_PIXMAP, NULL); } @@ -250,3 +274,23 @@ void wxBitmapButton::ChangeBackgroundColour() // Must reset the bitmaps since the colours have changed. DoSetBitmap(); } + +wxSize wxBitmapButton::DoGetBestSize() const +{ + wxSize ret( 30,30 ); + + if (m_buttonBitmap.Ok()) + { + int border = (GetWindowStyle() & wxNO_BORDER) ? 4 : 10; + ret.x = m_buttonBitmap.GetWidth()+border; + ret.y = m_buttonBitmap.GetHeight()+border; + } + + if (!HasFlag(wxBU_EXACTFIT)) + { + if (ret.x < 80) ret.x = 80; + } + + return ret; +} +