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:
parent
93339428c0
commit
37f20ea8e6
@ -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;
|
||||
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user