Fix ligature offset in multi-line text

Reviewed-by: Eskil
(cherry picked from commit 278cf1f37945050c4a46d5acab0659f3a7546a43)

Change-Id: Ice20aa38a49ea16cf56bd3705c7d400ee165a9c2
Reviewed-on: http://codereview.qt.nokia.com/195
Reviewed-by: Jiang Jiang <jiang.jiang@nokia.com>
This commit is contained in:
Jiang Jiang 2011-05-20 10:26:54 +02:00 committed by Qt Continuous Integration System
parent 93339428c0
commit 37f20ea8e6
2 changed files with 19 additions and 2 deletions

View File

@ -2609,8 +2609,8 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const
} else {
bool rtl = eng->isRightToLeft();
bool visual = eng->visualCursorMovement();
int end = qMin(lineEnd, si->position + l) - si->position;
if (reverse) {
int end = qMin(lineEnd, si->position + l) - si->position;
int glyph_end = end == l ? si->num_glyphs : logClusters[end];
int glyph_start = glyph_pos;
if (visual && !rtl && !(lastLine && itm == (visualOrder[nItems - 1] + firstItem)))
@ -2626,7 +2626,7 @@ qreal QTextLine::cursorToX(int *cursorPos, Edge edge) const
for (int i = glyph_start; i <= glyph_end; i++)
x += glyphs.effectiveAdvance(i);
}
x += eng->offsetInLigature(si, pos, line.length, glyph_pos);
x += eng->offsetInLigature(si, pos, end, glyph_pos);
}
*cursorPos = pos + si->position;

View File

@ -127,6 +127,7 @@ private slots:
void textWithSurrogates_qtbug15679();
void textWidthWithStackedTextEngine();
void textWidthWithLineSeparator();
void cursorInLigatureWithMultipleLines();
private:
QFont testFont;
@ -1460,5 +1461,21 @@ void tst_QTextLayout::textWidthWithLineSeparator()
QCOMPARE(line1.naturalTextWidth(), line2.naturalTextWidth());
}
void tst_QTextLayout::cursorInLigatureWithMultipleLines()
{
#if !defined(Q_WS_MAC)
QSKIP("This test can not be run on Mac", SkipAll);
#endif
QTextLayout layout("first line finish", QFont("Times", 20));
layout.beginLayout();
QTextLine line = layout.createLine();
line.setLineWidth(70);
line = layout.createLine();
layout.endLayout();
// The second line will be "finish", with "fi" as a ligature
QVERIFY(line.cursorToX(0) != line.cursorToX(1));
}
QTEST_MAIN(tst_QTextLayout)
#include "tst_qtextlayout.moc"