diff options
author | Mike Kaganski <mike.kaganski@collabora.com> | 2024-05-02 14:23:53 +0500 |
---|---|---|
committer | Mike Kaganski <mike.kaganski@collabora.com> | 2024-05-03 09:39:46 +0500 |
commit | 85c82ad23c64db500e607a3ffb76e3aebfb18102 (patch) | |
tree | 9c05c724dcf96c5d5bf7763e231ab1c1e3cac9db | |
parent | f1d2339d320dd86c427b93a6e24f4106bf7feb10 (diff) |
It turns out, that the horizontal scale is needed in the applied transform.
Change-Id: Ic07e015f0ddeee3d66653b683d83435d04b9ab81
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/167004
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
-rw-r--r-- | vcl/win/gdi/DWriteTextRenderer.cxx | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/vcl/win/gdi/DWriteTextRenderer.cxx b/vcl/win/gdi/DWriteTextRenderer.cxx index a962cbcbb801..f8c8c93958d7 100644 --- a/vcl/win/gdi/DWriteTextRenderer.cxx +++ b/vcl/win/gdi/DWriteTextRenderer.cxx @@ -332,19 +332,32 @@ WinFontTransformGuard::WinFontTransformGuard(ID2D1RenderTarget* pRenderTarget, bool bIsVertical) : mpRenderTarget(pRenderTarget) { + const float hscale = [&font = rLayout.GetFont()] + { + const auto& rPattern = font.GetFontSelectPattern(); + if (!rPattern.mnHeight || !rPattern.mnWidth) + return 1.0; + return rPattern.mnWidth * font.GetAverageWidthFactor() / rPattern.mnHeight; + }(); + Degree10 angle = rLayout.GetOrientation(); if (bIsVertical) angle += 900_deg10; - if (angle) + if (hscale != 1.0f || angle) { D2D1::Matrix3x2F aTransform; pRenderTarget->GetTransform(&aTransform); moTransform = aTransform; + if (hscale != 1.0f) // basegfx::fTools::equal is useless with float + aTransform = aTransform * D2D1::Matrix3x2F::Scale(hscale, 1.0f, { 0, 0 }); + // DWrite angle is in clockwise degrees, our orientation is in counter-clockwise 10th // degrees. - aTransform = aTransform * D2D1::Matrix3x2F::Rotation(-toDegrees(angle), rBaseline); + if (angle) + aTransform = aTransform * D2D1::Matrix3x2F::Rotation(-toDegrees(angle), rBaseline); + mpRenderTarget->SetTransform(aTransform); } } |