// tmschema.h is in Win32 Platform SDK and might not be available with earlier
// compilers
#ifndef CP_DROPDOWNBUTTON
+ #define BP_CHECKBOX 3
+ #define CBS_UNCHECKEDNORMAL 1
+ #define CBS_CHECKEDNORMAL (CBS_UNCHECKEDNORMAL + 4)
+ #define CBS_MIXEDNORMAL (CBS_CHECKEDNORMAL + 4)
+
#define CP_DROPDOWNBUTTON 1
#define CBXS_NORMAL 1
#define CBXS_PRESSED 3
#define CBXS_DISABLED 4
- #define TVP_GLYPH 2
-
- #define GLPS_CLOSED 1
+ #define TVP_GLYPH 2
+
+ #define GLPS_CLOSED 1
#define GLPS_OPENED 2
#define HP_HEADERITEM 1
#define HIS_PRESSED 3
#endif
+#if defined(__WXWINCE__) && !defined(DFCS_FLAT)
+ #define DFCS_FLAT 0
+#endif
+
// ----------------------------------------------------------------------------
// wxRendererMSW: wxRendererNative implementation for "old" Win32 systems
// ----------------------------------------------------------------------------
static wxRendererNative& Get();
+ virtual void DrawHeaderButton(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags = 0);
+ virtual void DrawTreeItemButton(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags = 0);
virtual void DrawSplitterBorder(wxWindow *win,
wxDC& dc,
const wxRect& rect,
wxCoord position,
wxOrientation orient,
int flags = 0);
-
- virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
-
virtual void DrawComboBoxDropButton(wxWindow *win,
wxDC& dc,
const wxRect& rect,
int flags = 0);
- virtual void DrawTreeItemButton(wxWindow *win,
- wxDC& dc,
- const wxRect& rect,
- int flags = 0);
- virtual void DrawHeaderButton(wxWindow *win,
- wxDC& dc,
- const wxRect &rect,
- int flags=0);
+ virtual void DrawCheckButton(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags = 0);
+
+ virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
private:
DECLARE_NO_COPY_CLASS(wxRendererXP)
};
return s_rendererMSW;
}
-#if defined(__WXWINCE__) && !defined(DFCS_FLAT)
-#define DFCS_FLAT 0
-#endif
-
void
wxRendererMSW::DrawComboBoxDropButton(wxWindow * WXUNUSED(win),
wxDC& dc,
int flags)
{
wxUxThemeHandle hTheme(win, L"COMBOBOX");
- if ( hTheme )
+ if ( !hTheme )
{
- RECT r;
- r.left = rect.x;
- r.top = rect.y;
- r.right = rect.x + rect.width;
- r.bottom = rect.y + rect.height;
-
- int state;
- if ( flags & wxCONTROL_PRESSED )
- state = CBXS_PRESSED;
- else if ( flags & wxCONTROL_CURRENT )
- state = CBXS_HOT;
- else if ( flags & wxCONTROL_DISABLED )
- state = CBXS_DISABLED;
- else
- state = CBXS_NORMAL;
-
- wxUxThemeEngine::Get()->DrawThemeBackground
- (
- hTheme,
- (HDC) dc.GetHDC(),
- CP_DROPDOWNBUTTON,
- state,
- &r,
- NULL
- );
+ m_rendererNative.DrawComboBoxDropButton(win, dc, rect, flags);
+ return;
+ }
+
+ RECT r;
+ wxCopyRectToRECT(rect, r);
+ int state;
+ if ( flags & wxCONTROL_PRESSED )
+ state = CBXS_PRESSED;
+ else if ( flags & wxCONTROL_CURRENT )
+ state = CBXS_HOT;
+ else if ( flags & wxCONTROL_DISABLED )
+ state = CBXS_DISABLED;
+ else
+ state = CBXS_NORMAL;
+
+ wxUxThemeEngine::Get()->DrawThemeBackground
+ (
+ hTheme,
+ GetHdcOf(dc),
+ CP_DROPDOWNBUTTON,
+ state,
+ &r,
+ NULL
+ );
+
+}
+
+void
+wxRendererXP::DrawHeaderButton(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags)
+{
+ wxUxThemeHandle hTheme(win, L"HEADER");
+ if ( !hTheme )
+ {
+ m_rendererNative.DrawHeaderButton(win, dc, rect, flags);
+ return;
}
+
+ RECT r;
+ wxCopyRectToRECT(rect, r);
+
+ int state;
+ if ( flags & wxCONTROL_PRESSED )
+ state = HIS_PRESSED;
+ else if ( flags & wxCONTROL_CURRENT )
+ state = HIS_HOT;
+ else
+ state = HIS_NORMAL;
+ wxUxThemeEngine::Get()->DrawThemeBackground
+ (
+ hTheme,
+ GetHdcOf(dc),
+ HP_HEADERITEM,
+ state,
+ &r,
+ NULL
+ );
+}
+
+void
+wxRendererXP::DrawTreeItemButton(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags)
+{
+ wxUxThemeHandle hTheme(win, L"TREEVIEW");
+ if ( !hTheme )
+ {
+ m_rendererNative.DrawTreeItemButton(win, dc, rect, flags);
+ return;
+ }
+
+ RECT r;
+ wxCopyRectToRECT(rect, r);
+
+ int state = flags & wxCONTROL_EXPANDED ? GLPS_OPENED : GLPS_CLOSED;
+ wxUxThemeEngine::Get()->DrawThemeBackground
+ (
+ hTheme,
+ GetHdcOf(dc),
+ TVP_GLYPH,
+ state,
+ &r,
+ NULL
+ );
+}
+
+void
+wxRendererXP::DrawCheckButton(wxWindow *win,
+ wxDC& dc,
+ const wxRect& rect,
+ int flags)
+{
+ wxUxThemeHandle hTheme(win, L"BUTTON");
+ if ( !hTheme )
+ {
+ m_rendererNative.DrawCheckButton(win, dc, rect, flags);
+ return;
+ }
+
+ RECT r;
+ wxCopyRectToRECT(rect, r);
+
+ int state;
+ if ( flags & wxCONTROL_CHECKED )
+ state = CBS_CHECKEDNORMAL;
+ else if ( flags & wxCONTROL_UNDETERMINED )
+ state = CBS_MIXEDNORMAL;
+ else
+ state = CBS_UNCHECKEDNORMAL;
+
+ // CBS_XXX is followed by CBX_XXXGOT, then CBS_XXXPRESSED and DISABLED
+ if ( flags & wxCONTROL_CURRENT )
+ state += 1;
+ else if ( flags & wxCONTROL_PRESSED )
+ state += 2;
+ else if ( flags & wxCONTROL_DISABLED )
+ state += 3;
+
+ wxUxThemeEngine::Get()->DrawThemeBackground
+ (
+ hTheme,
+ GetHdcOf(dc),
+ BP_CHECKBOX,
+ state,
+ &r,
+ NULL
+ );
}
// ----------------------------------------------------------------------------
wxSplitterRenderParams
wxRendererXP::GetSplitterParams(const wxWindow * win)
{
- if (win->GetWindowStyle() & wxSP_NO_XP_THEME)
+ if ( win->HasFlag(wxSP_NO_XP_THEME) )
return m_rendererNative.GetSplitterParams(win);
else
return wxSplitterRenderParams(SASH_WIDTH, 0, false);
const wxRect& rect,
int flags)
{
- if (win->GetWindowStyle() & wxSP_NO_XP_THEME)
+ if ( win->HasFlag(wxSP_NO_XP_THEME) )
{
m_rendererNative.DrawSplitterBorder(win, dc, rect, flags);
}
m_rendererNative.DrawSplitterSash(win, dc, size, position, orient, flags);
}
-void
-wxRendererXP::DrawTreeItemButton(wxWindow *win,
- wxDC &dc,
- const wxRect &rect,
- int flags)
-{
- wxUxThemeHandle hTheme(win, L"TREEVIEW");
- RECT r;
- r.left = rect.x;
- r.top = rect.y;
- r.right = rect.x + rect.width;
- r.bottom = rect.y + rect.height;
- int state = (flags & wxCONTROL_EXPANDED) ? GLPS_OPENED : GLPS_CLOSED;
- wxUxThemeEngine::Get()->DrawThemeBackground
- (
- hTheme,
- (HDC) dc.GetHDC(),
- TVP_GLYPH,
- state,
- &r,
- NULL
- );
-}
-
-void
-wxRendererXP::DrawHeaderButton(wxWindow *win,
- wxDC &dc,
- const wxRect &rect,
- int flags)
-{
- wxUxThemeHandle hTheme(win, L"HEADER");
- RECT r;
- r.left = rect.x;
- r.top = rect.y;
- r.right = rect.x + rect.width;
- r.bottom = rect.y + rect.height;
- int state;
- if ( flags & wxCONTROL_PRESSED )
- state = HIS_PRESSED;
- else if ( flags & wxCONTROL_CURRENT )
- state = HIS_HOT;
- else
- state = HIS_NORMAL;
- wxUxThemeEngine::Get()->DrawThemeBackground
- (
- hTheme,
- (HDC) dc.GetHDC(),
- HP_HEADERITEM,
- state,
- &r,
- NULL
- );
-}
-
#endif // wxUSE_UXTHEME