X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1169a91932273bc84c23ed9dbd0a2da064d59d66..2e14066008229145e2da7b9f05a478ce38631f83:/src/motif/bmpbuttn.cpp?ds=sidebyside diff --git a/src/motif/bmpbuttn.cpp b/src/motif/bmpbuttn.cpp index 6816a08456..1246d1de9d 100644 --- a/src/motif/bmpbuttn.cpp +++ b/src/motif/bmpbuttn.cpp @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: bmpbuttn.cpp +// Name: src/motif/bmpbuttn.cpp // Purpose: wxBitmapButton // Author: Julian Smart // Modified by: @@ -9,15 +9,8 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) -#pragma implementation "bmpbuttn.h" -#endif - -#ifdef __VMS -#define XtScreen XTSCREEN -#endif - -#include "wx/defs.h" +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" #include "wx/bmpbuttn.h" @@ -37,18 +30,6 @@ void wxButtonCallback (Widget w, XtPointer clientData, XtPointer ptr); // Pixmap XCreateInsensitivePixmap( Display *display, Pixmap pixmap ); -IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton) - -wxBitmapButtonBase::wxBitmapButtonBase() - : m_bmpNormal(), - m_bmpSelected(), - m_bmpFocus(), - m_bmpDisabled(), - m_marginX(0), - m_marginY(0) -{ -} - wxBitmapButton::wxBitmapButton() { m_marginX = m_marginY = wxDEFAULT_BUTTON_MARGIN; @@ -64,9 +45,12 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, { if( !CreateControl( parent, id, pos, size, style, validator, name ) ) return false; + PreCreation(); - m_bmpNormal = m_bmpNormalOriginal = bitmap; - m_bmpSelected = m_bmpSelectedOriginal = bitmap; + m_bitmaps[State_Normal] = + m_bitmapsOriginal[State_Normal] = bitmap; + m_bitmaps[State_Pressed] = + m_bitmapsOriginal[State_Pressed] = bitmap; Widget parentWidget = (Widget) parent->GetClientWidget(); @@ -88,30 +72,27 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, xmPushButtonWidgetClass, parentWidget, #endif // See comment for wxButton::SetDefault - // XmNdefaultButtonShadowThickness, 1, + // XmNdefaultButtonShadowThickness, 1, XmNrecomputeSize, False, NULL); m_mainWidget = (WXWidget) buttonWidget; - ChangeFont(FALSE); - - ChangeBackgroundColour (); - - DoSetBitmap(); - XtAddCallback (buttonWidget, XmNactivateCallback, (XtCallbackProc) wxButtonCallback, (XtPointer) this); - wxSize best = m_bmpNormal.Ok() ? GetBestSize() : wxSize(30, 30); + wxSize best = GetBitmapLabel().IsOk() ? GetBestSize() : wxSize(30, 30); if( size.x != -1 ) best.x = size.x; if( size.y != -1 ) best.y = size.y; + PostCreation(); + OnSetBitmap(); + AttachWidget (parent, m_mainWidget, (WXWidget) NULL, pos.x, pos.y, best.x, best.y); - return TRUE; + return true; } wxBitmapButton::~wxBitmapButton() @@ -123,39 +104,18 @@ wxBitmapButton::~wxBitmapButton() (Pixmap) m_insensPixmap); } -void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap) +void wxBitmapButton::DoSetBitmap(const wxBitmap& bitmap, State which) { - m_bmpNormalOriginal = bitmap; - m_bmpNormal = bitmap; + m_bitmapsOriginal[which] = bitmap; - DoSetBitmap(); + wxBitmapButtonBase::DoSetBitmap(bitmap, which); } -void wxBitmapButton::SetBitmapSelected(const wxBitmap& sel) -{ - m_bmpSelected = sel; - m_bmpSelectedOriginal = sel; - - DoSetBitmap(); -}; - -void wxBitmapButton::SetBitmapFocus(const wxBitmap& focus) -{ - m_bmpFocus = focus; - // Not used in Motif -}; - -void wxBitmapButton::SetBitmapDisabled(const wxBitmap& disabled) +void wxBitmapButton::OnSetBitmap() { - m_bmpDisabled = disabled; - m_bmpDisabledOriginal = disabled; - - DoSetBitmap(); -}; + wxBitmapButtonBase::OnSetBitmap(); -void wxBitmapButton::DoSetBitmap() -{ - if (m_bmpNormalOriginal.Ok()) + if ( m_bitmapsOriginal[State_Normal].IsOk() ) { Pixmap pixmap = 0; Pixmap insensPixmap = 0; @@ -163,9 +123,9 @@ void wxBitmapButton::DoSetBitmap() // Must re-make the bitmap to have its transparent areas drawn // in the current widget background colour. - if (m_bmpNormalOriginal.GetMask()) + if ( m_bitmapsOriginal[State_Normal].GetMask() ) { - int backgroundPixel; + WXPixel backgroundPixel; XtVaGetValues((Widget) m_mainWidget, XmNbackground, &backgroundPixel, NULL); @@ -174,23 +134,23 @@ void wxBitmapButton::DoSetBitmap() col.SetPixel(backgroundPixel); wxBitmap newBitmap = - wxCreateMaskedBitmap(m_bmpNormalOriginal, col); - m_bmpNormal = newBitmap; - m_bitmapCache.SetBitmap( m_bmpNormal ); + wxCreateMaskedBitmap(m_bitmapsOriginal[State_Normal], col); + m_bitmaps[State_Normal] = newBitmap; + m_bitmapCache.SetBitmap( m_bitmaps[State_Normal] ); - pixmap = (Pixmap) m_bmpNormal.GetDrawable(); + pixmap = (Pixmap) m_bitmaps[State_Normal].GetDrawable(); } else { - m_bitmapCache.SetBitmap( m_bmpNormal ); + m_bitmapCache.SetBitmap( m_bitmaps[State_Normal] ); pixmap = (Pixmap) m_bitmapCache.GetLabelPixmap(m_mainWidget); } - if (m_bmpDisabledOriginal.Ok()) + if (m_bitmapsOriginal[State_Disabled].IsOk()) { - if (m_bmpDisabledOriginal.GetMask()) + if (m_bitmapsOriginal[State_Disabled].GetMask()) { - int backgroundPixel; + WXPixel backgroundPixel; XtVaGetValues((Widget) m_mainWidget, XmNbackground, &backgroundPixel, NULL); @@ -199,10 +159,10 @@ void wxBitmapButton::DoSetBitmap() col.SetPixel(backgroundPixel); wxBitmap newBitmap = - wxCreateMaskedBitmap(m_bmpDisabledOriginal, col); - m_bmpDisabled = newBitmap; + wxCreateMaskedBitmap(m_bitmapsOriginal[State_Disabled], col); + m_bitmaps[State_Disabled] = newBitmap; - insensPixmap = (Pixmap) m_bmpDisabled.GetDrawable(); + insensPixmap = (Pixmap) m_bitmaps[State_Disabled].GetDrawable(); } else insensPixmap = (Pixmap) m_bitmapCache.GetInsensPixmap(m_mainWidget); @@ -211,11 +171,11 @@ void wxBitmapButton::DoSetBitmap() insensPixmap = (Pixmap) m_bitmapCache.GetInsensPixmap(m_mainWidget); // Now make the bitmap representing the armed state - if (m_bmpSelectedOriginal.Ok()) + if (m_bitmapsOriginal[State_Pressed].IsOk()) { - if (m_bmpSelectedOriginal.GetMask()) + if (m_bitmapsOriginal[State_Pressed].GetMask()) { - int backgroundPixel; + WXPixel backgroundPixel; XtVaGetValues((Widget) m_mainWidget, XmNarmColor, &backgroundPixel, NULL); @@ -224,10 +184,10 @@ void wxBitmapButton::DoSetBitmap() col.SetPixel(backgroundPixel); wxBitmap newBitmap = - wxCreateMaskedBitmap(m_bmpSelectedOriginal, col); - m_bmpSelected = newBitmap; + wxCreateMaskedBitmap(m_bitmapsOriginal[State_Pressed], col); + m_bitmaps[State_Pressed] = newBitmap; - armPixmap = (Pixmap) m_bmpSelected.GetDrawable(); + armPixmap = (Pixmap) m_bitmaps[State_Pressed].GetDrawable(); } else armPixmap = (Pixmap) m_bitmapCache.GetArmPixmap(m_mainWidget); @@ -257,23 +217,24 @@ void wxBitmapButton::DoSetBitmap() void wxBitmapButton::ChangeBackgroundColour() { - wxDoChangeBackgroundColour(m_mainWidget, m_backgroundColour, TRUE); + wxDoChangeBackgroundColour(m_mainWidget, m_backgroundColour, true); // Must reset the bitmaps since the colours have changed. - DoSetBitmap(); + OnSetBitmap(); } wxSize wxBitmapButton::DoGetBestSize() const { wxSize ret( 30,30 ); - if (m_bmpNormal.Ok()) + if (GetBitmapLabel().IsOk()) { - int border = (GetWindowStyle() & wxNO_BORDER) ? 4 : 10; - ret.x = m_bmpNormal.GetWidth()+border; - ret.y = m_bmpNormal.GetHeight()+border; + int border = HasFlag(wxNO_BORDER) ? 4 : 10; + ret.x += border; + ret.y += border; + + ret += GetBitmapLabel().GetSize(); } return ret; } -