feat: enable Windows Control Overlay on Linux (#41769)
This commit is contained in:
parent
1d4b00692d
commit
32e5012017
24 changed files with 1026 additions and 107 deletions
|
@ -130,3 +130,4 @@ fix_font_face_resolution_when_renderer_is_blocked.patch
|
|||
feat_enable_passing_exit_code_on_service_process_crash.patch
|
||||
chore_remove_reference_to_chrome_browser_themes.patch
|
||||
x11_use_localized_display_label_only_for_browser_process.patch
|
||||
feat_enable_customizing_symbol_color_in_framecaptionbutton.patch
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Shelley Vohr <shelley.vohr@gmail.com>
|
||||
Date: Fri, 5 Apr 2024 11:07:22 +0200
|
||||
Subject: feat: enable customizing symbol color in FrameCaptionButton
|
||||
|
||||
This enables customizing the symbol color on a given FrameCaptionButton
|
||||
for the Window Controls Overlay API on Linux. By default, the symbol color
|
||||
is dynamically calculated based on the background color of the button to
|
||||
ensure it has minimum contrast required to be accessible.
|
||||
|
||||
This should be upstreamed to Chromium if possible.
|
||||
|
||||
diff --git a/ui/views/window/frame_caption_button.cc b/ui/views/window/frame_caption_button.cc
|
||||
index 73e6020e3b9b6e0d12a8dea991f189b3ddeab14c..b38e5bd1408c26cbbfc995fc2ac5dc5983cc0db7 100644
|
||||
--- a/ui/views/window/frame_caption_button.cc
|
||||
+++ b/ui/views/window/frame_caption_button.cc
|
||||
@@ -107,7 +107,7 @@ FrameCaptionButton::FrameCaptionButton(PressedCallback callback,
|
||||
FrameCaptionButton::~FrameCaptionButton() = default;
|
||||
|
||||
// static
|
||||
-SkColor FrameCaptionButton::GetButtonColor(SkColor background_color) {
|
||||
+SkColor FrameCaptionButton::GetAccessibleButtonColor(SkColor background_color) {
|
||||
// Use IsDark() to change target colors instead of PickContrastingColor(), so
|
||||
// that DefaultFrameHeader::GetTitleColor() (which uses different target
|
||||
// colors) can change between light/dark targets at the same time. It looks
|
||||
@@ -124,6 +124,22 @@ SkColor FrameCaptionButton::GetButtonColor(SkColor background_color) {
|
||||
.color;
|
||||
}
|
||||
|
||||
+SkColor FrameCaptionButton::GetButtonColor(SkColor background_color) {
|
||||
+ // If the button color has been overridden, return that.
|
||||
+ if (button_color_ != SkColor())
|
||||
+ return button_color_;
|
||||
+
|
||||
+ return GetAccessibleButtonColor(background_color);
|
||||
+}
|
||||
+
|
||||
+void FrameCaptionButton::SetButtonColor(SkColor button_color) {
|
||||
+ if (button_color_ == button_color)
|
||||
+ return;
|
||||
+
|
||||
+ button_color_ = button_color;
|
||||
+ MaybeRefreshIconAndInkdropBaseColor();
|
||||
+}
|
||||
+
|
||||
// static
|
||||
float FrameCaptionButton::GetInactiveButtonColorAlphaRatio() {
|
||||
return 0.38f;
|
||||
diff --git a/ui/views/window/frame_caption_button.h b/ui/views/window/frame_caption_button.h
|
||||
index 0ac923a3ca6052d499ed7c1a4f156b0f19ad4e64..3164f79828218d57843eba823e0f14ff456b2df4 100644
|
||||
--- a/ui/views/window/frame_caption_button.h
|
||||
+++ b/ui/views/window/frame_caption_button.h
|
||||
@@ -44,8 +44,18 @@ class VIEWS_EXPORT FrameCaptionButton : public Button {
|
||||
FrameCaptionButton& operator=(const FrameCaptionButton&) = delete;
|
||||
~FrameCaptionButton() override;
|
||||
|
||||
+ // Gets the color to use for a frame caption button with accessible contrast
|
||||
+ // to the given background color.
|
||||
+ static SkColor GetAccessibleButtonColor(SkColor background_color);
|
||||
+
|
||||
// Gets the color to use for a frame caption button.
|
||||
- static SkColor GetButtonColor(SkColor background_color);
|
||||
+ SkColor GetButtonColor(SkColor background_color);
|
||||
+
|
||||
+ // Sets the color to use for a frame caption button.
|
||||
+ // The color is by default calculated to be an accessible contrast
|
||||
+ // to the background color, so you should keep that in mind when
|
||||
+ // overriding that behavior.
|
||||
+ void SetButtonColor(SkColor button_color);
|
||||
|
||||
// Gets the alpha ratio for the colors of inactive frame caption buttons.
|
||||
static float GetInactiveButtonColorAlphaRatio();
|
||||
@@ -134,6 +144,7 @@ class VIEWS_EXPORT FrameCaptionButton : public Button {
|
||||
// TODO(b/292154873): Store the foreground color instead of the background
|
||||
// color for the SkColor type.
|
||||
absl::variant<ui::ColorId, SkColor> color_ = gfx::kPlaceholderColor;
|
||||
+ SkColor button_color_ = SkColor();
|
||||
|
||||
// Whether the button should be painted as active.
|
||||
bool paint_as_active_ = false;
|
Loading…
Add table
Add a link
Reference in a new issue