Chromium Code Reviews| Index: chrome/browser/themes/theme_service_win.cc |
| diff --git a/chrome/browser/themes/theme_service_win.cc b/chrome/browser/themes/theme_service_win.cc |
| index 322a55a87330c88311720bdae1ee93c00c0cdce4..ad8dd677be2ae72a91fa81a79630d3e956ebce7a 100644 |
| --- a/chrome/browser/themes/theme_service_win.cc |
| +++ b/chrome/browser/themes/theme_service_win.cc |
| @@ -15,7 +15,7 @@ |
| #include "ui/gfx/geometry/safe_integer_conversions.h" |
| ThemeServiceWin::ThemeServiceWin() { |
| - // This just checks for Windows 10 instead of calling ShouldUseDwmFrameColor() |
| + // This just checks for Windows 10 instead of calling DwmColorsAllowed() |
| // because we want to monitor the frame color even when a custom frame is in |
| // use, so that it will be correct if at any time the user switches to the |
| // native frame. |
| @@ -39,37 +39,47 @@ bool ThemeServiceWin::ShouldUseNativeFrame() const { |
| } |
| SkColor ThemeServiceWin::GetDefaultColor(int id, bool incognito) const { |
| - if (ShouldUseDwmFrameColor()) { |
| - // Active native windows on Windows 10 may have a custom frame color. |
| - if (id == ThemeProperties::COLOR_FRAME) |
| - return dwm_frame_color_; |
| - |
| + if (DwmColorsAllowed()) { |
| if (id == ThemeProperties::COLOR_ACCENT_BORDER) |
| return dwm_accent_border_color_; |
| - // Inactive native windows on Windows 10 always have a white frame. |
| - if (id == ThemeProperties::COLOR_FRAME_INACTIVE) |
| - return SK_ColorWHITE; |
| + if (use_dwm_frame_color_) { |
| + // Incognito frame is the same as normal when we're using DWM colors. |
| + if (id == ThemeProperties::COLOR_FRAME) |
| + return dwm_frame_color_; |
| + if (id == ThemeProperties::COLOR_FRAME_INACTIVE) |
| + return dwm_inactive_frame_color_; |
| + } |
| } |
| return ThemeService::GetDefaultColor(id, incognito); |
| } |
| -bool ThemeServiceWin::ShouldUseDwmFrameColor() const { |
| +bool ThemeServiceWin::DwmColorsAllowed() const { |
| return ShouldUseNativeFrame() && |
| (base::win::GetVersion() >= base::win::VERSION_WIN10); |
| } |
| void ThemeServiceWin::OnDwmKeyUpdated() { |
| - // Attempt to read the accent color. |
| DWORD accent_color, color_prevalence; |
| - dwm_frame_color_ = |
| - ((dwm_key_->ReadValueDW(L"ColorPrevalence", &color_prevalence) == |
| - ERROR_SUCCESS) && |
| - (color_prevalence == 1) && |
| - (dwm_key_->ReadValueDW(L"AccentColor", &accent_color) == ERROR_SUCCESS)) |
| - ? skia::COLORREFToSkColor(accent_color) |
| - : SK_ColorWHITE; |
| + use_dwm_frame_color_ = |
| + dwm_key_->ReadValueDW(L"AccentColor", &accent_color) == ERROR_SUCCESS && |
| + dwm_key_->ReadValueDW(L"ColorPrevalence", &color_prevalence) == |
| + ERROR_SUCCESS && |
| + color_prevalence == 1; |
| + if (use_dwm_frame_color_) { |
| + dwm_frame_color_ = skia::COLORREFToSkColor(accent_color); |
| + DWORD accent_color_inactive; |
| + if (dwm_key_->ReadValueDW(L"AccentColorInactive", &accent_color_inactive) == |
| + ERROR_SUCCESS) { |
| + dwm_inactive_frame_color_ = |
| + skia::COLORREFToSkColor(accent_color_inactive); |
| + } else { |
| + // 20% active color/80% white blend to create the inactive color. |
| + dwm_inactive_frame_color_ = |
| + color_utils::AlphaBlend(dwm_frame_color_, SK_ColorWHITE, 0x33); |
|
Peter Kasting
2016/12/01 06:19:04
Nit: If you wint up preserving this, consider shif
Bret
2016/12/08 00:16:07
Done.
|
| + } |
| + } |
| dwm_accent_border_color_ = SK_ColorWHITE; |
| DWORD colorization_color, colorization_color_balance; |