From 3b306177585e757041f133fa1cc0f8de7ce7825c Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Fri, 17 Jun 2016 19:00:59 +0200 Subject: [PATCH] Core: Improved theme-awareness in application menu painting Using theme colors rather than hard-coded ones and at the same some simplification. This is needed for an upcoming "Flat Light" theme. Change-Id: I8a8715a16d1b246c5228978633143eb64d371701 Reviewed-by: Alessandro Portale --- src/libs/utils/stylehelper.cpp | 12 ++++++++++++ src/libs/utils/stylehelper.h | 1 + src/plugins/coreplugin/manhattanstyle.cpp | 20 +++++++------------- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/libs/utils/stylehelper.cpp b/src/libs/utils/stylehelper.cpp index 3d24afb74c7..8991fd2da74 100644 --- a/src/libs/utils/stylehelper.cpp +++ b/src/libs/utils/stylehelper.cpp @@ -64,6 +64,18 @@ QColor StyleHelper::mergedColors(const QColor &colorA, const QColor &colorB, int return tmp; } +QColor StyleHelper::alphaBlendedColors(const QColor &colorA, const QColor &colorB) +{ + const QRgb base = colorA.rgba(); + const QRgb overlay = colorB.rgba(); + const qreal overlayIntensity = qAlpha(overlay) / 255.0; + return qRgba( + qMin(qRed(base) + qRound(qRed(overlay) * overlayIntensity), 0xff), + qMin(qGreen(base) + qRound(qGreen(overlay) * overlayIntensity), 0xff), + qMin(qBlue(base) + qRound(qBlue(overlay) * overlayIntensity), 0xff), + qMin(qAlpha(base) + qAlpha(overlay), 0xff)); +} + qreal StyleHelper::sidebarFontSize() { return HostOsInfo::isMacHost() ? 10 : 7.5; diff --git a/src/libs/utils/stylehelper.h b/src/libs/utils/stylehelper.h index 0f99e4bf977..9a95be8ae80 100644 --- a/src/libs/utils/stylehelper.h +++ b/src/libs/utils/stylehelper.h @@ -61,6 +61,7 @@ public: static QColor borderColor(bool lightColored = false); static QColor buttonTextColor() { return QColor(0x4c4c4c); } static QColor mergedColors(const QColor &colorA, const QColor &colorB, int factor = 50); + static QColor alphaBlendedColors(const QColor &colorA, const QColor &colorB); static QColor sidebarHighlight() { return QColor(255, 255, 255, 40); } static QColor sidebarShadow() { return QColor(0, 0, 0, 40); } diff --git a/src/plugins/coreplugin/manhattanstyle.cpp b/src/plugins/coreplugin/manhattanstyle.cpp index 82569cb100f..c90ef20eab3 100644 --- a/src/plugins/coreplugin/manhattanstyle.cpp +++ b/src/plugins/coreplugin/manhattanstyle.cpp @@ -677,24 +677,18 @@ void ManhattanStyle::drawControl(ControlElement element, const QStyleOption *opt if (act) { // Fill| - if (creatorTheme()->flag(Theme::FlatMenuBar)) { - painter->fillRect(option->rect, creatorTheme()->color(Theme::FancyToolButtonHoverColor)); - } else { - QColor baseColor = StyleHelper::baseColor(); - QLinearGradient grad(option->rect.topLeft(), option->rect.bottomLeft()); - grad.setColorAt(0, baseColor.lighter(120)); - grad.setColorAt(1, baseColor.lighter(130)); - painter->fillRect(option->rect, grad); - } + const QColor fillColor = StyleHelper::alphaBlendedColors( + StyleHelper::baseColor(), creatorTheme()->color(Theme::FancyToolButtonHoverColor)); + painter->fillRect(option->rect, fillColor); QPalette pal = mbi->palette; uint alignment = Qt::AlignCenter | Qt::TextShowMnemonic | Qt::TextDontClip | Qt::TextSingleLine; if (!styleHint(SH_UnderlineShortcut, mbi, widget)) alignment |= Qt::TextHideMnemonic; - pal.setBrush(QPalette::Text, dis ? Qt::gray : QColor(0, 0, 0, 60)); - drawItemText(painter, item.rect.translated(0, 1), alignment, pal, mbi->state & State_Enabled, mbi->text, QPalette::Text); - pal.setBrush(QPalette::Text, dis ? Qt::gray : Qt::white); - drawItemText(painter, item.rect, alignment, pal, mbi->state & State_Enabled, mbi->text, QPalette::Text); + pal.setBrush(QPalette::Text, creatorTheme()->color(dis + ? Theme::IconsDisabledColor + : Theme::PanelTextColorLight)); + drawItemText(painter, item.rect, alignment, pal, !dis, mbi->text, QPalette::Text); } } painter->restore();