summaryrefslogtreecommitdiff
path: root/chromium/ui/native_theme
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@qt.io>2017-01-04 14:17:57 +0100
committerAllan Sandfeld Jensen <allan.jensen@qt.io>2017-01-05 10:05:06 +0000
commit39d357e3248f80abea0159765ff39554affb40db (patch)
treeaba0e6bfb76de0244bba0f5fdbd64b830dd6e621 /chromium/ui/native_theme
parent87778abf5a1f89266f37d1321b92a21851d8244d (diff)
downloadqtwebengine-chromium-39d357e3248f80abea0159765ff39554affb40db.tar.gz
BASELINE: Update Chromium to 55.0.2883.105
And updates ninja to 1.7.2 Change-Id: I20d43c737f82764d857ada9a55586901b18b9243 Reviewed-by: Michael BrĂ¼ning <michael.bruning@qt.io>
Diffstat (limited to 'chromium/ui/native_theme')
-rw-r--r--chromium/ui/native_theme/BUILD.gn40
-rw-r--r--chromium/ui/native_theme/common_theme.cc283
-rw-r--r--chromium/ui/native_theme/native_theme.gyp71
-rw-r--r--chromium/ui/native_theme/native_theme.h15
-rw-r--r--chromium/ui/native_theme/native_theme_aura.cc2
-rw-r--r--chromium/ui/native_theme/native_theme_aurawin.cc83
-rw-r--r--chromium/ui/native_theme/native_theme_aurawin.h37
-rw-r--r--chromium/ui/native_theme/native_theme_dark_aura.cc44
-rw-r--r--chromium/ui/native_theme/native_theme_mac.h5
-rw-r--r--chromium/ui/native_theme/native_theme_mac.mm100
-rw-r--r--chromium/ui/native_theme/native_theme_mac_unittest.cc14
-rw-r--r--chromium/ui/native_theme/native_theme_win.cc163
-rw-r--r--chromium/ui/native_theme/native_theme_win.h6
13 files changed, 344 insertions, 519 deletions
diff --git a/chromium/ui/native_theme/BUILD.gn b/chromium/ui/native_theme/BUILD.gn
index d5020fb6cfa..a64cb968c02 100644
--- a/chromium/ui/native_theme/BUILD.gn
+++ b/chromium/ui/native_theme/BUILD.gn
@@ -15,16 +15,12 @@ component("native_theme") {
"native_theme_android.h",
"native_theme_base.cc",
"native_theme_base.h",
- "native_theme_dark_win.cc",
- "native_theme_dark_win.h",
"native_theme_mac.h",
"native_theme_mac.mm",
"native_theme_observer.cc",
"native_theme_observer.h",
"native_theme_switches.cc",
"native_theme_switches.h",
- "native_theme_win.cc",
- "native_theme_win.h",
]
if (use_aura) {
@@ -34,13 +30,6 @@ component("native_theme") {
"native_theme_dark_aura.cc",
"native_theme_dark_aura.h",
]
-
- if (is_win) {
- sources += [
- "native_theme_aurawin.cc",
- "native_theme_aurawin.h",
- ]
- }
}
defines = [ "NATIVE_THEME_IMPLEMENTATION" ]
@@ -58,11 +47,35 @@ component("native_theme") {
if (is_mac) {
libs = [
- "AppKit.framework",
- "ApplicationServices.framework", # Temporary hack around https://crbug.com/620127. Remove after https://crbug.com/622481 is fixed.
"CoreGraphics.framework",
+ "AppKit.framework",
+ ]
+ }
+}
+
+if (is_win) {
+ component("native_theme_browser") {
+ defines = [ "NATIVE_THEME_IMPLEMENTATION" ]
+
+ # These files cannot work in the renderer on Windows.
+ sources = [
+ "native_theme_dark_win.cc",
+ "native_theme_dark_win.h",
+ "native_theme_win.cc",
+ "native_theme_win.h",
+ ]
+
+ deps = [
+ ":native_theme",
+ "//base",
+ "//ui/base",
+ "//ui/display",
+ "//ui/gfx",
]
}
+} else {
+ source_set("native_theme_browser") {
+ }
}
test("native_theme_unittests") {
@@ -82,6 +95,7 @@ test("native_theme_unittests") {
"//base/test:test_support",
"//skia:skia",
"//testing/gtest",
+ "//ui/base",
"//ui/gfx/geometry:geometry",
]
}
diff --git a/chromium/ui/native_theme/common_theme.cc b/chromium/ui/native_theme/common_theme.cc
index f2a21c59d04..69c0602befe 100644
--- a/chromium/ui/native_theme/common_theme.cc
+++ b/chromium/ui/native_theme/common_theme.cc
@@ -21,124 +21,63 @@ namespace ui {
SkColor GetAuraColor(NativeTheme::ColorId color_id,
const NativeTheme* base_theme) {
- // MD colors.
- if (ui::MaterialDesignController::IsModeMaterial()) {
- // Dialogs:
- static const SkColor kDialogBackgroundColorMd = SK_ColorWHITE;
- // Buttons:
- static const SkColor kButtonEnabledColorMd = gfx::kChromeIconGrey;
- // MenuItem:
- static const SkColor kMenuHighlightBackgroundColorMd =
- SkColorSetARGB(0x14, 0x00, 0x00, 0x00);
- static const SkColor kSelectedMenuItemForegroundColorMd = SK_ColorBLACK;
- // Link:
- static const SkColor kLinkEnabledColorMd = gfx::kGoogleBlue700;
- // Results tables:
- static const SkColor kResultsTableTextMd = SK_ColorBLACK;
- static const SkColor kResultsTableDimmedTextMd =
- SkColorSetRGB(0x64, 0x64, 0x64);
+ // Second wave of MD colors (colors that only appear in secondary UI).
+ if (ui::MaterialDesignController::IsSecondaryUiMaterial()) {
+ static const SkColor kPrimaryTextColor = SK_ColorBLACK;
switch (color_id) {
- // Dialogs
- case NativeTheme::kColorId_DialogBackground:
- case NativeTheme::kColorId_BubbleBackground:
- return kDialogBackgroundColorMd;
-
- // Buttons
- case NativeTheme::kColorId_ButtonEnabledColor:
- case NativeTheme::kColorId_ButtonHoverColor:
- return kButtonEnabledColorMd;
-
- // MenuItem
- case NativeTheme::kColorId_FocusedMenuItemBackgroundColor:
- return kMenuHighlightBackgroundColorMd;
- case NativeTheme::kColorId_SelectedMenuItemForegroundColor:
- return kSelectedMenuItemForegroundColorMd;
- // Link
- case NativeTheme::kColorId_LinkEnabled:
- case NativeTheme::kColorId_LinkPressed:
- // Normal and pressed share a color.
- return kLinkEnabledColorMd;
+ // Labels
+ case NativeTheme::kColorId_LabelEnabledColor:
+ return kPrimaryTextColor;
+ case NativeTheme::kColorId_LabelDisabledColor:
+ return SkColorSetA(
+ base_theme->GetSystemColor(NativeTheme::kColorId_LabelEnabledColor),
+ gfx::kDisabledControlAlpha);
// FocusableBorder
- case NativeTheme::kColorId_FocusedBorderColor:
- return gfx::kGoogleBlue500;
case NativeTheme::kColorId_UnfocusedBorderColor:
- return SkColorSetA(SK_ColorBLACK, 0x66);
+ return SkColorSetA(SK_ColorBLACK, 0x24);
- // Results Tables
- case NativeTheme::kColorId_ResultsTableHoveredBackground:
+ // Textfields
+ case NativeTheme::kColorId_TextfieldDefaultColor:
+ return kPrimaryTextColor;
+ case NativeTheme::kColorId_TextfieldDefaultBackground:
+ return base_theme->GetSystemColor(
+ NativeTheme::kColorId_DialogBackground);
+ case NativeTheme::kColorId_TextfieldReadOnlyColor:
return SkColorSetA(base_theme->GetSystemColor(
- NativeTheme::kColorId_ResultsTableNormalText),
- 0x0D);
- case NativeTheme::kColorId_ResultsTableSelectedBackground:
- return SkColorSetA(base_theme->GetSystemColor(
- NativeTheme::kColorId_ResultsTableNormalText),
- 0x14);
- case NativeTheme::kColorId_ResultsTableNormalText:
- case NativeTheme::kColorId_ResultsTableHoveredText:
- case NativeTheme::kColorId_ResultsTableSelectedText:
- return kResultsTableTextMd;
- case NativeTheme::kColorId_ResultsTableNormalDimmedText:
- case NativeTheme::kColorId_ResultsTableHoveredDimmedText:
- case NativeTheme::kColorId_ResultsTableSelectedDimmedText:
- return kResultsTableDimmedTextMd;
- case NativeTheme::kColorId_ResultsTableNormalUrl:
- case NativeTheme::kColorId_ResultsTableHoveredUrl:
- case NativeTheme::kColorId_ResultsTableSelectedUrl:
- return base_theme->GetSystemColor(NativeTheme::kColorId_LinkEnabled);
+ NativeTheme::kColorId_TextfieldDefaultColor),
+ gfx::kDisabledControlAlpha);
default:
break;
}
}
- // Pre-MD colors.
- // Windows:
- static const SkColor kWindowBackgroundColor = SK_ColorWHITE;
// Dialogs:
- static const SkColor kDialogBackgroundColor = SkColorSetRGB(251, 251, 251);
- // FocusableBorder:
- static const SkColor kFocusedBorderColor = SkColorSetRGB(0x4D, 0x90, 0xFE);
- static const SkColor kUnfocusedBorderColor = SkColorSetRGB(0xD9, 0xD9, 0xD9);
- // Button:
- static const SkColor kButtonBackgroundColor = SkColorSetRGB(0xDE, 0xDE, 0xDE);
- static const SkColor kButtonEnabledColor = SkColorSetRGB(0x22, 0x22, 0x22);
- static const SkColor kButtonHighlightColor = SkColorSetRGB(0, 0, 0);
- static const SkColor kButtonHoverColor = kButtonEnabledColor;
- static const SkColor kButtonHoverBackgroundColor =
- SkColorSetRGB(0xEA, 0xEA, 0xEA);
- static const SkColor kBlueButtonEnabledColor = SK_ColorWHITE;
- static const SkColor kBlueButtonDisabledColor = SK_ColorWHITE;
- static const SkColor kBlueButtonPressedColor = SK_ColorWHITE;
- static const SkColor kBlueButtonHoverColor = SK_ColorWHITE;
+ static const SkColor kDialogBackgroundColor = SK_ColorWHITE;
+ // Buttons:
+ static const SkColor kButtonEnabledColor = gfx::kChromeIconGrey;
+ static const SkColor kProminentButtonColor = gfx::kGoogleBlue500;
+ static const SkColor kProminentButtonTextColor = SK_ColorWHITE;
+ static const SkColor kBlueButtonTextColor = SK_ColorWHITE;
static const SkColor kBlueButtonShadowColor = SkColorSetRGB(0x53, 0x8C, 0xEA);
- static const SkColor kCallToActionColor = gfx::kGoogleBlue500;
- static const SkColor kTextOnCallToActionColor = SK_ColorWHITE;
// MenuItem:
static const SkColor kMenuBackgroundColor = SK_ColorWHITE;
static const SkColor kMenuHighlightBackgroundColor =
- SkColorSetRGB(0x42, 0x81, 0xF4);
+ SkColorSetA(SK_ColorBLACK, 0x14);
+ static const SkColor kSelectedMenuItemForegroundColor = SK_ColorBLACK;
+ static const SkColor kDisabledMenuItemForegroundColor =
+ SkColorSetRGB(0xA1, 0xA1, 0x92);
static const SkColor kMenuBorderColor = SkColorSetRGB(0xBA, 0xBA, 0xBA);
static const SkColor kEnabledMenuButtonBorderColor =
- SkColorSetARGB(0x24, 0x00, 0x00, 0x00);
+ SkColorSetA(SK_ColorBLACK, 0x24);
static const SkColor kFocusedMenuButtonBorderColor =
- SkColorSetARGB(0x48, 0x00, 0x00, 0x00);
- static const SkColor kHoverMenuButtonBorderColor =
- SkColorSetARGB(0x48, 0x00, 0x00, 0x00);
+ SkColorSetA(SK_ColorBLACK, 0x48);
static const SkColor kMenuSeparatorColor = SkColorSetRGB(0xE9, 0xE9, 0xE9);
static const SkColor kEnabledMenuItemForegroundColor = SK_ColorBLACK;
- static const SkColor kDisabledMenuItemForegroundColor =
- SkColorSetRGB(0xA1, 0xA1, 0x92);
- static const SkColor kHoverMenuItemBackgroundColor =
- SkColorSetARGB(0xCC, 0xFF, 0xFF, 0xFF);
- // Label:
- static const SkColor kLabelEnabledColor = kButtonEnabledColor;
- static const SkColor kLabelBackgroundColor = SK_ColorWHITE;
// Link:
- static const SkColor kLinkDisabledColor = SK_ColorBLACK;
- static const SkColor kLinkEnabledColor = SkColorSetRGB(0, 51, 153);
- static const SkColor kLinkPressedColor = SK_ColorRED;
+ static const SkColor kLinkEnabledColor = gfx::kGoogleBlue700;
// Textfield:
static const SkColor kTextfieldDefaultColor = SK_ColorBLACK;
static const SkColor kTextfieldDefaultBackground = SK_ColorWHITE;
@@ -148,45 +87,12 @@ SkColor GetAuraColor(NativeTheme::ColorId color_id,
SkColorSetARGB(0x54, 0x60, 0xA8, 0xEB);
static const SkColor kTextfieldSelectionColor = color_utils::AlphaBlend(
SK_ColorBLACK, kTextfieldSelectionBackgroundFocused, 0xdd);
- // Tooltip
- static const SkColor kTooltipBackground = 0xFFFFFFCC;
- static const SkColor kTooltipTextColor = kLabelEnabledColor;
- // Tree
- static const SkColor kTreeBackground = SK_ColorWHITE;
- static const SkColor kTreeTextColor = SK_ColorBLACK;
- static const SkColor kTreeSelectedTextColor = SK_ColorBLACK;
- static const SkColor kTreeSelectionBackgroundColor =
- SkColorSetRGB(0xEE, 0xEE, 0xEE);
- static const SkColor kTreeArrowColor = SkColorSetRGB(0x7A, 0x7A, 0x7A);
- // Table
- static const SkColor kTableBackground = SK_ColorWHITE;
- static const SkColor kTableTextColor = SK_ColorBLACK;
- static const SkColor kTableSelectedTextColor = SK_ColorBLACK;
- static const SkColor kTableSelectionBackgroundColor =
- SkColorSetRGB(0xEE, 0xEE, 0xEE);
- static const SkColor kTableGroupingIndicatorColor =
- SkColorSetRGB(0xCC, 0xCC, 0xCC);
- // Results Tables
- static const SkColor kResultsTableSelectedBackground =
- kTextfieldSelectionBackgroundFocused;
- static const SkColor kResultsTableNormalText =
- color_utils::AlphaBlend(SK_ColorBLACK, kTextfieldDefaultBackground, 0xDD);
+ // Results tables:
+ static const SkColor kResultsTableText = SK_ColorBLACK;
+ static const SkColor kResultsTableDimmedText =
+ SkColorSetRGB(0x64, 0x64, 0x64);
static const SkColor kResultsTableHoveredBackground = color_utils::AlphaBlend(
kTextfieldSelectionBackgroundFocused, kTextfieldDefaultBackground, 0x40);
- static const SkColor kResultsTableHoveredText = color_utils::AlphaBlend(
- SK_ColorBLACK, kResultsTableHoveredBackground, 0xDD);
- static const SkColor kResultsTableSelectedText = color_utils::AlphaBlend(
- SK_ColorBLACK, kTextfieldSelectionBackgroundFocused, 0xDD);
- static const SkColor kResultsTableNormalDimmedText =
- color_utils::AlphaBlend(SK_ColorBLACK, kTextfieldDefaultBackground, 0xBB);
- static const SkColor kResultsTableHoveredDimmedText = color_utils::AlphaBlend(
- SK_ColorBLACK, kResultsTableHoveredBackground, 0xBB);
- static const SkColor kResultsTableSelectedDimmedText =
- color_utils::AlphaBlend(SK_ColorBLACK,
- kTextfieldSelectionBackgroundFocused, 0xBB);
- static const SkColor kResultsTableNormalUrl = kTextfieldSelectionColor;
- static const SkColor kResultsTableSelectedOrHoveredUrl =
- SkColorSetARGB(0xff, 0x0b, 0x80, 0x43);
const SkColor kPositiveTextColor = SkColorSetRGB(0x0b, 0x80, 0x43);
const SkColor kNegativeTextColor = SkColorSetRGB(0xc5, 0x39, 0x29);
static const SkColor kResultsTablePositiveText = color_utils::AlphaBlend(
@@ -205,97 +111,93 @@ SkColor GetAuraColor(NativeTheme::ColorId color_id,
static const SkColor kResultsTableNegativeSelectedText =
color_utils::AlphaBlend(kNegativeTextColor,
kTextfieldSelectionBackgroundFocused, 0xDD);
+ // Tooltip:
+ static const SkColor kTooltipBackground = SkColorSetA(SK_ColorBLACK, 0xCC);
+ static const SkColor kTooltipTextColor = SkColorSetA(SK_ColorWHITE, 0xDE);
+ // Tree:
+ static const SkColor kTreeBackground = SK_ColorWHITE;
+ static const SkColor kTreeTextColor = SK_ColorBLACK;
+ static const SkColor kTreeSelectedTextColor = SK_ColorBLACK;
+ static const SkColor kTreeSelectionBackgroundColor =
+ SkColorSetRGB(0xEE, 0xEE, 0xEE);
+ static const SkColor kTreeArrowColor = SkColorSetRGB(0x7A, 0x7A, 0x7A);
+ // Table:
+ static const SkColor kTableBackground = SK_ColorWHITE;
+ static const SkColor kTableTextColor = SK_ColorBLACK;
+ static const SkColor kTableSelectedTextColor = SK_ColorBLACK;
+ static const SkColor kTableSelectionBackgroundColor =
+ SkColorSetRGB(0xEE, 0xEE, 0xEE);
+ static const SkColor kTableGroupingIndicatorColor =
+ SkColorSetRGB(0xCC, 0xCC, 0xCC);
// Material spinner/throbber:
static const SkColor kThrobberSpinningColor = gfx::kGoogleBlue500;
static const SkColor kThrobberWaitingColor = SkColorSetRGB(0xA6, 0xA6, 0xA6);
static const SkColor kThrobberLightColor = SkColorSetRGB(0xF4, 0xF8, 0xFD);
switch (color_id) {
- // Windows
- case NativeTheme::kColorId_WindowBackground:
- return kWindowBackgroundColor;
-
// Dialogs
+ case NativeTheme::kColorId_WindowBackground:
case NativeTheme::kColorId_DialogBackground:
case NativeTheme::kColorId_BubbleBackground:
return kDialogBackgroundColor;
- // FocusableBorder
- case NativeTheme::kColorId_FocusedBorderColor:
- return kFocusedBorderColor;
- case NativeTheme::kColorId_UnfocusedBorderColor:
- return kUnfocusedBorderColor;
-
- // Button
- case NativeTheme::kColorId_ButtonBackgroundColor:
- return kButtonBackgroundColor;
+ // Buttons
case NativeTheme::kColorId_ButtonEnabledColor:
- return kButtonEnabledColor;
- case NativeTheme::kColorId_ButtonHighlightColor:
- return kButtonHighlightColor;
case NativeTheme::kColorId_ButtonHoverColor:
- return kButtonHoverColor;
- case NativeTheme::kColorId_ButtonHoverBackgroundColor:
- return kButtonHoverBackgroundColor;
+ return kButtonEnabledColor;
+ // TODO(estade): remove the BlueButton colors.
case NativeTheme::kColorId_BlueButtonEnabledColor:
- return kBlueButtonEnabledColor;
case NativeTheme::kColorId_BlueButtonDisabledColor:
- return kBlueButtonDisabledColor;
case NativeTheme::kColorId_BlueButtonPressedColor:
- return kBlueButtonPressedColor;
case NativeTheme::kColorId_BlueButtonHoverColor:
- return kBlueButtonHoverColor;
+ return kBlueButtonTextColor;
case NativeTheme::kColorId_BlueButtonShadowColor:
return kBlueButtonShadowColor;
- case NativeTheme::kColorId_CallToActionColor:
- return kCallToActionColor;
- case NativeTheme::kColorId_TextOnCallToActionColor:
- return kTextOnCallToActionColor;
+ case NativeTheme::kColorId_ProminentButtonColor:
+ return kProminentButtonColor;
+ case NativeTheme::kColorId_TextOnProminentButtonColor:
+ return kProminentButtonTextColor;
+ case NativeTheme::kColorId_ButtonPressedShade:
+ return SK_ColorTRANSPARENT;
+ case NativeTheme::kColorId_ButtonDisabledColor:
+ return kDisabledMenuItemForegroundColor;
// MenuItem
+ case NativeTheme::kColorId_SelectedMenuItemForegroundColor:
+ return kSelectedMenuItemForegroundColor;
case NativeTheme::kColorId_MenuBorderColor:
return kMenuBorderColor;
case NativeTheme::kColorId_EnabledMenuButtonBorderColor:
return kEnabledMenuButtonBorderColor;
case NativeTheme::kColorId_FocusedMenuButtonBorderColor:
- return kFocusedMenuButtonBorderColor;
case NativeTheme::kColorId_HoverMenuButtonBorderColor:
- return kHoverMenuButtonBorderColor;
+ return kFocusedMenuButtonBorderColor;
case NativeTheme::kColorId_MenuSeparatorColor:
return kMenuSeparatorColor;
case NativeTheme::kColorId_MenuBackgroundColor:
return kMenuBackgroundColor;
case NativeTheme::kColorId_FocusedMenuItemBackgroundColor:
return kMenuHighlightBackgroundColor;
- case NativeTheme::kColorId_HoverMenuItemBackgroundColor:
- return kHoverMenuItemBackgroundColor;
case NativeTheme::kColorId_EnabledMenuItemForegroundColor:
return kEnabledMenuItemForegroundColor;
case NativeTheme::kColorId_DisabledMenuItemForegroundColor:
return kDisabledMenuItemForegroundColor;
- case NativeTheme::kColorId_DisabledEmphasizedMenuItemForegroundColor:
- return SK_ColorBLACK;
- case NativeTheme::kColorId_SelectedMenuItemForegroundColor:
- return SK_ColorWHITE;
- case NativeTheme::kColorId_ButtonDisabledColor:
- return kDisabledMenuItemForegroundColor;
// Label
case NativeTheme::kColorId_LabelEnabledColor:
- return kLabelEnabledColor;
+ return kButtonEnabledColor;
case NativeTheme::kColorId_LabelDisabledColor:
return base_theme->GetSystemColor(
NativeTheme::kColorId_ButtonDisabledColor);
- case NativeTheme::kColorId_LabelBackgroundColor:
- return kLabelBackgroundColor;
// Link
+ // TODO(estade): where, if anywhere, do we use disabled links in Chrome?
case NativeTheme::kColorId_LinkDisabled:
- return kLinkDisabledColor;
+ return SK_ColorBLACK;
+
case NativeTheme::kColorId_LinkEnabled:
- return kLinkEnabledColor;
case NativeTheme::kColorId_LinkPressed:
- return kLinkPressedColor;
+ return kLinkEnabledColor;
// Textfield
case NativeTheme::kColorId_TextfieldDefaultColor:
@@ -345,30 +247,35 @@ SkColor GetAuraColor(NativeTheme::ColorId color_id,
case NativeTheme::kColorId_TableGroupingIndicatorColor:
return kTableGroupingIndicatorColor;
+ // FocusableBorder
+ case NativeTheme::kColorId_FocusedBorderColor:
+ return gfx::kGoogleBlue500;
+ case NativeTheme::kColorId_UnfocusedBorderColor:
+ return SkColorSetA(SK_ColorBLACK, 0x66);
+
// Results Tables
case NativeTheme::kColorId_ResultsTableNormalBackground:
return kTextfieldDefaultBackground;
case NativeTheme::kColorId_ResultsTableHoveredBackground:
- return kResultsTableHoveredBackground;
+ return SkColorSetA(base_theme->GetSystemColor(
+ NativeTheme::kColorId_ResultsTableNormalText),
+ 0x0D);
case NativeTheme::kColorId_ResultsTableSelectedBackground:
- return kResultsTableSelectedBackground;
+ return SkColorSetA(base_theme->GetSystemColor(
+ NativeTheme::kColorId_ResultsTableNormalText),
+ 0x14);
case NativeTheme::kColorId_ResultsTableNormalText:
- return kResultsTableNormalText;
case NativeTheme::kColorId_ResultsTableHoveredText:
- return kResultsTableHoveredText;
case NativeTheme::kColorId_ResultsTableSelectedText:
- return kResultsTableSelectedText;
+ return kResultsTableText;
case NativeTheme::kColorId_ResultsTableNormalDimmedText:
- return kResultsTableNormalDimmedText;
case NativeTheme::kColorId_ResultsTableHoveredDimmedText:
- return kResultsTableHoveredDimmedText;
case NativeTheme::kColorId_ResultsTableSelectedDimmedText:
- return kResultsTableSelectedDimmedText;
+ return kResultsTableDimmedText;
case NativeTheme::kColorId_ResultsTableNormalUrl:
- return kResultsTableNormalUrl;
case NativeTheme::kColorId_ResultsTableHoveredUrl:
case NativeTheme::kColorId_ResultsTableSelectedUrl:
- return kResultsTableSelectedOrHoveredUrl;
+ return base_theme->GetSystemColor(NativeTheme::kColorId_LinkEnabled);
case NativeTheme::kColorId_ResultsTablePositiveText:
return kResultsTablePositiveText;
case NativeTheme::kColorId_ResultsTablePositiveHoveredText:
@@ -390,6 +297,14 @@ SkColor GetAuraColor(NativeTheme::ColorId color_id,
case NativeTheme::kColorId_ThrobberLightColor:
return kThrobberLightColor;
+ // Alert icon colors
+ case NativeTheme::kColorId_AlertSeverityLow:
+ return gfx::kGoogleGreen700;
+ case NativeTheme::kColorId_AlertSeverityMedium:
+ return gfx::kGoogleYellow700;
+ case NativeTheme::kColorId_AlertSeverityHigh:
+ return gfx::kGoogleRed700;
+
case NativeTheme::kColorId_NumColors:
break;
}
diff --git a/chromium/ui/native_theme/native_theme.gyp b/chromium/ui/native_theme/native_theme.gyp
deleted file mode 100644
index afec2e95641..00000000000
--- a/chromium/ui/native_theme/native_theme.gyp
+++ /dev/null
@@ -1,71 +0,0 @@
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-{
- 'variables': {
- 'chromium_code': 1,
- },
- 'targets': [
- {
- 'target_name': 'native_theme',
- 'type': '<(component)',
- 'dependencies': [
- '../../base/base.gyp:base',
- '../../base/third_party/dynamic_annotations/dynamic_annotations.gyp:dynamic_annotations',
- '../../skia/skia.gyp:skia',
- '../base/ui_base.gyp:ui_base',
- '../display/display.gyp:display',
- '../gfx/gfx.gyp:gfx',
- '../gfx/gfx.gyp:gfx_geometry',
- '../resources/ui_resources.gyp:ui_resources',
- ],
- 'defines': [
- 'NATIVE_THEME_IMPLEMENTATION',
- ],
- 'sources': [
- 'common_theme.cc',
- 'common_theme.h',
- 'native_theme.cc',
- 'native_theme.h',
- 'native_theme_android.cc',
- 'native_theme_android.h',
- 'native_theme_aura.cc',
- 'native_theme_aura.h',
- 'native_theme_aurawin.cc',
- 'native_theme_aurawin.h',
- 'native_theme_base.cc',
- 'native_theme_base.h',
- 'native_theme_dark_aura.cc',
- 'native_theme_dark_aura.h',
- 'native_theme_dark_win.cc',
- 'native_theme_dark_win.h',
- 'native_theme_mac.h',
- 'native_theme_mac.mm',
- 'native_theme_observer.cc',
- 'native_theme_observer.h',
- 'native_theme_switches.cc',
- 'native_theme_switches.h',
- 'native_theme_win.cc',
- 'native_theme_win.h',
- ],
- },
- {
- 'target_name': 'native_theme_unittests',
- 'type': '<(gtest_target_type)',
- 'dependencies': [
- '../../base/base.gyp:base',
- '../../base/base.gyp:test_support_base',
- '../../skia/skia.gyp:skia',
- '../../testing/gtest.gyp:gtest',
- '../gfx/gfx.gyp:gfx_geometry',
- 'native_theme',
- ],
- 'sources': [
- '../../base/test/run_all_unittests.cc',
- 'native_theme_aura_unittest.cc',
- 'native_theme_mac_unittest.cc',
- ],
- },
- ],
-}
diff --git a/chromium/ui/native_theme/native_theme.h b/chromium/ui/native_theme/native_theme.h
index 3b78de9e7c3..664aa50e4ee 100644
--- a/chromium/ui/native_theme/native_theme.h
+++ b/chromium/ui/native_theme/native_theme.h
@@ -253,26 +253,22 @@ class NATIVE_THEME_EXPORT NativeTheme {
kColorId_FocusedBorderColor,
kColorId_UnfocusedBorderColor,
// Button
- kColorId_ButtonBackgroundColor,
kColorId_ButtonEnabledColor,
kColorId_ButtonDisabledColor,
- kColorId_ButtonHighlightColor,
kColorId_ButtonHoverColor,
- kColorId_ButtonHoverBackgroundColor,
+ kColorId_ButtonPressedShade,
kColorId_BlueButtonEnabledColor,
kColorId_BlueButtonDisabledColor,
kColorId_BlueButtonPressedColor,
kColorId_BlueButtonHoverColor,
kColorId_BlueButtonShadowColor,
- kColorId_CallToActionColor,
- kColorId_TextOnCallToActionColor,
+ kColorId_ProminentButtonColor,
+ kColorId_TextOnProminentButtonColor,
// MenuItem
kColorId_EnabledMenuItemForegroundColor,
kColorId_DisabledMenuItemForegroundColor,
- kColorId_DisabledEmphasizedMenuItemForegroundColor,
kColorId_SelectedMenuItemForegroundColor,
kColorId_FocusedMenuItemBackgroundColor,
- kColorId_HoverMenuItemBackgroundColor,
kColorId_MenuSeparatorColor,
kColorId_MenuBackgroundColor,
kColorId_MenuBorderColor,
@@ -283,7 +279,6 @@ class NATIVE_THEME_EXPORT NativeTheme {
// Label
kColorId_LabelEnabledColor,
kColorId_LabelDisabledColor,
- kColorId_LabelBackgroundColor,
// Link
kColorId_LinkDisabled,
kColorId_LinkEnabled,
@@ -341,6 +336,10 @@ class NATIVE_THEME_EXPORT NativeTheme {
kColorId_ThrobberSpinningColor,
kColorId_ThrobberWaitingColor,
kColorId_ThrobberLightColor,
+ // Colors for icons that alert, e.g. upgrade reminders.
+ kColorId_AlertSeverityLow,
+ kColorId_AlertSeverityMedium,
+ kColorId_AlertSeverityHigh,
// TODO(benrg): move other hardcoded colors here.
kColorId_NumColors,
diff --git a/chromium/ui/native_theme/native_theme_aura.cc b/chromium/ui/native_theme/native_theme_aura.cc
index 74edcd558c8..b6f47d402f4 100644
--- a/chromium/ui/native_theme/native_theme_aura.cc
+++ b/chromium/ui/native_theme/native_theme_aura.cc
@@ -67,7 +67,6 @@ const SkColor kTrackColor = SkColorSetRGB(0xF1, 0xF1, 0xF1);
} // namespace
-#if !defined(OS_WIN)
// static
NativeTheme* NativeTheme::GetInstanceForWeb() {
return NativeThemeAura::instance();
@@ -78,7 +77,6 @@ NativeThemeAura* NativeThemeAura::instance() {
CR_DEFINE_STATIC_LOCAL(NativeThemeAura, s_native_theme, ());
return &s_native_theme;
}
-#endif
NativeThemeAura::NativeThemeAura() {
// We don't draw scrollbar buttons.
diff --git a/chromium/ui/native_theme/native_theme_aurawin.cc b/chromium/ui/native_theme/native_theme_aurawin.cc
deleted file mode 100644
index 03e53c65fdb..00000000000
--- a/chromium/ui/native_theme/native_theme_aurawin.cc
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "ui/native_theme/native_theme_aurawin.h"
-
-#include "third_party/skia/include/core/SkCanvas.h"
-#include "ui/native_theme/common_theme.h"
-#include "ui/native_theme/native_theme_win.h"
-
-namespace ui {
-
-namespace {
-
-bool IsScrollbarPart(NativeTheme::Part part) {
- switch (part) {
- case NativeTheme::kScrollbarDownArrow:
- case NativeTheme::kScrollbarLeftArrow:
- case NativeTheme::kScrollbarRightArrow:
- case NativeTheme::kScrollbarUpArrow:
- case NativeTheme::kScrollbarHorizontalThumb:
- case NativeTheme::kScrollbarVerticalThumb:
- case NativeTheme::kScrollbarHorizontalTrack:
- case NativeTheme::kScrollbarVerticalTrack:
- case NativeTheme::kScrollbarHorizontalGripper:
- case NativeTheme::kScrollbarVerticalGripper:
- case NativeTheme::kScrollbarCorner:
- return true;
- default:
- return false;
- }
-}
-
-} // namespace
-
-// static
-NativeTheme* NativeTheme::GetInstanceForWeb() {
- return NativeThemeAuraWin::instance();
-}
-
-// static
-NativeThemeAura* NativeThemeAura::instance() {
- return NativeThemeAuraWin::instance();
-}
-
-// static
-NativeThemeAuraWin* NativeThemeAuraWin::instance() {
- CR_DEFINE_STATIC_LOCAL(NativeThemeAuraWin, s_native_theme, ());
- return &s_native_theme;
-}
-
-NativeThemeAuraWin::NativeThemeAuraWin() {
-}
-
-NativeThemeAuraWin::~NativeThemeAuraWin() {
-}
-
-void NativeThemeAuraWin::Paint(SkCanvas* canvas,
- Part part,
- State state,
- const gfx::Rect& rect,
- const ExtraParams& extra) const {
- if (IsScrollbarPart(part) &&
- NativeThemeWin::instance()->IsUsingHighContrastTheme()) {
- NativeThemeWin::instance()->Paint(canvas, part, state, rect, extra);
- return;
- }
-
- NativeThemeAura::Paint(canvas, part, state, rect, extra);
-}
-
-gfx::Size NativeThemeAuraWin::GetPartSize(Part part,
- State state,
- const ExtraParams& extra) const {
- // We want aura on windows to use the same size for scrollbars as we would in
- // the native theme.
- if (IsScrollbarPart(part))
- return NativeThemeWin::instance()->GetPartSize(part, state, extra);
-
- return NativeThemeAura::GetPartSize(part, state, extra);
-}
-
-} // namespace ui
diff --git a/chromium/ui/native_theme/native_theme_aurawin.h b/chromium/ui/native_theme/native_theme_aurawin.h
deleted file mode 100644
index 1b02b166e4a..00000000000
--- a/chromium/ui/native_theme/native_theme_aurawin.h
+++ /dev/null
@@ -1,37 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#ifndef UI_NATIVE_THEME_NATIVE_THEME_AURAWIN_H_
-#define UI_NATIVE_THEME_NATIVE_THEME_AURAWIN_H_
-
-#include "base/compiler_specific.h"
-#include "base/macros.h"
-#include "ui/native_theme/native_theme_aura.h"
-
-namespace ui {
-
-// Aura implementation of native theme support.
-class NATIVE_THEME_EXPORT NativeThemeAuraWin : public NativeThemeAura {
- public:
- static NativeThemeAuraWin* instance();
-
- private:
- NativeThemeAuraWin();
- ~NativeThemeAuraWin() override;
-
- // Overridden from NativeThemeBase:
- gfx::Size GetPartSize(Part part,
- State state,
- const ExtraParams& extra) const override;
- void Paint(SkCanvas* canvas,
- Part part,
- State state,
- const gfx::Rect& rect,
- const ExtraParams& extra) const override;
- DISALLOW_COPY_AND_ASSIGN(NativeThemeAuraWin);
-};
-
-} // namespace ui
-
-#endif // UI_NATIVE_THEME_NATIVE_THEME_AURAWIN_H_
diff --git a/chromium/ui/native_theme/native_theme_dark_aura.cc b/chromium/ui/native_theme/native_theme_dark_aura.cc
index 1fb481465a6..f40f64c654b 100644
--- a/chromium/ui/native_theme/native_theme_dark_aura.cc
+++ b/chromium/ui/native_theme/native_theme_dark_aura.cc
@@ -4,7 +4,6 @@
#include "ui/native_theme/native_theme_dark_aura.h"
-#include "ui/base/material_design/material_design_controller.h"
#include "ui/gfx/color_palette.h"
namespace ui {
@@ -15,11 +14,9 @@ NativeThemeDarkAura* NativeThemeDarkAura::instance() {
}
SkColor NativeThemeDarkAura::GetSystemColor(ColorId color_id) const {
- if (!ui::MaterialDesignController::IsModeMaterial())
- return NativeThemeAura::GetSystemColor(color_id);
+ static const SkColor kPrimaryTextColor = SK_ColorWHITE;
static const SkColor kButtonEnabledColor = SK_ColorWHITE;
- static const SkColor kLinkEnabledColor = gfx::kGoogleBlue300;
static const SkColor kTextfieldDefaultColor = SK_ColorWHITE;
static const SkColor kTextfieldDefaultBackground =
@@ -34,16 +31,26 @@ SkColor NativeThemeDarkAura::GetSystemColor(ColorId color_id) const {
SkColorSetA(kResultsTableText, 0x80);
switch (color_id) {
+ // Window
+ case kColorId_WindowBackground:
+ case kColorId_DialogBackground:
+ case kColorId_BubbleBackground:
+ return SK_ColorBLACK;
+
// Button
case kColorId_ButtonEnabledColor:
return kButtonEnabledColor;
- case kColorId_CallToActionColor:
- return kLinkEnabledColor;
+ case kColorId_ProminentButtonColor:
+ return gfx::kGoogleBlue300;
+
+ // Label
+ case kColorId_LabelEnabledColor:
+ return kPrimaryTextColor;
// Link
case kColorId_LinkEnabled:
case kColorId_LinkPressed:
- return kLinkEnabledColor;
+ return gfx::kGoogleBlue300;
// Textfield
case kColorId_TextfieldDefaultColor:
@@ -70,8 +77,18 @@ SkColor NativeThemeDarkAura::GetSystemColor(ColorId color_id) const {
case kColorId_FocusedBorderColor:
return gfx::kGoogleBlue300;
+ // Alert icons
+ case kColorId_AlertSeverityLow:
+ return gfx::kGoogleGreen300;
+ case kColorId_AlertSeverityMedium:
+ return gfx::kGoogleYellow300;
+ case kColorId_AlertSeverityHigh:
+ return gfx::kGoogleRed300;
+
// Intentional pass-throughs to NativeThemeAura.
- case kColorId_TextOnCallToActionColor:
+ case kColorId_LabelDisabledColor:
+ case kColorId_TextOnProminentButtonColor:
+ case kColorId_ButtonPressedShade:
case kColorId_ResultsTableHoveredBackground:
case kColorId_ResultsTableSelectedBackground:
case kColorId_ResultsTableNormalUrl:
@@ -80,15 +97,9 @@ SkColor NativeThemeDarkAura::GetSystemColor(ColorId color_id) const {
return NativeThemeAura::GetSystemColor(color_id);
// Any other color is not defined and shouldn't be used in a dark theme.
- case kColorId_WindowBackground:
- case kColorId_DialogBackground:
- case kColorId_BubbleBackground:
case kColorId_UnfocusedBorderColor:
- case kColorId_ButtonBackgroundColor:
case kColorId_ButtonDisabledColor:
- case kColorId_ButtonHighlightColor:
case kColorId_ButtonHoverColor:
- case kColorId_ButtonHoverBackgroundColor:
case kColorId_BlueButtonEnabledColor:
case kColorId_BlueButtonDisabledColor:
case kColorId_BlueButtonPressedColor:
@@ -96,19 +107,14 @@ SkColor NativeThemeDarkAura::GetSystemColor(ColorId color_id) const {
case kColorId_BlueButtonShadowColor:
case kColorId_EnabledMenuItemForegroundColor:
case kColorId_DisabledMenuItemForegroundColor:
- case kColorId_DisabledEmphasizedMenuItemForegroundColor:
case kColorId_SelectedMenuItemForegroundColor:
case kColorId_FocusedMenuItemBackgroundColor:
- case kColorId_HoverMenuItemBackgroundColor:
case kColorId_MenuSeparatorColor:
case kColorId_MenuBackgroundColor:
case kColorId_MenuBorderColor:
case kColorId_EnabledMenuButtonBorderColor:
case kColorId_FocusedMenuButtonBorderColor:
case kColorId_HoverMenuButtonBorderColor:
- case kColorId_LabelEnabledColor:
- case kColorId_LabelDisabledColor:
- case kColorId_LabelBackgroundColor:
case kColorId_LinkDisabled:
case kColorId_TextfieldReadOnlyColor:
case kColorId_TextfieldReadOnlyBackground:
diff --git a/chromium/ui/native_theme/native_theme_mac.h b/chromium/ui/native_theme/native_theme_mac.h
index f87d87fa691..ec48119d264 100644
--- a/chromium/ui/native_theme/native_theme_mac.h
+++ b/chromium/ui/native_theme/native_theme_mac.h
@@ -29,6 +29,11 @@ class NATIVE_THEME_EXPORT NativeThemeMac : public NativeThemeBase {
static NativeThemeMac* instance();
+ // Adjusts an SkColor based on the current system control tint. For example,
+ // if the current tint is "graphite", this function maps the provided value to
+ // an appropriate gray.
+ static SkColor ApplySystemControlTint(SkColor color);
+
// Overridden from NativeTheme:
SkColor GetSystemColor(ColorId color_id) const override;
diff --git a/chromium/ui/native_theme/native_theme_mac.mm b/chromium/ui/native_theme/native_theme_mac.mm
index 4b34bf7d12c..c6c79f7dc94 100644
--- a/chromium/ui/native_theme/native_theme_mac.mm
+++ b/chromium/ui/native_theme/native_theme_mac.mm
@@ -15,6 +15,7 @@
#include "third_party/skia/include/core/SkDrawLooper.h"
#include "third_party/skia/include/core/SkRRect.h"
#include "third_party/skia/include/effects/SkGradientShader.h"
+#include "ui/base/material_design/material_design_controller.h"
#include "ui/gfx/color_palette.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/shadow_value.h"
@@ -91,6 +92,17 @@ SkColor NSSystemColorToSkColor(NSColor* color) {
SkScalarRoundToInt(255.0 * components[0]));
}
+// Converts an SkColor to grayscale by using luminance for all three components.
+// Experimentally, this seems to produce a better result than a flat average or
+// a min/max average for UI controls.
+SkColor ColorToGrayscale(SkColor color) {
+ SkScalar luminance = SkColorGetR(color) * 0.21 +
+ SkColorGetG(color) * 0.72 +
+ SkColorGetB(color) * 0.07;
+ uint8_t component = SkScalarRoundToInt(luminance);
+ return SkColorSetARGB(SkColorGetA(color), component, component, component);
+}
+
} // namespace
namespace ui {
@@ -106,7 +118,51 @@ NativeThemeMac* NativeThemeMac::instance() {
return &s_native_theme;
}
+// static
+SkColor NativeThemeMac::ApplySystemControlTint(SkColor color) {
+ if ([NSColor currentControlTint] == NSGraphiteControlTint)
+ return ColorToGrayscale(color);
+ return color;
+}
+
SkColor NativeThemeMac::GetSystemColor(ColorId color_id) const {
+ // Even with --secondary-ui-md, menus use the platform colors and styling, and
+ // Mac has a couple of specific color overrides, documented below.
+ switch (color_id) {
+ case kColorId_EnabledMenuItemForegroundColor:
+ return NSSystemColorToSkColor([NSColor controlTextColor]);
+ case kColorId_DisabledMenuItemForegroundColor:
+ return NSSystemColorToSkColor([NSColor disabledControlTextColor]);
+ case kColorId_SelectedMenuItemForegroundColor:
+ return NSSystemColorToSkColor([NSColor selectedMenuItemTextColor]);
+ case kColorId_FocusedMenuItemBackgroundColor:
+ return NSSystemColorToSkColor([NSColor selectedMenuItemColor]);
+ case kColorId_MenuBackgroundColor:
+ return kMenuPopupBackgroundColor;
+ case kColorId_MenuSeparatorColor:
+ return base::mac::IsOS10_9() ? kMenuSeparatorColorMavericks
+ : kMenuSeparatorColor;
+ case kColorId_MenuBorderColor:
+ return kMenuBorderColor;
+
+ // Mac has a different "pressed button" styling because it doesn't use
+ // ripples.
+ case kColorId_ButtonPressedShade:
+ return SkColorSetA(SK_ColorBLACK, 0x10);
+
+ // There's a system setting General > Highlight color which sets the
+ // background color for text selections. We honor that setting.
+ // TODO(ellyjones): Listen for NSSystemColorsDidChangeNotification somewhere
+ // and propagate it to the View hierarchy.
+ case kColorId_TextfieldSelectionBackgroundFocused:
+ return NSSystemColorToSkColor([NSColor selectedTextBackgroundColor]);
+ default:
+ break;
+ }
+
+ if (ui::MaterialDesignController::IsSecondaryUiMaterial())
+ return ApplySystemControlTint(GetAuraColor(color_id, this));
+
// TODO(tapted): Add caching for these, and listen for
// NSSystemColorsDidChangeNotification.
switch (color_id) {
@@ -118,51 +174,26 @@ SkColor NativeThemeMac::GetSystemColor(ColorId color_id) const {
return SK_ColorWHITE;
case kColorId_FocusedBorderColor:
+ return NSSystemColorToSkColor([NSColor keyboardFocusIndicatorColor]);
case kColorId_FocusedMenuButtonBorderColor:
return NSSystemColorToSkColor([NSColor keyboardFocusIndicatorColor]);
case kColorId_UnfocusedBorderColor:
return NSSystemColorToSkColor([NSColor controlColor]);
// Buttons and labels.
- case kColorId_ButtonBackgroundColor:
- case kColorId_ButtonHoverBackgroundColor:
case kColorId_HoverMenuButtonBorderColor:
- case kColorId_LabelBackgroundColor:
return NSSystemColorToSkColor([NSColor controlBackgroundColor]);
case kColorId_ButtonEnabledColor:
case kColorId_EnabledMenuButtonBorderColor:
case kColorId_LabelEnabledColor:
+ case kColorId_ProminentButtonColor:
return NSSystemColorToSkColor([NSColor controlTextColor]);
case kColorId_ButtonDisabledColor:
case kColorId_LabelDisabledColor:
return NSSystemColorToSkColor([NSColor disabledControlTextColor]);
- case kColorId_ButtonHighlightColor:
- // Although the NSColor documentation names "selectedControlTextColor" as
- // the color for a "text in a .. control being clicked or dragged", it
- // remains black, and text on Yosemite-style pressed buttons is white.
- return SK_ColorWHITE;
case kColorId_ButtonHoverColor:
return NSSystemColorToSkColor([NSColor selectedControlTextColor]);
- // Menus.
- case kColorId_EnabledMenuItemForegroundColor:
- return NSSystemColorToSkColor([NSColor controlTextColor]);
- case kColorId_DisabledMenuItemForegroundColor:
- case kColorId_DisabledEmphasizedMenuItemForegroundColor:
- return NSSystemColorToSkColor([NSColor disabledControlTextColor]);
- case kColorId_SelectedMenuItemForegroundColor:
- return NSSystemColorToSkColor([NSColor selectedMenuItemTextColor]);
- case kColorId_FocusedMenuItemBackgroundColor:
- case kColorId_HoverMenuItemBackgroundColor:
- return NSSystemColorToSkColor([NSColor selectedMenuItemColor]);
- case kColorId_MenuBackgroundColor:
- return kMenuPopupBackgroundColor;
- case kColorId_MenuSeparatorColor:
- return base::mac::IsOSMavericks() ? kMenuSeparatorColorMavericks
- : kMenuSeparatorColor;
- case kColorId_MenuBorderColor:
- return kMenuBorderColor;
-
// Link.
case kColorId_LinkDisabled:
return SK_ColorBLACK;
@@ -180,8 +211,6 @@ SkColor NativeThemeMac::GetSystemColor(ColorId color_id) const {
return NSSystemColorToSkColor([NSColor textBackgroundColor]);
case kColorId_TextfieldSelectionColor:
return NSSystemColorToSkColor([NSColor selectedTextColor]);
- case kColorId_TextfieldSelectionBackgroundFocused:
- return NSSystemColorToSkColor([NSColor selectedTextBackgroundColor]);
// Trees/Tables. For focused text, use the alternate* versions, which
// NSColor documents as "the table and list view equivalent to the
@@ -220,7 +249,7 @@ void NativeThemeMac::PaintMenuPopupBackground(
const MenuBackgroundExtraParams& menu_background) const {
SkPaint paint;
paint.setAntiAlias(true);
- if (base::mac::IsOSMavericks())
+ if (base::mac::IsOS10_9())
paint.setColor(kMenuPopupBackgroundColorMavericks);
else
paint.setColor(kMenuPopupBackgroundColor);
@@ -245,7 +274,7 @@ void NativeThemeMac::PaintMenuItemBackground(
// pick colors. The System color "selectedMenuItemColor" is actually still
// blue for Graphite. And while "keyboardFocusIndicatorColor" does change,
// and is a good shade of gray, it's not blue enough for the Blue theme.
- paint.setColor(GetSystemColor(kColorId_HoverMenuItemBackgroundColor));
+ paint.setColor(GetSystemColor(kColorId_FocusedMenuItemBackgroundColor));
canvas->drawRect(gfx::RectToSkRect(rect), paint);
break;
default:
@@ -287,6 +316,9 @@ sk_sp<SkShader> NativeThemeMac::GetButtonBackgroundShader(
SkColor gradient_colors[] = {start_colors[type], end_colors[type]};
+ for (size_t i = 0; i < arraysize(gradient_colors); ++i)
+ gradient_colors[i] = ApplySystemControlTint(gradient_colors[i]);
+
return SkGradientShader::MakeLinear(
gradient_points, gradient_colors, gradient_positions,
arraysize(gradient_positions),
@@ -320,6 +352,9 @@ sk_sp<SkShader> NativeThemeMac::GetButtonBorderShader(ButtonBackgroundType type,
SkColor gradient_colors[] = {top_edge[type], bottom_edge[type]};
+ for (size_t i = 0; i < arraysize(gradient_colors); ++i)
+ gradient_colors[i] = ApplySystemControlTint(gradient_colors[i]);
+
return SkGradientShader::MakeLinear(
gradient_points, gradient_colors, gradient_positions,
arraysize(gradient_positions), SkShader::kClamp_TileMode);
@@ -334,7 +369,8 @@ void NativeThemeMac::PaintStyledGradientButton(SkCanvas* canvas,
bool focus) {
const SkScalar kBorderThickness = 1;
const SkScalar kFocusRingThickness = 4;
- const SkColor kFocusRingColor = SkColorSetARGB(0x94, 0x79, 0xa7, 0xe9);
+ const SkColor kFocusRingColor = ApplySystemControlTint(
+ SkColorSetARGB(0x94, 0x79, 0xa7, 0xe9));
const SkVector kNoCurve = {0, 0};
const SkVector kCurve = {kButtonCornerRadius, kButtonCornerRadius};
diff --git a/chromium/ui/native_theme/native_theme_mac_unittest.cc b/chromium/ui/native_theme/native_theme_mac_unittest.cc
index c7c92d6d861..5d5f748fe14 100644
--- a/chromium/ui/native_theme/native_theme_mac_unittest.cc
+++ b/chromium/ui/native_theme/native_theme_mac_unittest.cc
@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "ui/base/material_design/material_design_controller.h"
#include "ui/native_theme/native_theme_mac.h"
#include "base/mac/mac_util.h"
@@ -9,10 +10,17 @@
namespace ui {
+class NativeThemeMacTest : public testing::Test {
+ public:
+ static void SetUpTestCase() {
+ MaterialDesignController::Initialize();
+ }
+};
+
// Test to ensure any system colors that are looked up by name exist on all Mac
// platforms Chrome supports, and that their colorspace and component count is
// sane.
-TEST(NativeThemeMacTest, SystemColorsExist) {
+TEST_F(NativeThemeMacTest, SystemColorsExist) {
NativeTheme* native_theme = NativeThemeMac::instance();
ASSERT_TRUE(native_theme);
for (int i = 0; i < NativeTheme::kColorId_NumColors; ++i) {
@@ -27,13 +35,13 @@ TEST(NativeThemeMacTest, SystemColorsExist) {
// Spot-check some system colours that can't be changed through System
// Preferences.
-TEST(NativeThemeMacTest, SystemColorSpotChecks) {
+TEST_F(NativeThemeMacTest, SystemColorSpotChecks) {
NativeTheme* native_theme = NativeThemeMac::instance();
const SkColor kWindowColorCatsMavericks = SkColorSetARGB(255, 232, 232, 232);
const SkColor kWindowColorYosemite = SkColorSetARGB(255, 236, 236, 236);
SkColor dialogColor =
native_theme->GetSystemColor(NativeTheme::kColorId_WindowBackground);
- if (base::mac::IsOSYosemiteOrLater())
+ if (base::mac::IsAtLeastOS10_10())
EXPECT_EQ(dialogColor, kWindowColorYosemite);
else
EXPECT_EQ(dialogColor, kWindowColorCatsMavericks);
diff --git a/chromium/ui/native_theme/native_theme_win.cc b/chromium/ui/native_theme/native_theme_win.cc
index 69954dd8d2b..eb03ae51ad6 100644
--- a/chromium/ui/native_theme/native_theme_win.cc
+++ b/chromium/ui/native_theme/native_theme_win.cc
@@ -15,6 +15,7 @@
#include "base/win/scoped_gdi_object.h"
#include "base/win/scoped_hdc.h"
#include "base/win/scoped_select_object.h"
+#include "base/win/win_util.h"
#include "base/win/windows_version.h"
#include "skia/ext/bitmap_platform_device.h"
#include "skia/ext/platform_canvas.h"
@@ -22,10 +23,12 @@
#include "third_party/skia/include/core/SkCanvas.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkColorPriv.h"
+#include "third_party/skia/include/core/SkPath.h"
#include "third_party/skia/include/core/SkRefCnt.h"
#include "third_party/skia/include/core/SkShader.h"
+#include "third_party/skia/include/core/SkSurface.h"
#include "ui/base/material_design/material_design_controller.h"
-#include "ui/display/win/dpi.h"
+#include "ui/display/win/screen_win.h"
#include "ui/gfx/color_palette.h"
#include "ui/gfx/color_utils.h"
#include "ui/gfx/gdi_util.h"
@@ -109,6 +112,40 @@ RECT InsetRect(const RECT* rect, int size) {
return result.ToRECT();
}
+// Custom scoped object for storing DC and a bitmap that was selected into it,
+// and making sure that they are deleted in the right order.
+class ScopedCreateDCWithBitmap {
+ public:
+ explicit ScopedCreateDCWithBitmap(base::win::ScopedCreateDC::Handle hdc)
+ : dc_(hdc) {}
+
+ ~ScopedCreateDCWithBitmap() {
+ // Delete DC before the bitmap, since objects should not be deleted while
+ // selected into a DC.
+ dc_.Close();
+ }
+
+ bool IsValid() const { return dc_.IsValid(); }
+
+ base::win::ScopedCreateDC::Handle Get() const { return dc_.Get(); }
+
+ // Selects |handle| to bitmap into DC. Returns false if handle is not valid.
+ bool SelectBitmap(base::win::ScopedBitmap::element_type handle) {
+ bitmap_.reset(handle);
+ if (!bitmap_.is_valid())
+ return false;
+
+ SelectObject(dc_.Get(), bitmap_.get());
+ return true;
+ }
+
+ private:
+ base::win::ScopedCreateDC dc_;
+ base::win::ScopedBitmap bitmap_;
+
+ DISALLOW_COPY_AND_ASSIGN(ScopedCreateDCWithBitmap);
+};
+
} // namespace
namespace ui {
@@ -204,7 +241,7 @@ gfx::Size NativeThemeWin::GetPartSize(Part part,
case kScrollbarVerticalThumb:
case kScrollbarHorizontalTrack:
case kScrollbarVerticalTrack: {
- int size = display::win::GetSystemMetricsInDIP(SM_CXVSCROLL);
+ int size = display::win::ScreenWin::GetSystemMetricsInDIP(SM_CXVSCROLL);
if (size == 0)
size = 17;
return gfx::Size(size, size);
@@ -255,39 +292,18 @@ void NativeThemeWin::Paint(SkCanvas* canvas,
break;
}
- bool needs_paint_indirect = false;
- if (!skia::SupportsPlatformPaint(canvas)) {
- // This block will only get hit with --enable-accelerated-drawing flag.
- needs_paint_indirect = true;
- } else {
- // Scrollbar components on Windows Classic theme (on all Windows versions)
- // have particularly problematic alpha values, so always draw them
- // indirectly. In addition, scrollbar thumbs and grippers for the Windows XP
- // theme (available only on Windows XP) also need their alpha values
- // fixed.
- switch (part) {
- case kScrollbarDownArrow:
- case kScrollbarUpArrow:
- case kScrollbarLeftArrow:
- case kScrollbarRightArrow:
- needs_paint_indirect = !GetThemeHandle(SCROLLBAR);
- break;
- case kScrollbarHorizontalThumb:
- case kScrollbarVerticalThumb:
- case kScrollbarHorizontalGripper:
- case kScrollbarVerticalGripper:
- needs_paint_indirect = !GetThemeHandle(SCROLLBAR) ||
- base::win::GetVersion() == base::win::VERSION_XP;
- break;
- default:
- break;
- }
- }
+ skia::ScopedPlatformPaint paint(canvas);
+ HDC surface = paint.GetPlatformSurface();
- if (needs_paint_indirect)
- PaintIndirect(canvas, part, state, rect, extra);
+ // When drawing the task manager or the bookmark editor, we draw into an
+ // offscreen buffer, where we can use OS-specific drawing routines for
+ // UI features like scrollbars. However, we need to set up that buffer,
+ // and then read it back when it's done and blit it onto the screen.
+
+ if (skia::SupportsPlatformPaint(canvas))
+ PaintDirect(canvas, surface, part, state, rect, extra);
else
- PaintDirect(canvas, part, state, rect, extra);
+ PaintIndirect(canvas, surface, part, state, rect, extra);
}
NativeThemeWin::NativeThemeWin()
@@ -376,14 +392,12 @@ void NativeThemeWin::PaintMenuBackground(SkCanvas* canvas,
canvas->drawRect(gfx::RectToSkRect(rect), paint);
}
-void NativeThemeWin::PaintDirect(SkCanvas* canvas,
+void NativeThemeWin::PaintDirect(SkCanvas* destination_canvas,
+ HDC hdc,
Part part,
State state,
const gfx::Rect& rect,
const ExtraParams& extra) const {
- skia::ScopedPlatformPaint scoped_platform_paint(canvas);
- HDC hdc = scoped_platform_paint.GetPlatformSurface();
-
switch (part) {
case kCheckbox:
PaintCheckbox(hdc, part, state, rect, extra.button);
@@ -438,11 +452,11 @@ void NativeThemeWin::PaintDirect(SkCanvas* canvas,
return;
case kScrollbarHorizontalTrack:
case kScrollbarVerticalTrack:
- PaintScrollbarTrack(canvas, hdc, part, state, rect,
+ PaintScrollbarTrack(destination_canvas, hdc, part, state, rect,
extra.scrollbar_track);
return;
case kScrollbarCorner:
- canvas->drawColor(SK_ColorWHITE, SkXfermode::kSrc_Mode);
+ destination_canvas->drawColor(SK_ColorWHITE, SkXfermode::kSrc_Mode);
return;
case kTabPanelBackground:
PaintTabPanelBackground(hdc, rect);
@@ -452,7 +466,7 @@ void NativeThemeWin::PaintDirect(SkCanvas* canvas,
return;
case kTrackbarThumb:
case kTrackbarTrack:
- PaintTrackbar(canvas, hdc, part, state, rect, extra.trackbar);
+ PaintTrackbar(destination_canvas, hdc, part, state, rect, extra.trackbar);
return;
case kWindowResizeGripper:
PaintWindowResizeGripper(hdc, rect);
@@ -491,10 +505,8 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
const SkColor kFocusedBorderColor = SkColorSetRGB(0x4d, 0x90, 0xfe);
const SkColor kUnfocusedBorderColor = SkColorSetRGB(0xd9, 0xd9, 0xd9);
// Button:
- const SkColor kButtonBackgroundColor = SkColorSetRGB(0xde, 0xde, 0xde);
- const SkColor kButtonHighlightColor = SkColorSetARGB(200, 255, 255, 255);
const SkColor kButtonHoverColor = SkColorSetRGB(6, 45, 117);
- const SkColor kCallToActionColorInvert = gfx::kGoogleBlue300;
+ const SkColor kProminentButtonColorInvert = gfx::kGoogleBlue300;
// MenuItem:
const SkColor kMenuSchemeHighlightBackgroundColorInvert =
SkColorSetRGB(0x30, 0x30, 0x30);
@@ -514,6 +526,8 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
// Dialogs
case kColorId_DialogBackground:
case kColorId_BubbleBackground:
+ if (ui::MaterialDesignController::IsSecondaryUiMaterial())
+ break;
return color_utils::IsInvertedColorScheme() ?
color_utils::InvertColor(kDialogBackgroundColor) :
kDialogBackgroundColor;
@@ -525,12 +539,8 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
return kUnfocusedBorderColor;
// Button
- case kColorId_ButtonBackgroundColor:
- return kButtonBackgroundColor;
case kColorId_ButtonEnabledColor:
return system_colors_[COLOR_BTNTEXT];
- case kColorId_ButtonHighlightColor:
- return kButtonHighlightColor;
case kColorId_ButtonHoverColor:
return kButtonHoverColor;
@@ -539,8 +549,6 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
return system_colors_[COLOR_BTNTEXT];
case kColorId_LabelDisabledColor:
return system_colors_[COLOR_GRAYTEXT];
- case kColorId_LabelBackgroundColor:
- return system_colors_[COLOR_WINDOW];
// Textfield
case kColorId_TextfieldDefaultColor:
@@ -662,8 +670,8 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
switch (color_id) {
case NativeTheme::kColorId_FocusedMenuItemBackgroundColor:
return kMenuSchemeHighlightBackgroundColorInvert;
- case NativeTheme::kColorId_CallToActionColor:
- return kCallToActionColorInvert;
+ case NativeTheme::kColorId_ProminentButtonColor:
+ return kProminentButtonColorInvert;
default:
return color_utils::InvertColor(GetAuraColor(color_id, this));
}
@@ -672,7 +680,8 @@ SkColor NativeThemeWin::GetSystemColor(ColorId color_id) const {
return GetAuraColor(color_id, this);
}
-void NativeThemeWin::PaintIndirect(SkCanvas* canvas,
+void NativeThemeWin::PaintIndirect(SkCanvas* destination_canvas,
+ HDC destination_hdc,
Part part,
State state,
const gfx::Rect& rect,
@@ -682,13 +691,37 @@ void NativeThemeWin::PaintIndirect(SkCanvas* canvas,
// be sped up by doing it only once per part/state and
// keeping a cache of the resulting bitmaps.
- // Create an offscreen canvas that is backed by an HDC.
- sk_sp<skia::BitmapPlatformDevice> device(
- skia::BitmapPlatformDevice::Create(
- rect.width(), rect.height(), false, NULL));
- DCHECK(device);
- SkCanvas offscreen_canvas(device.get());
- DCHECK(skia::SupportsPlatformPaint(&offscreen_canvas));
+ // If this process doesn't have access to GDI, we'd need to use shared memory
+ // segment instead but that is not supported right now.
+ if (!base::win::IsUser32AndGdi32Available())
+ return;
+
+ ScopedCreateDCWithBitmap offscreen_hdc(CreateCompatibleDC(nullptr));
+ if (!offscreen_hdc.IsValid())
+ return;
+
+ skia::InitializeDC(offscreen_hdc.Get());
+ HRGN clip = CreateRectRgn(0, 0, rect.width(), rect.height());
+ if ((SelectClipRgn(offscreen_hdc.Get(), clip) == ERROR) ||
+ !DeleteObject(clip)) {
+ return;
+ }
+
+ if (!offscreen_hdc.SelectBitmap(skia::CreateHBitmap(
+ rect.width(), rect.height(), false, nullptr, nullptr))) {
+ return;
+ }
+
+ // Will be NULL if lower-level Windows calls fail, or if the backing
+ // allocated is 0 pixels in size (which should never happen according to
+ // Windows documentation).
+ sk_sp<SkSurface> offscreen_surface =
+ skia::MapPlatformSurface(offscreen_hdc.Get());
+ if (!offscreen_surface)
+ return;
+
+ SkCanvas* offscreen_canvas = offscreen_surface->getCanvas();
+ DCHECK(offscreen_canvas);
// Some of the Windows theme drawing operations do not write correct alpha
// values for fully-opaque pixels; instead the pixels get alpha 0. This is
@@ -698,7 +731,7 @@ void NativeThemeWin::PaintIndirect(SkCanvas* canvas,
// which pixels get touched by the paint operation. After paint, set any
// pixels that have alpha 0 to opaque and placeholders to fully-transparent.
const SkColor placeholder = SkColorSetARGB(1, 0, 0, 0);
- offscreen_canvas.clear(placeholder);
+ offscreen_canvas->clear(placeholder);
// Offset destination rects to have origin (0,0).
gfx::Rect adjusted_rect(rect.size());
@@ -717,14 +750,15 @@ void NativeThemeWin::PaintIndirect(SkCanvas* canvas,
break;
}
// Draw the theme controls using existing HDC-drawing code.
- PaintDirect(&offscreen_canvas, part, state, adjusted_rect, adjusted_extra);
+ PaintDirect(offscreen_canvas, offscreen_hdc.Get(), part, state,
+ adjusted_rect, adjusted_extra);
- SkBitmap bitmap = skia::ReadPixels(&offscreen_canvas);
+ SkBitmap offscreen_bitmap = skia::MapPlatformBitmap(offscreen_hdc.Get());
// Post-process the pixels to fix up the alpha values (see big comment above).
const SkPMColor placeholder_value = SkPreMultiplyColor(placeholder);
const int pixel_count = rect.width() * rect.height();
- SkPMColor* pixels = bitmap.getAddr32(0, 0);
+ SkPMColor* pixels = offscreen_bitmap.getAddr32(0, 0);
for (int i = 0; i < pixel_count; i++) {
if (pixels[i] == placeholder_value) {
// Pixel wasn't touched - make it fully transparent.
@@ -738,8 +772,7 @@ void NativeThemeWin::PaintIndirect(SkCanvas* canvas,
}
}
- // Draw the offscreen bitmap to the destination canvas.
- canvas->drawBitmap(bitmap, rect.x(), rect.y());
+ destination_canvas->drawBitmap(offscreen_bitmap, rect.x(), rect.y());
}
HRESULT NativeThemeWin::GetThemePartSize(ThemeName theme_name,
diff --git a/chromium/ui/native_theme/native_theme_win.h b/chromium/ui/native_theme/native_theme_win.h
index 03483650bc5..fa2c82ce608 100644
--- a/chromium/ui/native_theme/native_theme_win.h
+++ b/chromium/ui/native_theme/native_theme_win.h
@@ -131,7 +131,8 @@ class NATIVE_THEME_EXPORT NativeThemeWin : public NativeTheme,
void PaintMenuBackground(SkCanvas* canvas, const gfx::Rect& rect) const;
// Paint directly to canvas' HDC.
- void PaintDirect(SkCanvas* canvas,
+ void PaintDirect(SkCanvas* destination_canvas,
+ HDC hdc,
Part part,
State state,
const gfx::Rect& rect,
@@ -140,7 +141,8 @@ class NATIVE_THEME_EXPORT NativeThemeWin : public NativeTheme,
// Create a temporary HDC, paint to that, clean up the alpha values in the
// temporary HDC, and then blit the result to canvas. This is to work around
// the fact that Windows XP and some classic themes give bogus alpha values.
- void PaintIndirect(SkCanvas* canvas,
+ void PaintIndirect(SkCanvas* destination_canvas,
+ HDC destination_hdc,
Part part,
State state,
const gfx::Rect& rect,