Merge branch 'mswdc-draw-point-checkbox' of https://github.com/MaartenBent/wxWidgets
Draw the same shape in wxDC::DrawCheckMark() under all platforms and provide wxRenderer::DrawCheckMark() for drawing the platform-specific shape. Also fix wxGCDC::DrawPoint() to use the default one point wide pen. See https://github.com/wxWidgets/wxWidgets/pull/1471
This commit is contained in:
@@ -70,6 +70,9 @@ Changes in behaviour not resulting in compilation errors
|
|||||||
return to the previous behaviour, you need to explicitly create controls of
|
return to the previous behaviour, you need to explicitly create controls of
|
||||||
smaller size.
|
smaller size.
|
||||||
|
|
||||||
|
- wxDC::DrawCheckMark() draws the same shape under all platforms now, use the
|
||||||
|
new wxRendererNative::DrawCheckMark() to draw MSW-specific themed check mark.
|
||||||
|
|
||||||
|
|
||||||
Changes in behaviour which may result in build errors
|
Changes in behaviour which may result in build errors
|
||||||
-----------------------------------------------------
|
-----------------------------------------------------
|
||||||
|
@@ -202,8 +202,6 @@ public:
|
|||||||
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
|
virtual void DoDrawArc(wxCoord x1, wxCoord y1,
|
||||||
wxCoord x2, wxCoord y2,
|
wxCoord x2, wxCoord y2,
|
||||||
wxCoord xc, wxCoord yc) wxOVERRIDE;
|
wxCoord xc, wxCoord yc) wxOVERRIDE;
|
||||||
virtual void DoDrawCheckMark(wxCoord x, wxCoord y,
|
|
||||||
wxCoord width, wxCoord height) wxOVERRIDE;
|
|
||||||
virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
|
virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
|
||||||
double sa, double ea) wxOVERRIDE;
|
double sa, double ea) wxOVERRIDE;
|
||||||
|
|
||||||
|
@@ -250,9 +250,20 @@ public:
|
|||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags = 0) = 0;
|
int flags = 0) = 0;
|
||||||
|
|
||||||
|
// draw check mark
|
||||||
|
//
|
||||||
|
// flags may use wxCONTROL_DISABLED
|
||||||
|
virtual void DrawCheckMark(wxWindow *win,
|
||||||
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
int flags = 0) = 0;
|
||||||
|
|
||||||
// Returns the default size of a check box.
|
// Returns the default size of a check box.
|
||||||
virtual wxSize GetCheckBoxSize(wxWindow *win) = 0;
|
virtual wxSize GetCheckBoxSize(wxWindow *win) = 0;
|
||||||
|
|
||||||
|
// Returns the default size of a check mark.
|
||||||
|
virtual wxSize GetCheckMarkSize(wxWindow *win) = 0;
|
||||||
|
|
||||||
// Returns the default size of a expander.
|
// Returns the default size of a expander.
|
||||||
virtual wxSize GetExpanderSize(wxWindow *win) = 0;
|
virtual wxSize GetExpanderSize(wxWindow *win) = 0;
|
||||||
|
|
||||||
@@ -479,10 +490,19 @@ public:
|
|||||||
int flags = 0) wxOVERRIDE
|
int flags = 0) wxOVERRIDE
|
||||||
{ m_rendererNative.DrawCheckBox( win, dc, rect, flags ); }
|
{ m_rendererNative.DrawCheckBox( win, dc, rect, flags ); }
|
||||||
|
|
||||||
|
virtual void DrawCheckMark(wxWindow *win,
|
||||||
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
int flags = 0) wxOVERRIDE
|
||||||
|
{ m_rendererNative.DrawCheckMark( win, dc, rect, flags ); }
|
||||||
|
|
||||||
virtual wxSize GetCheckBoxSize(wxWindow *win) wxOVERRIDE
|
virtual wxSize GetCheckBoxSize(wxWindow *win) wxOVERRIDE
|
||||||
{ return m_rendererNative.GetCheckBoxSize(win); }
|
{ return m_rendererNative.GetCheckBoxSize(win); }
|
||||||
|
|
||||||
virtual wxSize GetExpanderSize(wxWindow *win) wxOVERRIDE
|
virtual wxSize GetCheckMarkSize(wxWindow *win) wxOVERRIDE
|
||||||
|
{ return m_rendererNative.GetCheckMarkSize(win); }
|
||||||
|
|
||||||
|
virtual wxSize GetExpanderSize(wxWindow *win) wxOVERRIDE
|
||||||
{ return m_rendererNative.GetExpanderSize(win); }
|
{ return m_rendererNative.GetExpanderSize(win); }
|
||||||
|
|
||||||
virtual void DrawPushButton(wxWindow *win,
|
virtual void DrawPushButton(wxWindow *win,
|
||||||
|
@@ -234,8 +234,13 @@ public:
|
|||||||
virtual void DrawCheckBox(wxWindow *win, wxDC& dc,
|
virtual void DrawCheckBox(wxWindow *win, wxDC& dc,
|
||||||
const wxRect& rect, int flags = 0 );
|
const wxRect& rect, int flags = 0 );
|
||||||
|
|
||||||
|
virtual void DrawCheckMark(wxWindow *win, wxDC& dc,
|
||||||
|
const wxRect& rect, int flags = 0 );
|
||||||
|
|
||||||
virtual wxSize GetCheckBoxSize(wxWindow *win);
|
virtual wxSize GetCheckBoxSize(wxWindow *win);
|
||||||
|
|
||||||
|
virtual wxSize GetCheckMarkSize(wxWindow *win);
|
||||||
|
|
||||||
virtual wxSize GetExpanderSize(wxWindow* win);
|
virtual wxSize GetExpanderSize(wxWindow* win);
|
||||||
|
|
||||||
virtual void DrawPushButton(wxWindow *win, wxDC& dc,
|
virtual void DrawPushButton(wxWindow *win, wxDC& dc,
|
||||||
@@ -532,6 +537,17 @@ public:
|
|||||||
wxTitleBarButton button,
|
wxTitleBarButton button,
|
||||||
int flags = 0) = 0;
|
int flags = 0) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Draw a check mark.
|
||||||
|
|
||||||
|
@a flags may have the @c wxCONTROL_DISABLED bit set, see
|
||||||
|
@ref wxCONTROL_FLAGS.
|
||||||
|
|
||||||
|
@since 3.1.3
|
||||||
|
*/
|
||||||
|
virtual void DrawCheckMark(wxWindow* win, wxDC& dc, const wxRect& rect,
|
||||||
|
int flags = 0) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Return the currently used renderer.
|
Return the currently used renderer.
|
||||||
*/
|
*/
|
||||||
@@ -560,6 +576,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual wxSize GetCheckBoxSize(wxWindow* win) = 0;
|
virtual wxSize GetCheckBoxSize(wxWindow* win) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
Returns the size of a check mark.
|
||||||
|
|
||||||
|
@param win A valid, i.e. non-null, window pointer which is used to get
|
||||||
|
the theme defining the checkmark size under some platforms.
|
||||||
|
|
||||||
|
@since 3.1.3
|
||||||
|
*/
|
||||||
|
virtual wxSize GetCheckMarkSize(wxWindow* win) = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Returns the size of the expander used in tree-like controls.
|
Returns the size of the expander used in tree-like controls.
|
||||||
|
|
||||||
|
@@ -123,11 +123,8 @@ public:
|
|||||||
{ if ( !m_renderer ) return false;
|
{ if ( !m_renderer ) return false;
|
||||||
return m_renderer == wxGraphicsRenderer::GetDefaultRenderer();
|
return m_renderer == wxGraphicsRenderer::GetDefaultRenderer();
|
||||||
}
|
}
|
||||||
bool IsRendererName(const wxString& name) const
|
|
||||||
{ if ( !m_renderer ) return name.empty();
|
|
||||||
return m_renderer->GetName() == name;
|
|
||||||
}
|
|
||||||
wxGraphicsRenderer* GetRenderer() const { return m_renderer; }
|
wxGraphicsRenderer* GetRenderer() const { return m_renderer; }
|
||||||
|
void EnableAntiAliasing(bool use) { m_useAntiAliasing = use; Refresh(); }
|
||||||
#endif // wxUSE_GRAPHICS_CONTEXT
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
void UseBuffer(bool use) { m_useBuffer = use; Refresh(); }
|
void UseBuffer(bool use) { m_useBuffer = use; Refresh(); }
|
||||||
void ShowBoundingBox(bool show) { m_showBBox = show; Refresh(); }
|
void ShowBoundingBox(bool show) { m_showBBox = show; Refresh(); }
|
||||||
@@ -176,6 +173,7 @@ private:
|
|||||||
wxPoint m_currentpoint;
|
wxPoint m_currentpoint;
|
||||||
#if wxUSE_GRAPHICS_CONTEXT
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
wxGraphicsRenderer* m_renderer;
|
wxGraphicsRenderer* m_renderer;
|
||||||
|
bool m_useAntiAliasing;
|
||||||
#endif
|
#endif
|
||||||
bool m_useBuffer;
|
bool m_useBuffer;
|
||||||
bool m_showBBox;
|
bool m_showBBox;
|
||||||
@@ -206,7 +204,7 @@ public:
|
|||||||
|
|
||||||
void OnGraphicContextNoneUpdateUI(wxUpdateUIEvent& event)
|
void OnGraphicContextNoneUpdateUI(wxUpdateUIEvent& event)
|
||||||
{
|
{
|
||||||
event.Check(m_canvas->IsRendererName(wxEmptyString));
|
event.Check(m_canvas->GetRenderer() == NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnGraphicContextDefault(wxCommandEvent& WXUNUSED(event))
|
void OnGraphicContextDefault(wxCommandEvent& WXUNUSED(event))
|
||||||
@@ -227,7 +225,7 @@ public:
|
|||||||
|
|
||||||
void OnGraphicContextCairoUpdateUI(wxUpdateUIEvent& event)
|
void OnGraphicContextCairoUpdateUI(wxUpdateUIEvent& event)
|
||||||
{
|
{
|
||||||
event.Check(m_canvas->IsRendererName("cairo"));
|
event.Check(m_canvas->GetRenderer() == wxGraphicsRenderer::GetCairoRenderer());
|
||||||
}
|
}
|
||||||
#endif // wxUSE_CAIRO
|
#endif // wxUSE_CAIRO
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
@@ -239,7 +237,7 @@ public:
|
|||||||
|
|
||||||
void OnGraphicContextGDIPlusUpdateUI(wxUpdateUIEvent& event)
|
void OnGraphicContextGDIPlusUpdateUI(wxUpdateUIEvent& event)
|
||||||
{
|
{
|
||||||
event.Check(m_canvas->IsRendererName("gdiplus"));
|
event.Check(m_canvas->GetRenderer() == wxGraphicsRenderer::GetGDIPlusRenderer());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#if wxUSE_GRAPHICS_DIRECT2D
|
#if wxUSE_GRAPHICS_DIRECT2D
|
||||||
@@ -250,10 +248,19 @@ public:
|
|||||||
|
|
||||||
void OnGraphicContextDirect2DUpdateUI(wxUpdateUIEvent& event)
|
void OnGraphicContextDirect2DUpdateUI(wxUpdateUIEvent& event)
|
||||||
{
|
{
|
||||||
event.Check(m_canvas->IsRendererName("direct2d"));
|
event.Check(m_canvas->GetRenderer() == wxGraphicsRenderer::GetDirect2DRenderer());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif // __WXMSW__
|
#endif // __WXMSW__
|
||||||
|
void OnAntiAliasing(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
m_canvas->EnableAntiAliasing(event.IsChecked());
|
||||||
|
}
|
||||||
|
|
||||||
|
void OnAntiAliasingUpdateUI(wxUpdateUIEvent& event)
|
||||||
|
{
|
||||||
|
event.Enable(m_canvas->GetRenderer() != NULL);
|
||||||
|
}
|
||||||
#endif // wxUSE_GRAPHICS_CONTEXT
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
|
|
||||||
void OnBuffer(wxCommandEvent& event);
|
void OnBuffer(wxCommandEvent& event);
|
||||||
@@ -339,6 +346,9 @@ enum
|
|||||||
File_BBox,
|
File_BBox,
|
||||||
File_Clip,
|
File_Clip,
|
||||||
File_Buffer,
|
File_Buffer,
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
File_AntiAliasing,
|
||||||
|
#endif
|
||||||
File_Copy,
|
File_Copy,
|
||||||
File_Save,
|
File_Save,
|
||||||
|
|
||||||
@@ -523,6 +533,7 @@ MyCanvas::MyCanvas(MyFrame *parent)
|
|||||||
m_rubberBand = false;
|
m_rubberBand = false;
|
||||||
#if wxUSE_GRAPHICS_CONTEXT
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
m_renderer = NULL;
|
m_renderer = NULL;
|
||||||
|
m_useAntiAliasing = true;
|
||||||
#endif
|
#endif
|
||||||
m_useBuffer = false;
|
m_useBuffer = false;
|
||||||
m_showBBox = false;
|
m_showBBox = false;
|
||||||
@@ -1826,6 +1837,8 @@ void MyCanvas::Draw(wxDC& pdc)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
context->SetAntialiasMode(m_useAntiAliasing ? wxANTIALIAS_DEFAULT : wxANTIALIAS_NONE);
|
||||||
|
|
||||||
gdc.SetBackground(GetBackgroundColour());
|
gdc.SetBackground(GetBackgroundColour());
|
||||||
gdc.SetGraphicsContext(context);
|
gdc.SetGraphicsContext(context);
|
||||||
}
|
}
|
||||||
@@ -2098,6 +2111,8 @@ wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_UPDATE_UI (File_GC_Direct2D, MyFrame::OnGraphicContextDirect2DUpdateUI)
|
EVT_UPDATE_UI (File_GC_Direct2D, MyFrame::OnGraphicContextDirect2DUpdateUI)
|
||||||
#endif
|
#endif
|
||||||
#endif // __WXMSW__
|
#endif // __WXMSW__
|
||||||
|
EVT_MENU (File_AntiAliasing, MyFrame::OnAntiAliasing)
|
||||||
|
EVT_UPDATE_UI (File_AntiAliasing, MyFrame::OnAntiAliasingUpdateUI)
|
||||||
#endif // wxUSE_GRAPHICS_CONTEXT
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
|
|
||||||
EVT_MENU (File_Buffer, MyFrame::OnBuffer)
|
EVT_MENU (File_Buffer, MyFrame::OnBuffer)
|
||||||
@@ -2142,17 +2157,17 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
|
|||||||
|
|
||||||
wxMenu *menuFile = new wxMenu;
|
wxMenu *menuFile = new wxMenu;
|
||||||
#if wxUSE_GRAPHICS_CONTEXT
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
menuFile->AppendCheckItem(File_GC_Default, "Use default wx&GraphicContext\tCtrl-Y");
|
menuFile->AppendCheckItem(File_GC_Default, "Use default wx&GraphicContext\t1");
|
||||||
m_menuItemUseDC = menuFile->AppendRadioItem(File_DC, "Use wx&DC\tShift-Ctrl-Y");
|
m_menuItemUseDC = menuFile->AppendRadioItem(File_DC, "Use wx&DC\t0");
|
||||||
#if wxUSE_CAIRO
|
#if wxUSE_CAIRO
|
||||||
menuFile->AppendRadioItem(File_GC_Cairo, "Use &Cairo\tCtrl-O");
|
menuFile->AppendRadioItem(File_GC_Cairo, "Use &Cairo\t2");
|
||||||
#endif // wxUSE_CAIRO
|
#endif // wxUSE_CAIRO
|
||||||
#ifdef __WXMSW__
|
#ifdef __WXMSW__
|
||||||
#if wxUSE_GRAPHICS_GDIPLUS
|
#if wxUSE_GRAPHICS_GDIPLUS
|
||||||
menuFile->AppendRadioItem(File_GC_GDIPlus, "Use &GDI+\tCtrl-+");
|
menuFile->AppendRadioItem(File_GC_GDIPlus, "Use &GDI+\t3");
|
||||||
#endif
|
#endif
|
||||||
#if wxUSE_GRAPHICS_DIRECT2D
|
#if wxUSE_GRAPHICS_DIRECT2D
|
||||||
menuFile->AppendRadioItem(File_GC_Direct2D, "Use &Direct2D\tCtrl-2");
|
menuFile->AppendRadioItem(File_GC_Direct2D, "Use &Direct2D\t4");
|
||||||
#endif
|
#endif
|
||||||
#endif // __WXMSW__
|
#endif // __WXMSW__
|
||||||
#endif // wxUSE_GRAPHICS_CONTEXT
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
@@ -2161,6 +2176,12 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
|
|||||||
"Show extents used in drawing operations");
|
"Show extents used in drawing operations");
|
||||||
menuFile->AppendCheckItem(File_Clip, "&Clip\tCtrl-C", "Clip/unclip drawing");
|
menuFile->AppendCheckItem(File_Clip, "&Clip\tCtrl-C", "Clip/unclip drawing");
|
||||||
menuFile->AppendCheckItem(File_Buffer, "&Use wx&BufferedPaintDC\tCtrl-Z", "Buffer painting");
|
menuFile->AppendCheckItem(File_Buffer, "&Use wx&BufferedPaintDC\tCtrl-Z", "Buffer painting");
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
menuFile->AppendCheckItem(File_AntiAliasing,
|
||||||
|
"&Anti-Aliasing in wxGraphicContext\tCtrl-Shift-A",
|
||||||
|
"Enable Anti-Aliasing in wxGraphicContext")
|
||||||
|
->Check();
|
||||||
|
#endif
|
||||||
menuFile->AppendSeparator();
|
menuFile->AppendSeparator();
|
||||||
#if wxUSE_METAFILE && defined(wxMETAFILE_IS_ENH)
|
#if wxUSE_METAFILE && defined(wxMETAFILE_IS_ENH)
|
||||||
menuFile->Append(File_Copy, "Copy to clipboard");
|
menuFile->Append(File_Copy, "Copy to clipboard");
|
||||||
|
@@ -247,6 +247,12 @@ private:
|
|||||||
wxRect(wxPoint(x2, y), sizeCheck), m_flags);
|
wxRect(wxPoint(x2, y), sizeCheck), m_flags);
|
||||||
y += lineHeight + sizeCheck.y;
|
y += lineHeight + sizeCheck.y;
|
||||||
|
|
||||||
|
dc.DrawText("DrawCheckMark()", x1, y);
|
||||||
|
const wxSize sizeMark = renderer.GetCheckMarkSize(this);
|
||||||
|
renderer.DrawCheckMark(this, dc,
|
||||||
|
wxRect(wxPoint(x2, y), sizeMark), m_flags);
|
||||||
|
y += lineHeight + sizeMark.y;
|
||||||
|
|
||||||
dc.DrawText("DrawRadioBitmap()", x1, y);
|
dc.DrawText("DrawRadioBitmap()", x1, y);
|
||||||
renderer.DrawRadioBitmap(this, dc,
|
renderer.DrawRadioBitmap(this, dc,
|
||||||
wxRect(wxPoint(x2, y), sizeCheck), m_flags);
|
wxRect(wxPoint(x2, y), sizeCheck), m_flags);
|
||||||
@@ -259,9 +265,10 @@ private:
|
|||||||
y += lineHeight + sizeCollapse.y;
|
y += lineHeight + sizeCollapse.y;
|
||||||
|
|
||||||
dc.DrawText("DrawTreeItemButton()", x1, y);
|
dc.DrawText("DrawTreeItemButton()", x1, y);
|
||||||
|
const wxSize sizeExpand = renderer.GetExpanderSize(this);
|
||||||
renderer.DrawTreeItemButton(this, dc,
|
renderer.DrawTreeItemButton(this, dc,
|
||||||
wxRect(x2, y, 20, 20), m_flags);
|
wxRect(wxPoint(x2, y), sizeExpand), m_flags);
|
||||||
y += lineHeight + 20;
|
y += lineHeight + sizeExpand.y;
|
||||||
|
|
||||||
#ifdef wxHAS_DRAW_TITLE_BAR_BITMAP
|
#ifdef wxHAS_DRAW_TITLE_BAR_BITMAP
|
||||||
dc.DrawText("DrawTitleBarBitmap()", x1, y);
|
dc.DrawText("DrawTitleBarBitmap()", x1, y);
|
||||||
|
@@ -752,6 +752,9 @@ void wxGCDCImpl::DoDrawPoint( wxCoord x, wxCoord y )
|
|||||||
if (!m_logicalFunctionSupported)
|
if (!m_logicalFunctionSupported)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
wxPen pointPen(m_pen.GetColour());
|
||||||
|
wxDCPenChanger penChanger(*GetOwner(), pointPen);
|
||||||
|
|
||||||
#if defined(__WXMSW__) && wxUSE_GRAPHICS_GDIPLUS
|
#if defined(__WXMSW__) && wxUSE_GRAPHICS_GDIPLUS
|
||||||
// single point path does not work with GDI+
|
// single point path does not work with GDI+
|
||||||
if (m_graphicContext->GetRenderer() == wxGraphicsRenderer::GetGDIPlusRenderer())
|
if (m_graphicContext->GetRenderer() == wxGraphicsRenderer::GetGDIPlusRenderer())
|
||||||
|
@@ -106,8 +106,15 @@ public:
|
|||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags = 0) wxOVERRIDE;
|
int flags = 0) wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual void DrawCheckMark(wxWindow *win,
|
||||||
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
int flags = 0) wxOVERRIDE;
|
||||||
|
|
||||||
virtual wxSize GetCheckBoxSize(wxWindow *win) wxOVERRIDE;
|
virtual wxSize GetCheckBoxSize(wxWindow *win) wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual wxSize GetCheckMarkSize(wxWindow *win) wxOVERRIDE;
|
||||||
|
|
||||||
virtual wxSize GetExpanderSize(wxWindow *win) wxOVERRIDE;
|
virtual wxSize GetExpanderSize(wxWindow *win) wxOVERRIDE;
|
||||||
|
|
||||||
virtual void DrawPushButton(wxWindow *win,
|
virtual void DrawPushButton(wxWindow *win,
|
||||||
@@ -714,6 +721,16 @@ wxRendererGeneric::DrawCheckBox(wxWindow *WXUNUSED(win),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
wxRendererGeneric::DrawCheckMark(wxWindow *WXUNUSED(win),
|
||||||
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
int flags)
|
||||||
|
{
|
||||||
|
dc.SetPen(*(flags & wxCONTROL_DISABLED ? wxGREY_PEN : wxBLACK_PEN));
|
||||||
|
dc.DrawCheckMark(rect);
|
||||||
|
}
|
||||||
|
|
||||||
wxSize wxRendererGeneric::GetCheckBoxSize(wxWindow *win)
|
wxSize wxRendererGeneric::GetCheckBoxSize(wxWindow *win)
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( win, wxSize(0, 0), "Must have a valid window" );
|
wxCHECK_MSG( win, wxSize(0, 0), "Must have a valid window" );
|
||||||
@@ -721,6 +738,11 @@ wxSize wxRendererGeneric::GetCheckBoxSize(wxWindow *win)
|
|||||||
return win->FromDIP(wxSize(16, 16));
|
return win->FromDIP(wxSize(16, 16));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxSize wxRendererGeneric::GetCheckMarkSize(wxWindow *win)
|
||||||
|
{
|
||||||
|
return GetCheckBoxSize(win);
|
||||||
|
}
|
||||||
|
|
||||||
wxSize wxRendererGeneric::GetExpanderSize(wxWindow *win)
|
wxSize wxRendererGeneric::GetExpanderSize(wxWindow *win)
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( win, wxSize(0, 0), "Must have a valid window" );
|
wxCHECK_MSG( win, wxSize(0, 0), "Must have a valid window" );
|
||||||
|
@@ -861,24 +861,6 @@ void wxMSWDCImpl::DoDrawArc(wxCoord x1, wxCoord y1,
|
|||||||
CalcBoundingBox(xc + r, yc + r);
|
CalcBoundingBox(xc + r, yc + r);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxMSWDCImpl::DoDrawCheckMark(wxCoord x1, wxCoord y1,
|
|
||||||
wxCoord width, wxCoord height)
|
|
||||||
{
|
|
||||||
wxCoord x2 = x1 + width,
|
|
||||||
y2 = y1 + height;
|
|
||||||
|
|
||||||
RECT rect;
|
|
||||||
rect.left = x1;
|
|
||||||
rect.top = y1;
|
|
||||||
rect.right = x2;
|
|
||||||
rect.bottom = y2;
|
|
||||||
|
|
||||||
DrawFrameControl(GetHdc(), &rect, DFC_MENU, DFCS_MENUCHECK);
|
|
||||||
|
|
||||||
CalcBoundingBox(x1, y1);
|
|
||||||
CalcBoundingBox(x2, y2);
|
|
||||||
}
|
|
||||||
|
|
||||||
void wxMSWDCImpl::DoDrawPoint(wxCoord x, wxCoord y)
|
void wxMSWDCImpl::DoDrawPoint(wxCoord x, wxCoord y)
|
||||||
{
|
{
|
||||||
COLORREF color = 0x00ffffff;
|
COLORREF color = 0x00ffffff;
|
||||||
|
@@ -135,6 +135,14 @@ public:
|
|||||||
DoDrawButton(DFCS_BUTTONCHECK, win, dc, rect, flags);
|
DoDrawButton(DFCS_BUTTONCHECK, win, dc, rect, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void DrawCheckMark(wxWindow *win,
|
||||||
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
int flags = 0) wxOVERRIDE
|
||||||
|
{
|
||||||
|
DoDrawFrameControl(DFC_MENU, DFCS_MENUCHECK, win, dc, rect, flags);
|
||||||
|
}
|
||||||
|
|
||||||
virtual void DrawPushButton(wxWindow *win,
|
virtual void DrawPushButton(wxWindow *win,
|
||||||
wxDC& dc,
|
wxDC& dc,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
@@ -230,6 +238,15 @@ public:
|
|||||||
m_rendererNative.DrawCheckBox(win, dc, rect, flags);
|
m_rendererNative.DrawCheckBox(win, dc, rect, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual void DrawCheckMark(wxWindow *win,
|
||||||
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
int flags = 0) wxOVERRIDE
|
||||||
|
{
|
||||||
|
if ( !DoDrawCheckMark(MENU_POPUPCHECK, win, dc, rect, flags) )
|
||||||
|
m_rendererNative.DrawCheckMark(win, dc, rect, flags);
|
||||||
|
}
|
||||||
|
|
||||||
virtual void DrawPushButton(wxWindow *win,
|
virtual void DrawPushButton(wxWindow *win,
|
||||||
wxDC& dc,
|
wxDC& dc,
|
||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
@@ -273,6 +290,8 @@ public:
|
|||||||
|
|
||||||
virtual wxSize GetCheckBoxSize(wxWindow *win) wxOVERRIDE;
|
virtual wxSize GetCheckBoxSize(wxWindow *win) wxOVERRIDE;
|
||||||
|
|
||||||
|
virtual wxSize GetCheckMarkSize(wxWindow* win) wxOVERRIDE;
|
||||||
|
|
||||||
virtual wxSize GetExpanderSize(wxWindow *win) wxOVERRIDE;
|
virtual wxSize GetExpanderSize(wxWindow *win) wxOVERRIDE;
|
||||||
|
|
||||||
virtual void DrawGauge(wxWindow* win,
|
virtual void DrawGauge(wxWindow* win,
|
||||||
@@ -309,6 +328,12 @@ private:
|
|||||||
const wxRect& rect,
|
const wxRect& rect,
|
||||||
int flags);
|
int flags);
|
||||||
|
|
||||||
|
bool DoDrawCheckMark(int kind,
|
||||||
|
wxWindow *win,
|
||||||
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
int flags);
|
||||||
|
|
||||||
wxDECLARE_NO_COPY_CLASS(wxRendererXP);
|
wxDECLARE_NO_COPY_CLASS(wxRendererXP);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -736,6 +761,38 @@ wxRendererXP::DoDrawXPButton(int kind,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
wxRendererXP::DoDrawCheckMark(int kind,
|
||||||
|
wxWindow *win,
|
||||||
|
wxDC& dc,
|
||||||
|
const wxRect& rect,
|
||||||
|
int flags)
|
||||||
|
{
|
||||||
|
wxUxThemeHandle hTheme(win, L"MENU");
|
||||||
|
if ( !hTheme )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
wxCHECK_MSG( dc.GetImpl(), false, wxT("Invalid wxDC") );
|
||||||
|
|
||||||
|
RECT r = ConvertToRECT(dc, rect);
|
||||||
|
|
||||||
|
int state = MC_CHECKMARKNORMAL;
|
||||||
|
if ( flags & wxCONTROL_DISABLED )
|
||||||
|
state = MC_CHECKMARKDISABLED;
|
||||||
|
|
||||||
|
::DrawThemeBackground
|
||||||
|
(
|
||||||
|
hTheme,
|
||||||
|
GetHdcOf(dc.GetTempHDC()),
|
||||||
|
kind,
|
||||||
|
state,
|
||||||
|
&r,
|
||||||
|
NULL
|
||||||
|
);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
wxRendererXP::DoDrawButtonLike(HTHEME htheme,
|
wxRendererXP::DoDrawButtonLike(HTHEME htheme,
|
||||||
int part,
|
int part,
|
||||||
@@ -852,6 +909,23 @@ wxSize wxRendererXP::GetCheckBoxSize(wxWindow* win)
|
|||||||
return m_rendererNative.GetCheckBoxSize(win);
|
return m_rendererNative.GetCheckBoxSize(win);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxSize wxRendererXP::GetCheckMarkSize(wxWindow* win)
|
||||||
|
{
|
||||||
|
wxCHECK_MSG(win, wxSize(0, 0), "Must have a valid window");
|
||||||
|
|
||||||
|
wxUxThemeHandle hTheme(win, L"MENU");
|
||||||
|
if (hTheme)
|
||||||
|
{
|
||||||
|
if (::IsThemePartDefined(hTheme, MENU_POPUPCHECK, 0))
|
||||||
|
{
|
||||||
|
SIZE checkSize;
|
||||||
|
if (::GetThemePartSize(hTheme, NULL, MENU_POPUPCHECK, MC_CHECKMARKNORMAL, NULL, TS_DRAW, &checkSize) == S_OK)
|
||||||
|
return wxSize(checkSize.cx, checkSize.cy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return m_rendererNative.GetCheckMarkSize(win);
|
||||||
|
}
|
||||||
|
|
||||||
wxSize wxRendererXP::GetExpanderSize(wxWindow* win)
|
wxSize wxRendererXP::GetExpanderSize(wxWindow* win)
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( win, wxSize(0, 0), "Must have a valid window" );
|
wxCHECK_MSG( win, wxSize(0, 0), "Must have a valid window" );
|
||||||
|
Reference in New Issue
Block a user