X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fpainterutils.cpp;h=7d145f79458b9e03b4e139973f1fd350bcff1541;hb=fe9d17324e88a65d4f28afccf21857c5a5e60649;hp=54ee39ee26d1cb6365c70691e3b6ee8240a94a6e;hpb=d1f8234fe0884e05dd95a1c4876ec6e29d7d9f2b;p=minitube diff --git a/src/painterutils.cpp b/src/painterutils.cpp index 54ee39e..7d145f7 100644 --- a/src/painterutils.cpp +++ b/src/painterutils.cpp @@ -20,87 +20,47 @@ $END_LICENSE */ #include "painterutils.h" #include "fontutils.h" +#include "iconutils.h" -PainterUtils::PainterUtils() { } +PainterUtils::PainterUtils() {} -void PainterUtils::centeredMessage(QString message, QWidget* widget) { +void PainterUtils::centeredMessage(const QString &message, QWidget *widget) { QPainter painter(widget); - painter.setFont(FontUtils::bigBold()); + painter.setFont(FontUtils::big()); QSize textSize(QFontMetrics(painter.font()).size(Qt::TextSingleLine, message)); - QPoint topLeft( - (widget->width()-textSize.width())/2, - ((widget->height()-textSize.height())/2) - ); + QPoint topLeft((widget->width() - textSize.width()) / 2, + ((widget->height() - textSize.height()) / 2)); QRect rect(topLeft, textSize); - - /* - rect.adjust(0, -1, 0, 0); - painter.setPen(QColor(0, 0, 0, 128)); - painter.drawText(rect, Qt::AlignCenter, message); - rect.adjust(0, 1, 0, 0); - */ - - QPen textPen; - textPen.setBrush(widget->palette().mid()); - painter.setPen(textPen); + painter.setOpacity(.5); painter.drawText(rect, Qt::AlignCenter, message); } -void PainterUtils::topShadow(QWidget *widget) { - static QLinearGradient shadow; - static const int shadowHeight = 10; - if (shadow.stops().count() == 2) { - shadow.setFinalStop(0, shadowHeight); - const qreal initialOpacity = 96; - for (qreal i = 0; i <= 1; i += 1.0/shadowHeight) { - qreal opacity = qPow(initialOpacity, (1.0 - i)) - 1; - shadow.setColorAt(i, QColor(0x00, 0x00, 0x00, opacity)); - } - } - QRect rect = widget->rect(); - QPainter p(widget); - p.fillRect(rect.x(), rect.y(), rect.width(), shadowHeight, QBrush(shadow)); -} - -void PainterUtils::paintBadge(QPainter *painter, const QString &text, bool center) { - static const QPixmap badge1 = QPixmap(":/images/badge.png"); - static const QPixmap badge3 = QPixmap(":/images/badge3.png"); - static const QPixmap badge4 = QPixmap(":/images/badge4.png"); - static const int size = badge1.height(); - - const int textSize = text.size(); - - QPixmap badge; - if (textSize < 3) badge = badge1; - else if (textSize == 3) badge = badge3; - else badge = badge4; - - int x = 0; - if (center) x -= badge.width() / 2; - - QRect rect(x, 0, badge.width(), size); - painter->drawPixmap(rect, badge); - - QFont f = painter->font(); - f.setPixelSize(11); - f.setHintingPreference(QFont::PreferNoHinting); -#ifdef APP_MAC - f.setFamily("Helvetica"); -#endif -#ifdef APP_WIN - rect.adjust(0, -2, 0, 0); -#endif -#ifdef Q_WS_X11 - rect.adjust(0, -1, 0, 0); -#endif +void PainterUtils::paintBadge(QPainter *painter, + const QString &text, + bool center, + const QColor &backgroundColor, + bool literalColor) { painter->save(); - painter->setFont(f); - rect.adjust(0, 1, 0, 0); - painter->setPen(QColor(0, 0, 0, 64)); - painter->drawText(rect, Qt::AlignCenter, text); - - rect.adjust(0, -1, 0, 0); + QRect textBox = painter->boundingRect(QRect(), Qt::AlignCenter, text); + int w = textBox.width() + painter->fontMetrics().width('m'); + int x = 0; + if (center) x -= w / 2; + QRect rect(x, 0, w, textBox.height()); + if (rect.width() < rect.height() || text.length() == 1) rect.setWidth(rect.height()); + + painter->setPen(Qt::NoPen); + QColor bg; + if (literalColor) + bg = backgroundColor; + else + bg = backgroundColor.value() > 128 ? QColor(0, 0, 0, 64) : QColor(255, 255, 255, 64); + painter->setBrush(bg); + painter->setRenderHint(QPainter::Antialiasing); + qreal borderRadius = rect.height() / 2.; + painter->drawRoundedRect(rect, borderRadius, borderRadius); + + painter->setFont(FontUtils::small()); painter->setPen(Qt::white); painter->drawText(rect, Qt::AlignCenter, text);