drawinglayer/source/processor2d/vclprocessor2d.cxx | 3 - vcl/win/gdi/DWriteTextRenderer.cxx | 35 +++++++++++++++------ 2 files changed, 26 insertions(+), 12 deletions(-)
New commits: commit 85c82ad23c64db500e607a3ffb76e3aebfb18102 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Thu May 2 14:23:53 2024 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Fri May 3 09:39:46 2024 +0500 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.kagan...@collabora.com> 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); } } commit f1d2339d320dd86c427b93a6e24f4106bf7feb10 Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Wed Apr 10 22:45:41 2024 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Fri May 3 09:39:42 2024 +0500 Only call ID2D1RenderTarget::Get/SetTransform when needed Change-Id: Ifde2c24c222e3c316f5a4f47e86c2c08f676639a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/165983 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/vcl/win/gdi/DWriteTextRenderer.cxx b/vcl/win/gdi/DWriteTextRenderer.cxx index fb96cfa68659..a962cbcbb801 100644 --- a/vcl/win/gdi/DWriteTextRenderer.cxx +++ b/vcl/win/gdi/DWriteTextRenderer.cxx @@ -108,7 +108,7 @@ public: private: ID2D1RenderTarget* mpRenderTarget; - D2D1::Matrix3x2F maTransform; + std::optional<D2D1::Matrix3x2F> moTransform; }; } // end anonymous namespace @@ -332,25 +332,27 @@ WinFontTransformGuard::WinFontTransformGuard(ID2D1RenderTarget* pRenderTarget, bool bIsVertical) : mpRenderTarget(pRenderTarget) { - pRenderTarget->GetTransform(&maTransform); - D2D1::Matrix3x2F aTransform = maTransform; - Degree10 angle = rLayout.GetOrientation(); - if (bIsVertical) angle += 900_deg10; if (angle) { + D2D1::Matrix3x2F aTransform; + pRenderTarget->GetTransform(&aTransform); + moTransform = aTransform; + // DWrite angle is in clockwise degrees, our orientation is in counter-clockwise 10th // degrees. - aTransform = aTransform - * D2D1::Matrix3x2F::Rotation( - -toDegrees(angle), rBaseline); + aTransform = aTransform * D2D1::Matrix3x2F::Rotation(-toDegrees(angle), rBaseline); + mpRenderTarget->SetTransform(aTransform); } - mpRenderTarget->SetTransform(aTransform); } -WinFontTransformGuard::~WinFontTransformGuard() { mpRenderTarget->SetTransform(maTransform); } +WinFontTransformGuard::~WinFontTransformGuard() +{ + if (moTransform) + mpRenderTarget->SetTransform(*moTransform); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ commit 331fcd66d047d4b12e4b958f88f92825ddd2acbd Author: Mike Kaganski <mike.kagan...@collabora.com> AuthorDate: Fri Apr 26 01:00:21 2024 +0500 Commit: Mike Kaganski <mike.kagan...@collabora.com> CommitDate: Wed May 1 17:15:32 2024 +0500 tdf#157240: also set font color together with font Commit b008831a5545e5a777d77547ef96b9798d795f30 (tdf#152990 set the font after the MapMode is (potentially) set, 2023-01-14) had moved setting of font forward, but left setting the font color behind. This fixed that. Change-Id: I73fadc7c139da3b6f84b7fc875c585d02fc1c719 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/166654 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com> diff --git a/drawinglayer/source/processor2d/vclprocessor2d.cxx b/drawinglayer/source/processor2d/vclprocessor2d.cxx index f8e5d0457583..109be5cd40f9 100644 --- a/drawinglayer/source/processor2d/vclprocessor2d.cxx +++ b/drawinglayer/source/processor2d/vclprocessor2d.cxx @@ -329,8 +329,6 @@ void VclProcessor2D::RenderTextSimpleOrDecoratedPortionPrimitive2D( mpOutputDevice->SetLayoutMode(nRTLLayoutMode); } - mpOutputDevice->SetTextColor(Color(aRGBFontColor)); - OUString aText(rTextCandidate.getText()); sal_Int32 nPos = rTextCandidate.getTextPosition(); sal_Int32 nLen = rTextCandidate.getTextLength(); @@ -428,6 +426,7 @@ void VclProcessor2D::RenderTextSimpleOrDecoratedPortionPrimitive2D( // tdf#152990 set the font after the MapMode is (potentially) set so canvas uses the desired // font size mpOutputDevice->SetFont(aFont); + mpOutputDevice->SetTextColor(Color(aRGBFontColor)); if (!aDXArray.empty()) {