diff --git a/lib/utils/status-control.cpp b/lib/utils/status-control.cpp index 83817814..e0999360 100644 --- a/lib/utils/status-control.cpp +++ b/lib/utils/status-control.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include namespace advss { @@ -15,6 +16,50 @@ namespace advss { void OpenSettingsWindow(); StatusDock *dock = nullptr; +static QString colorToString(const QColor &color) +{ + return QString("rgba(") + QString::number(color.red()) + "," + + QString::number(color.green()) + "," + + QString::number(color.blue()) + "," + + QString::number(color.alpha()) + ")"; +} + +static QString getDefaultBackgroundColorString() +{ + static QString defaultColorString; + static bool cacheReady = false; + + if (cacheReady) { + return defaultColorString; + } + + QWidget tempWidget; + const auto defaultColor = + tempWidget.palette().brush(QPalette::Window).color(); + defaultColorString = colorToString(defaultColor); + + cacheReady = true; + return defaultColorString; +} + +static QString getDefaultTextColorString() +{ + static QString defaultColorString; + static bool cacheReady = false; + + if (cacheReady) { + return defaultColorString; + } + + QLabel tempWidget; + const auto defaultColor = + tempWidget.palette().brush(QPalette::Text).color(); + defaultColorString = colorToString(defaultColor); + + cacheReady = true; + return defaultColorString; +} + StatusControl::StatusControl(QWidget *parent, bool noLayout) : QWidget(parent), _button(new QPushButton("-", this)), @@ -28,30 +73,23 @@ StatusControl::StatusControl(QWidget *parent, bool noLayout) _statusPrefix->setWordWrap(true); _statusPrefix->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - _status->setStyleSheet("QLabel{ \ - border-style: outset; \ - border-width: 2px; \ - border-radius: 7px; \ - border-color: rgb(0,0,0,0) \ - }"); - _status->setSizePolicy(QSizePolicy::Maximum, - QSizePolicy::MinimumExpanding); - + SetStatusStyleSheet(false); QWidget::connect(_button, SIGNAL(clicked()), this, SLOT(ButtonClicked())); if (!noLayout) { - QHBoxLayout *statusLayout = new QHBoxLayout(); - statusLayout->addWidget(_statusPrefix); - statusLayout->addStretch(); - statusLayout->addWidget(_status); - statusLayout->setStretch(0, 10); _buttonLayout->setContentsMargins(0, 0, 0, 0); _buttonLayout->addWidget(_button); QVBoxLayout *layout = new QVBoxLayout(); - layout->addLayout(statusLayout); + _statusPrefix->setAlignment(Qt::AlignCenter); + _status->setAlignment(Qt::AlignCenter); + layout->addWidget(_statusPrefix); + layout->addWidget(_status); layout->addLayout(_buttonLayout); setLayout(layout); + } else { + _status->setSizePolicy(QSizePolicy::Maximum, + QSizePolicy::MinimumExpanding); } if (PluginIsRunning()) { @@ -95,6 +133,8 @@ void StatusControl::SetStarted() obs_module_text("AdvSceneSwitcher.generalTab.status.stop")); _status->setText(obs_module_text("AdvSceneSwitcher.status.active")); _status->disconnect(_pulse); + SetStatusStyleSheet(false); + _setToStopped = false; } @@ -104,12 +144,30 @@ void StatusControl::SetStopped() obs_module_text("AdvSceneSwitcher.generalTab.status.start")); _status->setText(obs_module_text("AdvSceneSwitcher.status.inactive")); if (HighlightUIElementsEnabled()) { + SetStatusStyleSheet(true); _pulse = PulseWidget(_status, QColor(Qt::red), QColor(0, 0, 0, 0)); } _setToStopped = true; } +void StatusControl::SetStatusStyleSheet(bool stopped) const +{ + auto style = QString("QLabel{ " + "background-color: "); + if (stopped) { + style += getDefaultBackgroundColorString() + "; "; + } else { + style += "transparent; "; + } + style += "border-style: outset; " + "border-width: 2px; " + "border-radius: 7px; " + "border-color: " + + getDefaultTextColorString() + "; }"; + _status->setStyleSheet(style); +} + StatusDock::StatusDock(QWidget *parent) : OBSDock(parent) { setWindowTitle(obs_module_text("AdvSceneSwitcher.windowTitle")); diff --git a/lib/utils/status-control.hpp b/lib/utils/status-control.hpp index 952a97fb..8b5dd5bf 100644 --- a/lib/utils/status-control.hpp +++ b/lib/utils/status-control.hpp @@ -26,6 +26,7 @@ private slots: private: void SetStopped(); void SetStarted(); + void SetStatusStyleSheet(bool stopped) const; QPushButton *_button; QHBoxLayout *_buttonLayout;