From ea9868e8d269fa4a72b6af725b048a7eb4fb8728 Mon Sep 17 00:00:00 2001 From: Mattia Barbon Date: Sun, 16 Mar 2003 08:50:21 +0000 Subject: [PATCH] Derive wxBitmapButton from wxBitmapButtonBase + misc cleanup. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@19580 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/motif/bmpbuttn.h | 30 ++------ src/motif/bmpbuttn.cpp | 144 ++++++++++++++++-------------------- 2 files changed, 70 insertions(+), 104 deletions(-) diff --git a/include/wx/motif/bmpbuttn.h b/include/wx/motif/bmpbuttn.h index d385c6ac69..8ce933170d 100644 --- a/include/wx/motif/bmpbuttn.h +++ b/include/wx/motif/bmpbuttn.h @@ -16,20 +16,17 @@ #pragma interface "bmpbuttn.h" #endif -#include "wx/button.h" -#include "wx/bitmap.h" - WXDLLEXPORT_DATA(extern const char*) wxButtonNameStr; #define wxDEFAULT_BUTTON_MARGIN 4 -class WXDLLEXPORT wxBitmapButton: public wxButton +class WXDLLEXPORT wxBitmapButton: public wxBitmapButtonBase { DECLARE_DYNAMIC_CLASS(wxBitmapButton) public: wxBitmapButton(); ~wxBitmapButton(); - inline wxBitmapButton(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, + wxBitmapButton(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxBU_AUTODRAW, const wxValidator& validator = wxDefaultValidator, @@ -55,38 +52,21 @@ public: virtual void SetBitmapLabel(const wxBitmap& bitmap); - inline wxBitmap& GetBitmapLabel() const { return (wxBitmap&) m_buttonBitmap; } - inline wxBitmap& GetBitmapSelected() const { return (wxBitmap&) m_buttonBitmapSelected; } - inline wxBitmap& GetBitmapFocus() const { return (wxBitmap&) m_buttonBitmapFocus; } - inline wxBitmap& GetBitmapDisabled() const { return (wxBitmap&) m_buttonBitmapDisabled; } - void SetBitmapSelected(const wxBitmap& sel); void SetBitmapFocus(const wxBitmap& focus); void SetBitmapDisabled(const wxBitmap& disabled); - inline void SetMargins(int x, int y) { m_marginX = x; m_marginY = y; } - inline int GetMarginX() { return m_marginX; } - inline int GetMarginY() { return m_marginY; } - // Implementation void DoSetBitmap(); virtual void ChangeBackgroundColour(); virtual wxSize DoGetBestSize() const; protected: - wxBitmap m_buttonBitmapFocus; - wxBitmap m_buttonBitmap; - wxBitmap m_buttonBitmapOriginal; // May be different from m_buttonBitmap + wxBitmap m_bmpNormalOriginal; // May be different from m_buttonBitmap // if m_buttonBitmap has been changed // to reflect button background colour - wxBitmap m_buttonBitmapSelected; - wxBitmap m_buttonBitmapSelectedOriginal; - - wxBitmap m_buttonBitmapDisabled; - wxBitmap m_buttonBitmapDisabledOriginal; - - int m_marginX; - int m_marginY; + wxBitmap m_bmpSelectedOriginal; + wxBitmap m_bmpDisabledOriginal; WXPixmap m_insensPixmap; }; diff --git a/src/motif/bmpbuttn.cpp b/src/motif/bmpbuttn.cpp index 54d735b856..3bb0990002 100644 --- a/src/motif/bmpbuttn.cpp +++ b/src/motif/bmpbuttn.cpp @@ -41,30 +41,22 @@ IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton) wxBitmapButton::wxBitmapButton() { - m_marginX = wxDEFAULT_BUTTON_MARGIN; m_marginY = wxDEFAULT_BUTTON_MARGIN; + m_marginX = m_marginY = wxDEFAULT_BUTTON_MARGIN; m_insensPixmap = (WXPixmap) 0; } -bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bitmap, +bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, + const wxBitmap& bitmap, const wxPoint& pos, const wxSize& size, long style, const wxValidator& validator, const wxString& name) { - m_buttonBitmap = bitmap; - m_buttonBitmapOriginal = bitmap; - m_buttonBitmapSelected = bitmap; - m_buttonBitmapSelectedOriginal = bitmap; + if( !CreateControl( parent, id, pos, size, style, validator, name ) ) + return false; - SetName(name); - SetValidator(validator); - parent->AddChild(this); - - m_backgroundColour = parent->GetBackgroundColour() ; - m_foregroundColour = parent->GetForegroundColour() ; - m_windowStyle = style; - m_marginX = 0; - m_marginY = 0; + m_bmpNormal = m_bmpNormalOriginal = bitmap; + m_bmpSelected = m_bmpSelectedOriginal = bitmap; /* int x = pos.x; @@ -73,11 +65,6 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit int height = size.y; */ - if (id == -1) - m_windowId = NewControlId(); - else - m_windowId = id; - Widget parentWidget = (Widget) parent->GetClientWidget(); /* @@ -97,35 +84,31 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, const wxBitmap& bit #else xmPushButtonWidgetClass, parentWidget, #endif - // XmNdefaultButtonShadowThickness, 1, // See comment for wxButton::SetDefault + // See comment for wxButton::SetDefault + // XmNdefaultButtonShadowThickness, 1, + XmNrecomputeSize, False, NULL); m_mainWidget = (WXWidget) buttonWidget; - m_font = parent->GetFont(); ChangeFont(FALSE); ChangeBackgroundColour (); DoSetBitmap(); - XtAddCallback (buttonWidget, XmNactivateCallback, (XtCallbackProc) wxButtonCallback, - (XtPointer) this); + XtAddCallback (buttonWidget, + XmNactivateCallback, (XtCallbackProc) wxButtonCallback, + (XtPointer) this); SetCanAddEventHandler(TRUE); - 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); + wxSize best = m_bmpNormal.Ok() ? GetBestSize() : wxSize(30, 30); + if( size.x != -1 ) best.x = size.x; + if( size.y != -1 ) best.y = size.y; + + AttachWidget (parent, m_mainWidget, (WXWidget) NULL, + pos.x, pos.y, best.x, best.y); return TRUE; } @@ -135,42 +118,43 @@ wxBitmapButton::~wxBitmapButton() SetBitmapLabel(wxNullBitmap); if (m_insensPixmap) - XmDestroyPixmap (DefaultScreenOfDisplay ((Display*) GetXDisplay()), (Pixmap) m_insensPixmap); + XmDestroyPixmap (DefaultScreenOfDisplay ((Display*) GetXDisplay()), + (Pixmap) m_insensPixmap); } void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap) { - m_buttonBitmapOriginal = bitmap; - m_buttonBitmap = bitmap; + m_bmpNormalOriginal = bitmap; + m_bmpNormal = bitmap; DoSetBitmap(); } void wxBitmapButton::SetBitmapSelected(const wxBitmap& sel) { - m_buttonBitmapSelected = sel; - m_buttonBitmapSelectedOriginal = sel; + m_bmpSelected = sel; + m_bmpSelectedOriginal = sel; DoSetBitmap(); }; void wxBitmapButton::SetBitmapFocus(const wxBitmap& focus) { - m_buttonBitmapFocus = focus; + m_bmpFocus = focus; // Not used in Motif }; void wxBitmapButton::SetBitmapDisabled(const wxBitmap& disabled) { - m_buttonBitmapDisabled = disabled; - m_buttonBitmapDisabledOriginal = disabled; + m_bmpDisabled = disabled; + m_bmpDisabledOriginal = disabled; DoSetBitmap(); }; void wxBitmapButton::DoSetBitmap() { - if (m_buttonBitmapOriginal.Ok()) + if (m_bmpNormalOriginal.Ok()) { Pixmap pixmap = 0; Pixmap insensPixmap = 0; @@ -178,69 +162,76 @@ void wxBitmapButton::DoSetBitmap() // Must re-make the bitmap to have its transparent areas drawn // in the current widget background colour. - if (m_buttonBitmapOriginal.GetMask()) + if (m_bmpNormalOriginal.GetMask()) { int backgroundPixel; - XtVaGetValues((Widget) m_mainWidget, XmNbackground, &backgroundPixel, - NULL); + XtVaGetValues((Widget) m_mainWidget, + XmNbackground, &backgroundPixel, + NULL); wxColour col; col.SetPixel(backgroundPixel); - wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapOriginal, col); - m_buttonBitmap = newBitmap; + wxBitmap newBitmap = + wxCreateMaskedBitmap(m_bmpNormalOriginal, col); + m_bmpNormal = newBitmap; - pixmap = (Pixmap) m_buttonBitmap.GetPixmap(); + pixmap = (Pixmap) m_bmpNormal.GetPixmap(); } else - pixmap = (Pixmap) m_buttonBitmap.GetLabelPixmap(m_mainWidget); + pixmap = (Pixmap) m_bmpNormal.GetLabelPixmap(m_mainWidget); - if (m_buttonBitmapDisabledOriginal.Ok()) + if (m_bmpDisabledOriginal.Ok()) { - if (m_buttonBitmapDisabledOriginal.GetMask()) + if (m_bmpDisabledOriginal.GetMask()) { int backgroundPixel; - XtVaGetValues((Widget) m_mainWidget, XmNbackground, &backgroundPixel, - NULL); + XtVaGetValues((Widget) m_mainWidget, + XmNbackground, &backgroundPixel, + NULL); wxColour col; col.SetPixel(backgroundPixel); - wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapDisabledOriginal, col); - m_buttonBitmapDisabled = newBitmap; + wxBitmap newBitmap = + wxCreateMaskedBitmap(m_bmpDisabledOriginal, col); + m_bmpDisabled = newBitmap; - insensPixmap = (Pixmap) m_buttonBitmapDisabled.GetPixmap(); + insensPixmap = (Pixmap) m_bmpDisabled.GetPixmap(); } else - insensPixmap = (Pixmap) m_buttonBitmap.GetInsensPixmap(m_mainWidget); + insensPixmap = (Pixmap) m_bmpNormal.GetInsensPixmap(m_mainWidget); } else - insensPixmap = (Pixmap) m_buttonBitmap.GetInsensPixmap(m_mainWidget); + insensPixmap = (Pixmap) m_bmpNormal.GetInsensPixmap(m_mainWidget); // Now make the bitmap representing the armed state - if (m_buttonBitmapSelectedOriginal.Ok()) + if (m_bmpSelectedOriginal.Ok()) { - if (m_buttonBitmapSelectedOriginal.GetMask()) + if (m_bmpSelectedOriginal.GetMask()) { int backgroundPixel; - XtVaGetValues((Widget) m_mainWidget, XmNarmColor, &backgroundPixel, - NULL); + XtVaGetValues((Widget) m_mainWidget, + XmNarmColor, &backgroundPixel, + NULL); wxColour col; col.SetPixel(backgroundPixel); - wxBitmap newBitmap = wxCreateMaskedBitmap(m_buttonBitmapSelectedOriginal, col); - m_buttonBitmapSelected = newBitmap; + wxBitmap newBitmap = + wxCreateMaskedBitmap(m_bmpSelectedOriginal, col); + m_bmpSelected = newBitmap; - armPixmap = (Pixmap) m_buttonBitmapSelected.GetPixmap(); + armPixmap = (Pixmap) m_bmpSelected.GetPixmap(); } else - armPixmap = (Pixmap) m_buttonBitmap.GetArmPixmap(m_mainWidget); + armPixmap = (Pixmap) m_bmpNormal.GetArmPixmap(m_mainWidget); } else - armPixmap = (Pixmap) m_buttonBitmap.GetArmPixmap(m_mainWidget); + armPixmap = (Pixmap) m_bmpNormal.GetArmPixmap(m_mainWidget); - if (insensPixmap == pixmap) // <- the Get...Pixmap()-functions return the same pixmap! + // <- the Get...Pixmap()-functions return the same pixmap! + if (insensPixmap == pixmap) { insensPixmap = XCreateInsensitivePixmap(DisplayOfScreen(XtScreen((Widget) m_mainWidget)), pixmap); @@ -279,16 +270,11 @@ wxSize wxBitmapButton::DoGetBestSize() const { wxSize ret( 30,30 ); - if (m_buttonBitmap.Ok()) + if (m_bmpNormal.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; + ret.x = m_bmpNormal.GetWidth()+border; + ret.y = m_bmpNormal.GetHeight()+border; } return ret; -- 2.45.2