X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/d8416992be62932d7dbc91a27a8bcf4b4a6db390..45c103404c558dd2581049279b9c44e1fed25b2c:/include/wx/dcsvg.h diff --git a/include/wx/dcsvg.h b/include/wx/dcsvg.h index cd3f46d474..ee99a8e703 100644 --- a/include/wx/dcsvg.h +++ b/include/wx/dcsvg.h @@ -28,27 +28,16 @@ class WXDLLIMPEXP_FWD_BASE wxFileOutputStream; -#if wxUSE_NEW_DC -class WXDLLIMPEXP_FWD_BASE wxSVGFileDC; +class WXDLLIMPEXP_FWD_CORE wxSVGFileDC; -class WXDLLIMPEXP_CORE wxSVGFileImplDC : public wxImplDC -#else -#define wxSVGFileImplDC wxSVGFileDC -class WXDLLIMPEXP_CORE wxSVGFileDC : public wxDC -#endif +class WXDLLIMPEXP_CORE wxSVGFileDCImpl : public wxDCImpl { public: - -#if wxUSE_NEW_DC - wxSVGFileImplDC( wxSVGFileDC *owner, const wxString &filename, + wxSVGFileDCImpl( wxSVGFileDC *owner, const wxString &filename, int width=320, int height=240, double dpi=72.0 ); -#else - wxSVGFileDC( const wxString &filename, - int width=320, int height=240, double dpi=72.0 ); -#endif - virtual ~wxSVGFileImplDC(); - + virtual ~wxSVGFileDCImpl(); + bool IsOk() const { return m_OK; } virtual bool CanDrawBitmap() const { return true; } @@ -65,10 +54,7 @@ public: wxFAIL_MSG(wxT("wxSVGFILEDC::Clear() Call not implemented \nNot sensible for an output file?")); } - virtual void DestroyClippingRegion() - { - wxFAIL_MSG(wxT("wxSVGFILEDC::void Call not yet implemented")); - } + virtual void DestroyClippingRegion(); virtual wxCoord GetCharHeight() const; virtual wxCoord GetCharWidth() const; @@ -90,15 +76,15 @@ public: wxFAIL_MSG(wxT("wxSVGFILEDC::GetClippingBox not implemented")); } - virtual void SetLogicalFunction(int WXUNUSED(function)) + virtual void SetLogicalFunction(wxRasterOperationMode WXUNUSED(function)) { wxFAIL_MSG(wxT("wxSVGFILEDC::SetLogicalFunction Call not implemented")); } - virtual int GetLogicalFunction() const + virtual wxRasterOperationMode GetLogicalFunction() const { wxFAIL_MSG(wxT("wxSVGFILEDC::GetLogicalFunction() not implemented")); - return -1; + return wxCOPY; } virtual void SetBackground( const wxBrush &brush ); @@ -107,15 +93,7 @@ public: virtual void SetFont(const wxFont& font); virtual void SetPen(const wxPen& pen); -#if wxUSE_NEW_DC -#else - virtual void SetMapMode( int mode ); - virtual void SetUserScale( double x, double y ); - virtual void SetLogicalScale( double x, double y ); - virtual void SetLogicalOrigin( wxCoord x, wxCoord y ); - virtual void SetDeviceOrigin( wxCoord x, wxCoord y ); - virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp ); -#endif + virtual void* GetHandle() const { return NULL; } private: virtual bool DoGetPixel(wxCoord, wxCoord, wxColour *) const @@ -125,7 +103,7 @@ private: } virtual bool DoBlit(wxCoord, wxCoord, wxCoord, wxCoord, wxDC *, - wxCoord, wxCoord, int = wxCOPY, + wxCoord, wxCoord, wxRasterOperationMode = wxCOPY, bool = 0, int = -1, int = -1); virtual void DoCrossHair(wxCoord, wxCoord) @@ -135,7 +113,7 @@ private: virtual void DoDrawArc(wxCoord, wxCoord, wxCoord, wxCoord, wxCoord, wxCoord); - virtual void DoDrawBitmap(const wxBitmap &, wxCoord, wxCoord, bool = 0); + virtual void DoDrawBitmap(const wxBitmap &, wxCoord, wxCoord, bool = false); virtual void DoDrawCheckMark(wxCoord x, wxCoord y, wxCoord w, wxCoord h); @@ -148,12 +126,14 @@ private: virtual void DoDrawLine (wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); - virtual void DoDrawLines(int n, wxPoint points[], + virtual void DoDrawLines(int n, const wxPoint points[], wxCoord xoffset = 0, wxCoord yoffset = 0); virtual void DoDrawPoint(wxCoord, wxCoord); - virtual void DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset,int fillStyle); + virtual void DoDrawPolygon(int n, const wxPoint points[], + wxCoord xoffset, wxCoord yoffset, + wxPolygonFillMode fillStyle); virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord w, wxCoord h); @@ -168,7 +148,7 @@ private: virtual bool DoFloodFill(wxCoord WXUNUSED(x), wxCoord WXUNUSED(y), const wxColour& WXUNUSED(col), - int WXUNUSED(style) = wxFLOOD_SURFACE) + wxFloodFillStyle WXUNUSED(style) = wxFLOOD_SURFACE) { wxFAIL_MSG(wxT("wxSVGFILEDC::DoFloodFill Call not implemented")); return false; @@ -187,52 +167,61 @@ private: wxCoord *externalLeading = NULL, const wxFont *font = NULL) const; - virtual void DoSetClippingRegionAsRegion(const wxRegion& WXUNUSED(region)) + virtual void DoSetDeviceClippingRegion(const wxRegion& WXUNUSED(region)) { - wxFAIL_MSG(wxT("wxSVGFILEDC::DoSetClippingRegionAsRegion not yet implemented")); + wxFAIL_MSG(wxT("wxSVGFILEDC::DoSetDeviceClippingRegion not yet implemented")); } - virtual void DoSetClippingRegion( int WXUNUSED(x), int WXUNUSED(y), int WXUNUSED(width), int WXUNUSED(height) ) - { - wxFAIL_MSG(wxT("wxSVGFILEDC::DoSetClippingRegion not yet implemented")); - } + virtual void DoSetClippingRegion(int x, int y, int width, int height); virtual void DoGetSizeMM( int *width, int *height ) const; - + virtual wxSize GetPPI() const; void Init (const wxString &filename, int width, int height, double dpi); - void NewGraphics(); - void write( const wxString &s ); private: + // If m_graphics_changed is true, close the current element and start a + // new one for the last pen/brush change. + void NewGraphicsIfNeeded(); + + // Open a new graphics group setting up all the attributes according to + // their current values in wxDC. + void DoStartNewGraphics(); + wxFileOutputStream *m_outfile; wxString m_filename; int m_sub_images; // number of png format images we have bool m_OK; - bool m_graphics_changed; + bool m_graphics_changed; // set by Set{Brush,Pen}() int m_width, m_height; double m_dpi; -private: - DECLARE_ABSTRACT_CLASS(wxSVGFileImplDC) + // The clipping nesting level is incremented by every call to + // SetClippingRegion() and reset when DestroyClippingRegion() is called. + size_t m_clipNestingLevel; + + // Unique ID for every clipping graphics group: this is simply always + // incremented in each SetClippingRegion() call. + size_t m_clipUniqueId; + + DECLARE_ABSTRACT_CLASS(wxSVGFileDCImpl) }; -#if wxUSE_NEW_DC class WXDLLIMPEXP_CORE wxSVGFileDC : public wxDC { public: - wxSVGFileDC( const wxString &filename, - int width=320, int height=240, double dpi=72.0 ) - { - m_pimpl = new wxSVGFileImplDC( this, filename, width, height, dpi ); + wxSVGFileDC(const wxString& filename, + int width = 320, + int height = 240, + double dpi = 72.0) + : wxDC(new wxSVGFileDCImpl(this, filename, width, height, dpi)) + { } }; -#endif - #endif // wxUSE_SVG