diff --git a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp index 96adea4cc9..1dbaf202e3 100644 --- a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp @@ -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 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 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