X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/655719367ac5e131d9642e5783f3ecf64d1a3385..ebb97a41da74f94885e67f502619dcd6a9f9d272:/src/msw/bmpbuttn.cpp?ds=inline diff --git a/src/msw/bmpbuttn.cpp b/src/msw/bmpbuttn.cpp index bb2e787838..8a7ff239e0 100644 --- a/src/msw/bmpbuttn.cpp +++ b/src/msw/bmpbuttn.cpp @@ -29,6 +29,7 @@ #endif #include "wx/msw/private.h" +#include "wx/image.h" // ---------------------------------------------------------------------------- // macros @@ -47,7 +48,7 @@ wxBEGIN_FLAGS( wxBitmapButtonStyle ) wxFLAGS_MEMBER(wxBORDER_RAISED) wxFLAGS_MEMBER(wxBORDER_STATIC) wxFLAGS_MEMBER(wxBORDER_NONE) - + // old style border flags wxFLAGS_MEMBER(wxSIMPLE_BORDER) wxFLAGS_MEMBER(wxSUNKEN_BORDER) @@ -126,25 +127,11 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, m_marginY = wxDEFAULT_BUTTON_MARGIN; } - int x = pos.x; - int y = pos.y; - int width = size.x; - int height = size.y; - - if (id == -1) + if (id == wxID_ANY) m_windowId = NewControlId(); else m_windowId = id; - if ( bitmap.Ok() ) - { - wxSize newSize = DoGetBestSize(); - if ( width == -1 ) - width = newSize.x; - if ( height == -1 ) - height = newSize.y; - } - long msStyle = WS_VISIBLE | WS_TABSTOP | WS_CHILD | BS_OWNERDRAW ; if ( m_windowStyle & wxCLIP_SIBLINGS ) @@ -176,9 +163,22 @@ bool wxBitmapButton::Create(wxWindow *parent, wxWindowID id, // Subclass again for purposes of dialog editing mode SubclassWin(m_hWnd); - SetFont(parent->GetFont()); + SetPosition(pos); + SetBestSize(size); - SetSize(x, y, width, height); + return true; +} + +bool wxBitmapButton::SetBackgroundColour(const wxColour& colour) +{ + if ( !wxBitmapButtonBase::SetBackgroundColour(colour) ) + { + // didn't change + return false; + } + + // invalidate the brush, it will be recreated the next time it's needed + m_brushDisabled = wxNullBrush; return true; } @@ -430,11 +430,28 @@ void wxBitmapButton::DrawButtonFocus( WXHDC dc, int left, int top, int right, DrawFocusRect( (HDC) dc, &rect ); } -extern HBRUSH wxDisableButtonBrush; -void wxBitmapButton::DrawButtonDisable( WXHDC dc, int left, int top, int right, - int bottom, bool with_marg ) +void +wxBitmapButton::DrawButtonDisable( WXHDC dc, + int left, int top, int right, int bottom, + bool with_marg ) { - HBRUSH old = (HBRUSH) SelectObject( (HDC) dc, wxDisableButtonBrush ); + if ( !m_brushDisabled.Ok() ) + { + // draw a bitmap with two black and two background colour pixels + wxBitmap bmp(2, 2); + wxMemoryDC dc; + dc.SelectObject(bmp); + dc.SetPen(*wxBLACK_PEN); + dc.DrawPoint(0, 0); + dc.DrawPoint(1, 1); + dc.SetPen(GetBackgroundColour()); + dc.DrawPoint(0, 1); + dc.DrawPoint(1, 0); + + m_brushDisabled = wxBrush(bmp); + } + + SelectInHDC selectBrush((HDC)dc, GetHbrushOf(m_brushDisabled)); // ROP for "dest |= pattern" operation -- as it doesn't have a standard // name, give it our own @@ -449,8 +466,6 @@ void wxBitmapButton::DrawButtonDisable( WXHDC dc, int left, int top, int right, } ::PatBlt( (HDC) dc, left, top, right, bottom, PATTERNPAINT); - - ::SelectObject( (HDC) dc, old ); } void wxBitmapButton::SetDefault()