Cocoa QPA: De-Carbonize system palettes
We use the NSColor system/developer palette instead of HITheme brushes. Change-Id: I11b34c7049ca98057eaeca5a0d0b8f64dbe3e5ab Reviewed-by: Tor Arne Vestbø <tor.arne.vestbo@qt.io> Reviewed-by: Jake Petroules <jake.petroules@qt.io>
This commit is contained in:
parent
7b6d200503
commit
4c45f64512
@ -1,6 +1,6 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2016 The Qt Company Ltd.
|
||||
** Copyright (C) 2017 The Qt Company Ltd.
|
||||
** Contact: https://www.qt.io/licensing/
|
||||
**
|
||||
** This file is part of the plugins of the Qt Toolkit.
|
||||
@ -45,49 +45,8 @@
|
||||
#include <QtGui/qfont.h>
|
||||
#include <QtGui/private/qcoregraphics_p.h>
|
||||
|
||||
#include <Carbon/Carbon.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
|
||||
QBrush qt_mac_brushForTheme(ThemeBrush brush)
|
||||
{
|
||||
QMacAutoReleasePool pool;
|
||||
|
||||
QCFType<CGColorRef> cgClr = 0;
|
||||
HIThemeBrushCreateCGColor(brush, &cgClr);
|
||||
return qt_mac_toQBrush(cgClr);
|
||||
}
|
||||
|
||||
QColor qt_mac_colorForThemeTextColor(ThemeTextColor themeColor)
|
||||
{
|
||||
// No GetThemeTextColor in 64-bit mode, use hardcoded values:
|
||||
switch (themeColor) {
|
||||
case kThemeTextColorAlertActive:
|
||||
case kThemeTextColorTabFrontActive:
|
||||
case kThemeTextColorBevelButtonActive:
|
||||
case kThemeTextColorListView:
|
||||
case kThemeTextColorPlacardActive:
|
||||
case kThemeTextColorPopupButtonActive:
|
||||
case kThemeTextColorPopupLabelActive:
|
||||
case kThemeTextColorPushButtonActive:
|
||||
return Qt::black;
|
||||
case kThemeTextColorAlertInactive:
|
||||
case kThemeTextColorDialogInactive:
|
||||
case kThemeTextColorPlacardInactive:
|
||||
case kThemeTextColorPopupButtonInactive:
|
||||
case kThemeTextColorPopupLabelInactive:
|
||||
case kThemeTextColorPushButtonInactive:
|
||||
case kThemeTextColorTabFrontInactive:
|
||||
case kThemeTextColorBevelButtonInactive:
|
||||
case kThemeTextColorMenuItemDisabled:
|
||||
return QColor(127, 127, 127, 255);
|
||||
case kThemeTextColorMenuItemSelected:
|
||||
return Qt::white;
|
||||
default:
|
||||
return QColor(0, 0, 0, 255); // ### TODO: Sample color like Qt 4.
|
||||
}
|
||||
}
|
||||
|
||||
QPalette * qt_mac_createSystemPalette()
|
||||
{
|
||||
QColor qc;
|
||||
@ -119,7 +78,7 @@ QPalette * qt_mac_createSystemPalette()
|
||||
|
||||
palette->setBrush(QPalette::Shadow, background.darker(170));
|
||||
|
||||
qc = qt_mac_colorForThemeTextColor(kThemeTextColorDialogActive);
|
||||
qc = qt_mac_toQColor([NSColor controlTextColor]);
|
||||
palette->setColor(QPalette::Active, QPalette::Text, qc);
|
||||
palette->setColor(QPalette::Active, QPalette::WindowText, qc);
|
||||
palette->setColor(QPalette::Active, QPalette::HighlightedText, qc);
|
||||
@ -127,7 +86,7 @@ QPalette * qt_mac_createSystemPalette()
|
||||
palette->setColor(QPalette::Inactive, QPalette::WindowText, qc);
|
||||
palette->setColor(QPalette::Inactive, QPalette::HighlightedText, qc);
|
||||
|
||||
qc = qt_mac_colorForThemeTextColor(kThemeTextColorDialogInactive);
|
||||
qc = qt_mac_toQColor([NSColor disabledControlTextColor]);
|
||||
palette->setColor(QPalette::Disabled, QPalette::Text, qc);
|
||||
palette->setColor(QPalette::Disabled, QPalette::WindowText, qc);
|
||||
palette->setColor(QPalette::Disabled, QPalette::HighlightedText, qc);
|
||||
@ -136,57 +95,63 @@ QPalette * qt_mac_createSystemPalette()
|
||||
}
|
||||
|
||||
struct QMacPaletteMap {
|
||||
inline QMacPaletteMap(QPlatformTheme::Palette p, ThemeBrush a, ThemeBrush i) :
|
||||
inline QMacPaletteMap(QPlatformTheme::Palette p, NSColor *a, NSColor *i) :
|
||||
paletteRole(p), active(a), inactive(i) { }
|
||||
|
||||
QPlatformTheme::Palette paletteRole;
|
||||
ThemeBrush active, inactive;
|
||||
NSColor *active, *inactive;
|
||||
};
|
||||
|
||||
#define MAC_PALETTE_ENTRY(pal, active, inactive) \
|
||||
QMacPaletteMap(pal, [NSColor active], [NSColor inactive])
|
||||
static QMacPaletteMap mac_widget_colors[] = {
|
||||
QMacPaletteMap(QPlatformTheme::ToolButtonPalette, kThemeTextColorBevelButtonActive, kThemeTextColorBevelButtonInactive),
|
||||
QMacPaletteMap(QPlatformTheme::ButtonPalette, kThemeTextColorPushButtonActive, kThemeTextColorPushButtonInactive),
|
||||
QMacPaletteMap(QPlatformTheme::HeaderPalette, kThemeTextColorPushButtonActive, kThemeTextColorPushButtonInactive),
|
||||
QMacPaletteMap(QPlatformTheme::ComboBoxPalette, kThemeTextColorPopupButtonActive, kThemeTextColorPopupButtonInactive),
|
||||
QMacPaletteMap(QPlatformTheme::ItemViewPalette, kThemeTextColorListView, kThemeTextColorDialogInactive),
|
||||
QMacPaletteMap(QPlatformTheme::MessageBoxLabelPalette, kThemeTextColorAlertActive, kThemeTextColorAlertInactive),
|
||||
QMacPaletteMap(QPlatformTheme::TabBarPalette, kThemeTextColorTabFrontActive, kThemeTextColorTabFrontInactive),
|
||||
QMacPaletteMap(QPlatformTheme::LabelPalette, kThemeTextColorPlacardActive, kThemeTextColorPlacardInactive),
|
||||
QMacPaletteMap(QPlatformTheme::GroupBoxPalette, kThemeTextColorPlacardActive, kThemeTextColorPlacardInactive),
|
||||
QMacPaletteMap(QPlatformTheme::MenuPalette, kThemeTextColorMenuItemActive, kThemeTextColorMenuItemDisabled),
|
||||
QMacPaletteMap(QPlatformTheme::MenuBarPalette, kThemeTextColorMenuItemActive, kThemeTextColorMenuItemDisabled),
|
||||
//### TODO: The zeros below gives white-on-black text.
|
||||
QMacPaletteMap(QPlatformTheme::TextEditPalette, 0, 0),
|
||||
QMacPaletteMap(QPlatformTheme::TextLineEditPalette, 0, 0),
|
||||
QMacPaletteMap(QPlatformTheme::NPalettes, 0, 0) };
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::ToolButtonPalette, controlTextColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::ButtonPalette, controlTextColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::HeaderPalette, headerTextColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::ComboBoxPalette, controlTextColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::ItemViewPalette, textColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::MessageBoxLabelPalette, textColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::TabBarPalette, headerTextColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::LabelPalette, textColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::GroupBoxPalette, textColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::MenuPalette, controlTextColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::MenuBarPalette, controlTextColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::TextEditPalette, textColor, disabledControlTextColor),
|
||||
MAC_PALETTE_ENTRY(QPlatformTheme::TextLineEditPalette, textColor, disabledControlTextColor)
|
||||
};
|
||||
#undef MAC_PALETTE_ENTRY
|
||||
|
||||
static const int mac_widget_colors_count = sizeof(mac_widget_colors) / sizeof(mac_widget_colors[0]);
|
||||
|
||||
QHash<QPlatformTheme::Palette, QPalette*> qt_mac_createRolePalettes()
|
||||
{
|
||||
QHash<QPlatformTheme::Palette, QPalette*> palettes;
|
||||
QColor qc;
|
||||
for (int i = 0; mac_widget_colors[i].paletteRole != QPlatformTheme::NPalettes; i++) {
|
||||
for (int i = 0; i < mac_widget_colors_count; i++) {
|
||||
QPalette &pal = *qt_mac_createSystemPalette();
|
||||
if (mac_widget_colors[i].active != 0) {
|
||||
qc = qt_mac_colorForThemeTextColor(mac_widget_colors[i].active);
|
||||
qc = qt_mac_toQColor(mac_widget_colors[i].active);
|
||||
pal.setColor(QPalette::Active, QPalette::Text, qc);
|
||||
pal.setColor(QPalette::Inactive, QPalette::Text, qc);
|
||||
pal.setColor(QPalette::Active, QPalette::WindowText, qc);
|
||||
pal.setColor(QPalette::Inactive, QPalette::WindowText, qc);
|
||||
pal.setColor(QPalette::Active, QPalette::HighlightedText, qc);
|
||||
pal.setColor(QPalette::Inactive, QPalette::HighlightedText, qc);
|
||||
qc = qt_mac_colorForThemeTextColor(mac_widget_colors[i].inactive);
|
||||
qc = qt_mac_toQColor(mac_widget_colors[i].inactive);
|
||||
pal.setColor(QPalette::Disabled, QPalette::Text, qc);
|
||||
pal.setColor(QPalette::Disabled, QPalette::WindowText, qc);
|
||||
pal.setColor(QPalette::Disabled, QPalette::HighlightedText, qc);
|
||||
}
|
||||
if (mac_widget_colors[i].paletteRole == QPlatformTheme::MenuPalette
|
||||
|| mac_widget_colors[i].paletteRole == QPlatformTheme::MenuBarPalette) {
|
||||
pal.setBrush(QPalette::Background, qt_mac_brushForTheme(kThemeBrushMenuBackground));
|
||||
qc = qt_mac_colorForThemeTextColor(kThemeTextColorMenuItemActive);
|
||||
pal.setBrush(QPalette::Background, qt_mac_toQColor([NSColor windowBackgroundColor]));
|
||||
pal.setBrush(QPalette::Highlight, qt_mac_toQColor([NSColor selectedMenuItemColor]));
|
||||
qc = qt_mac_toQColor([NSColor labelColor]);
|
||||
pal.setBrush(QPalette::ButtonText, qc);
|
||||
qc = qt_mac_colorForThemeTextColor(kThemeTextColorMenuItemSelected);
|
||||
pal.setBrush(QPalette::Text, qc);
|
||||
qc = qt_mac_toQColor([NSColor selectedMenuItemTextColor]);
|
||||
pal.setBrush(QPalette::HighlightedText, qc);
|
||||
qc = qt_mac_colorForThemeTextColor(kThemeTextColorMenuItemDisabled);
|
||||
qc = qt_mac_toQColor([NSColor disabledControlTextColor]);
|
||||
pal.setBrush(QPalette::Disabled, QPalette::Text, qc);
|
||||
} else if ((mac_widget_colors[i].paletteRole == QPlatformTheme::ButtonPalette)
|
||||
|| (mac_widget_colors[i].paletteRole == QPlatformTheme::HeaderPalette)) {
|
||||
|
Loading…
Reference in New Issue
Block a user