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())
             {

Reply via email to