diff options
author | Armin Le Grand <alg@apache.org> | 2014-08-05 16:11:21 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2014-08-07 20:34:49 +0100 |
commit | 1ca06ce59b7d3cea873d2dc109a2acaec0a80759 (patch) | |
tree | da06b4ef1f3bc6c1b547cefe970b2a5b81fcf507 /drawinglayer | |
parent | bb182b47ca7362b05c03d583d3547643d9a99562 (diff) |
Related: #i125349# moved clip enhancements to base clipping functionality
(cherry picked from commit 7c5e9b9b3c5c899d63bf171ee1c9050db860337e)
Change-Id: I570e92c78196895bef329eb308eeb68ffc5e23d3
Diffstat (limited to 'drawinglayer')
-rw-r--r-- | drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx | 65 |
1 files changed, 11 insertions, 54 deletions
diff --git a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx index e592f9c7166f..d6e1e7a28923 100644 --- a/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclmetafileprocessor2d.cxx @@ -1765,52 +1765,17 @@ namespace drawinglayer if(maClipPolyPolygon.count()) { - // due to the cost of PolyPolygon clipping and numerical reasons try first if the current - // and the new ClipRegion are ranges. If yes, processing can be simplified - if(basegfx::tools::isRectangle(aMask) - && basegfx::tools::isRectangle(maClipPolyPolygon)) - { - // both ClipPolygons are rectangles - if(aMask.getB2DRange().equal(maClipPolyPolygon.getB2DRange())) - { - // equal -> no change in ClipRegion needed, leave - // maClipPolyPolygon unchanged - } - else - { - // not equal -> create new ClipRegion from the two ranges - basegfx::B2DRange aClipRange(aMask.getB2DRange()); - - aClipRange.intersect(maClipPolyPolygon.getB2DRange()); - - if(aClipRange.isEmpty()) - { - // no common ClipRegion -> set empty ClipRegion, no content to show - maClipPolyPolygon.clear(); - } - else - { - // use common ClipRegion as new ClipRegion - maClipPolyPolygon = basegfx::B2DPolyPolygon( - basegfx::tools::createPolygonFromRect(aClipRange)); - } - } - } - else - { - // The current ClipRegion or the new one is not a rectangle; - // there is already a clip polygon set; build clipped union of - // current mask polygon and new one - maClipPolyPolygon = basegfx::tools::clipPolyPolygonOnPolyPolygon( - aMask, - maClipPolyPolygon, - true, // #i106516# we want the inside of aMask, not the outside - false); - } + // there is already a clip polygon set; build clipped union of + // current mask polygon and new one + maClipPolyPolygon = basegfx::tools::clipPolyPolygonOnPolyPolygon( + aMask, + maClipPolyPolygon, + true, // #i106516# we want the inside of aMask, not the outside + false); } else { - // use new mask directly as ClipRegion + // use mask directly maClipPolyPolygon = aMask; } @@ -1819,13 +1784,8 @@ namespace drawinglayer // set VCL clip region; subdivide before conversion to tools polygon. Subdivision necessary (!) // Removed subdivision and fixed in Region::ImplPolyPolyRegionToBandRegionFunc() in VCL where // the ClipRegion is built from the Polygon. A AdaptiveSubdivide on the source polygon was missing there - const bool bNewClipRegion(maClipPolyPolygon != aLastClipPolyPolygon); - - if(bNewClipRegion) - { - mpOutputDevice->Push(PUSH_CLIPREGION); - mpOutputDevice->SetClipRegion(Region(maClipPolyPolygon)); - } + mpOutputDevice->Push(PUSH_CLIPREGION); + mpOutputDevice->SetClipRegion(Region(maClipPolyPolygon)); // recursively paint content // #i121267# Only need to process sub-content when clip polygon is *not* empty. @@ -1833,10 +1793,7 @@ namespace drawinglayer process(rMaskCandidate.getChildren()); // restore VCL clip region - if(bNewClipRegion) - { - mpOutputDevice->Pop(); - } + mpOutputDevice->Pop(); } // restore to rescued clip polygon |