From 273c7936d334077ce27818f0cc02f103f74f8616 Mon Sep 17 00:00:00 2001 From: attila Date: Thu, 13 Mar 2025 16:57:49 +0100 Subject: [PATCH] Direct2D: Fix text drawing using gradients when the screen scaling is 1 --- .../juce_Direct2DGraphicsContext_windows.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp index 4ffa939266..fbabbe8047 100644 --- a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp @@ -1680,7 +1680,16 @@ void Direct2DGraphicsContext::drawGlyphs (Span glyphNumbers, if (fontFace == nullptr) return; - const auto brush = currentState->getBrush (SavedState::BrushTransformFlags::applyFillTypeTransform); + const auto fontScale = font.getHorizontalScale(); + const auto scaledTransform = AffineTransform::scale (fontScale, 1.0f).followedBy (transform); + const auto glyphRunTransform = scaledTransform.followedBy (currentState->currentTransform.getTransform()); + const auto onlyTranslated = glyphRunTransform.isOnlyTranslation(); + + const auto fillTransform = onlyTranslated + ? SavedState::BrushTransformFlags::applyWorldAndFillTypeTransforms + : SavedState::BrushTransformFlags::applyFillTypeTransform; + + const auto brush = currentState->getBrush (fillTransform); if (! brush) return; @@ -1689,11 +1698,6 @@ void Direct2DGraphicsContext::drawGlyphs (Span glyphNumbers, D2D1_POINT_2F baselineOrigin { 0.0f, 0.0f }; - const auto fontScale = font.getHorizontalScale(); - const auto scaledTransform = AffineTransform::scale (fontScale, 1.0f).followedBy (transform); - const auto glyphRunTransform = scaledTransform.followedBy (currentState->currentTransform.getTransform()); - const auto onlyTranslated = glyphRunTransform.isOnlyTranslation(); - if (onlyTranslated) baselineOrigin = { glyphRunTransform.getTranslationX(), glyphRunTransform.getTranslationY() }; else