use OutputDevice clipping if its just a set of rectangles

Change-Id: I249866d1aef29d256439c0437835a173d8a4c633
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/141286
Tested-by: Caolán McNamara <caolanm@redhat.com>
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx
index 38cb499..cf1ea90 100644
--- a/drawinglayer/source/processor2d/vclprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclprocessor2d.cxx
@@ -785,6 +785,17 @@ void VclProcessor2D::RenderPolyPolygonGraphicPrimitive2D(
    }
}

namespace
{
bool isRectangles(const basegfx::B2DPolyPolygon& rPolyPoly)
{
    for (sal_uInt32 i = 0, nCount = rPolyPoly.count(); i < nCount; ++i)
        if (!basegfx::utils::isRectangle(rPolyPoly.getB2DPolygon(i)))
            return false;
    return true;
}
}

// mask group
void VclProcessor2D::RenderMaskPrimitive2DPixel(const primitive2d::MaskPrimitive2D& rMaskCandidate)
{
@@ -799,7 +810,7 @@ void VclProcessor2D::RenderMaskPrimitive2DPixel(const primitive2d::MaskPrimitive
    aMask.transform(maCurrentTransformation);

    // Unless smooth edges are needed, simply use clipping.
    if (basegfx::utils::isRectangle(aMask) || !SvtOptionsDrawinglayer::IsAntiAliasing())
    if (isRectangles(aMask) || !SvtOptionsDrawinglayer::IsAntiAliasing())
    {
        mpOutputDevice->Push(vcl::PushFlags::CLIPREGION);
        mpOutputDevice->IntersectClipRegion(vcl::Region(aMask));