diff options
Diffstat (limited to 'vcl/inc')
-rw-r--r-- | vcl/inc/headless/svpgdi.hxx | 34 | ||||
-rw-r--r-- | vcl/inc/openglgdiimpl.hxx | 4 | ||||
-rw-r--r-- | vcl/inc/quartz/salgdi.h | 4 | ||||
-rw-r--r-- | vcl/inc/salgdi.hxx | 11 | ||||
-rw-r--r-- | vcl/inc/salgdiimpl.hxx | 4 | ||||
-rw-r--r-- | vcl/inc/unx/genpspgraphics.h | 15 | ||||
-rw-r--r-- | vcl/inc/unx/salgdi.h | 4 | ||||
-rw-r--r-- | vcl/inc/win/salbmp.h | 32 | ||||
-rw-r--r-- | vcl/inc/win/salgdi.h | 4 |
9 files changed, 80 insertions, 32 deletions
diff --git a/vcl/inc/headless/svpgdi.hxx b/vcl/inc/headless/svpgdi.hxx index 060c9f967312..dcf022bcd528 100644 --- a/vcl/inc/headless/svpgdi.hxx +++ b/vcl/inc/headless/svpgdi.hxx @@ -90,6 +90,25 @@ public: void setSurface(cairo_surface_t* pSurface); static cairo_user_data_key_t* getDamageKey(); + static void clipRegion(cairo_t* cr, const vcl::Region& rClipRegion); + + // need this static version of ::drawPolyLine for usage from + // vcl/unx/generic/gdi/salgdi.cxx. It gets wrapped by + // ::drawPolyLine with some added parameters (see there) + static bool drawPolyLine( + cairo_t* cr, + basegfx::B2DRange* pExtents, + const Color& rLineColor, + bool bAntiAliasB2DDraw, + const basegfx::B2DHomMatrix& rObjectToDevice, + const basegfx::B2DPolygon& rPolyLine, + double fTransparency, + const basegfx::B2DVector& rLineWidths, + basegfx::B2DLineJoin eLineJoin, + css::drawing::LineCap eLineCap, + double fMiterMinimumAngle, + bool bPixelSnapHairline); + private: void invert(const basegfx::B2DPolygon &rPoly, SalInvert nFlags); void copySource(const SalTwoRect& rTR, cairo_surface_t* source); @@ -175,12 +194,15 @@ public: virtual void drawLine( long nX1, long nY1, long nX2, long nY2 ) override; virtual void drawRect( long nX, long nY, long nWidth, long nHeight ) override; virtual bool drawPolyPolygon( const basegfx::B2DPolyPolygon&, double fTransparency ) override; - virtual bool drawPolyLine( const basegfx::B2DPolygon&, - double fTransparency, - const basegfx::B2DVector& rLineWidths, - basegfx::B2DLineJoin, - css::drawing::LineCap, - double fMiterMinimumAngle) override; + virtual bool drawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, + const basegfx::B2DPolygon&, + double fTransparency, + const basegfx::B2DVector& rLineWidths, + basegfx::B2DLineJoin, + css::drawing::LineCap, + double fMiterMinimumAngle, + bool bPixelSnapHairline) override; virtual void drawPolyLine( sal_uInt32 nPoints, const SalPoint* pPtAry ) override; virtual void drawPolygon( sal_uInt32 nPoints, const SalPoint* pPtAry ) override; virtual void drawPolyPolygon( sal_uInt32 nPoly, diff --git a/vcl/inc/openglgdiimpl.hxx b/vcl/inc/openglgdiimpl.hxx index 265d21603dd5..3fdc86740478 100644 --- a/vcl/inc/openglgdiimpl.hxx +++ b/vcl/inc/openglgdiimpl.hxx @@ -250,12 +250,14 @@ public: virtual bool drawPolyPolygon( const basegfx::B2DPolyPolygon&, double fTransparency ) override; virtual bool drawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolygon&, double fTransparency, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin, css::drawing::LineCap, - double fMiterMinimumAngle) override; + double fMiterMinimumAngle, + bool bPixelSnapHairline) override; virtual bool drawPolyLineBezier( sal_uInt32 nPoints, diff --git a/vcl/inc/quartz/salgdi.h b/vcl/inc/quartz/salgdi.h index 09dc6193148b..997115c193c2 100644 --- a/vcl/inc/quartz/salgdi.h +++ b/vcl/inc/quartz/salgdi.h @@ -242,12 +242,14 @@ public: virtual bool drawPolygonBezier( sal_uInt32 nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry ) override; virtual bool drawPolyPolygonBezier( sal_uInt32 nPoly, const sal_uInt32* pPoints, const SalPoint* const* pPtAry, const sal_uInt8* const* pFlgAry ) override; virtual bool drawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolygon&, double fTransparency, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin, css::drawing::LineCap eLineCap, - double fMiterMinimumAngle) override; + double fMiterMinimumAngle, + bool bPixelSnapHairline) override; virtual bool drawGradient( const tools::PolyPolygon&, const Gradient& ) override { return false; }; // CopyArea --> No RasterOp, but ClipRegion diff --git a/vcl/inc/salgdi.hxx b/vcl/inc/salgdi.hxx index 56fe42dbfe38..c421b0b86b27 100644 --- a/vcl/inc/salgdi.hxx +++ b/vcl/inc/salgdi.hxx @@ -54,6 +54,7 @@ namespace basegfx { class B2DVector; class B2DPolygon; class B2DPolyPolygon; + class SystemDependentDataManager; } typedef sal_Unicode sal_Ucs; // TODO: use sal_UCS4 instead of sal_Unicode @@ -79,6 +80,10 @@ public: virtual SalGraphicsImpl* GetImpl() const = 0; + // access to single global managing instance of a basegfx::SystemDependentDataManager, + // used to handle graphic data in system-dependent form + static basegfx::SystemDependentDataManager& getSystemDependentDataManager(); + /// Check that our mpImpl is OpenGL and return the context, otherwise NULL. rtl::Reference<OpenGLContext> GetOpenGLContext() const; @@ -263,12 +268,14 @@ public: const OutputDevice *i_pOutDev); bool DrawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolygon& i_rPolygon, double i_fTransparency, const basegfx::B2DVector& i_rLineWidth, basegfx::B2DLineJoin i_eLineJoin, css::drawing::LineCap i_eLineCap, double i_fMiterMinimumAngle, + bool bPixelSnapHairline, const OutputDevice* i_pOutDev); bool DrawPolyLineBezier( @@ -462,12 +469,14 @@ protected: virtual bool drawPolyPolygon( const basegfx::B2DPolyPolygon&, double fTransparency ) = 0; virtual bool drawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolygon&, double fTransparency, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin, css::drawing::LineCap, - double fMiterMinimumAngle) = 0; + double fMiterMinimumAngle, + bool bPixelSnapHairline) = 0; virtual bool drawPolyLineBezier( sal_uInt32 nPoints, diff --git a/vcl/inc/salgdiimpl.hxx b/vcl/inc/salgdiimpl.hxx index c2c008e68462..1bdc245b8799 100644 --- a/vcl/inc/salgdiimpl.hxx +++ b/vcl/inc/salgdiimpl.hxx @@ -101,12 +101,14 @@ public: virtual bool drawPolyPolygon( const basegfx::B2DPolyPolygon&, double fTransparency ) = 0; virtual bool drawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolygon&, double fTransparency, const basegfx::B2DVector& rLineWidths, basegfx::B2DLineJoin, css::drawing::LineCap, - double fMiterMinimumAngle) = 0; + double fMiterMinimumAngle, + bool bPixelSnapHairline) = 0; virtual bool drawPolyLineBezier( sal_uInt32 nPoints, diff --git a/vcl/inc/unx/genpspgraphics.h b/vcl/inc/unx/genpspgraphics.h index b7658b93f3dd..94a99bbf9386 100644 --- a/vcl/inc/unx/genpspgraphics.h +++ b/vcl/inc/unx/genpspgraphics.h @@ -144,12 +144,15 @@ public: PCONSTSALPOINT* pPtAry ) override; virtual bool drawPolyPolygon( const basegfx::B2DPolyPolygon&, double fTransparency ) override; - virtual bool drawPolyLine( const basegfx::B2DPolygon&, - double fTransparency, - const basegfx::B2DVector& rLineWidths, - basegfx::B2DLineJoin, - css::drawing::LineCap, - double fMiterMinimumAngle) override; + virtual bool drawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, + const basegfx::B2DPolygon&, + double fTransparency, + const basegfx::B2DVector& rLineWidths, + basegfx::B2DLineJoin, + css::drawing::LineCap, + double fMiterMinimumAngle, + bool bPixelSnapHairline) override; virtual bool drawPolyLineBezier( sal_uInt32 nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry ) override; diff --git a/vcl/inc/unx/salgdi.h b/vcl/inc/unx/salgdi.h index 40aa91b6ac70..120071ca5e3b 100644 --- a/vcl/inc/unx/salgdi.h +++ b/vcl/inc/unx/salgdi.h @@ -172,12 +172,14 @@ public: virtual bool drawPolyPolygon( const basegfx::B2DPolyPolygon&, double fTransparency ) override; virtual bool drawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolygon&, double fTransparency, const basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin, css::drawing::LineCap, - double fMiterMinimumAngle) override; + double fMiterMinimumAngle, + bool bPixelSnapHairline) override; virtual bool drawGradient( const tools::PolyPolygon&, const Gradient& ) override; diff --git a/vcl/inc/win/salbmp.h b/vcl/inc/win/salbmp.h index 0a698e5eae46..55108f2ef679 100644 --- a/vcl/inc/win/salbmp.h +++ b/vcl/inc/win/salbmp.h @@ -23,6 +23,7 @@ #include <tools/gen.hxx> #include <win/wincomp.hxx> #include <salbmp.hxx> +#include <basegfx/tools/systemdependentdata.hxx> #include <memory> @@ -33,26 +34,13 @@ class SalGraphics; namespace Gdiplus { class Bitmap; } typedef std::shared_ptr< Gdiplus::Bitmap > GdiPlusBmpPtr; -class WinSalBitmap : public SalBitmap +class WinSalBitmap : public SalBitmap, public basegfx::SystemDependentDataHolder { private: - friend class GdiPlusBuffer; // allow buffer to remove maGdiPlusBitmap and mpAssociatedAlpha eventually - Size maSize; HGLOBAL mhDIB; HBITMAP mhDDB; - // the buffered evtl. used Gdiplus::Bitmap instance. It is managed by - // GdiPlusBuffer. To make this safe, it is only handed out as shared - // pointer; the GdiPlusBuffer may delete the local instance. - - // mpAssociatedAlpha holds the last WinSalBitmap used to construct an - // evtl. buffered GdiPlusBmp. This is needed since the GdiPlusBmp is a single - // instance and remembered only on the content-WinSalBitmap, not on the - // alpha-WinSalBitmap. - GdiPlusBmpPtr maGdiPlusBitmap; - const WinSalBitmap* mpAssociatedAlpha; - sal_uInt16 mnBitCount; Gdiplus::Bitmap* ImplCreateGdiPlusBitmap(const WinSalBitmap& rAlphaSource); @@ -98,6 +86,22 @@ public: virtual bool Scale( const double& rScaleX, const double& rScaleY, BmpScaleFlag nScaleFlag ) override; virtual bool Replace( const Color& rSearchColor, const Color& rReplaceColor, sal_uLong nTol ) override; + + // exclusive management op's for SystemDependentData at WinSalBitmap + template<class T> + std::shared_ptr<T> getSystemDependentData() const + { + return std::static_pointer_cast<T>(basegfx::SystemDependentDataHolder::getSystemDependentData(typeid(T).hash_code())); + } + + template<class T, class... Args> + std::shared_ptr<T> addOrReplaceSystemDependentData(basegfx::SystemDependentDataManager& manager, Args&&... args) const + { + std::shared_ptr<T> r = std::make_shared<T>(manager, std::forward<Args>(args)...); + basegfx::SystemDependentData_SharedPtr r2(r); + const_cast< WinSalBitmap* >(this)->basegfx::SystemDependentDataHolder::addOrReplaceSystemDependentData(r2); + return r; + } }; #endif // INCLUDED_VCL_INC_WIN_SALBMP_H diff --git a/vcl/inc/win/salgdi.h b/vcl/inc/win/salgdi.h index d2a81624cb4a..9091f0700817 100644 --- a/vcl/inc/win/salgdi.h +++ b/vcl/inc/win/salgdi.h @@ -282,12 +282,14 @@ protected: virtual void drawPolyPolygon( sal_uInt32 nPoly, const sal_uInt32* pPoints, PCONSTSALPOINT* pPtAry ) override; virtual bool drawPolyPolygon( const basegfx::B2DPolyPolygon&, double fTransparency ) override; virtual bool drawPolyLine( + const basegfx::B2DHomMatrix& rObjectToDevice, const basegfx::B2DPolygon&, double fTransparency, const basegfx::B2DVector& rLineWidth, basegfx::B2DLineJoin, css::drawing::LineCap, - double fMiterMinimumAngle) override; + double fMiterMinimumAngle, + bool bPixelSnapHairline) override; virtual bool drawPolyLineBezier( sal_uInt32 nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry ) override; virtual bool drawPolygonBezier( sal_uInt32 nPoints, const SalPoint* pPtAry, const sal_uInt8* pFlgAry ) override; virtual bool drawPolyPolygonBezier( sal_uInt32 nPoly, const sal_uInt32* pPoints, const SalPoint* const* pPtAry, const BYTE* const* pFlgAry ) override; |