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:
@@ -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
|
||||||
@@ -46,9 +51,9 @@
|
|||||||
#define CBXS_PRESSED 3
|
#define CBXS_PRESSED 3
|
||||||
#define CBXS_DISABLED 4
|
#define CBXS_DISABLED 4
|
||||||
|
|
||||||
#define TVP_GLYPH 2
|
#define TVP_GLYPH 2
|
||||||
|
|
||||||
#define GLPS_CLOSED 1
|
#define GLPS_CLOSED 1
|
||||||
#define GLPS_OPENED 2
|
#define GLPS_OPENED 2
|
||||||
|
|
||||||
#define HP_HEADERITEM 1
|
#define HP_HEADERITEM 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,35 +203,140 @@ wxRendererXP::DrawComboBoxDropButton(wxWindow * win,
|
|||||||
int flags)
|
int flags)
|
||||||
{
|
{
|
||||||
wxUxThemeHandle hTheme(win, L"COMBOBOX");
|
wxUxThemeHandle hTheme(win, L"COMBOBOX");
|
||||||
if ( hTheme )
|
if ( !hTheme )
|
||||||
{
|
{
|
||||||
RECT r;
|
m_rendererNative.DrawComboBoxDropButton(win, dc, rect, flags);
|
||||||
r.left = rect.x;
|
return;
|
||||||
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
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -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
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user