diff options
Diffstat (limited to 'src/plugins/platforms/ios/qiostheme.mm')
-rw-r--r-- | src/plugins/platforms/ios/qiostheme.mm | 72 |
1 files changed, 46 insertions, 26 deletions
diff --git a/src/plugins/platforms/ios/qiostheme.mm b/src/plugins/platforms/ios/qiostheme.mm index e9525a0275..3d6d60f971 100644 --- a/src/plugins/platforms/ios/qiostheme.mm +++ b/src/plugins/platforms/ios/qiostheme.mm @@ -11,6 +11,7 @@ #include <QtGui/private/qcoregraphics_p.h> #include <QtGui/private/qcoretextfontdatabase_p.h> +#include <QtGui/private/qappleiconengine_p.h> #include <QtGui/private/qguiapplication_p.h> #include <qpa/qplatformintegration.h> @@ -21,6 +22,9 @@ #include "qiosmenu.h" #include "qiosfiledialog.h" #include "qiosmessagedialog.h" +#include "qioscolordialog.h" +#include "qiosfontdialog.h" +#include "qiosscreen.h" #endif QT_BEGIN_NAMESPACE @@ -34,7 +38,7 @@ QIOSTheme::QIOSTheme() m_contentSizeCategoryObserver = QMacNotificationObserver(nil, UIContentSizeCategoryDidChangeNotification, [] { qCDebug(lcQpaFonts) << "Contents size category changed to" << UIApplication.sharedApplication.preferredContentSizeCategory; - QPlatformFontDatabase::handleAvailableFontsChanged(); + QPlatformFontDatabase::repopulateFontDatabase(); }); } @@ -49,28 +53,26 @@ void QIOSTheme::initializeSystemPalette() Q_DECL_IMPORT QPalette qt_fusionPalette(void); s_systemPalette = qt_fusionPalette(); - if (@available(ios 13.0, *)) { - s_systemPalette.setBrush(QPalette::Window, qt_mac_toQBrush(UIColor.systemGroupedBackgroundColor.CGColor)); - s_systemPalette.setBrush(QPalette::Active, QPalette::WindowText, qt_mac_toQBrush(UIColor.labelColor.CGColor)); + s_systemPalette.setBrush(QPalette::Window, qt_mac_toQBrush(UIColor.systemGroupedBackgroundColor.CGColor)); + s_systemPalette.setBrush(QPalette::Active, QPalette::WindowText, qt_mac_toQBrush(UIColor.labelColor.CGColor)); - s_systemPalette.setBrush(QPalette::Base, qt_mac_toQBrush(UIColor.secondarySystemGroupedBackgroundColor.CGColor)); - s_systemPalette.setBrush(QPalette::Active, QPalette::Text, qt_mac_toQBrush(UIColor.labelColor.CGColor)); + s_systemPalette.setBrush(QPalette::Base, qt_mac_toQBrush(UIColor.secondarySystemGroupedBackgroundColor.CGColor)); + s_systemPalette.setBrush(QPalette::Active, QPalette::Text, qt_mac_toQBrush(UIColor.labelColor.CGColor)); - s_systemPalette.setBrush(QPalette::Button, qt_mac_toQBrush(UIColor.secondarySystemBackgroundColor.CGColor)); - s_systemPalette.setBrush(QPalette::Active, QPalette::ButtonText, qt_mac_toQBrush(UIColor.labelColor.CGColor)); + s_systemPalette.setBrush(QPalette::Button, qt_mac_toQBrush(UIColor.secondarySystemBackgroundColor.CGColor)); + s_systemPalette.setBrush(QPalette::Active, QPalette::ButtonText, qt_mac_toQBrush(UIColor.labelColor.CGColor)); - s_systemPalette.setBrush(QPalette::Active, QPalette::BrightText, qt_mac_toQBrush(UIColor.lightTextColor.CGColor)); - s_systemPalette.setBrush(QPalette::Active, QPalette::PlaceholderText, qt_mac_toQBrush(UIColor.placeholderTextColor.CGColor)); + s_systemPalette.setBrush(QPalette::Active, QPalette::BrightText, qt_mac_toQBrush(UIColor.lightTextColor.CGColor)); + s_systemPalette.setBrush(QPalette::Active, QPalette::PlaceholderText, qt_mac_toQBrush(UIColor.placeholderTextColor.CGColor)); - s_systemPalette.setBrush(QPalette::Active, QPalette::Link, qt_mac_toQBrush(UIColor.linkColor.CGColor)); - s_systemPalette.setBrush(QPalette::Active, QPalette::LinkVisited, qt_mac_toQBrush(UIColor.linkColor.CGColor)); + s_systemPalette.setBrush(QPalette::Active, QPalette::Link, qt_mac_toQBrush(UIColor.linkColor.CGColor)); + s_systemPalette.setBrush(QPalette::Active, QPalette::LinkVisited, qt_mac_toQBrush(UIColor.linkColor.CGColor)); - s_systemPalette.setBrush(QPalette::Highlight, QColor(11, 70, 150, 60)); - s_systemPalette.setBrush(QPalette::HighlightedText, qt_mac_toQBrush(UIColor.labelColor.CGColor)); - } else { - s_systemPalette.setBrush(QPalette::Highlight, QColor(204, 221, 237)); - s_systemPalette.setBrush(QPalette::HighlightedText, Qt::black); - } + s_systemPalette.setBrush(QPalette::Highlight, QColor(11, 70, 150, 60)); + s_systemPalette.setBrush(QPalette::HighlightedText, qt_mac_toQBrush(UIColor.labelColor.CGColor)); + + if (@available(ios 15.0, *)) + s_systemPalette.setBrush(QPalette::Accent, qt_mac_toQBrush(UIColor.tintColor.CGColor)); } const QPalette *QIOSTheme::palette(QPlatformTheme::Palette type) const @@ -103,6 +105,8 @@ bool QIOSTheme::usePlatformNativeDialog(QPlatformTheme::DialogType type) const switch (type) { case FileDialog: case MessageDialog: + case ColorDialog: + case FontDialog: return !qt_apple_isApplicationExtension(); default: return false; @@ -119,6 +123,12 @@ QPlatformDialogHelper *QIOSTheme::createPlatformDialogHelper(QPlatformTheme::Dia case MessageDialog: return new QIOSMessageDialog(); break; + case ColorDialog: + return new QIOSColorDialog(); + break; + case FontDialog: + return new QIOSFontDialog(); + break; #endif default: return 0; @@ -137,17 +147,22 @@ QVariant QIOSTheme::themeHint(ThemeHint hint) const } } -QPlatformTheme::Appearance QIOSTheme::appearance() const +Qt::ColorScheme QIOSTheme::colorScheme() const { - if (@available(ios 12, *)) { - if (UIWindow *window = qt_apple_sharedApplication().keyWindow) { - return window.rootViewController.traitCollection.userInterfaceStyle - == UIUserInterfaceStyleDark - ? QPlatformTheme::Appearance::Dark - : QPlatformTheme::Appearance::Light; + // Set the appearance based on the QUIWindow + // Fallback to the UIScreen if no window is created yet + UIUserInterfaceStyle appearance = UIScreen.mainScreen.traitCollection.userInterfaceStyle; + NSArray<UIWindow *> *windows = qt_apple_sharedApplication().windows; + for (UIWindow *window in windows) { + if ([window isKindOfClass:[QUIWindow class]]) { + appearance = static_cast<QUIWindow*>(window).traitCollection.userInterfaceStyle; + break; } } - return QPlatformTheme::Appearance::Unknown; + + return appearance == UIUserInterfaceStyleDark + ? Qt::ColorScheme::Dark + : Qt::ColorScheme::Light; } const QFont *QIOSTheme::font(Font type) const @@ -157,4 +172,9 @@ const QFont *QIOSTheme::font(Font type) const return coreTextFontDatabase->themeFont(type); } +QIconEngine *QIOSTheme::createIconEngine(const QString &iconName) const +{ + return new QAppleIconEngine(iconName); +} + QT_END_NAMESPACE |