[Libreoffice-commits] core.git: vcl/win

Tor Lillqvist tml at collabora.com
Tue Dec 1 05:18:34 PST 2015


 vcl/win/source/gdi/winlayout.cxx |    5 +++++
 vcl/win/source/gdi/winlayout.hxx |    1 +
 2 files changed, 6 insertions(+)

New commits:
commit 7ac763db694a956cb1e4f82477a7f9fe993f1f1a
Author: Tor Lillqvist <tml at collabora.com>
Date:   Tue Dec 1 15:13:17 2015 +0200

    tdf#95194: We need to set the GF flags in UniscribeLayout::GetNextGlyphs()
    
    The old SimpleWinLayout::GetNextGlyphs() did it.
    PDFWriterImpl::drawVerticalGlyphs() expects GF_ROTL etc to be set when
    necessary for vertical text when exporting to PDF.
    
    Change-Id: I325d6e9f75a3bc51f24add33dd3bffe7b3c7bee0

diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx
index d326006..b5ce57e 100644
--- a/vcl/win/source/gdi/winlayout.cxx
+++ b/vcl/win/source/gdi/winlayout.cxx
@@ -824,6 +824,8 @@ OUString VisAttrArrayToString(SCRIPT_VISATTR *pVisAttrs, int n)
 
 bool UniscribeLayout::LayoutText( ImplLayoutArgs& rArgs )
 {
+    msTheString = rArgs.mrStr;
+
     // for a base layout only the context glyphs have to be dropped
     // => when the whole string is involved there is no extra context
     typedef std::vector<int> TIntVector;
@@ -1524,6 +1526,9 @@ int UniscribeLayout::GetNextGlyphs( int nLen, sal_GlyphId* pGlyphs, Point& rPos,
         }
 
         // update return values
+        if( (mnLayoutFlags & SalLayoutFlags::Vertical) &&
+            nCharPos != -1 )
+            aGlyphId |= GetVerticalFlags( msTheString[nCharPos] );
         *(pGlyphs++) = aGlyphId;
         if( pGlyphAdvances )
             *(pGlyphAdvances++) = nGlyphWidth;
diff --git a/vcl/win/source/gdi/winlayout.hxx b/vcl/win/source/gdi/winlayout.hxx
index 664915b..545d267 100644
--- a/vcl/win/source/gdi/winlayout.hxx
+++ b/vcl/win/source/gdi/winlayout.hxx
@@ -110,6 +110,7 @@ private:
 
     // string specific info
     // everything is in logical order
+    OUString        msTheString;        // Sadly we need it in GetNextGlyphs(), to be able to call GetVerticalFlags()
     int             mnCharCapacity;
     WORD*           mpLogClusters;      // map from absolute_char_pos to relative_glyph_pos
     int*            mpCharWidths;       // map from absolute_char_pos to char_width


More information about the Libreoffice-commits mailing list