summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2021-05-06 13:47:06 +0200
committerQt Cherry-pick Bot <cherrypick_bot@qt-project.org>2021-05-17 07:00:40 +0000
commitfd63d2ef370526f77ed24a5651e9b9c00eb02263 (patch)
tree0611831f95dc256ae6c668951fb9b603d4fc544f /src
parent84a9676fb6e398fcccf4cf1fb911d232939a258b (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.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index faf269f7c2..b4e74838f7 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -2173,20 +2173,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)