Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(517)

Unified Diff: chrome/browser/themes/theme_service_win.cc

Issue 2381283003: Have Chrome draw top window border when using custom titlebar. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: remove default Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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))))
« no previous file with comments | « chrome/browser/themes/theme_service_win.h ('k') | chrome/browser/ui/views/frame/browser_desktop_window_tree_host_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698