X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/1fdc16adf72fbd051d1f4ffdbc8d35d00b3e2837..a87594c6388f7a6e96acc115c338627615493d7f:/src/msw/bmpbuttn.cpp diff --git a/src/msw/bmpbuttn.cpp b/src/msw/bmpbuttn.cpp index 0ff7de5424..3b67925eaa 100644 --- a/src/msw/bmpbuttn.cpp +++ b/src/msw/bmpbuttn.cpp @@ -26,6 +26,7 @@ #include "wx/msw/private.h" #include "wx/image.h" +#include "wx/msw/uxtheme.h" // ---------------------------------------------------------------------------- // macros @@ -204,6 +205,26 @@ void wxBitmapButton::OnMouseEnterOrLeave(wxMouseEvent& event) event.Skip(); } +void wxBitmapButton::OnSetBitmap() +{ + // if the focus bitmap is specified but hover one isn't, use the focus + // bitmap for hovering as well if this is consistent with the current + // Windows version look and feel + // + // rationale: this is compatible with the old wxGTK behaviour and also + // makes it much easier to do "the right thing" for all platforms (some of + // them, such as Windows XP, have "hot" buttons while others don't) + if ( !m_bmpHover.Ok() && + m_bmpFocus.Ok() && + wxUxThemeEngine::GetIfActive() ) + { + m_bmpHover = m_bmpFocus; + } + + // this will redraw us + wxBitmapButtonBase::OnSetBitmap(); +} + // VZ: should be at the very least less than wxDEFAULT_BUTTON_MARGIN #define FOCUS_MARGIN 3 @@ -283,8 +304,7 @@ bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item) } // draw the bitmap - wxDC dst; - dst.SetHDC((WXHDC) hDC, false); + wxDCTemp dst((WXHDC)hDC); dst.DrawBitmap(*bitmap, x1, y1, true); // draw focus / disabled state, if auto-drawing @@ -310,8 +330,6 @@ bool wxBitmapButton::MSWOnDraw(WXDRAWITEMSTRUCT *item) // GRG Feb/2000, support for bmp buttons with Win95/98 standard LNF -#if defined(__WIN95__) - void wxBitmapButton::DrawFace( WXHDC dc, int left, int top, int right, int bottom, bool sel ) { @@ -367,73 +385,6 @@ void wxBitmapButton::DrawFace( WXHDC dc, int left, int top, DeleteObject(brushFace); } -#else - -void wxBitmapButton::DrawFace( WXHDC dc, int left, int top, - int right, int bottom, bool sel ) -{ - HPEN oldp; - HPEN penBorder; - HPEN penLight; - HPEN penShadow; - HBRUSH brushFace; - - // create needed pens and brush - penBorder = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_WINDOWFRAME)); - penShadow = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNSHADOW)); - penLight = CreatePen(PS_SOLID, 0, GetSysColor(COLOR_BTNHIGHLIGHT)); - brushFace = CreateSolidBrush(COLOR_BTNFACE); - - // draw the rectangle - RECT rect; - rect.left = left; - rect.right = right; - rect.top = top; - rect.bottom = bottom; - FillRect((HDC) dc, &rect, brushFace); - - // draw the border - oldp = (HPEN) SelectObject( (HDC) dc, penBorder); - MoveToEx((HDC) dc,left+1,top,NULL);LineTo((HDC) dc,right-1,top); - MoveToEx((HDC) dc,left,top+1,NULL);LineTo((HDC) dc,left,bottom-1); - MoveToEx((HDC) dc,left+1,bottom-1,NULL);LineTo((HDC) dc,right-1,bottom-1); - MoveToEx((HDC) dc,right-1,top+1,NULL);LineTo((HDC) dc,right-1,bottom-1); - - SelectObject( (HDC) dc, penShadow); - if (sel) - { - MoveToEx((HDC) dc,left+1 ,bottom-2 ,NULL); - LineTo((HDC) dc, left+1 ,top+1); - LineTo((HDC) dc, right-2 ,top+1); - } - else - { - MoveToEx((HDC) dc,left+1 ,bottom-2 ,NULL); - LineTo((HDC) dc, right-2 ,bottom-2); - LineTo((HDC) dc, right-2 ,top); - - MoveToEx((HDC) dc,left+2 ,bottom-3 ,NULL); - LineTo((HDC) dc, right-3 ,bottom-3); - LineTo((HDC) dc, right-3 ,top+1); - - SelectObject( (HDC) dc, penLight); - - MoveToEx((HDC) dc,left+1 ,bottom-2 ,NULL); - LineTo((HDC) dc, left+1 ,top+1); - LineTo((HDC) dc, right-2 ,top+1); - } - - // delete allocated resources - SelectObject((HDC) dc,oldp); - DeleteObject(penBorder); - DeleteObject(penLight); - DeleteObject(penShadow); - DeleteObject(brushFace); -} - -#endif // defined(__WIN95__) - - void wxBitmapButton::DrawButtonFocus( WXHDC dc, int left, int top, int right, int bottom, bool WXUNUSED(sel) ) { @@ -511,4 +462,3 @@ wxSize wxBitmapButton::DoGetBestSize() const } #endif // wxUSE_BMPBUTTON -