diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2021-05-06 13:47:06 +0200 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2021-05-07 07:09:49 +0000 |
commit | 2334a452b9e5f6e17f36d9462d8a949670f33642 (patch) | |
tree | 99f886f430bb7c9ed1ea52ac6bd915f2c3477075 /src | |
parent | 975e69374708081ea3188ddad7e89aa7eaeeb22a (diff) |
Apply specialData font capitalization to non-rawFont text
We were not using the capitalization details from specialData in the
regular path of QTextEngine::itemize() causing it to be ignored.
Fixes: QTBUG-90840
Change-Id: I7bb71fad4009f6d0685905a946c36ac1d24d8d3c
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
(cherry picked from commit 5fa80f6cd792d0f7ead782037b9870796de05acb)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/gui/text/qtextengine.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 1014991748..60f0853454 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1994,20 +1994,30 @@ void QTextEngine::itemize() const QTextDocumentPrivate::FragmentIterator end = p->find(block.position() + block.length() - 1); // -1 to omit the block separator char int format = it.value()->format; + int preeditPosition = s ? s->preeditPosition : INT_MAX; int prevPosition = 0; int position = prevPosition; while (1) { const QTextFragmentData * const frag = it.value(); if (it == end || format != frag->format) { - if (s && position >= s->preeditPosition) { + if (s && position >= preeditPosition) { position += s->preeditText.length(); - s = nullptr; + preeditPosition = INT_MAX; } Q_ASSERT(position <= length); QFont::Capitalization capitalization = formatCollection()->charFormat(format).hasProperty(QTextFormat::FontCapitalization) ? formatCollection()->charFormat(format).fontCapitalization() : formatCollection()->defaultFont().capitalization(); + if (s) { + for (const auto &range : qAsConst(s->formats)) { + if (range.start >= prevPosition && range.start < position && range.format.hasProperty(QTextFormat::FontCapitalization)) { + itemizer.generate(prevPosition, range.start - prevPosition, capitalization); + itemizer.generate(range.start, range.length, range.format.fontCapitalization()); + prevPosition = range.start + range.length; + } + } + } itemizer.generate(prevPosition, position - prevPosition, capitalization); if (it == end) { if (position < length) |