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>
This commit is contained in:
Thorsten Wagner 2021-03-20 21:20:53 +01:00 committed by Adolfo Jayme Barrientos
parent 0748309838
commit 00d12793f5

View file

@ -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 );
}
}
}