From 0ae8a7c0ac5887316de2cdd90941cdede8c53912 Mon Sep 17 00:00:00 2001 From: cg2121 Date: Thu, 30 Aug 2018 15:17:49 -0500 Subject: [PATCH] UI: Add ability to style preview background color --- UI/data/themes/Acri.qss | 6 ++++++ UI/data/themes/Dark.qss | 6 ++++++ UI/data/themes/Default.qss | 6 ++++++ UI/data/themes/Rachni.qss | 6 ++++++ UI/qt-display.cpp | 24 +++++++++++++++++++++++- UI/qt-display.hpp | 7 +++++++ libobs/obs-display.c | 17 +++++++++++++---- libobs/obs.h | 3 ++- 8 files changed, 69 insertions(+), 6 deletions(-) diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss index be52cd3df..e0e94cecd 100644 --- a/UI/data/themes/Acri.qss +++ b/UI/data/themes/Acri.qss @@ -880,3 +880,9 @@ FocusList::item { * [themeID="aboutHLayout"] { background-color: rgb(8, 8, 11); } + +/* Preview background color */ + +* [themeID="displayBackgroundColor"] { + qproperty-displayBackgroundColor: #28282A; +} diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss index aa3197518..34553b0fc 100644 --- a/UI/data/themes/Dark.qss +++ b/UI/data/themes/Dark.qss @@ -656,3 +656,9 @@ QLabel#errorLabel { * [themeID="aboutHLayout"] { background-color: rgb(31, 30, 31); /* veryDark */ } + +/* Preview background color */ + +* [themeID="displayBackgroundColor"] { + qproperty-displayBackgroundColor: rgb(76, 76, 76); +} diff --git a/UI/data/themes/Default.qss b/UI/data/themes/Default.qss index 5a2929ab7..6dbe2484f 100644 --- a/UI/data/themes/Default.qss +++ b/UI/data/themes/Default.qss @@ -135,3 +135,9 @@ QLabel#errorLabel { * [themeID="aboutHLayout"] { background-color: rgb(169, 169, 169); } + +/* Preview background color */ + +* [themeID="displayBackgroundColor"] { + qproperty-displayBackgroundColor: rgb(76, 76, 76); +} diff --git a/UI/data/themes/Rachni.qss b/UI/data/themes/Rachni.qss index 8e996a7d3..66e93e2b1 100644 --- a/UI/data/themes/Rachni.qss +++ b/UI/data/themes/Rachni.qss @@ -1234,3 +1234,9 @@ QToolTip { * [themeID="aboutHLayout"] { background-color: rgb(35, 38, 41); /* Dark Gray */ } + +/* Preview background color */ + +* [themeID="displayBackgroundColor"] { + qproperty-displayBackgroundColor: rgb(35, 38, 41); +} diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp index 90bd9bebd..0640ca32e 100644 --- a/UI/qt-display.cpp +++ b/UI/qt-display.cpp @@ -6,6 +6,20 @@ #include #include +static inline long long color_to_int(QColor color) +{ + auto shift = [&](unsigned val, int shift) + { + return ((val & 0xff) << shift); + }; + + return shift(color.red(), 0) | + shift(color.green(), 8) | + shift(color.blue(), 16) | + shift(color.alpha(), 24); +} + + OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags) { @@ -39,6 +53,14 @@ OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags) connect(windowHandle(), &QWindow::visibleChanged, windowVisible); connect(windowHandle(), &QWindow::screenChanged, sizeChanged); + + this->setProperty("themeID", "displayBackgroundColor"); +} + +void OBSQTDisplay::SetDisplayBackgroundColor(const QColor &color) +{ + backgroundColor = (uint32_t)color_to_int(color); + obs_display_set_background_color(display, backgroundColor); } void OBSQTDisplay::CreateDisplay() @@ -56,7 +78,7 @@ void OBSQTDisplay::CreateDisplay() QTToGSWindow(winId(), info.window); - display = obs_display_create(&info); + display = obs_display_create(&info, backgroundColor); emit DisplayCreated(this); } diff --git a/UI/qt-display.hpp b/UI/qt-display.hpp index 438100bf9..4c975cee2 100644 --- a/UI/qt-display.hpp +++ b/UI/qt-display.hpp @@ -5,6 +5,8 @@ class OBSQTDisplay : public QWidget { Q_OBJECT + Q_PROPERTY(QColor displayBackgroundColor WRITE SetDisplayBackgroundColor + NOTIFY SetDisplayBackgroundColor) OBSDisplay display; @@ -23,4 +25,9 @@ public: virtual QPaintEngine *paintEngine() const override; inline obs_display_t *GetDisplay() const {return display;} + + uint32_t backgroundColor; + +private slots: + void SetDisplayBackgroundColor(const QColor &color); }; diff --git a/libobs/obs-display.c b/libobs/obs-display.c index f5d01abc6..5bc09d8db 100644 --- a/libobs/obs-display.c +++ b/libobs/obs-display.c @@ -46,17 +46,22 @@ bool obs_display_init(struct obs_display *display, return false; } - display->background_color = 0x4C4C4C; display->enabled = true; return true; } -obs_display_t *obs_display_create(const struct gs_init_data *graphics_data) +obs_display_t *obs_display_create(const struct gs_init_data *graphics_data, + uint32_t background_color) { struct obs_display *display = bzalloc(sizeof(struct obs_display)); gs_enter_context(obs->video.graphics); + if (background_color) + display->background_color = background_color; + else + display->background_color = 0x4c4c4c; + if (!obs_display_init(display, graphics_data)) { obs_display_destroy(display); display = NULL; @@ -227,6 +232,10 @@ bool obs_display_enabled(obs_display_t *display) void obs_display_set_background_color(obs_display_t *display, uint32_t color) { - if (display) - display->background_color = color; + if (display) { + if (color) + display->background_color = color; + else + display->background_color = 0x4c4c4c; + } } diff --git a/libobs/obs.h b/libobs/obs.h index 5d9ef1cf1..8bce67594 100644 --- a/libobs/obs.h +++ b/libobs/obs.h @@ -748,7 +748,8 @@ EXPORT void obs_view_render(obs_view_t *view); * @return The new display context, or NULL if failed. */ EXPORT obs_display_t *obs_display_create( - const struct gs_init_data *graphics_data); + const struct gs_init_data *graphics_data, + uint32_t backround_color); /** Destroys a display context */ EXPORT void obs_display_destroy(obs_display_t *display); -- GitLab