diff options
author | Jiang Jiang <jiang.jiang@nokia.com> | 2010-12-10 15:07:25 (GMT) |
---|---|---|
committer | Jiang Jiang <jiang.jiang@nokia.com> | 2011-03-24 15:11:46 (GMT) |
commit | f49490a13b664eb00207b2d3d6354071ae81f161 (patch) | |
tree | 5eadb3c7280dec4538dc01d7b7598e4b9e94165c /tests | |
parent | fda299f55dd5aeb2d075f6f5c842f75c9f559f9c (diff) | |
download | Qt-f49490a13b664eb00207b2d3d6354071ae81f161.zip Qt-f49490a13b664eb00207b2d3d6354071ae81f161.tar.gz Qt-f49490a13b664eb00207b2d3d6354071ae81f161.tar.bz2 |
Make sure num_glyphs pass to HarfBuzz is large enough
(Backport from master)
Currently we only pass the num_glyphs for the run to
HB_ShapeItem, but it can be less then the string length
for this run because of Unicode surrogates. Thus, we need
to pass at least the length of that run as num_glyphs to
HB (given that we have enough space allocated because for
the entire string), if that's still not enough, we will
do ensureSpace again according to the num_glyphs returned
by HB and move remaining glyphs backwards.
Task-number: QTBUG-15679
Reviewed-by: Lars Knoll
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/qtextlayout/tst_qtextlayout.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/auto/qtextlayout/tst_qtextlayout.cpp b/tests/auto/qtextlayout/tst_qtextlayout.cpp index 2d15566..85e6616 100644 --- a/tests/auto/qtextlayout/tst_qtextlayout.cpp +++ b/tests/auto/qtextlayout/tst_qtextlayout.cpp @@ -125,6 +125,7 @@ private slots: void textWidthVsWIdth(); void textWidthWithStackedTextEngine(); void textWidthWithLineSeparator(); + void textWithSurrogates_qtbug15679(); private: QFont testFont; @@ -1416,5 +1417,24 @@ void tst_QTextLayout::textWidthWithLineSeparator() QCOMPARE(line1.naturalTextWidth(), line2.naturalTextWidth()); } +void tst_QTextLayout::textWithSurrogates_qtbug15679() +{ + QString str = QString::fromUtf8("🀀a🀀"); + QTextLayout layout(str); + layout.beginLayout(); + QTextLine line = layout.createLine(); + layout.endLayout(); + + qreal x[6]; + for (int i = 0; i < 6; i++) + x[i] = line.cursorToX(i); + + // If the first and third character are using the same + // font, they must have the same advance (since they + // are surrogate pairs, we need to add two for each + // character) + QCOMPARE(x[2] - x[0], x[5] - x[3]); +} + QTEST_MAIN(tst_QTextLayout) #include "tst_qtextlayout.moc" |