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

Miklos Vajna vmiklos at collabora.co.uk
Wed Sep 2 06:42:00 PDT 2015


 vcl/win/source/gdi/winlayout.cxx |    8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

New commits:
commit 53a40c43a1ac88e761e97a2832367525ee6b0426
Author: Miklos Vajna <vmiklos at collabora.co.uk>
Date:   Wed Sep 2 15:40:53 2015 +0200

    tdf#93857 opengl: adapt UniscribeLayout's DrawCachedGlyphs() to FillDXArray()
    
    The problem was UniscribeLayout::DrawCachedGlyphs() counted the total
    advance value unconditionally from mpGlyphAdvances, while
    UniscribeLayout::FillDXArray() (which provides advance values to e.g.
    Writer) only used mpGlyphAdvances in case of NULL mpJustifications.  Fix
    this by first checking mpJustifications in
    UniscribeLayout::DrawCachedGlyphs(), too.
    
    With this, e.g. typing "x" in Writer 10 times will not result in a
    "misplaced" cursor caret.
    
    Change-Id: I16c7a258ff77b25c5121b9b974e72ad6efe5e9fc

diff --git a/vcl/win/source/gdi/winlayout.cxx b/vcl/win/source/gdi/winlayout.cxx
index f7bc83b..6fc1245 100644
--- a/vcl/win/source/gdi/winlayout.cxx
+++ b/vcl/win/source/gdi/winlayout.cxx
@@ -1736,6 +1736,12 @@ bool UniscribeLayout::DrawCachedGlyphs(SalGraphics& rGraphics) const
         Point aPos = GetDrawPosition( aRelPos );
 
         int nAdvance = 0;
+
+        // This has to be in sync with UniscribeLayout::FillDXArray(), so that
+        // actual and reported glyph positions (used for e.g. cursor caret
+        // positioning) match.
+        const int* pGlyphWidths = mpJustifications ? mpJustifications : mpGlyphAdvances;
+
         for (int i = nMinGlyphPos; i < nEndGlyphPos; i++)
         {
             assert(mrWinFontEntry.GlyphIsCached(mpOutGlyphs[i]));
@@ -1759,7 +1765,7 @@ bool UniscribeLayout::DrawCachedGlyphs(SalGraphics& rGraphics) const
                                    rChunk.maLocation[n].getWidth(), rChunk.maLocation[n].getHeight()); // ???
                 pImpl->DrawMask(*rChunk.mpTexture, salColor, a2Rects);
             }
-            nAdvance += mpGlyphAdvances[i];
+            nAdvance += pGlyphWidths[i];
         }
     }
     pImpl->PostDraw();


More information about the Libreoffice-commits mailing list