diff options
Diffstat (limited to 'src/gui/text/qtextlayout.cpp')
-rw-r--r-- | src/gui/text/qtextlayout.cpp | 82 |
1 files changed, 70 insertions, 12 deletions
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 013cd8ae0f..d68a59fae3 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE for a specified area in the text layout's content. \inmodule QtGui - \sa QTextLayout::setAdditionalFormats(), QTextLayout::draw() + \sa QTextLayout::setFormats(), QTextLayout::draw() */ /*! @@ -87,6 +87,20 @@ QT_BEGIN_NAMESPACE Specifies the format to apply. */ +/*! \fn bool operator==(const FormatRange &lhs, const FormatRange &rhs) + \relates QTextLayout::FormatRange + + Returns true if the \c {start}, \c {length}, and \c {format} fields + in \a lhs and \a rhs contain the same values respectively. + */ + +/*! \fn bool operator!=(const FormatRange &lhs, const FormatRange &rhs) + \relates QTextLayout::FormatRange + + Returns true if any of the \c {start}, \c {length}, or \c {format} fields + in \a lhs and \a rhs contain different values respectively. + */ + /*! \class QTextInlineObject \reentrant @@ -485,39 +499,76 @@ QString QTextLayout::preeditAreaText() const return d->preeditAreaText(); } +#if QT_DEPRECATED_SINCE(5, 6) +/*! + \obsolete Use setFormats() instead. +*/ +void QTextLayout::setAdditionalFormats(const QList<FormatRange> &formatList) +{ + setFormats(formatList.toVector()); +} +#endif // deprecated since 5.6 /*! - Sets the additional formats supported by the text layout to \a formatList. + \since 5.6 + + Sets the additional formats supported by the text layout to \a formats. The formats are applied with preedit area text in place. - \sa additionalFormats(), clearAdditionalFormats() + \sa formats(), clearFormats() */ -void QTextLayout::setAdditionalFormats(const QList<FormatRange> &formatList) +void QTextLayout::setFormats(const QVector<FormatRange> &formats) { - d->setFormats(formatList); + d->setFormats(formats); if (d->block.docHandle()) d->block.docHandle()->documentChange(d->block.position(), d->block.length()); } +#if QT_DEPRECATED_SINCE(5, 6) /*! - Returns the list of additional formats supported by the text layout. + \obsolete Use formats() instead. \sa setAdditionalFormats(), clearAdditionalFormats() */ QList<QTextLayout::FormatRange> QTextLayout::additionalFormats() const { + return formats().toList(); +} +#endif // deprecated since 5.6 + +/*! + \since 5.6 + + Returns the list of additional formats supported by the text layout. + + \sa setFormats(), clearFormats() +*/ +QVector<QTextLayout::FormatRange> QTextLayout::formats() const +{ return d->formats(); } +#if QT_DEPRECATED_SINCE(5, 6) +/*! + \obsolete Use clearFormats() instead. +*/ +void QTextLayout::clearAdditionalFormats() +{ + clearFormats(); +} +#endif // deprecated since 5.6 + /*! + \since 5.6 + Clears the list of additional formats supported by the text layout. - \sa additionalFormats(), setAdditionalFormats() + \sa formats(), setFormats() */ -void QTextLayout::clearAdditionalFormats() +void QTextLayout::clearFormats() { - setAdditionalFormats(QList<FormatRange>()); + setFormats(QVector<FormatRange>()); } /*! @@ -1915,9 +1966,16 @@ void QTextLine::layout_helper(int maxGlyphs) // end up breaking due to the current glyph being too wide. QFixed previousRightBearing = lbh.rightBearing; - // We ignore the right bearing if the minimum negative bearing is too little to - // expand the text beyond the edge. - if (lbh.calculateNewWidth(line) - lbh.minimumRightBearing > line.width) + // We skip calculating the right bearing if the minimum negative bearing is too + // small to possibly expand the text beyond the edge. Note that this optimization + // will in some cases fail, as the minimum right bearing reported by the font + // engine may not cover all the glyphs in the font. The result is that we think + // we don't need to break at the current glyph (because the right bearing is 0), + // and when we then end up breaking on the next glyph we compute the right bearing + // and end up with a line width that is slightly larger width than what was requested. + // Unfortunately we can't remove this optimization as it will slow down text + // layouting significantly, so we accept the slight correctnes issue. + if ((lbh.calculateNewWidth(line) + qAbs(lbh.minimumRightBearing)) > line.width) lbh.calculateRightBearing(); if (lbh.checkFullOtherwiseExtend(line)) { |