X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b50d93d1dae385443f0ca4a57736cb5a57a3e7fe..96c9640205933ad0673d5af2c96af0816c50160c:/src/msw/renderer.cpp diff --git a/src/msw/renderer.cpp b/src/msw/renderer.cpp index 9383a4b457..46f4381915 100644 --- a/src/msw/renderer.cpp +++ b/src/msw/renderer.cpp @@ -6,7 +6,7 @@ // Created: 20.07.2003 // RCS-ID: $Id$ // Copyright: (c) 2003 Vadim Zeitlin -// License: wxWindows licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -31,6 +31,7 @@ #include "wx/settings.h" #endif //WX_PRECOMP +#include "wx/dcgraph.h" #include "wx/scopeguard.h" #include "wx/splitter.h" #include "wx/renderer.h" @@ -197,6 +198,8 @@ public: virtual int GetHeaderButtonHeight(wxWindow *win); + virtual int GetHeaderButtonMargin(wxWindow *win); + private: // wrapper of DrawFrameControl() void DoDrawFrameControl(UINT type, @@ -392,8 +395,12 @@ wxRendererMSW::DrawComboBoxDropButton(wxWindow * WXUNUSED(win), const wxRect& rect, int flags) { + wxCHECK_RET( dc.GetImpl(), wxT("Invalid wxDC") ); + + wxRect adjustedRect = dc.GetImpl()->MSWApplyGDIPlusTransform(rect); + RECT r; - wxCopyRectToRECT(rect, r); + wxCopyRectToRECT(adjustedRect, r); int style = DFCS_SCROLLCOMBOBOX; if ( flags & wxCONTROL_DISABLED ) @@ -412,8 +419,12 @@ wxRendererMSW::DoDrawFrameControl(UINT type, const wxRect& rect, int flags) { + wxCHECK_RET( dc.GetImpl(), wxT("Invalid wxDC") ); + + wxRect adjustedRect = dc.GetImpl()->MSWApplyGDIPlusTransform(rect); + RECT r; - wxCopyRectToRECT(rect, r); + wxCopyRectToRECT(adjustedRect, r); int style = kind; if ( flags & wxCONTROL_CHECKED ) @@ -426,6 +437,11 @@ wxRendererMSW::DoDrawFrameControl(UINT type, style |= DFCS_PUSHED; if ( flags & wxCONTROL_CURRENT ) style |= DFCS_HOT; + if ( flags & wxCONTROL_UNDETERMINED ) + // Using DFCS_BUTTON3STATE here doesn't work (as might be expected), + // use the following two styles to get the same look of a check box + // in the undetermined state. + style |= DFCS_INACTIVE | DFCS_CHECKED; ::DrawFrameControl(GetHdcOf(dc.GetTempHDC()), &r, type, style); } @@ -517,6 +533,11 @@ int wxRendererMSW::GetHeaderButtonHeight(wxWindow * WXUNUSED(win)) return Header_Layout(hwndHeader, &hdl) ? wp.cy : DEFAULT_HEIGHT; } +int wxRendererMSW::GetHeaderButtonMargin(wxWindow *WXUNUSED(win)) +{ + return 10; +} + // Uses the theme to draw the border and fill for something like a wxTextCtrl void wxRendererMSW::DrawTextCtrl(wxWindow* win, wxDC& dc, const wxRect& rect, int flags) { @@ -608,8 +629,12 @@ wxRendererXP::DrawComboBoxDropButton(wxWindow * win, return; } + wxCHECK_RET( dc.GetImpl(), wxT("Invalid wxDC") ); + + wxRect adjustedRect = dc.GetImpl()->MSWApplyGDIPlusTransform(rect); + RECT r; - wxCopyRectToRECT(rect, r); + wxCopyRectToRECT(adjustedRect, r); int state; if ( flags & wxCONTROL_PRESSED ) @@ -647,8 +672,12 @@ wxRendererXP::DrawHeaderButton(wxWindow *win, return m_rendererNative.DrawHeaderButton(win, dc, rect, flags, sortArrow, params); } + wxCHECK_MSG( dc.GetImpl(), -1, wxT("Invalid wxDC") ); + + wxRect adjustedRect = dc.GetImpl()->MSWApplyGDIPlusTransform(rect); + RECT r; - wxCopyRectToRECT(rect, r); + wxCopyRectToRECT(adjustedRect, r); int state; if ( flags & wxCONTROL_PRESSED ) @@ -689,8 +718,12 @@ wxRendererXP::DrawTreeItemButton(wxWindow *win, return; } + wxCHECK_RET( dc.GetImpl(), wxT("Invalid wxDC") ); + + wxRect adjustedRect = dc.GetImpl()->MSWApplyGDIPlusTransform(rect); + RECT r; - wxCopyRectToRECT(rect, r); + wxCopyRectToRECT(adjustedRect, r); int state = flags & wxCONTROL_EXPANDED ? GLPS_OPENED : GLPS_CLOSED; wxUxThemeEngine::Get()->DrawThemeBackground @@ -727,8 +760,12 @@ wxRendererXP::DoDrawButtonLike(HTHEME htheme, const wxRect& rect, int flags) { + wxCHECK_RET( dc.GetImpl(), wxT("Invalid wxDC") ); + + wxRect adjustedRect = dc.GetImpl()->MSWApplyGDIPlusTransform(rect); + RECT r; - wxCopyRectToRECT(rect, r); + wxCopyRectToRECT(adjustedRect, r); // the base state is always 1, whether it is PBS_NORMAL, // {CBS,RBS}_UNCHECKEDNORMAL or CBS_NORMAL