summaryrefslogtreecommitdiff
path: root/sw/source
diff options
context:
space:
mode:
authorArmin Le Grand <Armin.Le.Grand@me.com>2019-04-02 17:59:40 +0200
committerThorsten Behrens <Thorsten.Behrens@CIB.de>2019-04-03 12:32:38 +0200
commitc2ae30b19d8145271f1189c9757d59d43de391c7 (patch)
treeeaed7ddd4b2327e71deccca512918d9d88765927 /sw/source
parent1dc8088162a66a99217dae3258711cbfa8f9bc28 (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>
Diffstat (limited to 'sw/source')
-rw-r--r--sw/source/core/doc/notxtfrm.cxx29
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);
}
}