Add saving as SVG to drawing sample.
Changed the colour of the third star-polygon to test brush pattern with different colours. Use the width and height of the scroll panel as image size.
This commit is contained in:
@@ -39,6 +39,9 @@
|
|||||||
#include "wx/filename.h"
|
#include "wx/filename.h"
|
||||||
#include "wx/metafile.h"
|
#include "wx/metafile.h"
|
||||||
#include "wx/settings.h"
|
#include "wx/settings.h"
|
||||||
|
#if wxUSE_SVG
|
||||||
|
#include "wx/dcsvg.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// resources
|
// resources
|
||||||
@@ -106,6 +109,7 @@ public:
|
|||||||
void OnMouseUp(wxMouseEvent &event);
|
void OnMouseUp(wxMouseEvent &event);
|
||||||
|
|
||||||
void ToShow(int show) { m_show = show; Refresh(); }
|
void ToShow(int show) { m_show = show; Refresh(); }
|
||||||
|
int GetPage() { return m_show; }
|
||||||
|
|
||||||
// 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(); }
|
||||||
@@ -120,6 +124,7 @@ public:
|
|||||||
{ if ( !m_renderer ) return name.empty();
|
{ if ( !m_renderer ) return name.empty();
|
||||||
return m_renderer->GetName() == name;
|
return m_renderer->GetName() == name;
|
||||||
}
|
}
|
||||||
|
wxGraphicsRenderer* GetRenderer() const { return m_renderer; }
|
||||||
#endif // wxUSE_GRAPHICS_CONTEXT
|
#endif // wxUSE_GRAPHICS_CONTEXT
|
||||||
void UseBuffer(bool use) { m_useBuffer = use; Refresh(); }
|
void UseBuffer(bool use) { m_useBuffer = use; Refresh(); }
|
||||||
|
|
||||||
@@ -573,6 +578,8 @@ void MyCanvas::DrawTestPoly(wxDC& dc)
|
|||||||
dc.DrawPolygon(WXSIZEOF(star), star, 0, 30);
|
dc.DrawPolygon(WXSIZEOF(star), star, 0, 30);
|
||||||
dc.DrawPolygon(WXSIZEOF(star), star, 160, 30, wxWINDING_RULE);
|
dc.DrawPolygon(WXSIZEOF(star), star, 160, 30, wxWINDING_RULE);
|
||||||
|
|
||||||
|
wxBrush brushHatchGreen(*wxGREEN, wxBRUSHSTYLE_FDIAGONAL_HATCH);
|
||||||
|
dc.SetBrush(brushHatchGreen);
|
||||||
wxPoint star2[10];
|
wxPoint star2[10];
|
||||||
star2[0] = wxPoint(0, 100);
|
star2[0] = wxPoint(0, 100);
|
||||||
star2[1] = wxPoint(-59, -81);
|
star2[1] = wxPoint(-59, -81);
|
||||||
@@ -901,7 +908,7 @@ void MyCanvas::DrawText(wxDC& dc)
|
|||||||
wxCoord y = 150;
|
wxCoord y = 150;
|
||||||
dc.SetLogicalFunction(wxINVERT);
|
dc.SetLogicalFunction(wxINVERT);
|
||||||
// text drawing should ignore logical function
|
// text drawing should ignore logical function
|
||||||
dc.DrawText( wxT("There should be a text below"), 110, 150 );
|
dc.DrawText( wxT("There should be a text below"), 110, y );
|
||||||
dc.DrawRectangle( 110, y, 100, height );
|
dc.DrawRectangle( 110, y, 100, height );
|
||||||
|
|
||||||
y += height;
|
y += height;
|
||||||
@@ -2168,17 +2175,46 @@ void MyFrame::OnSave(wxCommandEvent& WXUNUSED(event))
|
|||||||
wxFileDialog dlg(this, wxT("Save as bitmap"), wxT(""), wxT(""),
|
wxFileDialog dlg(this, wxT("Save as bitmap"), wxT(""), wxT(""),
|
||||||
#if wxUSE_LIBPNG
|
#if wxUSE_LIBPNG
|
||||||
wxT("PNG image (*.png)|*.png;*.PNG|")
|
wxT("PNG image (*.png)|*.png;*.PNG|")
|
||||||
|
#endif
|
||||||
|
#if wxUSE_SVG
|
||||||
|
wxT("SVG image (*.svg)|*.svg;*.SVG|")
|
||||||
#endif
|
#endif
|
||||||
wxT("Bitmap image (*.bmp)|*.bmp;*.BMP"),
|
wxT("Bitmap image (*.bmp)|*.bmp;*.BMP"),
|
||||||
wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
|
wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
|
||||||
if (dlg.ShowModal() == wxID_OK)
|
if (dlg.ShowModal() == wxID_OK)
|
||||||
{
|
{
|
||||||
wxBitmap bmp(500, 800);
|
int width, height;
|
||||||
|
m_canvas->GetVirtualSize(&width, &height);
|
||||||
|
#if wxUSE_SVG
|
||||||
|
wxString ext = dlg.GetPath().AfterLast('.').Lower();
|
||||||
|
if (ext.Lower() == wxT("svg"))
|
||||||
|
{
|
||||||
|
// Graphics screen can only be drawn using GraphicsContext
|
||||||
|
if (m_canvas->GetPage() == File_ShowGraphics) {
|
||||||
|
wxLogMessage("Graphics screen can not be saved as SVG.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
wxGraphicsRenderer* tempRenderer = m_canvas->GetRenderer();
|
||||||
|
m_canvas->UseGraphicRenderer(NULL);
|
||||||
|
#endif
|
||||||
|
wxSVGFileDC svgdc(dlg.GetPath(), width, height, 72, wxT("Drawing sample"));
|
||||||
|
svgdc.SetBitmapHandler(new wxSVGBitmapEmbedHandler());
|
||||||
|
m_canvas->Draw(svgdc);
|
||||||
|
#if wxUSE_GRAPHICS_CONTEXT
|
||||||
|
m_canvas->UseGraphicRenderer(tempRenderer);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
wxBitmap bmp(width, height);
|
||||||
wxMemoryDC mdc(bmp);
|
wxMemoryDC mdc(bmp);
|
||||||
m_canvas->Draw(mdc);
|
m_canvas->Draw(mdc);
|
||||||
bmp.ConvertToImage().SaveFile(dlg.GetPath());
|
bmp.ConvertToImage().SaveFile(dlg.GetPath());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MyFrame::OnShow(wxCommandEvent& event)
|
void MyFrame::OnShow(wxCommandEvent& event)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user