diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp index 317fe4cbf7..ec1b4c1310 100644 --- a/src/gui/painting/qpainter.cpp +++ b/src/gui/painting/qpainter.cpp @@ -5744,7 +5744,7 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText if (d->extended == 0 || !d->state->matrix.isAffine() || !fe->supportsTransformation(d->state->matrix)) { - staticText_d->paintText(topLeftPosition, this); + staticText_d->paintText(topLeftPosition, this, pen().color()); return; } @@ -5816,11 +5816,16 @@ void QPainter::drawStaticText(const QPointF &topLeftPosition, const QStaticText QPen oldPen = d->state->pen; QColor currentColor = oldPen.color(); + static const QColor bodyIndicator(0, 0, 0, 0); for (int i=0; iitemCount; ++i) { QStaticTextItem *item = staticText_d->items + i; - if (item->color.isValid() && currentColor != item->color) { - setPen(item->color); - currentColor = item->color; + if (item->color.isValid() && currentColor != item->color + && item->color != bodyIndicator) { + setPen(item->color); + currentColor = item->color; + } else if (item->color == bodyIndicator) { + setPen(oldPen); + currentColor = oldPen.color(); } d->extended->drawStaticTextItem(item); diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp index d6f97547c4..68f33a8ed7 100644 --- a/src/gui/text/qstatictext.cpp +++ b/src/gui/text/qstatictext.cpp @@ -435,7 +435,7 @@ namespace { public: DrawTextItemRecorder(bool untransformedCoordinates, bool useBackendOptimizations) : m_dirtyPen(false), m_useBackendOptimizations(useBackendOptimizations), - m_untransformedCoordinates(untransformedCoordinates), m_currentColor(Qt::black) + m_untransformedCoordinates(untransformedCoordinates), m_currentColor(0, 0, 0, 0) { } @@ -599,7 +599,7 @@ namespace { }; } -void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p) +void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p, const QColor &pen) { bool preferRichText = textFormat == Qt::RichText || (textFormat == Qt::AutoText && Qt::mightBeRichText(text)); @@ -631,15 +631,16 @@ void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p) textLayout.endLayout(); actualSize = textLayout.boundingRect().size(); + p->setPen(pen); textLayout.draw(p, topLeftPosition); } else { QTextDocument document; #ifndef QT_NO_CSSPARSER - QColor color = p->pen().color(); - document.setDefaultStyleSheet(QString::fromLatin1("body { color: #%1%2%3 }") - .arg(QString::number(color.red(), 16), 2, QLatin1Char('0')) - .arg(QString::number(color.green(), 16), 2, QLatin1Char('0')) - .arg(QString::number(color.blue(), 16), 2, QLatin1Char('0'))); + document.setDefaultStyleSheet(QString::fromLatin1("body { color: rgba(%1, %2, %3, %4%) }") + .arg(QString::number(pen.red())) + .arg(QString::number(pen.green())) + .arg(QString::number(pen.blue())) + .arg(QString::number(pen.alpha()))); #endif document.setDefaultFont(font); document.setDocumentMargin(0.0); @@ -657,7 +658,7 @@ void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p) p->save(); p->translate(topLeftPosition); QAbstractTextDocumentLayout::PaintContext ctx; - ctx.palette.setColor(QPalette::Text, p->pen().color()); + ctx.palette.setColor(QPalette::Text, pen); document.documentLayout()->draw(p, ctx); p->restore(); @@ -682,7 +683,7 @@ void QStaticTextPrivate::init() painter.setFont(font); painter.setTransform(matrix); - paintText(QPointF(0, 0), &painter); + paintText(QPointF(0, 0), &painter, QColor(0, 0, 0, 0)); } QVector deviceItems = device.items(); diff --git a/src/gui/text/qstatictext_p.h b/src/gui/text/qstatictext_p.h index dda566a22b..c4023488ff 100644 --- a/src/gui/text/qstatictext_p.h +++ b/src/gui/text/qstatictext_p.h @@ -131,7 +131,7 @@ public: ~QStaticTextPrivate(); void init(); - void paintText(const QPointF &pos, QPainter *p); + void paintText(const QPointF &pos, QPainter *p, const QColor &pen); void invalidate() {