49 QBrush backgroundBrush = qt_mac_toQBrush([NSColor windowBackgroundColor]);
50 QColor background = backgroundBrush.color();
51 QColor light(background.lighter(110));
52 QColor dark(background.darker(160));
53 QColor mid(background.darker(140));
54 QPalette *palette =
new QPalette(Qt::black, background, light, dark, mid, Qt::black, Qt::white);
56 palette->setBrush(QPalette::Window, backgroundBrush);
58 palette->setBrush(QPalette::Disabled, QPalette::WindowText, dark);
59 palette->setBrush(QPalette::Disabled, QPalette::Text, dark);
60 palette->setBrush(QPalette::Disabled, QPalette::Base, backgroundBrush);
61 QBrush textBackgroundBrush = qt_mac_toQBrush([NSColor textBackgroundColor]);
62 palette->setBrush(QPalette::Active, QPalette::Base, textBackgroundBrush);
63 palette->setBrush(QPalette::Inactive, QPalette::Base, textBackgroundBrush);
64 palette->setColor(QPalette::Disabled, QPalette::Dark, QColor(191, 191, 191));
65 palette->setColor(QPalette::Active, QPalette::Dark, QColor(191, 191, 191));
66 palette->setColor(QPalette::Inactive, QPalette::Dark, QColor(191, 191, 191));
69 QBrush br = qt_mac_toQBrush([NSColor selectedControlColor]);
70 palette->setBrush(QPalette::Active, QPalette::Highlight, br);
71 const auto inactiveHighlight = qt_mac_toQBrush([NSColor unemphasizedSelectedContentBackgroundColor]);
72 palette->setBrush(QPalette::Inactive, QPalette::Highlight, inactiveHighlight);
73 palette->setBrush(QPalette::Disabled, QPalette::Highlight, inactiveHighlight);
75 palette->setBrush(QPalette::Shadow, qt_mac_toQColor([NSColor shadowColor]));
77 qc = qt_mac_toQColor([NSColor controlTextColor]);
78 palette->setColor(QPalette::Active, QPalette::Text, qc);
79 palette->setColor(QPalette::Active, QPalette::ButtonText, qc);
80 palette->setColor(QPalette::Active, QPalette::WindowText, qc);
81 palette->setColor(QPalette::Active, QPalette::HighlightedText, qc);
82 palette->setColor(QPalette::Inactive, QPalette::Text, qc);
83 palette->setColor(QPalette::Inactive, QPalette::WindowText, qc);
84 palette->setColor(QPalette::Inactive, QPalette::HighlightedText, qc);
86 qc = qt_mac_toQColor([NSColor disabledControlTextColor]);
87 palette->setColor(QPalette::Disabled, QPalette::Text, qc);
88 palette->setColor(QPalette::Disabled, QPalette::ButtonText, qc);
89 palette->setColor(QPalette::Disabled, QPalette::WindowText, qc);
90 palette->setColor(QPalette::Disabled, QPalette::HighlightedText, qc);
92 palette->setBrush(QPalette::ToolTipBase, qt_mac_toQBrush([NSColor controlColor]));
94 palette->setColor(QPalette::Normal, QPalette::Link, qt_mac_toQColor([NSColor linkColor]));
96 qc = qt_mac_toQColor([NSColor placeholderTextColor]);
97 palette->setColor(QPalette::Active, QPalette::PlaceholderText, qc);
98 palette->setColor(QPalette::Inactive, QPalette::PlaceholderText, qc);
99 palette->setColor(QPalette::Disabled, QPalette::PlaceholderText, qc);
101 qc = qt_mac_toQColor([NSColor controlAccentColor]);
102 palette->setColor(QPalette::Accent, qc);
119 MAC_PALETTE_ENTRY(QPlatformTheme::ToolButtonPalette, controlTextColor, disabledControlTextColor),
120 MAC_PALETTE_ENTRY(QPlatformTheme::ButtonPalette, controlTextColor, disabledControlTextColor),
121 MAC_PALETTE_ENTRY(QPlatformTheme::HeaderPalette, headerTextColor, disabledControlTextColor),
122 MAC_PALETTE_ENTRY(QPlatformTheme::ComboBoxPalette, controlTextColor, disabledControlTextColor),
123 MAC_PALETTE_ENTRY(QPlatformTheme::ItemViewPalette, textColor, disabledControlTextColor),
124 MAC_PALETTE_ENTRY(QPlatformTheme::MessageBoxLabelPalette, textColor, disabledControlTextColor),
125 MAC_PALETTE_ENTRY(QPlatformTheme::TabBarPalette, controlTextColor, disabledControlTextColor),
126 MAC_PALETTE_ENTRY(QPlatformTheme::LabelPalette, textColor, disabledControlTextColor),
127 MAC_PALETTE_ENTRY(QPlatformTheme::GroupBoxPalette, textColor, disabledControlTextColor),
128 MAC_PALETTE_ENTRY(QPlatformTheme::MenuPalette, controlTextColor, disabledControlTextColor),
129 MAC_PALETTE_ENTRY(QPlatformTheme::MenuBarPalette, controlTextColor, disabledControlTextColor),
130 MAC_PALETTE_ENTRY(QPlatformTheme::TextEditPalette, textColor, disabledControlTextColor),
131 MAC_PALETTE_ENTRY(QPlatformTheme::TextLineEditPalette, textColor, disabledControlTextColor)
137static QHash<QPlatformTheme::Palette, QPalette*> qt_mac_createRolePalettes()
139 QHash<QPlatformTheme::Palette, QPalette*> palettes;
141 for (
int i = 0; i < mac_widget_colors_count; i++) {
142 QPalette &pal = *qt_mac_createSystemPalette();
143 if (mac_widget_colors[i].active) {
144 qc = qt_mac_toQColor(mac_widget_colors[i].active);
145 pal.setColor(QPalette::Active, QPalette::Text, qc);
146 pal.setColor(QPalette::Inactive, QPalette::Text, qc);
147 pal.setColor(QPalette::Active, QPalette::WindowText, qc);
148 pal.setColor(QPalette::Inactive, QPalette::WindowText, qc);
149 pal.setColor(QPalette::Active, QPalette::HighlightedText, qc);
150 pal.setColor(QPalette::Inactive, QPalette::HighlightedText, qc);
151 pal.setColor(QPalette::Active, QPalette::ButtonText, qc);
152 pal.setColor(QPalette::Inactive, QPalette::ButtonText, qc);
153 qc = qt_mac_toQColor(mac_widget_colors[i].inactive);
154 pal.setColor(QPalette::Disabled, QPalette::Text, qc);
155 pal.setColor(QPalette::Disabled, QPalette::WindowText, qc);
156 pal.setColor(QPalette::Disabled, QPalette::HighlightedText, qc);
157 pal.setColor(QPalette::Disabled, QPalette::ButtonText, qc);
159 if (mac_widget_colors[i].paletteRole == QPlatformTheme::MenuPalette
160 || mac_widget_colors[i].paletteRole == QPlatformTheme::MenuBarPalette) {
162 auto selectedMenuItemColor = [[NSColor controlAccentColor] highlightWithLevel:0.3];
163 pal.setBrush(QPalette::Highlight, qt_mac_toQColor(selectedMenuItemColor));
164 qc = qt_mac_toQColor([NSColor labelColor]);
165 pal.setBrush(QPalette::ButtonText, qc);
166 pal.setBrush(QPalette::Text, qc);
167 qc = qt_mac_toQColor([NSColor selectedMenuItemTextColor]);
168 pal.setBrush(QPalette::HighlightedText, qc);
169 qc = qt_mac_toQColor([NSColor disabledControlTextColor]);
170 pal.setBrush(QPalette::Disabled, QPalette::Text, qc);
171 }
else if ((mac_widget_colors[i].paletteRole == QPlatformTheme::ButtonPalette)
172 || (mac_widget_colors[i].paletteRole == QPlatformTheme::HeaderPalette)
173 || (mac_widget_colors[i].paletteRole == QPlatformTheme::TabBarPalette)) {
174 pal.setColor(QPalette::Disabled, QPalette::ButtonText,
175 pal.color(QPalette::Disabled, QPalette::Text));
176 pal.setColor(QPalette::Inactive, QPalette::ButtonText,
177 pal.color(QPalette::Inactive, QPalette::Text));
178 pal.setColor(QPalette::Active, QPalette::ButtonText,
179 pal.color(QPalette::Active, QPalette::Text));
180 }
else if (mac_widget_colors[i].paletteRole == QPlatformTheme::ItemViewPalette) {
181 NSArray<NSColor *> *baseColors = nil;
182 NSColor *activeHighlightColor = nil;
183 baseColors = [NSColor alternatingContentBackgroundColors];
184 activeHighlightColor = [NSColor selectedContentBackgroundColor];
185 pal.setBrush(QPalette::Inactive, QPalette::HighlightedText,
186 qt_mac_toQBrush([NSColor unemphasizedSelectedTextColor]));
187 pal.setBrush(QPalette::Base, qt_mac_toQBrush(baseColors[0]));
188 pal.setBrush(QPalette::AlternateBase, qt_mac_toQBrush(baseColors[1]));
189 pal.setBrush(QPalette::Active, QPalette::Highlight,
190 qt_mac_toQBrush(activeHighlightColor));
191 pal.setBrush(QPalette::Active, QPalette::HighlightedText,
192 qt_mac_toQBrush([NSColor alternateSelectedControlTextColor]));
193 pal.setBrush(QPalette::Inactive, QPalette::Text,
194 pal.brush(QPalette::Active, QPalette::Text));
195 }
else if (mac_widget_colors[i].paletteRole == QPlatformTheme::TextEditPalette) {
196 pal.setBrush(QPalette::Active, QPalette::Base, qt_mac_toQColor([NSColor textBackgroundColor]));
197 pal.setBrush(QPalette::Inactive, QPalette::Text,
198 pal.brush(QPalette::Active, QPalette::Text));
199 pal.setBrush(QPalette::Inactive, QPalette::HighlightedText,
200 pal.brush(QPalette::Active, QPalette::Text));
201 }
else if (mac_widget_colors[i].paletteRole == QPlatformTheme::TextLineEditPalette
202 || mac_widget_colors[i].paletteRole == QPlatformTheme::ComboBoxPalette) {
203 pal.setBrush(QPalette::Active, QPalette::Base, qt_mac_toQColor([NSColor textBackgroundColor]));
204 pal.setBrush(QPalette::Disabled, QPalette::Base,
205 pal.brush(QPalette::Active, QPalette::Base));
206 }
else if (mac_widget_colors[i].paletteRole == QPlatformTheme::LabelPalette) {
207 qc = qt_mac_toQColor([NSColor labelColor]);
208 pal.setBrush(QPalette::Inactive, QPalette::ToolTipText, qc);
210 palettes.insert(mac_widget_colors[i].paletteRole, &pal);
345QPixmap QCocoaTheme::standardPixmap(StandardPixmap sp,
const QSizeF &size)
const
349 case MessageBoxQuestion:
350 iconType = kQuestionMarkIcon;
352 case MessageBoxInformation:
353 iconType = kAlertNoteIcon;
355 case MessageBoxWarning:
356 iconType = kAlertCautionIcon;
358 case MessageBoxCritical:
359 iconType = kAlertStopIcon;
362 auto desktop = QStandardPaths::writableLocation(QStandardPaths::DesktopLocation);
363 NSImage *icon = [NSWorkspace.sharedWorkspace iconForFile:desktop.toNSString()];
364 return qt_mac_toQPixmap(icon, size);
367 auto home = QStandardPaths::writableLocation(QStandardPaths::HomeLocation);
368 NSImage *icon = [NSWorkspace.sharedWorkspace iconForFile:home.toNSString()];
369 return qt_mac_toQPixmap(icon, size);
372 iconType = kTrashIcon;
375 iconType = kComputerIcon;
378 iconType = kGenericFloppyIcon;
381 iconType = kGenericHardDiskIcon;
385 iconType = kGenericCDROMIcon;
388 iconType = kGenericNetworkIcon;
391 case DirLinkOpenIcon:
395 NSImage *icon = [NSWorkspace.sharedWorkspace iconForContentType:UTTypeFolder];
396 return qt_mac_toQPixmap(icon, size);
400 iconType = kGenericDocumentIcon;
402 case ToolBarHorizontalExtensionButton:
403 return QIcon::fromTheme(
"chevron.forward.2").pixmap(size.toSize());
404 case ToolBarVerticalExtensionButton:
405 return QIcon::fromTheme(
"chevron.down.2").pixmap(size.toSize());
411 IconRef icon =
nullptr;
412 QT_IGNORE_DEPRECATIONS(GetIconRef(kOnSystemDisk, kSystemIconsCreator, iconType, &icon));
415 pixmap = qt_mac_convert_iconref(icon, size.width(), size.height());
416 QT_IGNORE_DEPRECATIONS(ReleaseIconRef(icon));
422 return QPlatformTheme::standardPixmap(sp, size);
435QVariant QCocoaTheme::themeHint(ThemeHint hint)
const
438 case QPlatformTheme::StyleNames:
439 return QStringList(QStringLiteral(
"macOS"));
440 case QPlatformTheme::DialogButtonBoxLayout:
441 return QVariant(QPlatformDialogHelper::MacLayout);
443 return QVariant(
int(MacKeyboardScheme));
444 case TabFocusBehavior:
445 return QVariant([[NSApplication sharedApplication] isFullKeyboardAccessEnabled] ?
446 int(Qt::TabFocusAllControls) :
int(Qt::TabFocusTextControls | Qt::TabFocusListControls));
447 case IconPixmapSizes:
448 return QVariant::fromValue(QAppleIconEngine::availableIconSizes());
449 case QPlatformTheme::PasswordMaskCharacter:
450 return QVariant(QChar(0x2022));
451 case QPlatformTheme::UiEffects:
452 return QVariant(
int(HoverEffect));
453 case QPlatformTheme::SpellCheckUnderlineStyle:
454 return QVariant(
int(QTextCharFormat::DotLine));
455 case QPlatformTheme::UseFullScreenForPopupMenu:
457 case QPlatformTheme::InteractiveResizeAcrossScreens:
458 return !NSScreen.screensHaveSeparateSpaces;
459 case QPlatformTheme::ShowDirectoriesFirst:
461 case QPlatformTheme::MouseDoubleClickInterval:
462 return NSEvent.doubleClickInterval * 1000;
463 case QPlatformTheme::KeyboardInputInterval:
464 return NSEvent.keyRepeatDelay * 1000;
465 case QPlatformTheme::KeyboardAutoRepeatRate:
466 return 1.0 / NSEvent.keyRepeatInterval;
467 case QPlatformTheme::ShowIconsInMenus:
468 return QOperatingSystemVersion::current() >= QOperatingSystemVersion::MacOSTahoe;
469 case QPlatformTheme::MenuSelectionWraps:
474 return QPlatformTheme::themeHint(hint);