diff options
author | Armin Le Grand <Armin.Le.Grand@me.com> | 2019-04-02 17:59:40 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2019-04-03 12:32:38 +0200 |
commit | c2ae30b19d8145271f1189c9757d59d43de391c7 (patch) | |
tree | eaed7ddd4b2327e71deccca512918d9d88765927 | |
parent | 1dc8088162a66a99217dae3258711cbfa8f9bc28 (diff) |
tdf#124272 use ClipRegion's geometry if not a rectangle
By error the ClipRegion's geometry was replaced by it's
BoundRect expanded to PixelBounds. If the ClipRegion
is not a rectangle, this will create wrong results. To
do both - extend to PixelBounds and have the original
geometry included - use the PolyPolygon topology as
needed (see comment in code for details)
Reviewed-on: https://gerrit.libreoffice.org/70146
Tested-by: Jenkins
Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
(cherry picked from commit 362c1cf2bd580f6dc8bf27bdcd79174111bc1b5c)
Conflicts:
sw/source/core/doc/notxtfrm.cxx
Change-Id: If3f75223144eba8eb23909a7c701ad544346099b
Reviewed-on: https://gerrit.libreoffice.org/70158
Tested-by: Xisco FaulĂ <xiscofauli@libreoffice.org>
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
-rw-r--r-- | sw/source/core/doc/notxtfrm.cxx | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/sw/source/core/doc/notxtfrm.cxx b/sw/source/core/doc/notxtfrm.cxx index 6dd910fab9ee..6055384ac8a7 100644 --- a/sw/source/core/doc/notxtfrm.cxx +++ b/sw/source/core/doc/notxtfrm.cxx @@ -988,9 +988,34 @@ void paintGraphicUsingPrimitivesHelper( ceil(aClipRange.getMaxX() + aSinglePixelXY.getX()), ceil(aClipRange.getMaxY() + aSinglePixelXY.getY())); + // create the enclosing rectangle as polygon + basegfx::B2DPolyPolygon aTarget(basegfx::utils::createPolygonFromRect(aExpandedClipRange)); + + // tdf#124272 the fix above (tdf#114076) was too rough - the + // clip region used may be a PolyPolygon. In that case that + // PolyPolygon would have to be scaled to mentioned PixelBounds. + // Since that is not really possible geometrically (would need + // more some 'grow in outside direction' but with unequal grow + // values in all directions - just maaany problems + // involved), use a graphical trick: The topology of the + // PolyPolygon uses the stndard FillRule, so adding the now + // guaranteed to be bigger or equal bounding (enclosing) + // rectangle twice as polygon will expand the BoundRange, but + // not change the geometry visualization at all + if(!rOutputDevice.GetClipRegion().IsRectangle()) + { + // double the outer rectangle range polygon to have it + // included twice + aTarget.append(aTarget.getB2DPolygon(0)); + + // add the original clip 'inside' (due to being smaller + // or equal). That PolyPolygon may have an unknown number + // of polygons (>=1) + aTarget.append(aClip); + } + aContent[0] = new drawinglayer::primitive2d::MaskPrimitive2D( - basegfx::B2DPolyPolygon( - basegfx::utils::createPolygonFromRect(aExpandedClipRange)), + aTarget, aContent); } } |