graphics context implementation test case
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41511 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -34,6 +34,18 @@
|
|||||||
#include "wx/image.h"
|
#include "wx/image.h"
|
||||||
#include "wx/artprov.h"
|
#include "wx/artprov.h"
|
||||||
|
|
||||||
|
#define wxTEST_GRAPHICS 0
|
||||||
|
|
||||||
|
#if wxTEST_GRAPHICS
|
||||||
|
#include "wx/graphics.h"
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT == 0
|
||||||
|
#error wxUSE_GRAPHICS_CONTEXT must be defined to 1 for testing
|
||||||
|
#endif
|
||||||
|
#else
|
||||||
|
#undef wxUSE_GRAPHICS_CONTEXT
|
||||||
|
#define wxUSE_GRAPHICS_CONTEXT 0
|
||||||
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// ressources
|
// ressources
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -61,6 +73,9 @@ enum ScreenToShow
|
|||||||
Show_Regions,
|
Show_Regions,
|
||||||
Show_Circles,
|
Show_Circles,
|
||||||
Show_Splines,
|
Show_Splines,
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
Show_Alpha,
|
||||||
|
#endif
|
||||||
Show_Gradient,
|
Show_Gradient,
|
||||||
Show_Max
|
Show_Max
|
||||||
};
|
};
|
||||||
@@ -114,6 +129,9 @@ public:
|
|||||||
void OnQuit(wxCommandEvent& event);
|
void OnQuit(wxCommandEvent& event);
|
||||||
void OnAbout(wxCommandEvent& event);
|
void OnAbout(wxCommandEvent& event);
|
||||||
void OnClip(wxCommandEvent& event);
|
void OnClip(wxCommandEvent& event);
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void OnGraphicContext(wxCommandEvent& event);
|
||||||
|
#endif
|
||||||
void OnShow(wxCommandEvent &event);
|
void OnShow(wxCommandEvent &event);
|
||||||
void OnOption(wxCommandEvent &event);
|
void OnOption(wxCommandEvent &event);
|
||||||
|
|
||||||
@@ -154,6 +172,9 @@ public:
|
|||||||
|
|
||||||
// set or remove the clipping region
|
// set or remove the clipping region
|
||||||
void Clip(bool clip) { m_clip = clip; Refresh(); }
|
void Clip(bool clip) { m_clip = clip; Refresh(); }
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void UseGraphicContext(bool use) { m_useContext = use; Refresh(); }
|
||||||
|
#endif
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void DrawTestLines( int x, int y, int width, wxDC &dc );
|
void DrawTestLines( int x, int y, int width, wxDC &dc );
|
||||||
@@ -162,6 +183,9 @@ protected:
|
|||||||
void DrawText(wxDC& dc);
|
void DrawText(wxDC& dc);
|
||||||
void DrawImages(wxDC& dc);
|
void DrawImages(wxDC& dc);
|
||||||
void DrawWithLogicalOps(wxDC& dc);
|
void DrawWithLogicalOps(wxDC& dc);
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void DrawAlpha(wxDC& dc);
|
||||||
|
#endif
|
||||||
void DrawRegions(wxDC& dc);
|
void DrawRegions(wxDC& dc);
|
||||||
void DrawCircles(wxDC& dc);
|
void DrawCircles(wxDC& dc);
|
||||||
void DrawSplines(wxDC& dc);
|
void DrawSplines(wxDC& dc);
|
||||||
@@ -177,6 +201,9 @@ private:
|
|||||||
wxBitmap m_smile_bmp;
|
wxBitmap m_smile_bmp;
|
||||||
wxIcon m_std_icon;
|
wxIcon m_std_icon;
|
||||||
bool m_clip;
|
bool m_clip;
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
bool m_useContext ;
|
||||||
|
#endif
|
||||||
|
|
||||||
DECLARE_EVENT_TABLE()
|
DECLARE_EVENT_TABLE()
|
||||||
};
|
};
|
||||||
@@ -203,10 +230,16 @@ enum
|
|||||||
File_ShowRegions,
|
File_ShowRegions,
|
||||||
File_ShowCircles,
|
File_ShowCircles,
|
||||||
File_ShowSplines,
|
File_ShowSplines,
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
File_ShowAlpha,
|
||||||
|
#endif
|
||||||
File_ShowGradients,
|
File_ShowGradients,
|
||||||
MenuShow_Last = File_ShowGradients,
|
MenuShow_Last = File_ShowGradients,
|
||||||
|
|
||||||
File_Clip,
|
File_Clip,
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
File_GraphicContext,
|
||||||
|
#endif
|
||||||
|
|
||||||
MenuOption_First,
|
MenuOption_First,
|
||||||
|
|
||||||
@@ -384,6 +417,9 @@ MyCanvas::MyCanvas(MyFrame *parent)
|
|||||||
m_smile_bmp = wxBitmap(smile_xpm);
|
m_smile_bmp = wxBitmap(smile_xpm);
|
||||||
m_std_icon = wxArtProvider::GetIcon(wxART_INFORMATION);
|
m_std_icon = wxArtProvider::GetIcon(wxART_INFORMATION);
|
||||||
m_clip = false;
|
m_clip = false;
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
m_useContext = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyCanvas::DrawTestBrushes(wxDC& dc)
|
void MyCanvas::DrawTestBrushes(wxDC& dc)
|
||||||
@@ -857,6 +893,41 @@ void MyCanvas::DrawWithLogicalOps(wxDC& dc)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void MyCanvas::DrawAlpha(wxDC& dc)
|
||||||
|
{
|
||||||
|
wxDouble margin = 20 ;
|
||||||
|
wxDouble width = 180 ;
|
||||||
|
wxDouble radius = 30 ;
|
||||||
|
|
||||||
|
dc.SetPen( wxPen( wxColour( 128, 0, 0, 255 ),12, wxSOLID));
|
||||||
|
dc.SetBrush( wxBrush( wxColour( 255, 0, 0, 255),wxSOLID));
|
||||||
|
|
||||||
|
wxRect r(margin,margin+width*0.66,width,width) ;
|
||||||
|
|
||||||
|
dc.DrawRoundedRectangle( r.x, r.y, r.width, r.width, radius ) ;
|
||||||
|
|
||||||
|
dc.SetPen( wxPen( wxColour( 0, 0, 128, 255 ),12, wxSOLID));
|
||||||
|
dc.SetBrush( wxBrush( wxColour( 0, 0, 255, 255),wxSOLID));
|
||||||
|
|
||||||
|
r.Offset( width * 0.8 , - width * 0.66 ) ;
|
||||||
|
|
||||||
|
dc.DrawRoundedRectangle( r.x, r.y, r.width, r.width, radius ) ;
|
||||||
|
|
||||||
|
dc.SetPen( wxPen( wxColour( 128, 128, 0, 255 ),12, wxSOLID));
|
||||||
|
dc.SetBrush( wxBrush( wxColour( 192, 192, 0, 255),wxSOLID));
|
||||||
|
|
||||||
|
r.Offset( width * 0.8 , width *0.5 ) ;
|
||||||
|
|
||||||
|
dc.DrawRoundedRectangle( r.x, r.y, r.width, r.width, radius ) ;
|
||||||
|
|
||||||
|
dc.SetPen( *wxTRANSPARENT_PEN ) ;
|
||||||
|
dc.SetBrush( wxBrush( wxColour(255,255,128,128) ) );
|
||||||
|
dc.DrawRoundedRectangle( 0 , margin + width / 2 , width * 3 , 100 , radius) ;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
void MyCanvas::DrawCircles(wxDC& dc)
|
void MyCanvas::DrawCircles(wxDC& dc)
|
||||||
{
|
{
|
||||||
int x = 100,
|
int x = 100,
|
||||||
@@ -1095,7 +1166,15 @@ void MyCanvas::DrawRegionsHelper(wxDC& dc, wxCoord x, bool firstTime)
|
|||||||
|
|
||||||
void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event))
|
void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event))
|
||||||
{
|
{
|
||||||
wxPaintDC dc(this);
|
wxPaintDC pdc(this);
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
wxGCDC gdc( pdc ) ;
|
||||||
|
wxDC &dc = m_useContext ? (wxDC&) gdc : (wxDC&) pdc ;
|
||||||
|
#else
|
||||||
|
wxDC &dc = pdc ;
|
||||||
|
#endif
|
||||||
|
|
||||||
PrepareDC(dc);
|
PrepareDC(dc);
|
||||||
|
|
||||||
m_owner->PrepareDC(dc);
|
m_owner->PrepareDC(dc);
|
||||||
@@ -1173,6 +1252,12 @@ void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event))
|
|||||||
DrawWithLogicalOps(dc);
|
DrawWithLogicalOps(dc);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
case Show_Alpha:
|
||||||
|
DrawAlpha(dc);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
case Show_Gradient:
|
case Show_Gradient:
|
||||||
DrawGradients(dc);
|
DrawGradients(dc);
|
||||||
break;
|
break;
|
||||||
@@ -1211,6 +1296,9 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU (File_Quit, MyFrame::OnQuit)
|
EVT_MENU (File_Quit, MyFrame::OnQuit)
|
||||||
EVT_MENU (File_About, MyFrame::OnAbout)
|
EVT_MENU (File_About, MyFrame::OnAbout)
|
||||||
EVT_MENU (File_Clip, MyFrame::OnClip)
|
EVT_MENU (File_Clip, MyFrame::OnClip)
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
EVT_MENU (File_GraphicContext, MyFrame::OnGraphicContext)
|
||||||
|
#endif
|
||||||
|
|
||||||
EVT_MENU_RANGE(MenuShow_First, MenuShow_Last, MyFrame::OnShow)
|
EVT_MENU_RANGE(MenuShow_First, MenuShow_Last, MyFrame::OnShow)
|
||||||
|
|
||||||
@@ -1235,10 +1323,16 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
|
|||||||
menuFile->Append(File_ShowOps, _T("&ROP screen\tF7"));
|
menuFile->Append(File_ShowOps, _T("&ROP screen\tF7"));
|
||||||
menuFile->Append(File_ShowRegions, _T("Re&gions screen\tF8"));
|
menuFile->Append(File_ShowRegions, _T("Re&gions screen\tF8"));
|
||||||
menuFile->Append(File_ShowCircles, _T("&Circles screen\tF9"));
|
menuFile->Append(File_ShowCircles, _T("&Circles screen\tF9"));
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
menuFile->Append(File_ShowAlpha, _T("&Alpha screen\tF10"));
|
||||||
|
#endif
|
||||||
menuFile->Append(File_ShowSplines, _T("&Splines screen\tF11"));
|
menuFile->Append(File_ShowSplines, _T("&Splines screen\tF11"));
|
||||||
menuFile->Append(File_ShowGradients, _T("&Gradients screen\tF12"));
|
menuFile->Append(File_ShowGradients, _T("&Gradients screen\tF12"));
|
||||||
menuFile->AppendSeparator();
|
menuFile->AppendSeparator();
|
||||||
menuFile->AppendCheckItem(File_Clip, _T("&Clip\tCtrl-C"), _T("Clip/unclip drawing"));
|
menuFile->AppendCheckItem(File_Clip, _T("&Clip\tCtrl-C"), _T("Clip/unclip drawing"));
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
menuFile->AppendCheckItem(File_GraphicContext, _T("&Use GraphicContext\tCtrl-Y"), _T("Use GraphicContext"));
|
||||||
|
#endif
|
||||||
menuFile->AppendSeparator();
|
menuFile->AppendSeparator();
|
||||||
menuFile->Append(File_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
|
menuFile->Append(File_About, _T("&About...\tCtrl-A"), _T("Show about dialog"));
|
||||||
menuFile->AppendSeparator();
|
menuFile->AppendSeparator();
|
||||||
@@ -1339,6 +1433,13 @@ void MyFrame::OnClip(wxCommandEvent& event)
|
|||||||
m_canvas->Clip(event.IsChecked());
|
m_canvas->Clip(event.IsChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
void MyFrame::OnGraphicContext(wxCommandEvent& event)
|
||||||
|
{
|
||||||
|
m_canvas->UseGraphicContext(event.IsChecked());
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void MyFrame::OnShow(wxCommandEvent& event)
|
void MyFrame::OnShow(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
m_canvas->ToShow((ScreenToShow)(event.GetId() - MenuShow_First));
|
m_canvas->ToShow((ScreenToShow)(event.GetId() - MenuShow_First));
|
||||||
|
Reference in New Issue
Block a user