Allow saving the drawing sample canvas to a file or clipboard.
This allows to test wxMemoryDC and, under MSW, wxMetafileDC and also can be used to compare the output of different versions of the sample (possibly from different ports, too). Closes #13327. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68305 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -37,6 +37,7 @@
|
||||
#include "wx/overlay.h"
|
||||
#include "wx/graphics.h"
|
||||
#include "wx/filename.h"
|
||||
#include "wx/metafile.h"
|
||||
|
||||
#define TEST_CAIRO_EVERYWHERE 0
|
||||
|
||||
@@ -101,6 +102,8 @@ public:
|
||||
#if wxUSE_GRAPHICS_CONTEXT
|
||||
void OnGraphicContext(wxCommandEvent& event);
|
||||
#endif
|
||||
void OnCopy(wxCommandEvent& event);
|
||||
void OnSave(wxCommandEvent& event);
|
||||
void OnShow(wxCommandEvent &event);
|
||||
void OnOption(wxCommandEvent &event);
|
||||
|
||||
@@ -146,6 +149,7 @@ public:
|
||||
#if wxUSE_GRAPHICS_CONTEXT
|
||||
void UseGraphicContext(bool use) { m_useContext = use; Refresh(); }
|
||||
#endif
|
||||
template <typename T> void Draw(T& dc);
|
||||
|
||||
protected:
|
||||
enum DrawMode
|
||||
@@ -224,6 +228,8 @@ enum
|
||||
#if wxUSE_GRAPHICS_CONTEXT
|
||||
File_GraphicContext,
|
||||
#endif
|
||||
File_Copy,
|
||||
File_Save,
|
||||
|
||||
MenuOption_First,
|
||||
|
||||
@@ -359,6 +365,9 @@ bool MyApp::OnInit()
|
||||
// still continue, the sample can be used without images too if they're
|
||||
// missing for whatever reason
|
||||
}
|
||||
#if wxUSE_LIBPNG
|
||||
wxImage::AddHandler( new wxPNGHandler );
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1485,7 +1494,12 @@ extern wxGraphicsRenderer* gCairoRenderer;
|
||||
void MyCanvas::OnPaint(wxPaintEvent &WXUNUSED(event))
|
||||
{
|
||||
wxPaintDC pdc(this);
|
||||
Draw(pdc);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void MyCanvas::Draw(T& pdc)
|
||||
{
|
||||
#if wxUSE_GRAPHICS_CONTEXT
|
||||
#if TEST_CAIRO_EVERYWHERE
|
||||
wxGCDC gdc;
|
||||
@@ -1691,6 +1705,8 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
||||
#if wxUSE_GRAPHICS_CONTEXT
|
||||
EVT_MENU (File_GraphicContext, MyFrame::OnGraphicContext)
|
||||
#endif
|
||||
EVT_MENU (File_Copy, MyFrame::OnCopy)
|
||||
EVT_MENU (File_Save, MyFrame::OnSave)
|
||||
|
||||
EVT_MENU_RANGE(MenuShow_First, MenuShow_Last, MyFrame::OnShow)
|
||||
|
||||
@@ -1719,7 +1735,7 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
|
||||
#if wxUSE_GRAPHICS_CONTEXT
|
||||
menuFile->Append(File_ShowAlpha, wxT("&Alpha screen\tF10"));
|
||||
#endif
|
||||
menuFile->Append(File_ShowSplines, wxT("&Splines screen\tF11"));
|
||||
menuFile->Append(File_ShowSplines, wxT("Spl&ines screen\tF11"));
|
||||
menuFile->Append(File_ShowGradients, wxT("&Gradients screen\tF12"));
|
||||
#if wxUSE_GRAPHICS_CONTEXT
|
||||
menuFile->Append(File_ShowGraphics, wxT("&Graphics screen"));
|
||||
@@ -1730,6 +1746,11 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
|
||||
menuFile->AppendCheckItem(File_GraphicContext, wxT("&Use GraphicContext\tCtrl-Y"), wxT("Use GraphicContext"));
|
||||
#endif
|
||||
menuFile->AppendSeparator();
|
||||
#if wxUSE_METAFILE && defined(wxMETAFILE_IS_ENH)
|
||||
menuFile->Append(File_Copy, wxT("Copy to clipboard"));
|
||||
#endif
|
||||
menuFile->Append(File_Save, wxT("&Save...\tCtrl-S"), wxT("Save drawing to file"));
|
||||
menuFile->AppendSeparator();
|
||||
menuFile->Append(File_About, wxT("&About...\tCtrl-A"), wxT("Show about dialog"));
|
||||
menuFile->AppendSeparator();
|
||||
menuFile->Append(File_Quit, wxT("E&xit\tAlt-X"), wxT("Quit this program"));
|
||||
@@ -1836,6 +1857,38 @@ void MyFrame::OnGraphicContext(wxCommandEvent& event)
|
||||
}
|
||||
#endif
|
||||
|
||||
void MyFrame::OnCopy(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
#if wxUSE_METAFILE && defined(wxMETAFILE_IS_ENH)
|
||||
wxMetafileDC dc;
|
||||
if (!dc.IsOk())
|
||||
return;
|
||||
m_canvas->Draw(dc);
|
||||
wxMetafile *mf = dc.Close();
|
||||
if (!mf)
|
||||
return;
|
||||
mf->SetClipboard();
|
||||
delete mf;
|
||||
#endif
|
||||
}
|
||||
|
||||
void MyFrame::OnSave(wxCommandEvent& WXUNUSED(event))
|
||||
{
|
||||
wxFileDialog dlg(this, wxT("Save as bitmap"), wxT(""), wxT(""),
|
||||
#if wxUSE_LIBPNG
|
||||
wxT("PNG image (*.png)|*.png;*.PNG|")
|
||||
#endif
|
||||
wxT("Bitmap image (*.bmp)|*.bmp;*.BMP"),
|
||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
|
||||
if (dlg.ShowModal() == wxID_OK)
|
||||
{
|
||||
wxBitmap bmp(500, 800);
|
||||
wxMemoryDC mdc(bmp);
|
||||
m_canvas->Draw(mdc);
|
||||
bmp.ConvertToImage().SaveFile(dlg.GetPath());
|
||||
}
|
||||
}
|
||||
|
||||
void MyFrame::OnShow(wxCommandEvent& event)
|
||||
{
|
||||
m_canvas->ToShow(event.GetId());
|
||||
|
Reference in New Issue
Block a user