diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss index be52cd3df7e1da2151d4b1e7bda15640d027e559..e0e94cecdf0c562a823cc4fe98c99d9e3241cdc9 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 aa3197518a05892e4ee76e8d48e208bd2d619ae3..34553b0fcdb51c8457e8450cb0962e228a1be6f0 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 5a2929ab7fc2ed8a2edc0029eee798f3efcf7775..6dbe2484f3ff18eb805fd256ace509054f40affb 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 8e996a7d380e777f679c7002bb42d554bf376512..66e93e2b144f7f83e9d534b5c05aca5014e9b259 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 90bd9bebd9dd2eafa9fbc90cfdd8c3dd20745f29..0640ca32e2d2f165afafe58bb2aff403a5e286c3 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 438100bf9c5ae1ea4b9c20320738c1496b73204f..4c975cee2513a84b9efd216161851d8c163ac9e4 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 f5d01abc60547a0d546b9e28906aec613710dd1b..5bc09d8dbbcb28bbf974ec0904d7880d0125fd8a 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 5d9ef1cf1e4744790ac6785d44432499ba55f5a5..8bce675941f3d6ede8a297c5af869a5068d7687a 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);