// Author: Julian Smart
// Modified by:
// Created: 17/09/98
-// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#ifdef __VMS
-#define XtScreen XTSCREEN
-#endif
-
#include "wx/bmpbuttn.h"
#ifdef __VMS__
// Pixmap XCreateInsensitivePixmap( Display *display, Pixmap pixmap );
-IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton)
-
wxBitmapButton::wxBitmapButton()
{
m_marginX = m_marginY = wxDEFAULT_BUTTON_MARGIN;
{
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();
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);
(Pixmap) m_insensPixmap);
}
-void wxBitmapButton::SetBitmapLabel(const wxBitmap& bitmap)
-{
- m_bmpNormalOriginal = bitmap;
- m_bmpNormal = bitmap;
-
- DoSetBitmap();
-}
-
-void wxBitmapButton::SetBitmapSelected(const wxBitmap& sel)
+void wxBitmapButton::DoSetBitmap(const wxBitmap& bitmap, State which)
{
- m_bmpSelected = sel;
- m_bmpSelectedOriginal = sel;
+ m_bitmapsOriginal[which] = bitmap;
- DoSetBitmap();
-}
-
-void wxBitmapButton::SetBitmapFocus(const wxBitmap& focus)
-{
- m_bmpFocus = focus;
- // Not used in Motif
+ wxBitmapButtonBase::DoSetBitmap(bitmap, which);
}
-void wxBitmapButton::SetBitmapDisabled(const wxBitmap& disabled)
+void wxBitmapButton::OnSetBitmap()
{
- m_bmpDisabled = disabled;
- m_bmpDisabledOriginal = disabled;
+ wxBitmapButtonBase::OnSetBitmap();
- DoSetBitmap();
-}
-
-void wxBitmapButton::DoSetBitmap()
-{
- if (m_bmpNormalOriginal.Ok())
+ if ( m_bitmapsOriginal[State_Normal].IsOk() )
{
Pixmap pixmap = 0;
Pixmap insensPixmap = 0;
// 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);
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);
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);
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);
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);
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;