From e2be33956b68f59af2ce99efab609353601ec6e0 Mon Sep 17 00:00:00 2001 From: SuslikV Date: Wed, 23 Jan 2019 17:05:48 +0200 Subject: [PATCH] UI: Correct custom property implementation - Fixes Q_PROPERTY macro syntax - Removes excessive notification declaration and slot - Removes unneeded dynamic property - Improves Themes versatility --- UI/data/themes/Acri.qss | 4 ++-- UI/data/themes/Dark.qss | 4 ++-- UI/data/themes/Rachni.qss | 4 ++-- UI/data/themes/System.qss | 4 ++-- UI/qt-display.cpp | 23 +++++++++++++++++++++-- UI/qt-display.hpp | 4 +++- 6 files changed, 32 insertions(+), 11 deletions(-) diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss index 1417da15d..62cbac30d 100644 --- a/UI/data/themes/Acri.qss +++ b/UI/data/themes/Acri.qss @@ -904,8 +904,8 @@ FocusList::item { /* Preview background color */ -* [themeID="displayBackgroundColor"] { - qproperty-displayBackgroundColor: #28282A; +OBSQTDisplay { + qproperty-displayBackgroundColor: #28282A; } /* Preview/Program labels */ diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss index 8b50f7f65..34fa8d73c 100644 --- a/UI/data/themes/Dark.qss +++ b/UI/data/themes/Dark.qss @@ -695,8 +695,8 @@ QLabel#errorLabel { /* Preview background color */ -* [themeID="displayBackgroundColor"] { - qproperty-displayBackgroundColor: rgb(76, 76, 76); +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(76, 76, 76); } /* Preview/Program labels */ diff --git a/UI/data/themes/Rachni.qss b/UI/data/themes/Rachni.qss index e3af6e16b..6855aa7b6 100644 --- a/UI/data/themes/Rachni.qss +++ b/UI/data/themes/Rachni.qss @@ -1260,8 +1260,8 @@ QToolTip { /* Preview background color */ -* [themeID="displayBackgroundColor"] { - qproperty-displayBackgroundColor: rgb(35, 38, 41); +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(35, 38, 41); } /* Preview/Program labels */ diff --git a/UI/data/themes/System.qss b/UI/data/themes/System.qss index 2ea5c4ad4..543618924 100644 --- a/UI/data/themes/System.qss +++ b/UI/data/themes/System.qss @@ -138,8 +138,8 @@ QLabel#errorLabel { /* Preview background color */ -* [themeID="displayBackgroundColor"] { - qproperty-displayBackgroundColor: rgb(76, 76, 76); +OBSQTDisplay { + qproperty-displayBackgroundColor: rgb(76, 76, 76); } /* Preview/Program labels */ diff --git a/UI/qt-display.cpp b/UI/qt-display.cpp index 0640ca32e..f2ca5979c 100644 --- a/UI/qt-display.cpp +++ b/UI/qt-display.cpp @@ -19,6 +19,13 @@ static inline long long color_to_int(QColor color) shift(color.alpha(), 24); } +static inline QColor rgba_to_color(uint32_t rgba) +{ + return QColor::fromRgb(rgba & 0xFF, + (rgba >> 8) & 0xFF, + (rgba >> 16) & 0xFF, + (rgba >> 24) & 0xFF); +} OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags) : QWidget(parent, flags) @@ -53,13 +60,25 @@ OBSQTDisplay::OBSQTDisplay(QWidget *parent, Qt::WindowFlags flags) connect(windowHandle(), &QWindow::visibleChanged, windowVisible); connect(windowHandle(), &QWindow::screenChanged, sizeChanged); +} - this->setProperty("themeID", "displayBackgroundColor"); +QColor OBSQTDisplay::GetDisplayBackgroundColor() const +{ + return rgba_to_color(backgroundColor); } void OBSQTDisplay::SetDisplayBackgroundColor(const QColor &color) { - backgroundColor = (uint32_t)color_to_int(color); + uint32_t newBackgroundColor = (uint32_t)color_to_int(color); + + if (newBackgroundColor != backgroundColor) { + backgroundColor = newBackgroundColor; + UpdateDisplayBackgroundColor(); + } +} + +void OBSQTDisplay::UpdateDisplayBackgroundColor() +{ obs_display_set_background_color(display, backgroundColor); } diff --git a/UI/qt-display.hpp b/UI/qt-display.hpp index 94960b2a0..de4fdacc2 100644 --- a/UI/qt-display.hpp +++ b/UI/qt-display.hpp @@ -8,6 +8,7 @@ class OBSQTDisplay : public QWidget { Q_OBJECT Q_PROPERTY(QColor displayBackgroundColor MEMBER backgroundColor + READ GetDisplayBackgroundColor WRITE SetDisplayBackgroundColor) OBSDisplay display; @@ -31,6 +32,7 @@ public: uint32_t backgroundColor = GREY_COLOR_BACKGROUND; -private slots: + QColor GetDisplayBackgroundColor() const; void SetDisplayBackgroundColor(const QColor &color); + void UpdateDisplayBackgroundColor(); };