// SPDX-License-Identifier: GPL-2.0 #include "themeinterface.h" #include "core/subsurface-string.h" #include "qmlmanager.h" #include "core/metrics.h" #include "core/settings/qPrefDisplay.h" #include static const QColor BLUE_BACKGROUND_COLOR = "#eff0f1"; static const QColor BLUE_CONTRAST_ACCENT_COLOR = "#FF5722"; static const QColor BLUE_DARKER_PRIMARY_COLOR = "#303F9f"; static const QColor BLUE_DARKER_PRIMARY_TEXT_COLOR = "#ECECEC"; static const QColor BLUE_DRAWER_COLOR = "#FFFFFF"; static const QColor BLUE_LIGHT_DRAWER_COLOR = "#FFFFFF"; static const QColor BLUE_LIGHT_PRIMARY_COLOR = "#C5CAE9"; static const QColor BLUE_LIGHT_PRIMARY_TEXT_COLOR = "#212121"; static const QColor BLUE_PRIMARY_COLOR = "#3F51B5"; static const QColor BLUE_PRIMARY_TEXT_COLOR = "#FFFFFF"; static const QColor BLUE_SECONDARY_TEXT_COLOR = "#757575"; static const QColor BLUE_TEXT_COLOR = "#212121"; static const QColor PINK_BACKGROUND_COLOR = "#eff0f1"; static const QColor PINK_CONTRAST_ACCENT_COLOR = "#FF5722"; static const QColor PINK_DARKER_PRIMARY_COLOR = "#C2185B"; static const QColor PINK_DARKER_PRIMARY_TEXT_COLOR = "#ECECEC"; static const QColor PINK_DRAWER_COLOR = "#FFFFFF"; static const QColor PINK_LIGHT_DRAWER_COLOR = "#FFFFFF"; static const QColor PINK_LIGHT_PRIMARY_COLOR = "#FFDDF4"; static const QColor PINK_LIGHT_PRIMARY_TEXT_COLOR = "#212121"; static const QColor PINK_PRIMARY_COLOR = "#FF69B4"; static const QColor PINK_PRIMARY_TEXT_COLOR = "#212121"; static const QColor PINK_SECONDARY_TEXT_COLOR = "#757575"; static const QColor PINK_TEXT_COLOR = "#212121"; static const QColor DARK_BACKGROUND_COLOR = "#303030"; static const QColor DARK_CONTRAST_ACCENT_COLOR = "#FF5722"; static const QColor DARK_DARKER_PRIMARY_COLOR = "#303F9f"; static const QColor DARK_DARKER_PRIMARY_TEXT_COLOR = "#ECECEC"; static const QColor DARK_DRAWER_COLOR = "#424242"; static const QColor DARK_LIGHT_DRAWER_COLOR = "#FFFFFF"; static const QColor DARK_LIGHT_PRIMARY_COLOR = "#303050"; static const QColor DARK_LIGHT_PRIMARY_TEXT_COLOR = "#ECECEC"; static const QColor DARK_PRIMARY_COLOR = "#3F51B5"; static const QColor DARK_PRIMARY_TEXT_COLOR = "#ECECEC"; static const QColor DARK_SECONDARY_TEXT_COLOR = "#757575"; static const QColor DARK_TEXT_COLOR = "#ECECEC"; ThemeInterface *ThemeInterface::instance() { static ThemeInterface *self = new ThemeInterface; return self; } ThemeInterface::ThemeInterface() { // get current theme m_currentTheme = qPrefDisplay::theme(); update_theme(); m_basePointSize = -1.0; // simply a placeholder to declare 'this isn't set, yet' } void ThemeInterface::set_currentTheme(const QString &theme) { m_currentTheme = theme; qPrefDisplay::set_theme(m_currentTheme); update_theme(); emit currentThemeChanged(); } void ThemeInterface::setInitialFontSize(double fontSize) { m_basePointSize = fontSize; set_currentScale(qPrefDisplay::mobile_scale()); } double ThemeInterface::currentScale() { return qPrefDisplay::mobile_scale(); } void ThemeInterface::set_currentScale(double newScale) { static bool needSignals = true; // make sure the signals fire the first time if (!IS_FP_SAME(newScale, qPrefDisplay::mobile_scale())) { qPrefDisplay::set_mobile_scale(newScale); emit currentScaleChanged(); needSignals = true; } if (needSignals) { // adjust all used font sizes m_regularPointSize = m_basePointSize * newScale; defaultModelFont().setPointSizeF(m_regularPointSize); emit regularPointSizeChanged(); m_headingPointSize = m_regularPointSize * 1.2; emit headingPointSizeChanged(); m_smallPointSize = m_regularPointSize * 0.8; emit smallPointSizeChanged(); m_titlePointSize = m_regularPointSize * 1.5; emit titlePointSizeChanged(); needSignals = false; } } void ThemeInterface::update_theme() { if (m_currentTheme == "Blue") { m_backgroundColor = BLUE_BACKGROUND_COLOR; m_contrastAccentColor = BLUE_CONTRAST_ACCENT_COLOR; m_darkerPrimaryColor = BLUE_DARKER_PRIMARY_COLOR; m_darkerPrimaryTextColor = BLUE_DARKER_PRIMARY_TEXT_COLOR; m_drawerColor = BLUE_DRAWER_COLOR; m_lightDrawerColor = BLUE_LIGHT_DRAWER_COLOR; m_lightPrimaryColor = BLUE_LIGHT_PRIMARY_COLOR; m_lightPrimaryTextColor = BLUE_LIGHT_PRIMARY_TEXT_COLOR; m_primaryColor = BLUE_PRIMARY_COLOR; m_primaryTextColor = BLUE_PRIMARY_TEXT_COLOR; m_secondaryTextColor = BLUE_SECONDARY_TEXT_COLOR; m_textColor = BLUE_TEXT_COLOR; } else if (m_currentTheme == "Pink") { m_backgroundColor = PINK_BACKGROUND_COLOR; m_contrastAccentColor = PINK_CONTRAST_ACCENT_COLOR; m_darkerPrimaryColor = PINK_DARKER_PRIMARY_COLOR; m_darkerPrimaryTextColor = PINK_DARKER_PRIMARY_TEXT_COLOR; m_drawerColor = PINK_DRAWER_COLOR; m_lightDrawerColor = PINK_LIGHT_DRAWER_COLOR; m_lightPrimaryColor = PINK_LIGHT_PRIMARY_COLOR; m_lightPrimaryTextColor = PINK_LIGHT_PRIMARY_TEXT_COLOR; m_primaryColor = PINK_PRIMARY_COLOR; m_primaryTextColor = PINK_PRIMARY_TEXT_COLOR; m_secondaryTextColor = PINK_SECONDARY_TEXT_COLOR; m_textColor = PINK_TEXT_COLOR; } else { m_backgroundColor = DARK_BACKGROUND_COLOR; m_contrastAccentColor = DARK_CONTRAST_ACCENT_COLOR; m_darkerPrimaryColor = DARK_DARKER_PRIMARY_COLOR; m_darkerPrimaryTextColor = DARK_DARKER_PRIMARY_TEXT_COLOR; m_drawerColor = DARK_DRAWER_COLOR; m_lightDrawerColor = DARK_LIGHT_DRAWER_COLOR; m_lightPrimaryColor = DARK_LIGHT_PRIMARY_COLOR; m_lightPrimaryTextColor = DARK_LIGHT_PRIMARY_TEXT_COLOR; m_primaryColor = DARK_PRIMARY_COLOR; m_primaryTextColor = DARK_PRIMARY_TEXT_COLOR; m_secondaryTextColor = DARK_SECONDARY_TEXT_COLOR; m_textColor = DARK_TEXT_COLOR; } emit backgroundColorChanged(); emit contrastAccentColorChanged(); emit darkerPrimaryColorChanged(); emit darkerPrimaryTextColorChanged(); emit drawerColorChanged(); emit lightDrawerColorChanged(); emit lightPrimaryColorChanged(); emit lightPrimaryTextColorChanged(); emit primaryColorChanged(); emit primaryTextColorChanged(); emit secondaryTextColorChanged(); emit textColorChanged(); }