diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp index 06c5e24..af5a165 100644 --- a/src/gui/text/qtextengine.cpp +++ b/src/gui/text/qtextengine.cpp @@ -1525,7 +1525,7 @@ void QTextEngine::itemize() const case QChar::Nbsp: if (option.flags() & QTextOption::ShowTabsAndSpaces) { analysis->script = QChar::Script_Common; - analysis->flags = QScriptAnalysis::Space; + analysis->flags = (*uc) == 32 ? QScriptAnalysis::Space : QScriptAnalysis::NonBreakingSpace; analysis->bidiLevel = control.baseLevel(); break; } diff --git a/src/gui/text/qtextengine_p.h b/src/gui/text/qtextengine_p.h index fb71ab4..6f38fa0 100644 --- a/src/gui/text/qtextengine_p.h +++ b/src/gui/text/qtextengine_p.h @@ -157,13 +157,14 @@ struct Q_AUTOTEST_EXPORT QScriptAnalysis LineOrParagraphSeparator = 4, Space = 5, SpaceTabOrObject = Space, - Tab = 6, + NonBreakingSpace = 6, + Tab = 7, TabOrObject = Tab, - Object = 7 + Object = 8 }; unsigned short script : 7; unsigned short bidiLevel : 6; // Unicode Bidi algorithm embedding level (0-61) - unsigned short flags : 3; + unsigned short flags : 4; inline bool operator == (const QScriptAnalysis &other) const { return script == other.script && bidiLevel == other.bidiLevel && flags == other.flags; } diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 66341e1..69d34a3 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -2522,12 +2522,20 @@ void QTextLine::draw(QPainter *p, const QPointF &pos, const QTextLayout::FormatR QPainterPrivate::get(p)->drawTextItem(pos, gf, eng); } } - if (si.analysis.flags == QScriptAnalysis::Space + if ((si.analysis.flags == QScriptAnalysis::Space || si.analysis.flags == QScriptAnalysis::NonBreakingSpace) && (eng->option.flags() & QTextOption::ShowTabsAndSpaces)) { QBrush c = format.foreground(); if (c.style() != Qt::NoBrush) p->setPen(c.color()); - QChar visualSpace((ushort)0xb7); + QChar visualSpace; + if( si.analysis.flags == QScriptAnalysis::Space ) + { + visualSpace = QChar((ushort)0xb7); + } + else + { + visualSpace = QChar((ushort)0xb0); + } p->drawText(QPointF(iterator.x.toReal(), itemBaseLine.toReal()), visualSpace); p->setPen(pen); }