summaryrefslogtreecommitdiff
path: root/archived/projt-launcher/launcher/ui/themes/ThemeManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'archived/projt-launcher/launcher/ui/themes/ThemeManager.h')
-rw-r--r--archived/projt-launcher/launcher/ui/themes/ThemeManager.h120
1 files changed, 120 insertions, 0 deletions
diff --git a/archived/projt-launcher/launcher/ui/themes/ThemeManager.h b/archived/projt-launcher/launcher/ui/themes/ThemeManager.h
new file mode 100644
index 0000000000..4d11e8a4b0
--- /dev/null
+++ b/archived/projt-launcher/launcher/ui/themes/ThemeManager.h
@@ -0,0 +1,120 @@
+// SPDX-License-Identifier: GPL-3.0-only
+// SPDX-FileCopyrightText: 2026 Project Tick
+// SPDX-FileContributor: Project Tick Team
+/*
+ * ProjT Launcher - Minecraft Launcher
+ * Copyright (C) 2026 Project Tick
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * === Upstream License Block (Do Not Modify) ==============================
+ *
+ *
+ *
+ * Prism Launcher - Minecraft Launcher
+ * Copyright (C) 2024 Tayou <git@tayou.org>
+ * Copyright (C) 2024 TheKodeToad <TheKodeToad@proton.me>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ======================================================================== */
+#pragma once
+
+#include <QDir>
+#include <QLoggingCategory>
+#include <QString>
+#include <memory>
+
+#include "IconTheme.h"
+#include "ui/themes/CatPack.h"
+#include "ui/themes/Theme.h"
+
+inline auto themeDebugLog() {
+ return qDebug() << "[Theme]";
+}
+inline auto themeWarningLog() {
+ return qWarning() << "[Theme]";
+}
+
+class ThemeManager {
+ public:
+ ThemeManager();
+ ~ThemeManager();
+
+ QList<IconTheme*> getValidIconThemes();
+ QList<Theme*> getValidApplicationThemes();
+ bool isValidIconTheme(const QString& id);
+ bool isValidApplicationTheme(const QString& id);
+ QDir getIconThemesFolder();
+ QDir getApplicationThemesFolder();
+ QDir getCatPacksFolder();
+ void applyCurrentlySelectedTheme(bool initial = false);
+ void setIconTheme(const QString& name);
+ void setApplicationTheme(const QString& name, bool initial = false);
+
+ /// @brief Returns the background based on selected and with events (Birthday, XMas, etc.)
+ /// @param catName Optional, if you need a specific background.
+ /// @return
+ QString getCatPack(QString catName = "");
+ QList<CatPack*> getValidCatPacks();
+
+ const LogColors& getLogColors() { return m_logColors; }
+
+ void refresh();
+
+ private:
+ std::map<QString, std::unique_ptr<Theme>> m_themes;
+ std::map<QString, IconTheme> m_icons;
+ QDir m_iconThemeFolder{"iconthemes"};
+ QDir m_applicationThemeFolder{"themes"};
+ QDir m_catPacksFolder{"catpacks"};
+ std::map<QString, std::unique_ptr<CatPack>> m_catPacks;
+ QPalette m_defaultPalette;
+ QString m_defaultStyle;
+ LogColors m_logColors;
+
+ void initializeThemes();
+ void initializeCatPacks();
+ QString addTheme(std::unique_ptr<Theme> theme);
+ Theme* getTheme(QString themeId);
+ QString addIconTheme(IconTheme theme);
+ QString addCatPack(std::unique_ptr<CatPack> catPack);
+ void initializeIcons();
+ void initializeWidgets();
+
+ // On non-Mac systems, this is a no-op.
+ void setTitlebarColorOnMac(WId windowId, QColor color);
+ // This also will set the titlebar color of newly opened windows after this method is called.
+ // On non-Mac systems, this is a no-op.
+ void setTitlebarColorOfAllWindowsOnMac(QColor color);
+ // On non-Mac systems, this is a no-op.
+ void stopSettingNewWindowColorsOnMac();
+#ifdef Q_OS_MACOS
+ NSObject* m_windowTitlebarObserver = nullptr;
+#endif
+
+ const QStringList builtinIcons{"pe_colored", "pe_light", "pe_dark", "pe_blue", "breeze_light", "breeze_dark",
+ "OSX", "iOS", "flat", "flat_white", "multimc"};
+};