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);