diff options
Diffstat (limited to 'src/gui/text/qtextlayout.cpp')
-rw-r--r-- | src/gui/text/qtextlayout.cpp | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 4879ae51d7..9919ce6bb4 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -505,7 +505,7 @@ QString QTextLayout::preeditAreaText() const */ void QTextLayout::setAdditionalFormats(const QList<FormatRange> &formatList) { - d->setAdditionalFormats(formatList); + d->setFormats(formatList); if (d->block.docHandle()) d->block.docHandle()->documentChange(d->block.position(), d->block.length()); @@ -518,7 +518,7 @@ void QTextLayout::setAdditionalFormats(const QList<FormatRange> &formatList) */ QList<QTextLayout::FormatRange> QTextLayout::additionalFormats() const { - return d->additionalFormats(); + return d->formats(); } /*! @@ -567,7 +567,7 @@ bool QTextLayout::cacheEnabled() const */ void QTextLayout::setCursorMoveStyle(Qt::CursorMoveStyle style) { - d->visualMovement = style == Qt::VisualMoveStyle ? true : false; + d->visualMovement = style == Qt::VisualMoveStyle; } /*! @@ -1735,6 +1735,7 @@ void QTextLine::layout_helper(int maxGlyphs) int item = -1; int newItem = eng->findItem(line.from); + Q_ASSERT(newItem >= 0); LB_DEBUG("from: %d: item=%d, total %d, width available %f", line.from, newItem, eng->layoutData->items.size(), line.width.toReal()); @@ -2212,14 +2213,10 @@ QList<QGlyphRun> QTextLine::glyphRuns(int from, int length) const if (si.analysis.flags >= QScriptAnalysis::TabOrObject) continue; - QPointF pos(iterator.x.toReal(), y); - if (from >= 0 && length >= 0 && - (from >= si.position + eng->length(&si) - || from + length <= si.position - || from + length <= iterator.itemStart - || from >= iterator.itemEnd)) { + if (from >= 0 && length >= 0 && (from >= iterator.itemEnd || from + length <= iterator.itemStart)) continue; - } + + QPointF pos(iterator.x.toReal(), y); QFont font; QGlyphRun::GlyphRunFlags flags; @@ -2240,15 +2237,13 @@ QList<QGlyphRun> QTextLine::glyphRuns(int from, int length) const } int relativeFrom = qMax(iterator.itemStart, from) - si.position; - int relativeTo = qMin(iterator.itemEnd - 1, from + length - 1) - si.position; + int relativeTo = qMin(iterator.itemEnd, from + length) - 1 - si.position; unsigned short *logClusters = eng->logClusters(&si); int glyphsStart = logClusters[relativeFrom]; - int glyphsEnd = (relativeTo == eng->length(&si)) - ? si.num_glyphs - 1 - : logClusters[relativeTo]; + int glyphsEnd = (relativeTo == iterator.itemLength) ? si.num_glyphs - 1 : logClusters[relativeTo]; // the glyph index right next to the requested range - int nextGlyphIndex = relativeTo < eng->length(&si) - 1 ? logClusters[relativeTo + 1] : si.num_glyphs; + int nextGlyphIndex = (relativeTo < iterator.itemLength - 1) ? logClusters[relativeTo + 1] : si.num_glyphs; if (nextGlyphIndex - 1 > glyphsEnd) glyphsEnd = nextGlyphIndex - 1; bool startsInsideLigature = relativeFrom > 0 && logClusters[relativeFrom - 1] == glyphsStart; |