diff options
author | Armin Le Grand <Armin.Le.Grand@cib.de> | 2016-07-01 15:50:00 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2016-07-07 22:32:39 +0200 |
commit | 5046ebd813b2c155698f9664b629ca5587b8a28b (patch) | |
tree | 3d02ce162784684465e06c5382143c89e4d9b14c /drawinglayer/source | |
parent | 4609380bb0bde0d4437b72b752c1c24ee2950361 (diff) |
tdf#82214 optimize PatternFillPrimitive and SVG
Use buffering in the drawinglayer, and don't do slow stuff in the
windows gdi renderer.
Conflicts:
svgio/source/svgreader/svgstyleattributes.cxx
Change-Id: Id955ee6a3b03e568c2678f02d77af35d2e5ba1d4
Diffstat (limited to 'drawinglayer/source')
-rw-r--r-- | drawinglayer/source/primitive2d/patternfillprimitive2d.cxx | 73 |
1 files changed, 37 insertions, 36 deletions
diff --git a/drawinglayer/source/primitive2d/patternfillprimitive2d.cxx b/drawinglayer/source/primitive2d/patternfillprimitive2d.cxx index 39b695c4be7a..5d1eec1ca93b 100644 --- a/drawinglayer/source/primitive2d/patternfillprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/patternfillprimitive2d.cxx @@ -31,8 +31,8 @@ using namespace com::sun::star; -#define MAXIMUM_SQUARE_LENGTH (164.0) -#define MINIMUM_SQUARE_LENGTH (32.0) +#define MAXIMUM_SQUARE_LENGTH (186.0) +#define MINIMUM_SQUARE_LENGTH (16.0) #define MINIMUM_TILES_LENGTH (3) namespace drawinglayer @@ -257,57 +257,58 @@ namespace drawinglayer Primitive2DContainer PatternFillPrimitive2D::get2DDecomposition(const geometry::ViewInformation2D& rViewInformation) const { - if(0 == mnDiscreteWidth || 0 == mnDiscreteHeight) + // The existing bufferd decomposition uses a buffer in the remembered + // size or none if sizes are zero. Get new needed sizes which depend on + // the given ViewInformation + bool bResetBuffering = false; + sal_uInt32 nW(0); + sal_uInt32 nH(0); + calculateNeededDiscreteBufferSize(nW, nH, rViewInformation); + const bool bBufferingCurrentlyUsed(0 != mnDiscreteWidth && 0 != mnDiscreteHeight); + const bool bBufferingNextUsed(0 != nW && 0 != nH); + + if(bBufferingNextUsed) { - // Currently no buffering is used. Check if the resulting discrete sizes - // in the current situation would be good for buffering from now on - PatternFillPrimitive2D* pThat = const_cast< PatternFillPrimitive2D* >(this); - - calculateNeededDiscreteBufferSize(pThat->mnDiscreteWidth, pThat->mnDiscreteHeight, rViewInformation); - } - else - { - // The existing bufferd decomposition uses a buffer in the remembered - // size. Get new needed sizes which depend on the given ViewInformation - sal_uInt32 nW(0); - sal_uInt32 nH(0); - calculateNeededDiscreteBufferSize(nW, nH, rViewInformation); - - if(0 != nW && 0 != nH) + // buffering is now possible + if(bBufferingCurrentlyUsed) { - // buffering is possible - check if reset is needed - bool bResetBuffering = false; - if(nW > mnDiscreteWidth || nH > mnDiscreteHeight) { // Higher resolution is needed than used in the existing buffered - // decomposition + // decomposition - create new one bResetBuffering = true; } else if(double(nW * nH) / double(mnDiscreteWidth * mnDiscreteHeight) <= 0.5) { // Size has shrunk for 50% or more - it's worth to refresh the buffering + // to spare some ressources bResetBuffering = true; } - - if(bResetBuffering) - { - PatternFillPrimitive2D* pThat = const_cast< PatternFillPrimitive2D* >(this); - pThat->mnDiscreteWidth = nW; - pThat->mnDiscreteHeight = nH; - pThat->setBuffered2DDecomposition(Primitive2DContainer()); - } } else { - // no buffering wanted or possible - clear decomposition to create a - // new, unbuffered one - PatternFillPrimitive2D* pThat = const_cast< PatternFillPrimitive2D* >(this); - pThat->mnDiscreteWidth = 0; - pThat->mnDiscreteHeight = 0; - pThat->setBuffered2DDecomposition(Primitive2DContainer()); + // currently no buffering used - reset evtl. unbuffered + // decomposition to start buffering + bResetBuffering = true; } } + else + { + // buffering is no longer possible + if(bBufferingCurrentlyUsed) + { + // reset decomposition to allow creation of unbuffered one + bResetBuffering = true; + } + } + + if(bResetBuffering) + { + PatternFillPrimitive2D* pThat = const_cast< PatternFillPrimitive2D* >(this); + pThat->mnDiscreteWidth = nW; + pThat->mnDiscreteHeight = nH; + pThat->setBuffered2DDecomposition(Primitive2DContainer()); + } // call parent return BufferedDecompositionPrimitive2D::get2DDecomposition(rViewInformation); |