summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Kaganski <mike.kaganski@collabora.com>2024-05-02 14:23:53 +0500
committerMike Kaganski <mike.kaganski@collabora.com>2024-05-03 09:39:46 +0500
commit85c82ad23c64db500e607a3ffb76e3aebfb18102 (patch)
tree9c05c724dcf96c5d5bf7763e231ab1c1e3cac9db
parentf1d2339d320dd86c427b93a6e24f4106bf7feb10 (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.cxx17
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);
}
}