[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