From: Manuel Nickschas Date: Thu, 27 Mar 2014 22:20:24 +0000 (+0100) Subject: Fix rendering of the sender column X-Git-Tag: 0.11.0~47 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=239ad49c39ecfe91c98e1101c3e1992ae622c192 Fix rendering of the sender column Turns out the compositing needed to be tweaked to actually behave as desired. Senders are now properly rendered including the fade-out effect on both Qt4 and Qt5. --- diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index 2526fa7a..117ec10d 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -504,9 +504,10 @@ void SenderChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *op if (layoutWidth > width()) { // Draw a nice gradient for longer items - // Qt's text drawing with a gradient brush sucks, so we use an alpha-channeled pixmap instead + // Qt's text drawing with a gradient brush sucks, so we use compositing instead QPixmap pixmap(layout()->boundingRect().toRect().size()); pixmap.fill(Qt::transparent); + QPainter pixPainter(&pixmap); layout()->draw(&pixPainter, QPointF(qMax(offset, (qreal)0), 0), additionalFormats()); @@ -515,17 +516,17 @@ void SenderChatItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *op if (offset < 0) { gradient.setStart(0, 0); gradient.setFinalStop(12, 0); - gradient.setColorAt(0, Qt::black); + gradient.setColorAt(0, Qt::transparent); gradient.setColorAt(1, Qt::white); } else { gradient.setStart(width()-10, 0); gradient.setFinalStop(width(), 0); gradient.setColorAt(0, Qt::white); - gradient.setColorAt(1, Qt::black); + gradient.setColorAt(1, Qt::transparent); } - pixPainter.fillRect(0, 0, pixmap.width(), pixmap.height(), gradient); - pixPainter.end(); + pixPainter.setCompositionMode(QPainter::CompositionMode_DestinationIn); // gradient's alpha gets applied to the pixmap + pixPainter.fillRect(pixmap.rect(), gradient); painter->drawPixmap(pos(), pixmap); } else {