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;
};