| 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 4aab2c4219d3244790e283ae8a1a8e88eccb7f66..55497dab941ba7d9dc0ee548eeaf8f1e8a2f0eca 100644
|
| --- a/chrome/browser/themes/theme_service_win.cc
|
| +++ b/chrome/browser/themes/theme_service_win.cc
|
| @@ -10,6 +10,8 @@
|
| #include "chrome/grit/theme_resources.h"
|
| #include "skia/ext/skia_utils_win.h"
|
| #include "ui/base/win/shell.h"
|
| +#include "ui/gfx/color_utils.h"
|
| +#include "ui/gfx/geometry/safe_integer_conversions.h"
|
|
|
| ThemeServiceWin::ThemeServiceWin() {
|
| // This just checks for Windows 10 instead of calling ShouldUseDwmFrameColor()
|
| @@ -39,6 +41,9 @@ SkColor ThemeServiceWin::GetDefaultColor(int id, bool incognito) const {
|
| if (id == ThemeProperties::COLOR_FRAME)
|
| return dwm_frame_color_;
|
|
|
| + 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;
|
| @@ -63,6 +68,33 @@ void ThemeServiceWin::OnDwmKeyUpdated() {
|
| ? skia::COLORREFToSkColor(accent_color)
|
| : SK_ColorWHITE;
|
|
|
| + dwm_accent_border_color_ = SK_ColorWHITE;
|
| + DWORD colorization_color, colorization_color_balance;
|
| + if ((dwm_key_->ReadValueDW(L"ColorizationColor", &colorization_color) ==
|
| + ERROR_SUCCESS) &&
|
| + (dwm_key_->ReadValueDW(L"ColorizationColorBalance",
|
| + &colorization_color_balance) == ERROR_SUCCESS)) {
|
| + // The accent border color is a linear blend between the colorization
|
| + // color and the neutral #d9d9d9. colorization_color_balance is the
|
| + // percentage of the colorization color in that blend.
|
| + //
|
| + // On Windows version 1611 colorization_color_balance can be 0xfffffff3 if
|
| + // the accent color is taken from the background and either the background
|
| + // is a solid color or was just changed to a slideshow. It's unclear what
|
| + // that value's supposed to mean, so change it to 80 to match Edge's
|
| + // behavior.
|
| + if (colorization_color_balance > 100)
|
| + colorization_color_balance = 80;
|
| +
|
| + // colorization_color's high byte is not an alpha value, so replace it
|
| + // with 0xff to make an opaque ARGB color.
|
| + SkColor input_color = SkColorSetA(colorization_color, 0xff);
|
| +
|
| + dwm_accent_border_color_ = color_utils::AlphaBlend(
|
| + input_color, SkColorSetRGB(0xd9, 0xd9, 0xd9),
|
| + gfx::ToRoundedInt(255 * colorization_color_balance / 100.f));
|
| + }
|
| +
|
| // Watch for future changes.
|
| if (!dwm_key_->StartWatching(base::Bind(
|
| &ThemeServiceWin::OnDwmKeyUpdated, base::Unretained(this))))
|
|
|