vcl/inc/win/DWriteTextRenderer.hxx |    2 +-
 vcl/win/gdi/DWriteTextRenderer.cxx |   14 ++++++++++----
 2 files changed, 11 insertions(+), 5 deletions(-)

New commits:
commit b35b8079b3f03b93efdaf2d54b4a515df296e71d
Author:     Mark Hung <mark...@gmail.com>
AuthorDate: Sun May 2 11:28:34 2021 +0800
Commit:     Mark Hung <mark...@gmail.com>
CommitDate: Sat May 8 06:34:31 2021 +0200

    vcl: Rotate glyph in DWriteTextRenderer for vertical writing.
    
    - This is part of the work to make all the text renders
    consistently use the positions created from harfbuzz.
    
    - Rotate 90 deg if the glyph is vertical.
    
    Change-Id: I0ef6569cf019ed2cfeec0b7e7b9709a7e8cf8021
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/115016
    Tested-by: Jenkins
    Reviewed-by: Mark Hung <mark...@gmail.com>

diff --git a/vcl/inc/win/DWriteTextRenderer.hxx 
b/vcl/inc/win/DWriteTextRenderer.hxx
index 9011a951d277..6e097546d1e2 100644
--- a/vcl/inc/win/DWriteTextRenderer.hxx
+++ b/vcl/inc/win/DWriteTextRenderer.hxx
@@ -88,7 +88,7 @@ private:
 class WinFontTransformGuard
 {
 public:
-    WinFontTransformGuard(ID2D1RenderTarget* pRenderTarget, float fHScale, 
const GenericSalLayout& rLayout, const D2D1_POINT_2F& rBaseline);
+    WinFontTransformGuard(ID2D1RenderTarget* pRenderTarget, float fHScale, 
const GenericSalLayout& rLayout, const D2D1_POINT_2F& rBaseline, bool 
bIsVertical);
     ~WinFontTransformGuard();
 
 private:
diff --git a/vcl/win/gdi/DWriteTextRenderer.cxx 
b/vcl/win/gdi/DWriteTextRenderer.cxx
index abf9be7d5f86..690f569dbeba 100644
--- a/vcl/win/gdi/DWriteTextRenderer.cxx
+++ b/vcl/win/gdi/DWriteTextRenderer.cxx
@@ -268,7 +268,7 @@ bool 
D2DWriteTextOutRenderer::performRender(GenericSalLayout const & rLayout, Sa
             DWRITE_GLYPH_OFFSET glyphOffsets[] = { { 0.0f, 0.0f }, };
             D2D1_POINT_2F baseline = { static_cast<FLOAT>(aPos.X() - 
bounds.Left()) / fHScale,
                                        static_cast<FLOAT>(aPos.Y() - 
bounds.Top()) };
-            WinFontTransformGuard aTransformGuard(mpRT, fHScale, rLayout, 
baseline);
+            WinFontTransformGuard aTransformGuard(mpRT, fHScale, rLayout, 
baseline, pGlyph->IsVertical());
             DWRITE_GLYPH_RUN glyphs = {
                 mpFontFace,
                 mlfEmHeight,
@@ -389,7 +389,8 @@ bool D2DWriteTextOutRenderer::GetDWriteFaceFromHDC(HDC hDC, 
IDWriteFontFace ** p
 
 WinFontTransformGuard::WinFontTransformGuard(ID2D1RenderTarget* pRenderTarget, 
float fHScale,
                                              const GenericSalLayout& rLayout,
-                                             const D2D1_POINT_2F& rBaseline)
+                                             const D2D1_POINT_2F& rBaseline,
+                                             bool bIsVertical)
     : mpRenderTarget(pRenderTarget)
 {
     pRenderTarget->GetTransform(&maTransform);
@@ -400,13 +401,18 @@ 
WinFontTransformGuard::WinFontTransformGuard(ID2D1RenderTarget* pRenderTarget, f
             = aTransform * D2D1::Matrix3x2F::Scale(D2D1::Size(fHScale, 1.0f), 
D2D1::Point2F(0, 0));
     }
 
-    if (rLayout.GetOrientation())
+    Degree10 angle = rLayout.GetOrientation();
+
+    if (bIsVertical)
+        angle += 900_deg10;
+
+    if (angle)
     {
         // DWrite angle is in clockwise degrees, our orientation is in 
counter-clockwise 10th
         // degrees.
         aTransform = aTransform
                      * D2D1::Matrix3x2F::Rotation(
-                           -static_cast<FLOAT>(rLayout.GetOrientation().get()) 
/ 10, rBaseline);
+                           -static_cast<FLOAT>(angle.get()) / 10, rBaseline);
     }
     mpRenderTarget->SetTransform(aTransform);
 }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to