#ifndef WX_PRECOMP
#endif
+#include "wx/os2/dcclient.h"
#include "wx/os2/private.h"
-IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton, wxButton)
-
#define BUTTON_HEIGHT_FACTOR (EDIT_CONTROL_FACTOR * 1.1)
bool wxBitmapButton::Create( wxWindow* pParent,
const wxValidator& rValidator,
const wxString& rsName )
{
- m_bmpNormal = rBitmap;
+ m_bitmaps[State_Normal] = rBitmap;
SetName(rsName);
#if wxUSE_VALIDATORS
SetValidator(rValidator);
else
m_windowId = vId;
- if (nWidth == wxDefaultCoord && rBitmap.Ok())
+ if (nWidth == wxDefaultCoord && rBitmap.IsOk())
nWidth = rBitmap.GetWidth() + 4 * m_marginX;
- if (nHeight == wxDefaultCoord && rBitmap.Ok())
+ if (nHeight == wxDefaultCoord && rBitmap.IsOk())
nHeight = rBitmap.GetHeight() + 4 * m_marginY;
ULONG ulOS2Style = WS_VISIBLE | WS_TABSTOP | BS_USERBUTTON;
if (!pUser)
return false;
- wxBitmap* pBitmap;
+ wxBitmap bitmap;
bool bIsSelected = pUser->fsState & BDS_HILITED;
wxClientDC vDc(this);
- if (bIsSelected && m_bmpSelected.Ok())
- pBitmap = &m_bmpSelected;
- else if ((pUser->fsState & BDS_DEFAULT) && m_bmpFocus.Ok())
- pBitmap = &m_bmpFocus;
- else if ((pUser->fsState & BDS_DISABLED) && m_bmpDisabled.Ok())
- pBitmap = &m_bmpDisabled;
- else
- pBitmap = &m_bmpNormal;
+ if (bIsSelected)
+ bitmap = GetBitmapPressed();
+ else if (pUser->fsState & BDS_DEFAULT)
+ bitmap = GetBitmapFocus();
+ else if (pUser->fsState & BDS_DISABLED)
+ bitmap = GetBitmapDisabled();
- if (!pBitmap->Ok() )
- return false;
+ if (!bitmap.IsOk() )
+ {
+ bitmap = GetBitmapLabel();
+ if (!bitmap.IsOk() )
+ return false;
+ }
//
//
int nX1 = 0;
int nY1 = 0;
- int nWidth = vDc.m_vRclPaint.xRight - vDc.m_vRclPaint.xLeft;
- int nHeight = vDc.m_vRclPaint.yTop - vDc.m_vRclPaint.yBottom;
- int nBmpWidth = pBitmap->GetWidth();
- int nBmpHeight = pBitmap->GetHeight();
+ wxPMDCImpl *impl = (wxPMDCImpl*) vDc.GetImpl();
+ int nWidth = impl->m_vRclPaint.xRight - impl->m_vRclPaint.xLeft;
+ int nHeight = impl->m_vRclPaint.yTop - impl->m_vRclPaint.yBottom;
+ int nBmpWidth = bitmap.GetWidth();
+ int nBmpHeight = bitmap.GetHeight();
nX1 = (nWidth - nBmpWidth) / 2;
nY1 = (nHeight - nBmpHeight) / 2;
//
// Draw the bitmap
//
- vDc.DrawBitmap( *pBitmap, nX1, nY1, true );
+ vDc.DrawBitmap( bitmap, nX1, nY1, true );
//
// Draw focus / disabled state, if auto-drawing
//
if ((pUser->fsState == BDS_DISABLED) && bAutoDraw)
{
- DrawButtonDisable( vDc, *pBitmap );
+ DrawButtonDisable( vDc, bitmap );
}
else if ((pUser->fsState == BDS_DEFAULT) && bAutoDraw)
{
// Note: DrawLine expects wxWidgets coordinate system so swap
//
rDC.SetPen(bSel ? vDarkShadowPen : vHiLitePen);
+ wxPMDCImpl *impl = (wxPMDCImpl*) rDC.GetImpl();
// top
- rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
- ,rDC.m_vRclPaint.yBottom + 1
- ,rDC.m_vRclPaint.xRight - 1
- ,rDC.m_vRclPaint.yBottom + 1
+ rDC.DrawLine( impl->m_vRclPaint.xLeft + 1
+ ,impl->m_vRclPaint.yBottom + 1
+ ,impl->m_vRclPaint.xRight - 1
+ ,impl->m_vRclPaint.yBottom + 1
);
// left
- rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
- ,rDC.m_vRclPaint.yBottom + 1
- ,rDC.m_vRclPaint.xLeft + 1
- ,rDC.m_vRclPaint.yTop - 1
+ rDC.DrawLine( impl->m_vRclPaint.xLeft + 1
+ ,impl->m_vRclPaint.yBottom + 1
+ ,impl->m_vRclPaint.xLeft + 1
+ ,impl->m_vRclPaint.yTop - 1
);
rDC.SetPen(bSel ? vHiLitePen : vDarkShadowPen);
// bottom
- rDC.DrawLine( rDC.m_vRclPaint.xLeft + 1
- ,rDC.m_vRclPaint.yTop - 1
- ,rDC.m_vRclPaint.xRight - 1
- ,rDC.m_vRclPaint.yTop - 1
+ rDC.DrawLine( impl->m_vRclPaint.xLeft + 1
+ ,impl->m_vRclPaint.yTop - 1
+ ,impl->m_vRclPaint.xRight - 1
+ ,impl->m_vRclPaint.yTop - 1
);
// right
- rDC.DrawLine( rDC.m_vRclPaint.xRight - 1
- ,rDC.m_vRclPaint.yBottom + 1
- ,rDC.m_vRclPaint.xRight - 1
- ,rDC.m_vRclPaint.yTop - 1
+ rDC.DrawLine( impl->m_vRclPaint.xRight - 1
+ ,impl->m_vRclPaint.yBottom + 1
+ ,impl->m_vRclPaint.xRight - 1
+ ,impl->m_vRclPaint.yTop - 1
);
} // end of wxBitmapButton::DrawFace
// Note: DrawLine expects wxWidgets coordinate system so swap
//
rDC.SetPen(vBlackPen);
+ wxPMDCImpl *impl = (wxPMDCImpl*) rDC.GetImpl();
// top
- rDC.DrawLine( rDC.m_vRclPaint.xLeft
- ,rDC.m_vRclPaint.yBottom
- ,rDC.m_vRclPaint.xRight
- ,rDC.m_vRclPaint.yBottom
+ rDC.DrawLine( impl->m_vRclPaint.xLeft
+ ,impl->m_vRclPaint.yBottom
+ ,impl->m_vRclPaint.xRight
+ ,impl->m_vRclPaint.yBottom
);
// right
- rDC.DrawLine( rDC.m_vRclPaint.xRight
- ,rDC.m_vRclPaint.yBottom
- ,rDC.m_vRclPaint.xRight
- ,rDC.m_vRclPaint.yTop
+ rDC.DrawLine( impl->m_vRclPaint.xRight
+ ,impl->m_vRclPaint.yBottom
+ ,impl->m_vRclPaint.xRight
+ ,impl->m_vRclPaint.yTop
);
// bottom
- rDC.DrawLine( rDC.m_vRclPaint.xRight
- ,rDC.m_vRclPaint.yTop
- ,rDC.m_vRclPaint.xLeft
- ,rDC.m_vRclPaint.yTop
+ rDC.DrawLine( impl->m_vRclPaint.xRight
+ ,impl->m_vRclPaint.yTop
+ ,impl->m_vRclPaint.xLeft
+ ,impl->m_vRclPaint.yTop
);
// left
- rDC.DrawLine( rDC.m_vRclPaint.xLeft
- ,rDC.m_vRclPaint.yTop
- ,rDC.m_vRclPaint.xLeft
- ,rDC.m_vRclPaint.yBottom
+ rDC.DrawLine( impl->m_vRclPaint.xLeft
+ ,impl->m_vRclPaint.yTop
+ ,impl->m_vRclPaint.xLeft
+ ,impl->m_vRclPaint.yBottom
);
} // end of wxBitmapButton::DrawButtonFocus
// Note: DrawLine expects wxWidgets coordinate system so swap
//
rDC.SetPen(vGreyPen);
+ wxPMDCImpl *impl = (wxPMDCImpl*) rDC.GetImpl();
// top
- rDC.DrawLine( rDC.m_vRclPaint.xLeft
- ,rDC.m_vRclPaint.yBottom
- ,rDC.m_vRclPaint.xRight
- ,rDC.m_vRclPaint.yBottom
+ rDC.DrawLine( impl->m_vRclPaint.xLeft
+ ,impl->m_vRclPaint.yBottom
+ ,impl->m_vRclPaint.xRight
+ ,impl->m_vRclPaint.yBottom
);
// right
- rDC.DrawLine( rDC.m_vRclPaint.xRight
- ,rDC.m_vRclPaint.yBottom
- ,rDC.m_vRclPaint.xRight
- ,rDC.m_vRclPaint.yTop
+ rDC.DrawLine( impl->m_vRclPaint.xRight
+ ,impl->m_vRclPaint.yBottom
+ ,impl->m_vRclPaint.xRight
+ ,impl->m_vRclPaint.yTop
);
// bottom
- rDC.DrawLine( rDC.m_vRclPaint.xRight
- ,rDC.m_vRclPaint.yTop
- ,rDC.m_vRclPaint.xLeft
- ,rDC.m_vRclPaint.yTop
+ rDC.DrawLine( impl->m_vRclPaint.xRight
+ ,impl->m_vRclPaint.yTop
+ ,impl->m_vRclPaint.xLeft
+ ,impl->m_vRclPaint.yTop
);
// left
- rDC.DrawLine( rDC.m_vRclPaint.xLeft
- ,rDC.m_vRclPaint.yTop
- ,rDC.m_vRclPaint.xLeft
- ,rDC.m_vRclPaint.yBottom
+ rDC.DrawLine( impl->m_vRclPaint.xLeft
+ ,impl->m_vRclPaint.yTop
+ ,impl->m_vRclPaint.xLeft
+ ,impl->m_vRclPaint.yBottom
);
wxDisableBitmap(rBmp, vGreyPen.GetColour().GetPixel());
} // end of wxBitmapButton::DrawButtonDisable