// Created: 20.07.2003
// RCS-ID: $Id$
// Copyright: (c) 2003 Vadim Zeitlin <vadim@wxwindows.org>
-// License: wxWindows licence
+// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
// ============================================================================
#include "wx/settings.h"
#endif //WX_PRECOMP
+#include "wx/dcgraph.h"
#include "wx/scopeguard.h"
#include "wx/splitter.h"
#include "wx/renderer.h"
#define DFCS_HOT 0x1000
#endif
+// When we're using GDI+, the DC might have transforms applied to it,
+// but the renderer APIs don't respect them. So we need to apply
+// the transforms to the rect ourselves.
+inline
+wxRect applyGDIPlusTransformsToRect(wxDC& dc, const wxRect& r)
+{
+ wxRect rect = r;
+#if wxUSE_GRAPHICS_CONTEXT
+ wxGCDC* gcdc = dynamic_cast<wxGCDC*>(&dc);
+ if (gcdc)
+ {
+ double xtrans = 0;
+ double ytrans = 0;
+ wxGraphicsContext* gc = gcdc->GetGraphicsContext();
+ gc->GetTransform().TransformPoint(&xtrans, &ytrans);
+ rect.x = rect.x + (int)xtrans;
+ rect.y = rect.y + (int)ytrans;
+ }
+#endif
+ return rect;
+}
+
// ----------------------------------------------------------------------------
// methods common to wxRendererMSW and wxRendererXP
// ----------------------------------------------------------------------------
virtual int GetHeaderButtonHeight(wxWindow *win);
+ virtual int GetHeaderButtonMargin(wxWindow *win);
+
private:
// wrapper of DrawFrameControl()
void DoDrawFrameControl(UINT type,
const wxRect& rect,
int flags)
{
+ wxRect adjustedRect = applyGDIPlusTransformsToRect(dc, rect);
+
RECT r;
- wxCopyRectToRECT(rect, r);
+ wxCopyRectToRECT(adjustedRect, r);
int style = DFCS_SCROLLCOMBOBOX;
if ( flags & wxCONTROL_DISABLED )
const wxRect& rect,
int flags)
{
+ wxRect adjustedRect = applyGDIPlusTransformsToRect(dc, rect);
+
RECT r;
- wxCopyRectToRECT(rect, r);
+ wxCopyRectToRECT(adjustedRect, r);
int style = kind;
if ( flags & wxCONTROL_CHECKED )
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)
{
return;
}
+ wxRect adjustedRect = applyGDIPlusTransformsToRect(dc, rect);
+
RECT r;
- wxCopyRectToRECT(rect, r);
+ wxCopyRectToRECT(adjustedRect, r);
int state;
if ( flags & wxCONTROL_PRESSED )
return m_rendererNative.DrawHeaderButton(win, dc, rect, flags, sortArrow, params);
}
+ wxRect adjustedRect = applyGDIPlusTransformsToRect(dc, rect);
+
RECT r;
- wxCopyRectToRECT(rect, r);
+ wxCopyRectToRECT(adjustedRect, r);
int state;
if ( flags & wxCONTROL_PRESSED )
return;
}
+ wxRect adjustedRect = applyGDIPlusTransformsToRect(dc, rect);
+
RECT r;
- wxCopyRectToRECT(rect, r);
+ wxCopyRectToRECT(adjustedRect, r);
int state = flags & wxCONTROL_EXPANDED ? GLPS_OPENED : GLPS_CLOSED;
wxUxThemeEngine::Get()->DrawThemeBackground
const wxRect& rect,
int flags)
{
+ wxRect adjustedRect = applyGDIPlusTransformsToRect(dc, 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