diff --git a/data/res/images/DarkAdvanced.svg b/data/res/images/DarkAdvanced.svg
new file mode 100644
index 00000000..4e20a9a1
--- /dev/null
+++ b/data/res/images/DarkAdvanced.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/data/res/images/DarkGroup.svg b/data/res/images/DarkGroup.svg
new file mode 100644
index 00000000..43c48b74
--- /dev/null
+++ b/data/res/images/DarkGroup.svg
@@ -0,0 +1,7 @@
+
+
diff --git a/data/res/time.svg b/data/res/images/DarkTime.svg
similarity index 80%
rename from data/res/time.svg
rename to data/res/images/DarkTime.svg
index cafc173a..9ab764fe 100644
--- a/data/res/time.svg
+++ b/data/res/images/DarkTime.svg
@@ -1,3 +1,2 @@
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/data/res/images/LightAdvanced.svg b/data/res/images/LightAdvanced.svg
new file mode 100644
index 00000000..8e2d843d
--- /dev/null
+++ b/data/res/images/LightAdvanced.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/data/res/images/LightGroup.svg b/data/res/images/LightGroup.svg
new file mode 100644
index 00000000..99af8d34
--- /dev/null
+++ b/data/res/images/LightGroup.svg
@@ -0,0 +1,7 @@
+
+
diff --git a/data/res/images/LightTime.svg b/data/res/images/LightTime.svg
new file mode 100644
index 00000000..48b2cbbf
--- /dev/null
+++ b/data/res/images/LightTime.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/src/macro-core/macro-condition-edit.cpp b/src/macro-core/macro-condition-edit.cpp
index 72e87c93..c565fa80 100644
--- a/src/macro-core/macro-condition-edit.cpp
+++ b/src/macro-core/macro-condition-edit.cpp
@@ -121,8 +121,9 @@ DurationModifierEdit::DurationModifierEdit(QWidget *parent)
_duration = new DurationSelection(parent);
_toggle = new QPushButton(parent);
_toggle->setMaximumWidth(22);
- _toggle->setIcon(
- QIcon(QString::fromStdString(getDataFilePath("res/time.svg"))));
+ const auto path = QString::fromStdString(getDataFilePath(
+ "res/images/" + GetThemeTypeName() + "time.svg"));
+ _toggle->setIcon(QIcon(path));
populateDurationModifierTypes(_condition);
QWidget::connect(_condition, SIGNAL(currentIndexChanged(int)), this,
SLOT(_ModifierChanged(int)));
diff --git a/src/macro-core/macro-tree.cpp b/src/macro-core/macro-tree.cpp
index c28c8e7c..a72fb7fb 100644
--- a/src/macro-core/macro-tree.cpp
+++ b/src/macro-core/macro-tree.cpp
@@ -27,10 +27,9 @@ MacroTreeItem::MacroTreeItem(MacroTree *tree, std::shared_ptr macroItem,
bool isGroup = _macro->IsGroup();
if (isGroup) {
- QIcon icon;
- icon.addFile(
- QString::fromUtf8(":/res/images/sources/group.svg"),
- QSize(), QIcon::Normal, QIcon::Off);
+ const auto path = QString::fromStdString(getDataFilePath(
+ "res/images/" + GetThemeTypeName() + "group.svg"));
+ QIcon icon(path);
QPixmap pixmap = icon.pixmap(QSize(16, 16));
_iconLabel = new QLabel();
_iconLabel->setPixmap(pixmap);
diff --git a/src/status-control.cpp b/src/status-control.cpp
index c3dd39c5..47767fc8 100644
--- a/src/status-control.cpp
+++ b/src/status-control.cpp
@@ -120,10 +120,9 @@ StatusDock::StatusDock(QWidget *parent) : OBSDock(parent)
QAction *action = new QAction;
action->setProperty("themeID", QVariant(QString::fromUtf8("cogsIcon")));
action->connect(action, &QAction::triggered, OpenSettingsWindow);
- QIcon icon;
- icon.addFile(
- QString::fromUtf8(":/settings/images/settings/advanced.svg"),
- QSize(), QIcon::Normal, QIcon::Off);
+ const auto path = QString::fromStdString(getDataFilePath(
+ "res/images/" + GetThemeTypeName() + "advanced.svg"));
+ QIcon icon(path);
action->setIcon(icon);
auto toolbar = new QToolBar;
diff --git a/src/utils/utility.cpp b/src/utils/utility.cpp
index 98225de4..486b4e9c 100644
--- a/src/utils/utility.cpp
+++ b/src/utils/utility.cpp
@@ -16,6 +16,7 @@
#include
#include
#include
+#include
#include
#include
#include
@@ -867,6 +868,22 @@ bool windowPosValid(QPoint pos)
return !!QGuiApplication::screenAt(pos);
}
+std::string GetThemeTypeName()
+{
+#if LIBOBS_API_VER >= MAKE_SEMANTIC_VERSION(29, 0, 0)
+ return obs_frontend_is_theme_dark() ? "Dark" : "Light";
+#else
+ auto mainWindow =
+ static_cast(obs_frontend_get_main_window());
+ if (!mainWindow) {
+ return "Dark";
+ }
+ QColor color = mainWindow->palette().text().color();
+ const bool themeDarkMode = !(color.redF() < 0.5);
+ return themeDarkMode ? "Dark" : "Light";
+#endif
+}
+
QMetaObject::Connection PulseWidget(QWidget *widget, QColor startColor,
QColor endColor, bool once)
{
diff --git a/src/utils/utility.hpp b/src/utils/utility.hpp
index 1706ae12..6540731e 100644
--- a/src/utils/utility.hpp
+++ b/src/utils/utility.hpp
@@ -105,6 +105,7 @@ int findIdxInRagne(QComboBox *list, int start, int stop,
bool DisplayMessage(const QString &msg, bool question = false);
void DisplayTrayMessage(const QString &title, const QString &msg);
bool windowPosValid(QPoint pos);
+std::string GetThemeTypeName();
/* Generic helpers */