diff --git a/resources/ui/carla_settings.ui b/resources/ui/carla_settings.ui index 8977f0ef1..17b1002df 100644 --- a/resources/ui/carla_settings.ui +++ b/resources/ui/carla_settings.ui @@ -267,6 +267,73 @@ + + + + Theme + + + + + + Use Carla "PRO" theme (needs restart) + + + + + + + false + + + Color scheme: + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + + + + + false + + + + Black + + + + + Blue + + + + + System + + + + + + + + Qt::Horizontal + + + QSizePolicy::Preferred + + + + 138 + 10 + + + + + + + @@ -1164,12 +1231,44 @@ This mode is not available for VST plugins. setEnabled(bool) - 385 - 227 + 227 + 34 + + + 227 + 43 + + + + + ch_theme_pro + toggled(bool) + label_2 + setEnabled(bool) + + + 228 + 152 + + + 249 + 165 + + + + + ch_theme_pro + toggled(bool) + cb_theme_color + setEnabled(bool) + + + 215 + 149 - 385 - 299 + 314 + 167 diff --git a/source/backend/standalone/CarlaStandalone.cpp b/source/backend/standalone/CarlaStandalone.cpp index e3386f3ef..9dac1c880 100644 --- a/source/backend/standalone/CarlaStandalone.cpp +++ b/source/backend/standalone/CarlaStandalone.cpp @@ -25,7 +25,7 @@ #include "CarlaNative.h" #include "CarlaStyle.hpp" -#include +#include #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) # include @@ -63,7 +63,25 @@ struct CarlaBackendStandalone { needsInit(app == nullptr) { if (app != nullptr) - app->setStyle(new CarlaStyle()); + { + QSettings settings; + + if (settings.value("Main/UseProTheme", true).toBool()) + { + CarlaStyle* const style(new CarlaStyle()); + app->setStyle(style); + style->ready(app); + + QString color(settings.value("Main/ProThemeColor", "Black").toString()); + + if (color == "Blue") + style->setColorScheme(CarlaStyle::COLOR_BLUE); + else if (color == "System") + pass(); //style->setColorScheme(CarlaStyle::COLOR_SYSTEM); + else + style->setColorScheme(CarlaStyle::COLOR_BLACK); + } + } } ~CarlaBackendStandalone() diff --git a/source/carla.py b/source/carla.py index 49df82cd7..5f5afc638 100755 --- a/source/carla.py +++ b/source/carla.py @@ -141,8 +141,18 @@ class CarlaSettingsW(QDialog): # --------------------------------------- self.ui.le_main_def_folder.setText(settings.value("Main/DefaultProjectFolder", HOME, type=str)) + self.ui.ch_theme_pro.setChecked(settings.value("Main/UseProTheme", True, type=bool)) self.ui.sb_gui_refresh.setValue(settings.value("Main/RefreshInterval", 50, type=int)) + themeColor = settings.value("Main/ProThemeColor", "Black", type=str) + + if themeColor == "Blue": + self.ui.cb_theme_color.setCurrentIndex(1) + elif themeColor == "System": + self.ui.cb_theme_color.setCurrentIndex(2) + else: + self.ui.cb_theme_color.setCurrentIndex(0) + # --------------------------------------- self.ui.cb_canvas_hide_groups.setChecked(settings.value("Canvas/AutoHideGroups", False, type=bool)) @@ -152,12 +162,12 @@ class CarlaSettingsW(QDialog): self.ui.cb_canvas_render_aa.setCheckState(settings.value("Canvas/Antialiasing", CANVAS_ANTIALIASING_SMALL, type=int)) self.ui.cb_canvas_render_hq_aa.setChecked(settings.value("Canvas/HighQualityAntialiasing", False, type=bool)) - themeName = settings.value("Canvas/Theme", patchcanvas.getDefaultThemeName(), type=str) + canvasThemeName = settings.value("Canvas/Theme", patchcanvas.getDefaultThemeName(), type=str) for i in range(patchcanvas.Theme.THEME_MAX): thisThemeName = patchcanvas.getThemeName(i) self.ui.cb_canvas_theme.addItem(thisThemeName) - if thisThemeName == themeName: + if thisThemeName == canvasThemeName: self.ui.cb_canvas_theme.setCurrentIndex(i) # -------------------------------------------- @@ -240,8 +250,10 @@ class CarlaSettingsW(QDialog): # --------------------------------------- - settings.setValue("Main/RefreshInterval", self.ui.sb_gui_refresh.value()) settings.setValue("Main/DefaultProjectFolder", self.ui.le_main_def_folder.text()) + settings.setValue("Main/UseProTheme", self.ui.ch_theme_pro.isChecked()) + settings.setValue("Main/ProThemeColor", self.ui.cb_theme_color.currentText()) + settings.setValue("Main/RefreshInterval", self.ui.sb_gui_refresh.value()) # --------------------------------------- @@ -317,6 +329,8 @@ class CarlaSettingsW(QDialog): def slot_resetSettings(self): if self.ui.lw_page.currentRow() == TAB_INDEX_MAIN: self.ui.le_main_def_folder.setText(HOME) + self.ui.ch_theme_pro.setChecked(True) + self.ui.cb_theme_color.setCurrentIndex(0) self.ui.sb_gui_refresh.setValue(50) elif self.ui.lw_page.currentRow() == TAB_INDEX_CANVAS: diff --git a/source/theme/CarlaStyle.cpp b/source/theme/CarlaStyle.cpp index 18df33293..28b5ca29f 100644 --- a/source/theme/CarlaStyle.cpp +++ b/source/theme/CarlaStyle.cpp @@ -18,6 +18,8 @@ #include "CarlaStylePrivate.hpp" +#include + #include #include #include @@ -344,6 +346,124 @@ CarlaStyle::~CarlaStyle() { } +void CarlaStyle::setColorScheme(ColorScheme color) +{ + switch (color) + { + case COLOR_BLACK: + qApp->setPalette(fPalBlack); + break; + case COLOR_BLUE: + qApp->setPalette(fPalBlue); + break; + case COLOR_SYSTEM: + qApp->setPalette(fPalSystem); + break; + } +} + +void printPalette(const QPalette& pal) +{ +#define PAL "fPalBlue" + +#define PAL_PRINT(ROLE) \ +{ \ + QColor color1(pal.color(QPalette::Disabled, ROLE)); \ + QColor color2(pal.color(QPalette::Active, ROLE)); \ + QColor color3(pal.color(QPalette::Inactive, ROLE)); \ + printf(PAL ".setColor(QPalette::Disabled, " #ROLE ", QColor(%i, %i, %i));\n", color1.red(), color1.green(), color1.blue()); \ + printf(PAL ".setColor(QPalette::Active, " #ROLE ", QColor(%i, %i, %i));\n", color2.red(), color2.green(), color2.blue()); \ + printf(PAL ".setColor(QPalette::Inactive, " #ROLE ", QColor(%i, %i, %i));\n", color3.red(), color3.green(), color3.blue()); \ +} + + PAL_PRINT(QPalette::Window) + PAL_PRINT(QPalette::WindowText) + PAL_PRINT(QPalette::WindowText) + PAL_PRINT(QPalette::Base) + PAL_PRINT(QPalette::AlternateBase) + PAL_PRINT(QPalette::ToolTipBase) + PAL_PRINT(QPalette::ToolTipText) + PAL_PRINT(QPalette::Text) + PAL_PRINT(QPalette::Button) + PAL_PRINT(QPalette::ButtonText) + PAL_PRINT(QPalette::BrightText) + +#undef PAL +} + +void CarlaStyle::ready(QApplication* app) +{ + fPalSystem = app->palette(); + + fPalBlack.setColor(QPalette::Disabled, QPalette::Window, QColor(14, 14, 14)); + fPalBlack.setColor(QPalette::Active, QPalette::Window, QColor(17, 17, 17)); + fPalBlack.setColor(QPalette::Inactive, QPalette::Window, QColor(17, 17, 17)); + fPalBlack.setColor(QPalette::Disabled, QPalette::WindowText, QColor(83, 83, 83)); + fPalBlack.setColor(QPalette::Active, QPalette::WindowText, QColor(240, 240, 240)); + fPalBlack.setColor(QPalette::Inactive, QPalette::WindowText, QColor(240, 240, 240)); + fPalBlack.setColor(QPalette::Disabled, QPalette::WindowText, QColor(83, 83, 83)); + fPalBlack.setColor(QPalette::Active, QPalette::WindowText, QColor(240, 240, 240)); + fPalBlack.setColor(QPalette::Inactive, QPalette::WindowText, QColor(240, 240, 240)); + fPalBlack.setColor(QPalette::Disabled, QPalette::Base, QColor(6, 6, 6)); + fPalBlack.setColor(QPalette::Active, QPalette::Base, QColor(7, 7, 7)); + fPalBlack.setColor(QPalette::Inactive, QPalette::Base, QColor(7, 7, 7)); + fPalBlack.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor(12, 12, 12)); + fPalBlack.setColor(QPalette::Active, QPalette::AlternateBase, QColor(14, 14, 14)); + fPalBlack.setColor(QPalette::Inactive, QPalette::AlternateBase, QColor(14, 14, 14)); + fPalBlack.setColor(QPalette::Disabled, QPalette::ToolTipBase, QColor(4, 4, 4)); + fPalBlack.setColor(QPalette::Active, QPalette::ToolTipBase, QColor(4, 4, 4)); + fPalBlack.setColor(QPalette::Inactive, QPalette::ToolTipBase, QColor(4, 4, 4)); + fPalBlack.setColor(QPalette::Disabled, QPalette::ToolTipText, QColor(230, 230, 230)); + fPalBlack.setColor(QPalette::Active, QPalette::ToolTipText, QColor(230, 230, 230)); + fPalBlack.setColor(QPalette::Inactive, QPalette::ToolTipText, QColor(230, 230, 230)); + fPalBlack.setColor(QPalette::Disabled, QPalette::Text, QColor(74, 74, 74)); + fPalBlack.setColor(QPalette::Active, QPalette::Text, QColor(230, 230, 230)); + fPalBlack.setColor(QPalette::Inactive, QPalette::Text, QColor(230, 230, 230)); + fPalBlack.setColor(QPalette::Disabled, QPalette::Button, QColor(24, 24, 24)); + fPalBlack.setColor(QPalette::Active, QPalette::Button, QColor(28, 28, 28)); + fPalBlack.setColor(QPalette::Inactive, QPalette::Button, QColor(28, 28, 28)); + fPalBlack.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(90, 90, 90)); + fPalBlack.setColor(QPalette::Active, QPalette::ButtonText, QColor(240, 240, 240)); + fPalBlack.setColor(QPalette::Inactive, QPalette::ButtonText, QColor(240, 240, 240)); + fPalBlack.setColor(QPalette::Disabled, QPalette::BrightText, QColor(255, 255, 255)); + fPalBlack.setColor(QPalette::Active, QPalette::BrightText, QColor(255, 255, 255)); + fPalBlack.setColor(QPalette::Inactive, QPalette::BrightText, QColor(255, 255, 255)); + + fPalBlue.setColor(QPalette::Disabled, QPalette::Window, QColor(32, 35, 39)); + fPalBlue.setColor(QPalette::Active, QPalette::Window, QColor(37, 40, 45)); + fPalBlue.setColor(QPalette::Inactive, QPalette::Window, QColor(37, 40, 45)); + fPalBlue.setColor(QPalette::Disabled, QPalette::WindowText, QColor(89, 95, 104)); + fPalBlue.setColor(QPalette::Active, QPalette::WindowText, QColor(223, 237, 255)); + fPalBlue.setColor(QPalette::Inactive, QPalette::WindowText, QColor(223, 237, 255)); + fPalBlue.setColor(QPalette::Disabled, QPalette::WindowText, QColor(89, 95, 104)); + fPalBlue.setColor(QPalette::Active, QPalette::WindowText, QColor(223, 237, 255)); + fPalBlue.setColor(QPalette::Inactive, QPalette::WindowText, QColor(223, 237, 255)); + fPalBlue.setColor(QPalette::Disabled, QPalette::Base, QColor(48, 53, 60)); + fPalBlue.setColor(QPalette::Active, QPalette::Base, QColor(55, 61, 69)); + fPalBlue.setColor(QPalette::Inactive, QPalette::Base, QColor(55, 61, 69)); + fPalBlue.setColor(QPalette::Disabled, QPalette::AlternateBase, QColor(60, 64, 67)); + fPalBlue.setColor(QPalette::Active, QPalette::AlternateBase, QColor(69, 73, 77)); + fPalBlue.setColor(QPalette::Inactive, QPalette::AlternateBase, QColor(69, 73, 77)); + fPalBlue.setColor(QPalette::Disabled, QPalette::ToolTipBase, QColor(182, 193, 208)); + fPalBlue.setColor(QPalette::Active, QPalette::ToolTipBase, QColor(182, 193, 208)); + fPalBlue.setColor(QPalette::Inactive, QPalette::ToolTipBase, QColor(182, 193, 208)); + fPalBlue.setColor(QPalette::Disabled, QPalette::ToolTipText, QColor(42, 44, 48)); + fPalBlue.setColor(QPalette::Active, QPalette::ToolTipText, QColor(42, 44, 48)); + fPalBlue.setColor(QPalette::Inactive, QPalette::ToolTipText, QColor(42, 44, 48)); + fPalBlue.setColor(QPalette::Disabled, QPalette::Text, QColor(96, 103, 113)); + fPalBlue.setColor(QPalette::Active, QPalette::Text, QColor(210, 222, 240)); + fPalBlue.setColor(QPalette::Inactive, QPalette::Text, QColor(210, 222, 240)); + fPalBlue.setColor(QPalette::Disabled, QPalette::Button, QColor(51, 55, 62)); + fPalBlue.setColor(QPalette::Active, QPalette::Button, QColor(59, 63, 71)); + fPalBlue.setColor(QPalette::Inactive, QPalette::Button, QColor(59, 63, 71)); + fPalBlue.setColor(QPalette::Disabled, QPalette::ButtonText, QColor(98, 104, 114)); + fPalBlue.setColor(QPalette::Active, QPalette::ButtonText, QColor(210, 222, 240)); + fPalBlue.setColor(QPalette::Inactive, QPalette::ButtonText, QColor(210, 222, 240)); + fPalBlue.setColor(QPalette::Disabled, QPalette::BrightText, QColor(255, 255, 255)); + fPalBlue.setColor(QPalette::Active, QPalette::BrightText, QColor(255, 255, 255)); + fPalBlue.setColor(QPalette::Inactive, QPalette::BrightText, QColor(255, 255, 255)); +} + /*! \fn void CarlaStyle::drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, bool enabled, const QString& text, QPalette::ColorRole textRole) const diff --git a/source/theme/CarlaStyle.hpp b/source/theme/CarlaStyle.hpp index 02a581ff6..ec6b2e5d7 100644 --- a/source/theme/CarlaStyle.hpp +++ b/source/theme/CarlaStyle.hpp @@ -37,6 +37,15 @@ public: CarlaStyle(); ~CarlaStyle(); + enum ColorScheme { + COLOR_BLACK = 0, + COLOR_BLUE = 1, + COLOR_SYSTEM = 2 + }; + + void ready(QApplication* app); + void setColorScheme(ColorScheme color); + QPalette standardPalette() const; void drawPrimitive(PrimitiveElement elem, const QStyleOption *option, @@ -60,6 +69,10 @@ public: void unpolish(QWidget *widget); private: + QPalette fPalBlack; + QPalette fPalBlue; + QPalette fPalSystem; + CarlaStylePrivate* const d; friend class CarlaStylePrivate; };