summaryrefslogtreecommitdiff
path: root/meshmc/launcher/ui/themes/SystemTheme.cpp
diff options
context:
space:
mode:
authorMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:45:07 +0300
committerMehmet Samet Duman <yongdohyun@projecttick.org>2026-04-02 18:45:07 +0300
commit31b9a8949ed0a288143e23bf739f2eb64fdc63be (patch)
tree8a984fa143c38fccad461a77792d6864f3e82cd3 /meshmc/launcher/ui/themes/SystemTheme.cpp
parent934382c8a1ce738589dee9ee0f14e1cec812770e (diff)
parentfad6a1066616b69d7f5fef01178efdf014c59537 (diff)
downloadProject-Tick-31b9a8949ed0a288143e23bf739f2eb64fdc63be.tar.gz
Project-Tick-31b9a8949ed0a288143e23bf739f2eb64fdc63be.zip
Add 'meshmc/' from commit 'fad6a1066616b69d7f5fef01178efdf014c59537'
git-subtree-dir: meshmc git-subtree-mainline: 934382c8a1ce738589dee9ee0f14e1cec812770e git-subtree-split: fad6a1066616b69d7f5fef01178efdf014c59537
Diffstat (limited to 'meshmc/launcher/ui/themes/SystemTheme.cpp')
-rw-r--r--meshmc/launcher/ui/themes/SystemTheme.cpp134
1 files changed, 134 insertions, 0 deletions
diff --git a/meshmc/launcher/ui/themes/SystemTheme.cpp b/meshmc/launcher/ui/themes/SystemTheme.cpp
new file mode 100644
index 0000000000..42022c7e7e
--- /dev/null
+++ b/meshmc/launcher/ui/themes/SystemTheme.cpp
@@ -0,0 +1,134 @@
+/* SPDX-FileCopyrightText: 2026 Project Tick
+ * SPDX-FileContributor: Project Tick
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ *
+ * MeshMC - A Custom Launcher for Minecraft
+ * 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, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * 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, see <https://www.gnu.org/licenses/>.
+ */
+
+#include "SystemTheme.h"
+#include <QApplication>
+#include <QStyle>
+#include <QStyleFactory>
+#include <QDebug>
+
+static const QStringList S_NATIVE_STYLES{"windows11", "windowsvista", "macos",
+ "system", "windows"};
+
+SystemTheme::SystemTheme(const QString& styleName,
+ const QPalette& defaultPalette, bool isDefaultTheme)
+{
+ m_themeName = isDefaultTheme ? "system" : styleName;
+ m_widgetTheme = styleName;
+ if (S_NATIVE_STYLES.contains(m_themeName)) {
+ m_colorPalette = defaultPalette;
+ } else {
+ // If this style matches the system's current default style, use the
+ // application palette instead of standardPalette(). standardPalette()
+ // returns a hardcoded palette that ignores the platform color scheme
+ // (e.g. Breeze on Plasma always returns a dark standardPalette even
+ // when the system is set to a light color scheme).
+ auto currentDefault = QApplication::style()->objectName();
+ if (styleName.compare(currentDefault, Qt::CaseInsensitive) == 0) {
+ m_colorPalette = defaultPalette;
+ } else {
+ auto style = QStyleFactory::create(styleName);
+ m_colorPalette =
+ style != nullptr ? style->standardPalette() : defaultPalette;
+ delete style;
+ }
+ }
+}
+
+void SystemTheme::apply(bool initial)
+{
+ if (initial && S_NATIVE_STYLES.contains(m_themeName)) {
+ return;
+ }
+ ITheme::apply(initial);
+}
+
+QString SystemTheme::id()
+{
+ return m_themeName;
+}
+
+QString SystemTheme::name()
+{
+ if (m_themeName.toLower() == "windowsvista") {
+ return QObject::tr("Windows Vista");
+ } else if (m_themeName.toLower() == "windows") {
+ return QObject::tr("Windows 9x");
+ } else if (m_themeName.toLower() == "windows11") {
+ return QObject::tr("Windows 11");
+ } else if (m_themeName.toLower() == "system") {
+ return QObject::tr("System");
+ } else {
+ return m_themeName;
+ }
+}
+
+QString SystemTheme::tooltip()
+{
+ if (m_themeName.toLower() == "windowsvista") {
+ return QObject::tr("Widget style trying to look like your win32 theme");
+ } else if (m_themeName.toLower() == "windows") {
+ return QObject::tr("Windows 9x inspired widget style");
+ } else if (m_themeName.toLower() == "windows11") {
+ return QObject::tr("WinUI 3 inspired Qt widget style");
+ } else if (m_themeName.toLower() == "fusion") {
+ return QObject::tr("The default Qt widget style");
+ } else if (m_themeName.toLower() == "system") {
+ return QObject::tr("Your current system theme");
+ } else {
+ return QString();
+ }
+}
+
+QString SystemTheme::qtTheme()
+{
+ return m_widgetTheme;
+}
+
+QPalette SystemTheme::colorScheme()
+{
+ return m_colorPalette;
+}
+
+QString SystemTheme::appStyleSheet()
+{
+ return QString();
+}
+
+double SystemTheme::fadeAmount()
+{
+ return 0.5;
+}
+
+QColor SystemTheme::fadeColor()
+{
+ return QColor(128, 128, 128);
+}
+
+bool SystemTheme::hasStyleSheet()
+{
+ return false;
+}
+
+bool SystemTheme::hasColorScheme()
+{
+ return true;
+}