1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

Direct2D: Use axis-aligned clip layer when possible in clipToImageAlpha

This commit is contained in:
Matt Gonzalez 2024-05-10 20:32:45 -07:00 committed by reuk
parent 6ca54e8c97
commit dfb21da572
No known key found for this signature in database
GPG key ID: FCB43929F012EE5C

View file

@ -1078,12 +1078,21 @@ void Direct2DGraphicsContext::clipToImageAlpha (const Image& sourceImage, const
// to the sourceImage bounds
auto brushTransform = currentState->currentTransform.getTransformWith (transform);
{
D2D1_RECT_F sourceImageRectF = D2DUtilities::toRECT_F (sourceImage.getBounds());
ComSmartPtr<ID2D1RectangleGeometry> geometry;
getPimpl()->getDirect2DFactory()->CreateRectangleGeometry (sourceImageRectF, geometry.resetAndGetPointerAddress());
if (D2DHelpers::isTransformAxisAligned (brushTransform))
{
currentState->pushAliasedAxisAlignedClipLayer (sourceImage.getBounds().toFloat().transformedBy (brushTransform));
}
else
{
const auto sourceImageRectF = D2DUtilities::toRECT_F (sourceImage.getBounds());
ComSmartPtr<ID2D1RectangleGeometry> geometry;
if (geometry)
currentState->pushTransformedRectangleGeometryClipLayer (geometry, brushTransform);
if (const auto hr = getPimpl()->getDirect2DFactory()->CreateRectangleGeometry (sourceImageRectF, geometry.resetAndGetPointerAddress());
SUCCEEDED (hr) && geometry != nullptr)
{
currentState->pushTransformedRectangleGeometryClipLayer (geometry, brushTransform);
}
}
}
// Set the clip list to the full size of the frame to match