diff --git a/include/wx/dcsvg.h b/include/wx/dcsvg.h index 3f7bd5a5fd..aaab9475de 100644 --- a/include/wx/dcsvg.h +++ b/include/wx/dcsvg.h @@ -91,10 +91,10 @@ public: virtual wxCoord GetCharHeight() const wxOVERRIDE; virtual wxCoord GetCharWidth() const wxOVERRIDE; - virtual void SetClippingRegion(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), - wxCoord WXUNUSED(w), wxCoord WXUNUSED(h)) + virtual void SetClippingRegion(wxCoord x, wxCoord y, + wxCoord w, wxCoord h) { - wxFAIL_MSG(wxT("wxSVGFILEDC::SetClippingRegion not implemented")); + DoSetClippingRegion(x, y, w, h); } virtual void SetPalette(const wxPalette& WXUNUSED(palette)) wxOVERRIDE @@ -102,10 +102,10 @@ public: wxFAIL_MSG(wxT("wxSVGFILEDC::SetPalette not implemented")); } - virtual void GetClippingBox(wxCoord *WXUNUSED(x), wxCoord *WXUNUSED(y), - wxCoord *WXUNUSED(w), wxCoord *WXUNUSED(h)) + virtual void GetClippingBox(wxCoord *x, wxCoord *y, + wxCoord *w, wxCoord *h) { - wxFAIL_MSG(wxT("wxSVGFILEDC::GetClippingBox not implemented")); + DoGetClippingBox(x, y, w, h); } virtual void SetLogicalFunction(wxRasterOperationMode WXUNUSED(function)) wxOVERRIDE @@ -201,9 +201,10 @@ private: wxCoord *externalLeading = NULL, const wxFont *font = NULL) const wxOVERRIDE; - virtual void DoSetDeviceClippingRegion(const wxRegion& WXUNUSED(region)) wxOVERRIDE + virtual void DoSetDeviceClippingRegion(const wxRegion& region) wxOVERRIDE { - wxFAIL_MSG(wxT("wxSVGFILEDC::DoSetDeviceClippingRegion not yet implemented")); + DoSetClippingRegion(region.GetBox().x, region.GetBox().y, + region.GetBox().width, region.GetBox().height); } virtual void DoSetClippingRegion(int x, int y, int width, int height) wxOVERRIDE; diff --git a/src/common/dcsvg.cpp b/src/common/dcsvg.cpp index 5f09c623c0..2110200f1f 100644 --- a/src/common/dcsvg.cpp +++ b/src/common/dcsvg.cpp @@ -279,7 +279,13 @@ void wxSVGFileDCImpl::Init (const wxString &filename, int Width, int Height, dou wxSVGFileDCImpl::~wxSVGFileDCImpl() { - wxString s = wxT(" \n \n"); + wxString s; + + // Close remaining clipping group elements + for (size_t i = 0; i < m_clipUniqueId; i++) + s += wxS("\n"); + + s += wxS("\n\n"); write(s); delete m_outfile; } @@ -617,7 +623,7 @@ void wxSVGFileDCImpl::DoDrawEllipticArc(wxCoord x,wxCoord y,wxCoord w,wxCoord h, } } -void wxSVGFileDCImpl::DoSetClippingRegion( int x, int y, int width, int height ) +void wxSVGFileDCImpl::DoSetClippingRegion(int x, int y, int width, int height) { wxString svg; @@ -625,14 +631,14 @@ void wxSVGFileDCImpl::DoSetClippingRegion( int x, int y, int width, int height // graphics can be subsequently changed inside the clipping region) svg << "\n" "\n" - "\n" - "\n" + " \n" - "\n" + " \n" "\n" "\n"; @@ -656,9 +662,8 @@ void wxSVGFileDCImpl::DestroyClippingRegion() // Close clipping group elements for ( size_t i = 0; i < m_clipUniqueId; i++ ) { - svg << ""; + svg << "\n"; } - svg << "\n"; write(svg);