50 QBrush backgroundBrush = qt_mac_toQBrush([NSColor windowBackgroundColor]);
51 QColor background = backgroundBrush.color();
52 QColor light(background.lighter(110));
53 QColor dark(background.darker(160));
54 QColor mid(background.darker(140));
55 QPalette *palette =
new QPalette(Qt::black, background, light, dark, mid, Qt::black, Qt::white);
57 palette->setBrush(QPalette::Window, backgroundBrush);
59 palette->setBrush(QPalette::Disabled, QPalette::WindowText, dark);
60 palette->setBrush(QPalette::Disabled, QPalette::Text, dark);
61 palette->setBrush(QPalette::Disabled, QPalette::Base, backgroundBrush);
62 QBrush textBackgroundBrush = qt_mac_toQBrush([NSColor textBackgroundColor]);
63 palette->setBrush(QPalette::Active, QPalette::Base, textBackgroundBrush);
64 palette->setBrush(QPalette::Inactive, QPalette::Base, textBackgroundBrush);
65 palette->setColor(QPalette::Disabled, QPalette::Dark, QColor(191, 191, 191));
66 palette->setColor(QPalette::Active, QPalette::Dark, QColor(191, 191, 191));
67 palette->setColor(QPalette::Inactive, QPalette::Dark, QColor(191, 191, 191));
70 QBrush br = qt_mac_toQBrush([NSColor selectedControlColor]);
71 palette->setBrush(QPalette::Active, QPalette::Highlight, br);
72 const auto inactiveHighlight = qt_mac_toQBrush([NSColor unemphasizedSelectedContentBackgroundColor]);
73 palette->setBrush(QPalette::Inactive, QPalette::Highlight, inactiveHighlight);
74 palette->setBrush(QPalette::Disabled, QPalette::Highlight, inactiveHighlight);
76 palette->setBrush(QPalette::Shadow, qt_mac_toQColor([NSColor shadowColor]));
78 qc = qt_mac_toQColor([NSColor controlTextColor]);
79 palette->setColor(QPalette::Active, QPalette::Text, qc);
80 palette->setColor(QPalette::Active, QPalette::ButtonText, qc);
81 palette->setColor(QPalette::Active, QPalette::WindowText, qc);
82 palette->setColor(QPalette::Active, QPalette::HighlightedText, qc);
83 palette->setColor(QPalette::Inactive, QPalette::Text, qc);
84 palette->setColor(QPalette::Inactive, QPalette::WindowText, qc);
85 palette->setColor(QPalette::Inactive, QPalette::HighlightedText, qc);
87 qc = qt_mac_toQColor([NSColor disabledControlTextColor]);
88 palette->setColor(QPalette::Disabled, QPalette::Text, qc);
89 palette->setColor(QPalette::Disabled, QPalette::ButtonText, qc);
90 palette->setColor(QPalette::Disabled, QPalette::WindowText, qc);
91 palette->setColor(QPalette::Disabled, QPalette::HighlightedText, qc);
93 palette->setBrush(QPalette::ToolTipBase, qt_mac_toQBrush([NSColor controlColor]));
95 palette->setColor(QPalette::Normal, QPalette::Link, qt_mac_toQColor([NSColor linkColor]));
97 qc = qt_mac_toQColor([NSColor placeholderTextColor]);
98 palette->setColor(QPalette::Active, QPalette::PlaceholderText, qc);
99 palette->setColor(QPalette::Inactive, QPalette::PlaceholderText, qc);
100 palette->setColor(QPalette::Disabled, QPalette::PlaceholderText, qc);
102 qc = qt_mac_toQColor([NSColor controlAccentColor]);
103 palette->setColor(QPalette::Accent, qc);
120 MAC_PALETTE_ENTRY(QPlatformTheme::ToolButtonPalette, controlTextColor, disabledControlTextColor),
121 MAC_PALETTE_ENTRY(QPlatformTheme::ButtonPalette, controlTextColor, disabledControlTextColor),
122 MAC_PALETTE_ENTRY(QPlatformTheme::HeaderPalette, headerTextColor, disabledControlTextColor),
123 MAC_PALETTE_ENTRY(QPlatformTheme::ComboBoxPalette, controlTextColor, disabledControlTextColor),
124 MAC_PALETTE_ENTRY(QPlatformTheme::ItemViewPalette, textColor, disabledControlTextColor),
125 MAC_PALETTE_ENTRY(QPlatformTheme::MessageBoxLabelPalette, textColor, disabledControlTextColor),
126 MAC_PALETTE_ENTRY(QPlatformTheme::TabBarPalette, controlTextColor, disabledControlTextColor),
127 MAC_PALETTE_ENTRY(QPlatformTheme::LabelPalette, textColor, disabledControlTextColor),
128 MAC_PALETTE_ENTRY(QPlatformTheme::GroupBoxPalette, textColor, disabledControlTextColor),
129 MAC_PALETTE_ENTRY(QPlatformTheme::MenuPalette, controlTextColor, disabledControlTextColor),
130 MAC_PALETTE_ENTRY(QPlatformTheme::MenuBarPalette, controlTextColor, disabledControlTextColor),
131 MAC_PALETTE_ENTRY(QPlatformTheme::TextEditPalette, textColor, disabledControlTextColor),
132 MAC_PALETTE_ENTRY(QPlatformTheme::TextLineEditPalette, textColor, disabledControlTextColor)
138static QHash<QPlatformTheme::Palette, QPalette*> qt_mac_createRolePalettes()
140 QHash<QPlatformTheme::Palette, QPalette*> palettes;
142 for (
int i = 0; i < mac_widget_colors_count; i++) {
143 QPalette &pal = *qt_mac_createSystemPalette();
144 if (mac_widget_colors[i].active) {
145 qc = qt_mac_toQColor(mac_widget_colors[i].active);
146 pal.setColor(QPalette::Active, QPalette::Text, qc);
147 pal.setColor(QPalette::Inactive, QPalette::Text, qc);
148 pal.setColor(QPalette::Active, QPalette::WindowText, qc);
149 pal.setColor(QPalette::Inactive, QPalette::WindowText, qc);
150 pal.setColor(QPalette::Active, QPalette::HighlightedText, qc);
151 pal.setColor(QPalette::Inactive, QPalette::HighlightedText, qc);
152 pal.setColor(QPalette::Active, QPalette::ButtonText, qc);
153 pal.setColor(QPalette::Inactive, QPalette::ButtonText, qc);
154 qc = qt_mac_toQColor(mac_widget_colors[i].inactive);
155 pal.setColor(QPalette::Disabled, QPalette::Text, qc);
156 pal.setColor(QPalette::Disabled, QPalette::WindowText, qc);
157 pal.setColor(QPalette::Disabled, QPalette::HighlightedText, qc);
158 pal.setColor(QPalette::Disabled, QPalette::ButtonText, qc);
160 if (mac_widget_colors[i].paletteRole == QPlatformTheme::MenuPalette
161 || mac_widget_colors[i].paletteRole == QPlatformTheme::MenuBarPalette) {
163 auto selectedMenuItemColor = [[NSColor controlAccentColor] highlightWithLevel:0.3];
164 pal.setBrush(QPalette::Highlight, qt_mac_toQColor(selectedMenuItemColor));
165 qc = qt_mac_toQColor([NSColor labelColor]);
166 pal.setBrush(QPalette::ButtonText, qc);
167 pal.setBrush(QPalette::Text, qc);
168 qc = qt_mac_toQColor([NSColor selectedMenuItemTextColor]);
169 pal.setBrush(QPalette::HighlightedText, qc);
170 qc = qt_mac_toQColor([NSColor disabledControlTextColor]);
171 pal.setBrush(QPalette::Disabled, QPalette::Text, qc);
172 }
else if ((mac_widget_colors[i].paletteRole == QPlatformTheme::ButtonPalette)
173 || (mac_widget_colors[i].paletteRole == QPlatformTheme::HeaderPalette)
174 || (mac_widget_colors[i].paletteRole == QPlatformTheme::TabBarPalette)) {
175 pal.setColor(QPalette::Disabled, QPalette::ButtonText,
176 pal.color(QPalette::Disabled, QPalette::Text));
177 pal.setColor(QPalette::Inactive, QPalette::ButtonText,
178 pal.color(QPalette::Inactive, QPalette::Text));
179 pal.setColor(QPalette::Active, QPalette::ButtonText,
180 pal.color(QPalette::Active, QPalette::Text));
181 }
else if (mac_widget_colors[i].paletteRole == QPlatformTheme::ItemViewPalette) {
182 NSArray<NSColor *> *baseColors = nil;
183 NSColor *activeHighlightColor = nil;
184 baseColors = [NSColor alternatingContentBackgroundColors];
185 activeHighlightColor = [NSColor selectedContentBackgroundColor];
186 pal.setBrush(QPalette::Inactive, QPalette::HighlightedText,
187 qt_mac_toQBrush([NSColor unemphasizedSelectedTextColor]));
188 pal.setBrush(QPalette::Base, qt_mac_toQBrush(baseColors[0]));
189 pal.setBrush(QPalette::AlternateBase, qt_mac_toQBrush(baseColors[1]));
190 pal.setBrush(QPalette::Active, QPalette::Highlight,
191 qt_mac_toQBrush(activeHighlightColor));
192 pal.setBrush(QPalette::Active, QPalette::HighlightedText,
193 qt_mac_toQBrush([NSColor alternateSelectedControlTextColor]));
194 pal.setBrush(QPalette::Inactive, QPalette::Text,
195 pal.brush(QPalette::Active, QPalette::Text));
196 }
else if (mac_widget_colors[i].paletteRole == QPlatformTheme::TextEditPalette) {
197 pal.setBrush(QPalette::Active, QPalette::Base, qt_mac_toQColor([NSColor textBackgroundColor]));
198 pal.setBrush(QPalette::Inactive, QPalette::Text,
199 pal.brush(QPalette::Active, QPalette::Text));
200 pal.setBrush(QPalette::Inactive, QPalette::HighlightedText,
201 pal.brush(QPalette::Active, QPalette::Text));
202 }
else if (mac_widget_colors[i].paletteRole == QPlatformTheme::TextLineEditPalette
203 || mac_widget_colors[i].paletteRole == QPlatformTheme::ComboBoxPalette) {
204 pal.setBrush(QPalette::Active, QPalette::Base, qt_mac_toQColor([NSColor textBackgroundColor]));
205 pal.setBrush(QPalette::Disabled, QPalette::Base,
206 pal.brush(QPalette::Active, QPalette::Base));
207 }
else if (mac_widget_colors[i].paletteRole == QPlatformTheme::LabelPalette) {
208 qc = qt_mac_toQColor([NSColor labelColor]);
209 pal.setBrush(QPalette::Inactive, QPalette::ToolTipText, qc);
211 palettes.insert(mac_widget_colors[i].paletteRole, &pal);
350QPixmap QCocoaTheme::standardPixmap(StandardPixmap sp,
const QSizeF &size)
const
354 case MessageBoxQuestion:
355 iconType = kQuestionMarkIcon;
357 case MessageBoxInformation:
358 iconType = kAlertNoteIcon;
360 case MessageBoxWarning:
361 iconType = kAlertCautionIcon;
363 case MessageBoxCritical:
364 iconType = kAlertStopIcon;
367 auto desktop = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
368 NSImage *icon = [NSWorkspace.sharedWorkspace iconForFile:desktop.toNSString()];
369 return qt_mac_toQPixmap(icon, size);
372 auto home = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
373 NSImage *icon = [NSWorkspace.sharedWorkspace iconForFile:home.toNSString()];
374 return qt_mac_toQPixmap(icon, size);
377 iconType = kTrashIcon;
380 iconType = kComputerIcon;
383 iconType = kGenericFloppyIcon;
386 iconType = kGenericHardDiskIcon;
390 iconType = kGenericCDROMIcon;
393 iconType = kGenericNetworkIcon;
396 case DirLinkOpenIcon:
400 NSImage *icon = [NSWorkspace.sharedWorkspace iconForContentType:UTTypeFolder];
401 return qt_mac_toQPixmap(icon, size);
405 iconType = kGenericDocumentIcon;
412 IconRef icon =
nullptr;
413 QT_IGNORE_DEPRECATIONS(GetIconRef(kOnSystemDisk, kSystemIconsCreator, iconType, &icon));
416 pixmap = qt_mac_convert_iconref(icon, size.width(), size.height());
417 QT_IGNORE_DEPRECATIONS(ReleaseIconRef(icon));
423 return QPlatformTheme::standardPixmap(sp, size);
437QVariant QCocoaTheme::themeHint(ThemeHint hint)
const
440 case QPlatformTheme::StyleNames:
441 return QStringList(QStringLiteral(
"macOS"));
442 case QPlatformTheme::DialogButtonBoxLayout:
443 return QVariant(QPlatformDialogHelper::MacLayout);
445 return QVariant(
int(MacKeyboardScheme));
446 case TabFocusBehavior:
447 return QVariant([[NSApplication sharedApplication] isFullKeyboardAccessEnabled] ?
448 int(Qt::TabFocusAllControls) :
int(Qt::TabFocusTextControls | Qt::TabFocusListControls));
449 case IconPixmapSizes:
450 return QVariant::fromValue(QAppleIconEngine::availableIconSizes());
451 case QPlatformTheme::PasswordMaskCharacter:
452 return QVariant(QChar(0x2022));
453 case QPlatformTheme::UiEffects:
454 return QVariant(
int(HoverEffect));
455 case QPlatformTheme::SpellCheckUnderlineStyle:
456 return QVariant(
int(QTextCharFormat::DotLine));
457 case QPlatformTheme::UseFullScreenForPopupMenu:
459 case QPlatformTheme::InteractiveResizeAcrossScreens:
460 return !NSScreen.screensHaveSeparateSpaces;
461 case QPlatformTheme::ShowDirectoriesFirst:
463 case QPlatformTheme::MouseDoubleClickInterval:
464 return NSEvent.doubleClickInterval * 1000;
465 case QPlatformTheme::KeyboardInputInterval:
466 return NSEvent.keyRepeatDelay * 1000;
467 case QPlatformTheme::KeyboardAutoRepeatRate:
468 return 1.0 / NSEvent.keyRepeatInterval;
469 case QPlatformTheme::ShowIconsInMenus:
470 return QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSTahoe;
471 case QPlatformTheme::MenuSelectionWraps:
473 case QPlatformTheme::MnemonicsEnabled:
475 case QPlatformTheme::UnderlineShortcut:
480 return QPlatformTheme::themeHint(hint);