Demonstrate drawing on wxGCDC in renderer sample
This is to demonstrate how wxRendererNative works with various wxGraphicsRenderers.
This commit is contained in:
parent
0939130158
commit
5cb255cc8d
@ -25,6 +25,7 @@
|
|||||||
#include "wx/frame.h"
|
#include "wx/frame.h"
|
||||||
#include "wx/dc.h"
|
#include "wx/dc.h"
|
||||||
#include "wx/dcclient.h"
|
#include "wx/dcclient.h"
|
||||||
|
#include "wx/dcgraph.h"
|
||||||
#include "wx/panel.h"
|
#include "wx/panel.h"
|
||||||
#include "wx/menu.h"
|
#include "wx/menu.h"
|
||||||
#include "wx/textdlg.h"
|
#include "wx/textdlg.h"
|
||||||
@ -146,6 +147,22 @@ private:
|
|||||||
void OnToggleDrawFlag(wxCommandEvent& event, int flag);
|
void OnToggleDrawFlag(wxCommandEvent& event, int flag);
|
||||||
void OnChangeAlign(int align);
|
void OnChangeAlign(int align);
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void OnGraphicContextNone(wxCommandEvent& evt);
|
||||||
|
void OnGraphicContextDefault(wxCommandEvent& evt);
|
||||||
|
#if wxUSE_CAIRO
|
||||||
|
void OnGraphicContextCairo(wxCommandEvent& evt);
|
||||||
|
#endif // wxUSE_CAIRO
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
#if wxUSE_GRAPHICS_GDIPLUS
|
||||||
|
void OnGraphicContextGDIPlus(wxCommandEvent& evt);
|
||||||
|
#endif
|
||||||
|
#if wxUSE_GRAPHICS_DIRECT2D
|
||||||
|
void OnGraphicContextDirect2D(wxCommandEvent& evt);
|
||||||
|
#endif
|
||||||
|
#endif // __WXMSW__
|
||||||
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
|
|
||||||
class MyPanel *m_panel;
|
class MyPanel *m_panel;
|
||||||
|
|
||||||
// any class wishing to process wxWidgets events must use this macro
|
// any class wishing to process wxWidgets events must use this macro
|
||||||
@ -163,6 +180,9 @@ public:
|
|||||||
m_useIcon =
|
m_useIcon =
|
||||||
m_useBitmap =
|
m_useBitmap =
|
||||||
m_useGeneric = false;
|
m_useGeneric = false;
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
m_renderer = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetFlags() const { return m_flags; }
|
int GetFlags() const { return m_flags; }
|
||||||
@ -172,11 +192,28 @@ public:
|
|||||||
void SetUseIcon(bool useIcon) { m_useIcon = useIcon; }
|
void SetUseIcon(bool useIcon) { m_useIcon = useIcon; }
|
||||||
void SetUseBitmap(bool useBitmap) { m_useBitmap = useBitmap; }
|
void SetUseBitmap(bool useBitmap) { m_useBitmap = useBitmap; }
|
||||||
void SetUseGeneric(bool useGeneric) { m_useGeneric = useGeneric; }
|
void SetUseGeneric(bool useGeneric) { m_useGeneric = useGeneric; }
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void UseGraphicRenderer(wxGraphicsRenderer* renderer);
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void OnPaint(wxPaintEvent&)
|
void OnPaint(wxPaintEvent&)
|
||||||
{
|
{
|
||||||
wxPaintDC dc(this);
|
wxPaintDC pdc(this);
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
wxGCDC gdc;
|
||||||
|
if ( m_renderer )
|
||||||
|
{
|
||||||
|
wxGraphicsContext* ctx = m_renderer->CreateContext(pdc);
|
||||||
|
gdc.SetBackground(GetBackgroundColour());
|
||||||
|
gdc.SetGraphicsContext(ctx);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxDC& dc = m_renderer ? static_cast<wxDC&>(gdc) : pdc;
|
||||||
|
#else
|
||||||
|
wxDC& dc = pdc;
|
||||||
|
#endif
|
||||||
|
|
||||||
wxRendererNative& renderer = m_useGeneric ? wxRendererNative::GetGeneric()
|
wxRendererNative& renderer = m_useGeneric ? wxRendererNative::GetGeneric()
|
||||||
: wxRendererNative::Get();
|
: wxRendererNative::Get();
|
||||||
@ -325,10 +362,34 @@ private:
|
|||||||
bool m_useIcon,
|
bool m_useIcon,
|
||||||
m_useBitmap,
|
m_useBitmap,
|
||||||
m_useGeneric;
|
m_useGeneric;
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
wxGraphicsRenderer* m_renderer;
|
||||||
|
#endif
|
||||||
|
|
||||||
wxDECLARE_EVENT_TABLE();
|
wxDECLARE_EVENT_TABLE();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void MyPanel::UseGraphicRenderer(wxGraphicsRenderer* renderer)
|
||||||
|
{
|
||||||
|
m_renderer = renderer;
|
||||||
|
if ( renderer )
|
||||||
|
{
|
||||||
|
int major, minor, micro;
|
||||||
|
renderer->GetVersion(&major, &minor, µ);
|
||||||
|
wxString str = wxString::Format("Graphics renderer: %s %i.%i.%i",
|
||||||
|
renderer->GetName(), major, minor, micro);
|
||||||
|
reinterpret_cast<wxFrame*>(GetParent())->GetStatusBar()->SetStatusText(str, 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
reinterpret_cast<wxFrame*>(GetParent())->GetStatusBar()->SetStatusText(wxEmptyString, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
Refresh();
|
||||||
|
}
|
||||||
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
|
|
||||||
wxBEGIN_EVENT_TABLE(MyPanel, wxPanel)
|
wxBEGIN_EVENT_TABLE(MyPanel, wxPanel)
|
||||||
EVT_PAINT(MyPanel::OnPaint)
|
EVT_PAINT(MyPanel::OnPaint)
|
||||||
wxEND_EVENT_TABLE()
|
wxEND_EVENT_TABLE()
|
||||||
@ -362,6 +423,22 @@ enum
|
|||||||
Render_Unload,
|
Render_Unload,
|
||||||
#endif // wxUSE_DYNLIB_CLASS
|
#endif // wxUSE_DYNLIB_CLASS
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
DC_DC,
|
||||||
|
DC_GC_Default,
|
||||||
|
#if wxUSE_CAIRO
|
||||||
|
DC_GC_Cairo,
|
||||||
|
#endif // wxUSE_CAIRO
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
#if wxUSE_GRAPHICS_GDIPLUS
|
||||||
|
DC_GC_GDIPlus,
|
||||||
|
#endif
|
||||||
|
#if wxUSE_GRAPHICS_DIRECT2D
|
||||||
|
DC_GC_Direct2D,
|
||||||
|
#endif
|
||||||
|
#endif // __WXMSW__
|
||||||
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
|
|
||||||
// standard menu items
|
// standard menu items
|
||||||
Render_Quit = wxID_EXIT,
|
Render_Quit = wxID_EXIT,
|
||||||
|
|
||||||
@ -400,6 +477,22 @@ wxBEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
#endif // wxUSE_DYNLIB_CLASS
|
#endif // wxUSE_DYNLIB_CLASS
|
||||||
EVT_MENU(Render_Quit, MyFrame::OnQuit)
|
EVT_MENU(Render_Quit, MyFrame::OnQuit)
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
EVT_MENU(DC_DC, MyFrame::OnGraphicContextNone)
|
||||||
|
EVT_MENU(DC_GC_Default, MyFrame::OnGraphicContextDefault)
|
||||||
|
#if wxUSE_CAIRO
|
||||||
|
EVT_MENU(DC_GC_Cairo, MyFrame::OnGraphicContextCairo)
|
||||||
|
#endif // wxUSE_CAIRO
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
#if wxUSE_GRAPHICS_GDIPLUS
|
||||||
|
EVT_MENU(DC_GC_GDIPlus, MyFrame::OnGraphicContextGDIPlus)
|
||||||
|
#endif
|
||||||
|
#if wxUSE_GRAPHICS_DIRECT2D
|
||||||
|
EVT_MENU(DC_GC_Direct2D, MyFrame::OnGraphicContextDirect2D)
|
||||||
|
#endif
|
||||||
|
#endif // __WXMSW__
|
||||||
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
|
|
||||||
EVT_MENU(Render_About, MyFrame::OnAbout)
|
EVT_MENU(Render_About, MyFrame::OnAbout)
|
||||||
wxEND_EVENT_TABLE()
|
wxEND_EVENT_TABLE()
|
||||||
|
|
||||||
@ -486,6 +579,25 @@ MyFrame::MyFrame()
|
|||||||
#endif // wxUSE_DYNLIB_CLASS
|
#endif // wxUSE_DYNLIB_CLASS
|
||||||
menuFile->Append(Render_Quit);
|
menuFile->Append(Render_Quit);
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
wxMenu* menuDC = new wxMenu;
|
||||||
|
// Number the different renderer choices consecutively, starting from 0.
|
||||||
|
int accel = 0;
|
||||||
|
menuDC->AppendRadioItem(DC_DC, wxString::Format("Use wx&DC\t%i", accel++));
|
||||||
|
menuDC->AppendRadioItem(DC_GC_Default, wxString::Format("Use default wx&GraphicContext\t%i", accel++));
|
||||||
|
#if wxUSE_CAIRO
|
||||||
|
menuDC->AppendRadioItem(DC_GC_Cairo, wxString::Format("Use &Cairo\t%i", accel++));
|
||||||
|
#endif // wxUSE_CAIRO
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
#if wxUSE_GRAPHICS_GDIPLUS
|
||||||
|
menuDC->AppendRadioItem(DC_GC_GDIPlus, wxString::Format("Use &GDI+\t%i", accel++));
|
||||||
|
#endif
|
||||||
|
#if wxUSE_GRAPHICS_DIRECT2D
|
||||||
|
menuDC->AppendRadioItem(DC_GC_Direct2D,wxString::Format("Use &Direct2D\t%i", accel++));
|
||||||
|
#endif
|
||||||
|
#endif // __WXMSW__
|
||||||
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
|
|
||||||
// the "About" item should be in the help menu
|
// the "About" item should be in the help menu
|
||||||
wxMenu *helpMenu = new wxMenu;
|
wxMenu *helpMenu = new wxMenu;
|
||||||
helpMenu->Append(Render_About);
|
helpMenu->Append(Render_About);
|
||||||
@ -493,6 +605,9 @@ MyFrame::MyFrame()
|
|||||||
// now append the freshly created menu to the menu bar...
|
// now append the freshly created menu to the menu bar...
|
||||||
wxMenuBar *menuBar = new wxMenuBar();
|
wxMenuBar *menuBar = new wxMenuBar();
|
||||||
menuBar->Append(menuFile, "&File");
|
menuBar->Append(menuFile, "&File");
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
menuBar->Append(menuDC, "&DC");
|
||||||
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
menuBar->Append(helpMenu, "&Help");
|
menuBar->Append(helpMenu, "&Help");
|
||||||
|
|
||||||
// ... and attach this menu bar to the frame
|
// ... and attach this menu bar to the frame
|
||||||
@ -627,3 +742,35 @@ void MyFrame::OnAbout(wxCommandEvent& WXUNUSED(event))
|
|||||||
wxOK | wxICON_INFORMATION, this);
|
wxOK | wxICON_INFORMATION, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void MyFrame::OnGraphicContextNone(wxCommandEvent& WXUNUSED(evt))
|
||||||
|
{
|
||||||
|
m_panel->UseGraphicRenderer(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnGraphicContextDefault(wxCommandEvent& WXUNUSED(evt))
|
||||||
|
{
|
||||||
|
m_panel->UseGraphicRenderer(wxGraphicsRenderer::GetDefaultRenderer());
|
||||||
|
}
|
||||||
|
|
||||||
|
#if wxUSE_CAIRO
|
||||||
|
void MyFrame::OnGraphicContextCairo(wxCommandEvent& WXUNUSED(evt))
|
||||||
|
{
|
||||||
|
m_panel->UseGraphicRenderer(wxGraphicsRenderer::GetCairoRenderer());
|
||||||
|
}
|
||||||
|
#endif // wxUSE_CAIRO
|
||||||
|
#ifdef __WXMSW__
|
||||||
|
#if wxUSE_GRAPHICS_GDIPLUS
|
||||||
|
void MyFrame::OnGraphicContextGDIPlus(wxCommandEvent& WXUNUSED(evt))
|
||||||
|
{
|
||||||
|
m_panel->UseGraphicRenderer(wxGraphicsRenderer::GetGDIPlusRenderer());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if wxUSE_GRAPHICS_DIRECT2D
|
||||||
|
void MyFrame::OnGraphicContextDirect2D(wxCommandEvent& WXUNUSED(evt))
|
||||||
|
{
|
||||||
|
m_panel->UseGraphicRenderer(wxGraphicsRenderer::GetDirect2DRenderer());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#endif // __WXMSW__
|
||||||
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
|
Loading…
Reference in New Issue
Block a user