summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/gui/text/qtextengine.cpp67
1 files changed, 2 insertions, 65 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index bb453d5e28..366b5bfcb2 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -2801,25 +2801,6 @@ QFixed QTextEngine::calculateTabWidth(int item, QFixed x) const
return tabWidth;
}
-namespace {
-class FormatRangeComparatorByStart {
- const QList<QTextLayout::FormatRange> &list;
-public:
- FormatRangeComparatorByStart(const QList<QTextLayout::FormatRange> &list) : list(list) { }
- bool operator()(int a, int b) {
- return list.at(a).start < list.at(b).start;
- }
-};
-class FormatRangeComparatorByEnd {
- const QList<QTextLayout::FormatRange> &list;
-public:
- FormatRangeComparatorByEnd(const QList<QTextLayout::FormatRange> &list) : list(list) { }
- bool operator()(int a, int b) {
- return list.at(a).start + list.at(a).length < list.at(b).start + list.at(b).length;
- }
-};
-}
-
void QTextEngine::resolveAdditionalFormats() const
{
if (!specialData || specialData->addFormats.isEmpty()
@@ -2831,53 +2812,9 @@ void QTextEngine::resolveAdditionalFormats() const
specialData->resolvedFormatIndices.clear();
QVector<int> indices(layoutData->items.count());
-
-
- QVarLengthArray<int, 64> addFormatSortedByStart;
- addFormatSortedByStart.reserve(specialData->addFormats.count());
- for (int i = 0; i < specialData->addFormats.count(); ++i)
- addFormatSortedByStart.append(i);
- QVarLengthArray<int, 64> addFormatSortedByEnd = addFormatSortedByStart;
- qSort(addFormatSortedByStart.begin(), addFormatSortedByStart.end(),
- FormatRangeComparatorByStart(specialData->addFormats));
- qSort(addFormatSortedByEnd.begin(), addFormatSortedByEnd.end(),
- FormatRangeComparatorByEnd(specialData->addFormats));
-
- QVarLengthArray<int, 16> currentFormats;
- const int *startIt = addFormatSortedByStart.constBegin();
- const int *endIt = addFormatSortedByEnd.constBegin();
-
for (int i = 0; i < layoutData->items.count(); ++i) {
- const QScriptItem *si = &layoutData->items.at(i);
- int end = si->position + length(si);
-
- while (startIt != addFormatSortedByStart.end() &&
- specialData->addFormats.at(*startIt).start <= si->position) {
- currentFormats.insert(qUpperBound(currentFormats.begin(), currentFormats.end(), *startIt),
- *startIt);
- ++startIt;
- }
- while (endIt != addFormatSortedByEnd.end() &&
- specialData->addFormats.at(*endIt).start + specialData->addFormats.at(*endIt).length < end) {
- currentFormats.remove(qBinaryFind(currentFormats, *endIt) - currentFormats.begin());
- ++endIt;
- }
- QTextCharFormat format;
- const QTextFormatCollection *formats = 0;
- if (block.docHandle()) {
- formats = this->formats();
- format = formats->charFormat(formatIndex(si));
- }
- foreach (int cur, currentFormats) {
- const QTextLayout::FormatRange &r = specialData->addFormats.at(cur);
- Q_ASSERT (r.start <= si->position && r.start + r.length >= end);
- if (!specialData->addFormatIndices.isEmpty()) {
- format.merge(formats->format(specialData->addFormatIndices.at(cur)));
- } else {
- format.merge(r.format);
- }
- }
- indices[i] = collection->indexForFormat(format);
+ QTextCharFormat f = format(&layoutData->items.at(i));
+ indices[i] = collection->indexForFormat(f);
}
specialData->resolvedFormatIndices = indices;
}