diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-01-04 14:17:57 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2017-01-05 10:05:06 +0000 |
commit | 39d357e3248f80abea0159765ff39554affb40db (patch) | |
tree | aba0e6bfb76de0244bba0f5fdbd64b830dd6e621 /chromium/ui/native_theme | |
parent | 87778abf5a1f89266f37d1321b92a21851d8244d (diff) | |
download | qtwebengine-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.gn | 40 | ||||
-rw-r--r-- | chromium/ui/native_theme/common_theme.cc | 283 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme.gyp | 71 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme.h | 15 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_aura.cc | 2 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_aurawin.cc | 83 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_aurawin.h | 37 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_dark_aura.cc | 44 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_mac.h | 5 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_mac.mm | 100 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_mac_unittest.cc | 14 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_win.cc | 163 | ||||
-rw-r--r-- | chromium/ui/native_theme/native_theme_win.h | 6 |
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, |