implemented DrawCheckButton() for XP renderer; code cleanup

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38827 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-04-19 02:15:30 +00:00
parent b76d9e767e
commit 9f93b45e59

View File

@@ -39,6 +39,11 @@
// tmschema.h is in Win32 Platform SDK and might not be available with earlier // tmschema.h is in Win32 Platform SDK and might not be available with earlier
// compilers // compilers
#ifndef CP_DROPDOWNBUTTON #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 CP_DROPDOWNBUTTON 1
#define CBXS_NORMAL 1 #define CBXS_NORMAL 1
@@ -58,6 +63,10 @@
#define HIS_PRESSED 3 #define HIS_PRESSED 3
#endif #endif
#if defined(__WXWINCE__) && !defined(DFCS_FLAT)
#define DFCS_FLAT 0
#endif
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxRendererMSW: wxRendererNative implementation for "old" Win32 systems // wxRendererMSW: wxRendererNative implementation for "old" Win32 systems
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -91,6 +100,14 @@ public:
static wxRendererNative& Get(); 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, virtual void DrawSplitterBorder(wxWindow *win,
wxDC& dc, wxDC& dc,
const wxRect& rect, const wxRect& rect,
@@ -101,21 +118,16 @@ public:
wxCoord position, wxCoord position,
wxOrientation orient, wxOrientation orient,
int flags = 0); int flags = 0);
virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
virtual void DrawComboBoxDropButton(wxWindow *win, virtual void DrawComboBoxDropButton(wxWindow *win,
wxDC& dc, wxDC& dc,
const wxRect& rect, const wxRect& rect,
int flags = 0); int flags = 0);
virtual void DrawTreeItemButton(wxWindow *win, virtual void DrawCheckButton(wxWindow *win,
wxDC& dc, wxDC& dc,
const wxRect& rect, const wxRect& rect,
int flags = 0); int flags = 0);
virtual void DrawHeaderButton(wxWindow *win,
wxDC& dc, virtual wxSplitterRenderParams GetSplitterParams(const wxWindow *win);
const wxRect &rect,
int flags=0);
private: private:
DECLARE_NO_COPY_CLASS(wxRendererXP) DECLARE_NO_COPY_CLASS(wxRendererXP)
}; };
@@ -146,10 +158,6 @@ wxRendererNative& wxRendererMSW::Get()
return s_rendererMSW; return s_rendererMSW;
} }
#if defined(__WXWINCE__) && !defined(DFCS_FLAT)
#define DFCS_FLAT 0
#endif
void void
wxRendererMSW::DrawComboBoxDropButton(wxWindow * WXUNUSED(win), wxRendererMSW::DrawComboBoxDropButton(wxWindow * WXUNUSED(win),
wxDC& dc, wxDC& dc,
@@ -195,13 +203,14 @@ wxRendererXP::DrawComboBoxDropButton(wxWindow * win,
int flags) int flags)
{ {
wxUxThemeHandle hTheme(win, L"COMBOBOX"); wxUxThemeHandle hTheme(win, L"COMBOBOX");
if ( hTheme ) if ( !hTheme )
{ {
m_rendererNative.DrawComboBoxDropButton(win, dc, rect, flags);
return;
}
RECT r; RECT r;
r.left = rect.x; wxCopyRectToRECT(rect, r);
r.top = rect.y;
r.right = rect.x + rect.width;
r.bottom = rect.y + rect.height;
int state; int state;
if ( flags & wxCONTROL_PRESSED ) if ( flags & wxCONTROL_PRESSED )
@@ -216,14 +225,118 @@ wxRendererXP::DrawComboBoxDropButton(wxWindow * win,
wxUxThemeEngine::Get()->DrawThemeBackground wxUxThemeEngine::Get()->DrawThemeBackground
( (
hTheme, hTheme,
(HDC) dc.GetHDC(), GetHdcOf(dc),
CP_DROPDOWNBUTTON, CP_DROPDOWNBUTTON,
state, state,
&r, &r,
NULL 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
);
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -236,7 +349,7 @@ static const wxCoord SASH_WIDTH = 4;
wxSplitterRenderParams wxSplitterRenderParams
wxRendererXP::GetSplitterParams(const wxWindow * win) wxRendererXP::GetSplitterParams(const wxWindow * win)
{ {
if (win->GetWindowStyle() & wxSP_NO_XP_THEME) if ( win->HasFlag(wxSP_NO_XP_THEME) )
return m_rendererNative.GetSplitterParams(win); return m_rendererNative.GetSplitterParams(win);
else else
return wxSplitterRenderParams(SASH_WIDTH, 0, false); return wxSplitterRenderParams(SASH_WIDTH, 0, false);
@@ -248,7 +361,7 @@ wxRendererXP::DrawSplitterBorder(wxWindow * win,
const wxRect& rect, const wxRect& rect,
int flags) 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.DrawSplitterBorder(win, dc, rect, flags);
} }
@@ -281,59 +394,5 @@ wxRendererXP::DrawSplitterSash(wxWindow *win,
m_rendererNative.DrawSplitterSash(win, dc, size, position, orient, 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 #endif // wxUSE_UXTHEME