diff options
-rw-r--r-- | src/gui/text/qtextlayout.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/src/gui/text/qtextlayout.cpp b/src/gui/text/qtextlayout.cpp index 72d409f638..53523f3abd 100644 --- a/src/gui/text/qtextlayout.cpp +++ b/src/gui/text/qtextlayout.cpp @@ -2097,6 +2097,10 @@ found: current.ascent = line.ascent; current.descent = height - line.ascent; break; + case QTextCharFormat::AlignMiddle: + current.ascent = (line.ascent + line.descent) / 2 - line.descent + height / 2; + current.descent = height - line.ascent; + break; case QTextCharFormat::AlignBottom: current.descent = line.descent; current.ascent = height - line.descent; @@ -2554,6 +2558,7 @@ void QTextLine::draw(QPainter *p, const QPointF &pos, const QTextLayout::FormatR QFont f = eng->font(si); QTextCharFormat format; + if (eng->hasFormats() || selection) { format = eng->format(&si); if (suppressColors) { @@ -2584,10 +2589,18 @@ void QTextLine::draw(QPainter *p, const QPointF &pos, const QTextLayout::FormatR p->save(); if (si.analysis.flags == QScriptAnalysis::Object && QTextDocumentPrivate::get(eng->block)) { QFixed itemY = y - si.ascent; - if (format.verticalAlignment() == QTextCharFormat::AlignTop) { + switch (format.verticalAlignment()) { + case QTextCharFormat::AlignTop: itemY = y - lineBase; - } else if (format.verticalAlignment() == QTextCharFormat::AlignBottom) { - itemY = y + line.descent - si.ascent - si.descent; + break; + case QTextCharFormat::AlignMiddle: + itemY = y - lineBase + (line.height() - si.height()) / 2; + break; + case QTextCharFormat::AlignBottom: + itemY = y - lineBase + line.height() - si.height(); + break; + default: + break; } QRectF itemRect(iterator.x.toReal(), itemY.toReal(), iterator.itemWidth.toReal(), si.height().toReal()); |