@@ -267,6 +267,73 @@ | |||||
</layout> | </layout> | ||||
</widget> | </widget> | ||||
</item> | </item> | ||||
<item> | |||||
<widget class="QGroupBox" name="groupBox_6"> | |||||
<property name="title"> | |||||
<string>Theme</string> | |||||
</property> | |||||
<layout class="QGridLayout" name="gridLayout_3"> | |||||
<item row="0" column="0" colspan="3"> | |||||
<widget class="QCheckBox" name="ch_theme_pro"> | |||||
<property name="text"> | |||||
<string>Use Carla "PRO" theme (needs restart)</string> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="1" column="0"> | |||||
<widget class="QLabel" name="label_2"> | |||||
<property name="enabled"> | |||||
<bool>false</bool> | |||||
</property> | |||||
<property name="text"> | |||||
<string>Color scheme:</string> | |||||
</property> | |||||
<property name="alignment"> | |||||
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> | |||||
</property> | |||||
</widget> | |||||
</item> | |||||
<item row="1" column="1"> | |||||
<widget class="QComboBox" name="cb_theme_color"> | |||||
<property name="enabled"> | |||||
<bool>false</bool> | |||||
</property> | |||||
<item> | |||||
<property name="text"> | |||||
<string>Black</string> | |||||
</property> | |||||
</item> | |||||
<item> | |||||
<property name="text"> | |||||
<string>Blue</string> | |||||
</property> | |||||
</item> | |||||
<item> | |||||
<property name="text"> | |||||
<string>System</string> | |||||
</property> | |||||
</item> | |||||
</widget> | |||||
</item> | |||||
<item row="1" column="2"> | |||||
<spacer name="horizontalSpacer_2"> | |||||
<property name="orientation"> | |||||
<enum>Qt::Horizontal</enum> | |||||
</property> | |||||
<property name="sizeType"> | |||||
<enum>QSizePolicy::Preferred</enum> | |||||
</property> | |||||
<property name="sizeHint" stdset="0"> | |||||
<size> | |||||
<width>138</width> | |||||
<height>10</height> | |||||
</size> | |||||
</property> | |||||
</spacer> | |||||
</item> | |||||
</layout> | |||||
</widget> | |||||
</item> | |||||
<item> | <item> | ||||
<widget class="QGroupBox" name="groupBox_3"> | <widget class="QGroupBox" name="groupBox_3"> | ||||
<property name="title"> | <property name="title"> | ||||
@@ -1164,12 +1231,44 @@ This mode is not available for VST plugins.</string> | |||||
<slot>setEnabled(bool)</slot> | <slot>setEnabled(bool)</slot> | ||||
<hints> | <hints> | ||||
<hint type="sourcelabel"> | <hint type="sourcelabel"> | ||||
<x>385</x> | |||||
<y>227</y> | |||||
<x>227</x> | |||||
<y>34</y> | |||||
</hint> | |||||
<hint type="destinationlabel"> | |||||
<x>227</x> | |||||
<y>43</y> | |||||
</hint> | |||||
</hints> | |||||
</connection> | |||||
<connection> | |||||
<sender>ch_theme_pro</sender> | |||||
<signal>toggled(bool)</signal> | |||||
<receiver>label_2</receiver> | |||||
<slot>setEnabled(bool)</slot> | |||||
<hints> | |||||
<hint type="sourcelabel"> | |||||
<x>228</x> | |||||
<y>152</y> | |||||
</hint> | |||||
<hint type="destinationlabel"> | |||||
<x>249</x> | |||||
<y>165</y> | |||||
</hint> | |||||
</hints> | |||||
</connection> | |||||
<connection> | |||||
<sender>ch_theme_pro</sender> | |||||
<signal>toggled(bool)</signal> | |||||
<receiver>cb_theme_color</receiver> | |||||
<slot>setEnabled(bool)</slot> | |||||
<hints> | |||||
<hint type="sourcelabel"> | |||||
<x>215</x> | |||||
<y>149</y> | |||||
</hint> | </hint> | ||||
<hint type="destinationlabel"> | <hint type="destinationlabel"> | ||||
<x>385</x> | |||||
<y>299</y> | |||||
<x>314</x> | |||||
<y>167</y> | |||||
</hint> | </hint> | ||||
</hints> | </hints> | ||||
</connection> | </connection> | ||||
@@ -25,7 +25,7 @@ | |||||
#include "CarlaNative.h" | #include "CarlaNative.h" | ||||
#include "CarlaStyle.hpp" | #include "CarlaStyle.hpp" | ||||
#include <QtCore/Qt> | |||||
#include <QtCore/QSettings> | |||||
#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | #if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0)) | ||||
# include <QtWidgets/QApplication> | # include <QtWidgets/QApplication> | ||||
@@ -63,7 +63,25 @@ struct CarlaBackendStandalone { | |||||
needsInit(app == nullptr) | needsInit(app == nullptr) | ||||
{ | { | ||||
if (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() | ~CarlaBackendStandalone() | ||||
@@ -141,8 +141,18 @@ class CarlaSettingsW(QDialog): | |||||
# --------------------------------------- | # --------------------------------------- | ||||
self.ui.le_main_def_folder.setText(settings.value("Main/DefaultProjectFolder", HOME, type=str)) | 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)) | 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)) | 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_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)) | 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): | for i in range(patchcanvas.Theme.THEME_MAX): | ||||
thisThemeName = patchcanvas.getThemeName(i) | thisThemeName = patchcanvas.getThemeName(i) | ||||
self.ui.cb_canvas_theme.addItem(thisThemeName) | self.ui.cb_canvas_theme.addItem(thisThemeName) | ||||
if thisThemeName == themeName: | |||||
if thisThemeName == canvasThemeName: | |||||
self.ui.cb_canvas_theme.setCurrentIndex(i) | 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/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): | def slot_resetSettings(self): | ||||
if self.ui.lw_page.currentRow() == TAB_INDEX_MAIN: | if self.ui.lw_page.currentRow() == TAB_INDEX_MAIN: | ||||
self.ui.le_main_def_folder.setText(HOME) | 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) | self.ui.sb_gui_refresh.setValue(50) | ||||
elif self.ui.lw_page.currentRow() == TAB_INDEX_CANVAS: | elif self.ui.lw_page.currentRow() == TAB_INDEX_CANVAS: | ||||
@@ -18,6 +18,8 @@ | |||||
#include "CarlaStylePrivate.hpp" | #include "CarlaStylePrivate.hpp" | ||||
#include <QtCore/QDebug> | |||||
#include <QtCore/QStringBuilder> | #include <QtCore/QStringBuilder> | ||||
#include <QtGui/QPainter> | #include <QtGui/QPainter> | ||||
#include <QtGui/QPixmapCache> | #include <QtGui/QPixmapCache> | ||||
@@ -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, | \fn void CarlaStyle::drawItemText(QPainter *painter, const QRect &rectangle, int alignment, const QPalette &palette, | ||||
bool enabled, const QString& text, QPalette::ColorRole textRole) const | bool enabled, const QString& text, QPalette::ColorRole textRole) const | ||||
@@ -37,6 +37,15 @@ public: | |||||
CarlaStyle(); | CarlaStyle(); | ||||
~CarlaStyle(); | ~CarlaStyle(); | ||||
enum ColorScheme { | |||||
COLOR_BLACK = 0, | |||||
COLOR_BLUE = 1, | |||||
COLOR_SYSTEM = 2 | |||||
}; | |||||
void ready(QApplication* app); | |||||
void setColorScheme(ColorScheme color); | |||||
QPalette standardPalette() const; | QPalette standardPalette() const; | ||||
void drawPrimitive(PrimitiveElement elem, | void drawPrimitive(PrimitiveElement elem, | ||||
const QStyleOption *option, | const QStyleOption *option, | ||||
@@ -60,6 +69,10 @@ public: | |||||
void unpolish(QWidget *widget); | void unpolish(QWidget *widget); | ||||
private: | private: | ||||
QPalette fPalBlack; | |||||
QPalette fPalBlue; | |||||
QPalette fPalSystem; | |||||
CarlaStylePrivate* const d; | CarlaStylePrivate* const d; | ||||
friend class CarlaStylePrivate; | friend class CarlaStylePrivate; | ||||
}; | }; | ||||