summaryrefslogtreecommitdiff
path: root/vcl/quartz
diff options
context:
space:
mode:
authorThorsten Wagner <thorsten.wagner.4@gmail.com>2021-03-20 21:20:53 +0100
committerAdolfo Jayme Barrientos <fitojb@ubuntu.com>2021-03-23 10:06:39 +0100
commit00d12793f5d9a73f784e23aff61e2618f0fc01c0 (patch)
tree65a6926a5c5a5f47f6abf92d1e7c689e02b4f3c0 /vcl/quartz
parent0748309838345f459e6812538294a2c56f6f5dd5 (diff)
tdf#141063 Always use region rectangles for clipping on macOS
The use of polygons currently causes misalignment by one pixel. Use of polygons is dropped on macOS by this change similar it has been done for SKIA to fix tdf#133208. Change-Id: I31faf7cf9b33908a52cb60d1b631308b4fe45e56 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112823 Tested-by: Jenkins Reviewed-by: Luboš Luňák <l.lunak@collabora.com> Reviewed-by: Tor Lillqvist <tml@collabora.com>
Diffstat (limited to 'vcl/quartz')
-rw-r--r--vcl/quartz/salgdicommon.cxx42
1 files changed, 9 insertions, 33 deletions
diff --git a/vcl/quartz/salgdicommon.cxx b/vcl/quartz/salgdicommon.cxx
index d82681f1091f..51e35e79905a 100644
--- a/vcl/quartz/salgdicommon.cxx
+++ b/vcl/quartz/salgdicommon.cxx
@@ -127,21 +127,6 @@ static void AddPolygonToPath( CGMutablePathRef xPath,
}
}
-static void AddPolyPolygonToPath( CGMutablePathRef xPath,
- const basegfx::B2DPolyPolygon& rPolyPoly,
- bool bPixelSnap, bool bLineDraw )
-{
- // short circuit if there is nothing to do
- if( rPolyPoly.count() == 0 )
- {
- return;
- }
- for(auto const& rPolygon : rPolyPoly)
- {
- AddPolygonToPath( xPath, rPolygon, true, bPixelSnap, bLineDraw );
- }
-}
-
bool AquaSalGraphics::CreateFontSubset( const OUString& rToFile,
const PhysicalFontFace* pFontData,
const sal_GlyphId* pGlyphIds, const sal_uInt8* pEncoding,
@@ -1439,30 +1424,21 @@ bool AquaSalGraphics::setClipRegion( const vcl::Region& i_rClip )
mxClipPath = CGPathCreateMutable();
// set current path, either as polypolgon or sequence of rectangles
- if(i_rClip.HasPolyPolygonOrB2DPolyPolygon())
- {
- const basegfx::B2DPolyPolygon aClip(i_rClip.GetAsB2DPolyPolygon());
+ RectangleVector aRectangles;
+ i_rClip.GetRegionRectangles(aRectangles);
- AddPolyPolygonToPath( mxClipPath, aClip, !getAntiAlias(), false );
- }
- else
+ for(const auto& rRect : aRectangles)
{
- RectangleVector aRectangles;
- i_rClip.GetRegionRectangles(aRectangles);
+ const tools::Long nW(rRect.Right() - rRect.Left() + 1); // uses +1 logic in original
- for(const auto& rRect : aRectangles)
+ if(nW)
{
- const tools::Long nW(rRect.Right() - rRect.Left() + 1); // uses +1 logic in original
+ const tools::Long nH(rRect.Bottom() - rRect.Top() + 1); // uses +1 logic in original
- if(nW)
+ if(nH)
{
- const tools::Long nH(rRect.Bottom() - rRect.Top() + 1); // uses +1 logic in original
-
- if(nH)
- {
- const CGRect aRect = CGRectMake( rRect.Left(), rRect.Top(), nW, nH);
- CGPathAddRect( mxClipPath, nullptr, aRect );
- }
+ const CGRect aRect = CGRectMake( rRect.Left(), rRect.Top(), nW, nH);
+ CGPathAddRect( mxClipPath, nullptr, aRect );
}
}
}