tdf#160901: partially revert 8557ea84c9336ba8061246f1f46ddb6e02f413a1
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>
diff --git a/vcl/win/gdi/DWriteTextRenderer.cxx b/vcl/win/gdi/DWriteTextRenderer.cxx
index 37c8f2a..8a62f2d 100644
--- a/vcl/win/gdi/DWriteTextRenderer.cxx
+++ b/vcl/win/gdi/DWriteTextRenderer.cxx
@@ -311,19 +311,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);
}
}