From 06c3201a1a4c2eaffd37a605af2a5169c3b7cf1e Mon Sep 17 00:00:00 2001 From: fourtf Date: Thu, 5 Apr 2018 23:44:46 +0200 Subject: [PATCH] added dark window to dark theme --- src/singletons/thememanager.cpp | 73 ++++++++++++--------------- src/singletons/thememanager.hpp | 16 ++++-- src/widgets/basewindow.cpp | 29 +++++++---- src/widgets/helper/notebookbutton.cpp | 12 +++-- src/widgets/helper/notebookbutton.hpp | 1 + src/widgets/helper/notebooktab.cpp | 14 ++--- src/widgets/helper/titlebarbutton.cpp | 12 +++-- src/widgets/splitcontainer.cpp | 2 +- 8 files changed, 88 insertions(+), 71 deletions(-) diff --git a/src/singletons/thememanager.cpp b/src/singletons/thememanager.cpp index 6f522b881..55d612122 100644 --- a/src/singletons/thememanager.cpp +++ b/src/singletons/thememanager.cpp @@ -54,9 +54,10 @@ void ThemeManager::update() void ThemeManager::actuallyUpdate(double hue, double multiplier) { isLight = multiplier > 0; - bool isLightTabs; + bool lightWin = isLight; - QColor themeColor = QColor::fromHslF(hue, 0.5, 0.5); + QColor none(0, 0, 0, 0); + QColor themeColor = QColor::fromHslF(hue, 0.43, 0.5); QColor themeColorNoSat = QColor::fromHslF(hue, 0, 0.5); qreal sat = 0; @@ -66,48 +67,40 @@ void ThemeManager::actuallyUpdate(double hue, double multiplier) return QColor::fromHslF(h, s, ((l - 0.5) * multiplier) + 0.5, a); }; - //#ifdef USEWINSDK - // isLightTabs = isLight; - // QColor tabFg = isLight ? "#000" : "#fff"; - // this->windowBg = isLight ? "#fff" : getColor(0, sat, 0.9); - //#else - isLightTabs = true; - QColor tabFg = isLightTabs ? "#000" : "#fff"; - this->windowBg = "#fff"; - //#endif + /// WINDOW + { + QColor bg = this->window.background = lightWin ? "#fff" : "#444"; + QColor fg = this->window.text = lightWin ? "#000" : "#eee"; + this->window.borderFocused = lightWin ? "#ccc" : themeColor; + this->window.borderUnfocused = lightWin ? "#ccc" : themeColorNoSat; - // Ubuntu style - // TODO: add setting for this - // TabText = QColor(210, 210, 210); - // TabBackground = QColor(61, 60, 56); - // TabHoverText = QColor(210, 210, 210); - // TabHoverBackground = QColor(73, 72, 68); + // Ubuntu style + // TODO: add setting for this + // TabText = QColor(210, 210, 210); + // TabBackground = QColor(61, 60, 56); + // TabHoverText = QColor(210, 210, 210); + // TabHoverBackground = QColor(73, 72, 68); - // message (referenced later) - this->messages.textColors.caret = // - this->messages.textColors.regular = isLight ? "#000" : "#fff"; + // message (referenced later) + this->messages.textColors.caret = // + this->messages.textColors.regular = isLight ? "#000" : "#fff"; - // tabs - // text, {regular, hover, unfocused} - // this->windowBg = "#ccc"; + /// TABS + // text, {regular, hover, unfocused} - this->tabs.border = "#999"; - this->tabs.regular = {tabFg, {windowBg, blendColors(windowBg, "#999", 0.5), windowBg}}; - - this->tabs.selected = {"#fff", {themeColor, themeColor, QColor::fromHslF(hue, 0, 0.5)}}; - - this->tabs.newMessage = { - tabFg, - {QBrush(blendColors(themeColor, windowBg, 0.7), Qt::FDiagPattern), - QBrush(blendColors(themeColor, windowBg, 0.5), Qt::FDiagPattern), - QBrush(blendColors(themeColorNoSat, windowBg, 0.7), Qt::FDiagPattern)}}; - - this->tabs.highlighted = { - tabFg, - {blendColors(themeColor, windowBg, 0.7), blendColors(themeColor, windowBg, 0.5), - blendColors(themeColorNoSat, windowBg, 0.7)}}; - - // this->windowBg = "#fff"; + if (lightWin) { + this->tabs.regular = {fg, {bg, "#ccc", bg}}; + this->tabs.newMessage = {fg, {bg, "#ccc", bg}}; + this->tabs.highlighted = {fg, {bg, "#ccc", bg}}; + this->tabs.selected = {"#fff", {"#333", "#333", "#666"}}; + } else { + this->tabs.regular = {fg, {bg, "#555", bg}}; + this->tabs.newMessage = {fg, {bg, "#555", bg}}; + this->tabs.highlighted = {fg, {bg, "#555", bg}}; + // this->tabs.selected = {"#000", {themeColor, themeColor, themeColorNoSat}}; + this->tabs.selected = {"#000", {"#999", "#999", "#888"}}; + } + } // Split bool flat = isLight; diff --git a/src/singletons/thememanager.hpp b/src/singletons/thememanager.hpp index e0b67e0c9..664f97135 100644 --- a/src/singletons/thememanager.hpp +++ b/src/singletons/thememanager.hpp @@ -32,6 +32,15 @@ public: } backgrounds; }; + /// WINDOW + struct { + QColor background; + QColor text; + QColor borderUnfocused; + QColor borderFocused; + } window; + + /// TABS struct { TabColors regular; TabColors selected; @@ -40,6 +49,7 @@ public: QColor border; } tabs; + /// SPLITS struct { QColor messageSeperator; QColor background; @@ -64,6 +74,7 @@ public: } input; } splits; + /// MESSAGES struct { struct { QColor regular; @@ -85,6 +96,7 @@ public: QColor selection; } messages; + /// SCROLLBAR struct { QColor background; QColor thumb; @@ -93,14 +105,12 @@ public: // QColor highlights[3]; } scrollbars; + /// TOOLTIP struct { QColor text; QColor background; } tooltip; - QColor windowBg; - QColor windowText; - void normalizeColor(QColor &color); void update(); diff --git a/src/widgets/basewindow.cpp b/src/widgets/basewindow.cpp index cb92ddc12..950fd6790 100644 --- a/src/widgets/basewindow.cpp +++ b/src/widgets/basewindow.cpp @@ -160,12 +160,12 @@ void BaseWindow::themeRefreshEvent() { if (this->enableCustomFrame) { QPalette palette; - palette.setColor(QPalette::Background, this->themeManager.windowBg); - palette.setColor(QPalette::Foreground, this->themeManager.windowText); + palette.setColor(QPalette::Background, this->themeManager.window.background); + palette.setColor(QPalette::Foreground, this->themeManager.window.text); this->setPalette(palette); for (RippleEffectButton *button : this->buttons) { - button->setMouseEffectColor(this->themeManager.windowText); + button->setMouseEffectColor(this->themeManager.window.text); } } } @@ -408,15 +408,22 @@ void BaseWindow::paintEvent(QPaintEvent *event) bool windowFocused = this->window() == QApplication::activeWindow(); - QLinearGradient gradient(0, 0, 10, 250); - gradient.setColorAt(1, this->themeManager.tabs.selected.backgrounds.unfocused.color()); + // QLinearGradient gradient(0, 0, 10, 250); + // gradient.setColorAt(1, + // this->themeManager.tabs.selected.backgrounds.unfocused.color()); - if (windowFocused) { - gradient.setColorAt(.4, this->themeManager.tabs.selected.backgrounds.regular.color()); - } else { - gradient.setColorAt(.4, this->themeManager.tabs.selected.backgrounds.unfocused.color()); - } - painter.setPen(QPen(QBrush(gradient), 1)); + // if (windowFocused) { + // gradient.setColorAt(.4, + // this->themeManager.tabs.selected.backgrounds.regular.color()); + // } else { + // gradient.setColorAt(.4, + // this->themeManager.tabs.selected.backgrounds.unfocused.color()); + // } + // painter.setPen(QPen(QBrush(gradient), 1)); + + QColor &border = windowFocused ? this->themeManager.window.borderFocused + : this->themeManager.window.borderUnfocused; + painter.setPen(QPen(QBrush(border), 1)); painter.drawRect(0, 0, this->width() - 1, this->height() - 1); } diff --git a/src/widgets/helper/notebookbutton.cpp b/src/widgets/helper/notebookbutton.cpp index be07b2f85..eb7bf6879 100644 --- a/src/widgets/helper/notebookbutton.cpp +++ b/src/widgets/helper/notebookbutton.cpp @@ -17,11 +17,14 @@ namespace widgets { NotebookButton::NotebookButton(BaseWidget *parent) : RippleEffectButton(parent) { - setMouseEffectColor(QColor(0, 0, 0)); - this->setAcceptDrops(true); } +void NotebookButton::themeRefreshEvent() +{ + this->setMouseEffectColor(this->themeManager.tabs.regular.text); +} + void NotebookButton::paintEvent(QPaintEvent *) { QPainter painter(this); @@ -30,15 +33,14 @@ void NotebookButton::paintEvent(QPaintEvent *) QColor foreground; if (mouseDown || mouseOver) { - background = this->themeManager.tabs.regular.backgrounds.regular.color(); + background = this->themeManager.tabs.regular.backgrounds.hover.color(); foreground = this->themeManager.tabs.regular.text; } else { background = this->themeManager.tabs.regular.backgrounds.regular.color(); - foreground = QColor(70, 80, 80); + foreground = this->themeManager.tabs.regular.text; } painter.setPen(Qt::NoPen); - // painter.fillRect(this->rect(), background); float h = height(), w = width(); diff --git a/src/widgets/helper/notebookbutton.hpp b/src/widgets/helper/notebookbutton.hpp index a62b80026..3a53af514 100644 --- a/src/widgets/helper/notebookbutton.hpp +++ b/src/widgets/helper/notebookbutton.hpp @@ -21,6 +21,7 @@ public: NotebookButton(BaseWidget *parent); protected: + virtual void themeRefreshEvent() override; virtual void paintEvent(QPaintEvent *) override; virtual void mouseReleaseEvent(QMouseEvent *) override; virtual void dragEnterEvent(QDragEnterEvent *) override; diff --git a/src/widgets/helper/notebooktab.cpp b/src/widgets/helper/notebooktab.cpp index 21961c0af..f03c2ea93 100644 --- a/src/widgets/helper/notebooktab.cpp +++ b/src/widgets/helper/notebooktab.cpp @@ -209,13 +209,13 @@ void NotebookTab::paintEvent(QPaintEvent *) painter.fillRect(rect(), tabBackground); // draw border - painter.setPen(QPen("#ccc")); - QPainterPath path(QPointF(0, height)); - path.lineTo(0, 0); - path.lineTo(this->width() - 1, 0); - path.lineTo(this->width() - 1, this->height() - 1); - path.lineTo(0, this->height() - 1); - painter.drawPath(path); + // painter.setPen(QPen("#ccc")); + // QPainterPath path(QPointF(0, height)); + // path.lineTo(0, 0); + // path.lineTo(this->width() - 1, 0); + // path.lineTo(this->width() - 1, this->height() - 1); + // path.lineTo(0, this->height() - 1); + // painter.drawPath(path); } else { // QPainterPath path(QPointF(0, height)); // path.lineTo(8 * scale, 0); diff --git a/src/widgets/helper/titlebarbutton.cpp b/src/widgets/helper/titlebarbutton.cpp index d3b2cd34d..987cc8b34 100644 --- a/src/widgets/helper/titlebarbutton.cpp +++ b/src/widgets/helper/titlebarbutton.cpp @@ -1,5 +1,7 @@ #include "titlebarbutton.hpp" +#include "singletons/thememanager.hpp" + namespace chatterino { namespace widgets { @@ -23,8 +25,8 @@ void TitleBarButton::paintEvent(QPaintEvent *) { QPainter painter(this); - QColor color = "#000"; - QColor background = "#fff"; + QColor color = this->themeManager.window.text; + QColor background = this->themeManager.window.background; int xD = this->height() / 3; int centerX = this->width() / 2; @@ -59,7 +61,8 @@ void TitleBarButton::paintEvent(QPaintEvent *) break; } case User: { - color = QColor("#333"); + // color = QColor("#333"); + color = "#999"; painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); @@ -85,7 +88,8 @@ void TitleBarButton::paintEvent(QPaintEvent *) break; } case Settings: { - color = QColor("#333"); + // color = QColor("#333"); + color = "#999"; painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::HighQualityAntialiasing); diff --git a/src/widgets/splitcontainer.cpp b/src/widgets/splitcontainer.cpp index be45f987e..7689a3d77 100644 --- a/src/widgets/splitcontainer.cpp +++ b/src/widgets/splitcontainer.cpp @@ -414,7 +414,7 @@ void SplitContainer::paintEvent(QPaintEvent *) ? this->themeManager.tabs.selected.backgrounds.regular : this->themeManager.tabs.selected.backgrounds.unfocused); - painter.fillRect(0, 0, width(), 2, accentColor); + painter.fillRect(0, 0, width(), 1, accentColor); } void SplitContainer::showEvent(QShowEvent *event)