diff options
Diffstat (limited to 'src/gui/text/qtextlayout.cpp')
-rw-r--r-- | src/gui/text/qtextlayout.cpp | 67 |
1 files changed, 11 insertions, 56 deletions
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 833e4c5037..eed6758cc9 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -463,24 +463,10 @@ const QTextOption &QTextLayout::textOption() const */ void QTextLayout::setPreeditArea(int position, const QString &text) { - if (text.isEmpty()) { - if (!d->specialData) - return; - if (d->specialData->addFormats.isEmpty()) { - delete d->specialData; - d->specialData = 0; - } else { - d->specialData->preeditText = QString(); - d->specialData->preeditPosition = -1; - } - } else { - if (!d->specialData) - d->specialData = new QTextEngine::SpecialData; - d->specialData->preeditPosition = position; - d->specialData->preeditText = text; - } - d->invalidate(); - d->clearLineData(); + if (d->preeditAreaPosition() == position && d->preeditAreaText() == text) + return; + d->setPreeditArea(position, text); + if (d->block.docHandle()) d->block.docHandle()->documentChange(d->block.position(), d->block.length()); } @@ -493,7 +479,7 @@ void QTextLayout::setPreeditArea(int position, const QString &text) */ int QTextLayout::preeditAreaPosition() const { - return d->specialData ? d->specialData->preeditPosition : -1; + return d->preeditAreaPosition(); } /*! @@ -503,7 +489,7 @@ int QTextLayout::preeditAreaPosition() const */ QString QTextLayout::preeditAreaText() const { - return d->specialData ? d->specialData->preeditText : QString(); + return d->preeditAreaText(); } @@ -515,27 +501,10 @@ QString QTextLayout::preeditAreaText() const */ void QTextLayout::setAdditionalFormats(const QList<FormatRange> &formatList) { - if (formatList.isEmpty()) { - if (!d->specialData) - return; - if (d->specialData->preeditText.isEmpty()) { - delete d->specialData; - d->specialData = 0; - } else { - d->specialData->addFormats = formatList; - d->specialData->addFormatIndices.clear(); - } - } else { - if (!d->specialData) { - d->specialData = new QTextEngine::SpecialData; - d->specialData->preeditPosition = -1; - } - d->specialData->addFormats = formatList; - d->indexAdditionalFormats(); - } + d->setAdditionalFormats(formatList); + if (d->block.docHandle()) d->block.docHandle()->documentChange(d->block.position(), d->block.length()); - d->resetFontEngineCache(); } /*! @@ -545,21 +514,7 @@ void QTextLayout::setAdditionalFormats(const QList<FormatRange> &formatList) */ QList<QTextLayout::FormatRange> QTextLayout::additionalFormats() const { - QList<FormatRange> formats; - if (!d->specialData) - return formats; - - formats = d->specialData->addFormats; - - if (d->specialData->addFormatIndices.isEmpty()) - return formats; - - const QTextFormatCollection *collection = d->formats(); - - for (int i = 0; i < d->specialData->addFormatIndices.count(); ++i) - formats[i].format = collection->charFormat(d->specialData->addFormatIndices.at(i)); - - return formats; + return d->additionalFormats(); } /*! @@ -1022,7 +977,7 @@ static inline QRectF clipIfValid(const QRectF &rect, const QRectF &clip) */ #if !defined(QT_NO_RAWFONT) QList<QGlyphRun> QTextLayout::glyphRuns(int from, int length) const -{ +{ if (from < 0) from = 0; if (length < 0) @@ -1651,7 +1606,7 @@ namespace { } inline glyph_t currentGlyph() const - { + { Q_ASSERT(currentPosition > 0); Q_ASSERT(logClusters[currentPosition - 1] < glyphs.numGlyphs); |