views: Split SetBackgroundColor() out of Widget::SetColorModeOverride()
The existing Widget::SetColorModeOverride() can set both color mode and
a background color. This CL splits SetBackgroundColor() out of
SetColorModeOverride() to improve clarity.
Call sites have been updated to use the appropriate new method.
Bug: none
Change-Id: Ie531b337fc4142ee5b0dbd631a2ed499b37efe39
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6914440
Commit-Queue: Keren Zhu <kerenzhu@chromium.org>
Reviewed-by: Colin Blundell <blundell@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1511717}
diff --git a/ash/webui/camera_app_ui/camera_app_ui.cc b/ash/webui/camera_app_ui/camera_app_ui.cc
index 8b2ab8f..d194b26 100644
--- a/ash/webui/camera_app_ui/camera_app_ui.cc
+++ b/ash/webui/camera_app_ui/camera_app_ui.cc
@@ -298,8 +298,7 @@
views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window());
if (widget) {
// Camera app is always dark.
- widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark,
- /*background_color=*/std::nullopt);
+ widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark);
} else {
LOG(ERROR) << "Can't find widget for CCA window.";
}
diff --git a/chrome/browser/glic/widget/glic_view.cc b/chrome/browser/glic/widget/glic_view.cc
index 66e428f..e6a82bc 100644
--- a/chrome/browser/glic/widget/glic_view.cc
+++ b/chrome/browser/glic/widget/glic_view.cc
@@ -85,8 +85,7 @@
if (views::Widget* widget = GetWidget(); explicit_background && widget) {
// Set the native widget background color if needed.
- widget->SetColorModeOverride(
- /*color_mode=*/std::nullopt, kColorGlicBackground);
+ widget->SetBackgroundColor(kColorGlicBackground);
}
}
diff --git a/chrome/browser/ui/views/borealis/borealis_splash_screen_view.cc b/chrome/browser/ui/views/borealis/borealis_splash_screen_view.cc
index c4391cb..6a4b3d1e 100644
--- a/chrome/browser/ui/views/borealis/borealis_splash_screen_view.cc
+++ b/chrome/browser/ui/views/borealis/borealis_splash_screen_view.cc
@@ -68,8 +68,7 @@
// This UI has custom colors to match Steam's and those are close to ash's
// dark mode.
g_delegate->GetWidget()->SetColorModeOverride(
- {ui::ColorProviderKey::ColorMode::kDark},
- /*background_color=*/std::nullopt);
+ ui::ColorProviderKey::ColorMode::kDark);
}
g_delegate->GetWidget()->Show();
}
diff --git a/chrome/browser/ui/views/frame/picture_in_picture_browser_frame_view.cc b/chrome/browser/ui/views/frame/picture_in_picture_browser_frame_view.cc
index 5b7536d2..28aac762 100644
--- a/chrome/browser/ui/views/frame/picture_in_picture_browser_frame_view.cc
+++ b/chrome/browser/ui/views/frame/picture_in_picture_browser_frame_view.cc
@@ -954,8 +954,7 @@
// TODO(crbug.com/40279642): Don't force dark mode once we support a
// light mode window.
- GetWidget()->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark,
- /*background_color=*/std::nullopt);
+ GetWidget()->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark);
// Fade in animation is disabled for Document and Video Picture-in-Picture on
// Windows. On Windows, resizable windows can not be translucent. See
diff --git a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
index 3b72b61..f14ba4d 100644
--- a/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
+++ b/chrome/browser/ui/views/overlay/video_overlay_window_views.cc
@@ -386,8 +386,8 @@
// The 2024 updated controls use dark mode colors.
if (Use2024UI()) {
- overlay_window->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark,
- /*background_color=*/std::nullopt);
+ overlay_window->SetColorModeOverride(
+ ui::ColorProviderKey::ColorMode::kDark);
}
overlay_window->CalculateAndUpdateWindowBounds();
diff --git a/components/live_caption/views/caption_bubble.cc b/components/live_caption/views/caption_bubble.cc
index 97ca397..f9dbddef 100644
--- a/components/live_caption/views/caption_bubble.cc
+++ b/components/live_caption/views/caption_bubble.cc
@@ -1402,8 +1402,7 @@
}
views::BubbleDialogDelegateView::SetBackgroundColor(background_color);
- GetWidget()->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark,
- /*background_color=*/std::nullopt);
+ GetWidget()->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark);
}
void CaptionBubble::OnLanguageChanged(const std::string& display_language) {
diff --git a/ui/views/widget/widget.cc b/ui/views/widget/widget.cc
index dcb03d2..d21d8b52 100644
--- a/ui/views/widget/widget.cc
+++ b/ui/views/widget/widget.cc
@@ -2408,11 +2408,15 @@
}
void Widget::SetColorModeOverride(
- std::optional<ui::ColorProviderKey::ColorMode> color_mode,
- std::optional<ui::ColorId> background_color) {
- if (color_mode != color_mode_override_ ||
- background_color != background_color_) {
+ std::optional<ui::ColorProviderKey::ColorMode> color_mode) {
+ if (color_mode != color_mode_override_) {
color_mode_override_ = color_mode;
+ ThemeChanged();
+ }
+}
+
+void Widget::SetBackgroundColor(std::optional<ui::ColorId> background_color) {
+ if (background_color != background_color_) {
background_color_ = background_color;
ThemeChanged();
}
diff --git a/ui/views/widget/widget.h b/ui/views/widget/widget.h
index 4988309..396e91d 100644
--- a/ui/views/widget/widget.h
+++ b/ui/views/widget/widget.h
@@ -1435,8 +1435,11 @@
// Sets an override for `color_mode` when `GetColorProvider()` is requested.
// e.g. if set to kDark, colors will always be for the dark theme.
void SetColorModeOverride(
- std::optional<ui::ColorProviderKey::ColorMode> color_mode,
- std::optional<ui::ColorId> background_color);
+ std::optional<ui::ColorProviderKey::ColorMode> color_mode);
+
+ // Sets the background color for the widget. This color is used before the
+ // view paints anything.
+ void SetBackgroundColor(std::optional<ui::ColorId> background_color);
// ui::ColorProviderSource:
const ui::ColorProvider* GetColorProvider() const override;
diff --git a/ui/views/widget/widget_unittest.cc b/ui/views/widget/widget_unittest.cc
index 332ceb8..35f8bac5 100644
--- a/ui/views/widget/widget_unittest.cc
+++ b/ui/views/widget/widget_unittest.cc
@@ -395,7 +395,7 @@
test_theme.SetDarkMode(true);
widget->SetNativeThemeForTest(&test_theme);
- widget->SetColorModeOverride(std::nullopt, std::nullopt);
+ widget->SetColorModeOverride(std::nullopt);
// Verify that we resolve the dark color when we don't override color mode.
EXPECT_EQ(kDarkColor,
widget->GetColorProvider()->GetColor(ui::kColorSysPrimary));
@@ -408,8 +408,7 @@
test_theme.SetDarkMode(false);
widget->SetNativeThemeForTest(&test_theme);
- widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark,
- std::nullopt);
+ widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark);
// Verify that we resolve the light color even though the theme is dark.
EXPECT_EQ(kDarkColor,
widget->GetColorProvider()->GetColor(ui::kColorSysPrimary));
@@ -422,8 +421,7 @@
test_theme.SetDarkMode(true);
widget->SetNativeThemeForTest(&test_theme);
- widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kLight,
- std::nullopt);
+ widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kLight);
// Verify that we resolve the light color even though the theme is dark.
EXPECT_EQ(kLightColor,
widget->GetColorProvider()->GetColor(ui::kColorSysPrimary));
@@ -444,8 +442,8 @@
// Ensure neither has an override set. The child should inherit the color mode
// of the parent.
- widget->SetColorModeOverride(std::nullopt, std::nullopt);
- widget_child->SetColorModeOverride(std::nullopt, std::nullopt);
+ widget->SetColorModeOverride(std::nullopt);
+ widget_child->SetColorModeOverride(std::nullopt);
EXPECT_EQ(kDarkColor,
widget->GetColorProvider()->GetColor(ui::kColorSysPrimary));
EXPECT_EQ(kDarkColor,
@@ -475,8 +473,8 @@
// Ensure neither has an override set. The child should inherit the color mode
// of the parent.
- widget->SetColorModeOverride(std::nullopt, std::nullopt);
- widget_child->SetColorModeOverride(std::nullopt, std::nullopt);
+ widget->SetColorModeOverride(std::nullopt);
+ widget_child->SetColorModeOverride(std::nullopt);
EXPECT_EQ(kDarkColor,
widget->GetColorProvider()->GetColor(ui::kColorSysPrimary));
EXPECT_EQ(kDarkColor,
@@ -484,15 +482,13 @@
// Set the parent's override to light, then back to dark. the child should
// follow the parent's overridden color mode.
- widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kLight,
- std::nullopt);
+ widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kLight);
EXPECT_EQ(kLightColor,
widget->GetColorProvider()->GetColor(ui::kColorSysPrimary));
EXPECT_EQ(kLightColor,
widget_child->GetColorProvider()->GetColor(ui::kColorSysPrimary));
- widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark,
- std::nullopt);
+ widget->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kDark);
EXPECT_EQ(kDarkColor,
widget->GetColorProvider()->GetColor(ui::kColorSysPrimary));
EXPECT_EQ(kDarkColor,
@@ -500,8 +496,7 @@
// Override the child's color mode to light. The parent should continue to
// report a dark color mode.
- widget_child->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kLight,
- std::nullopt);
+ widget_child->SetColorModeOverride(ui::ColorProviderKey::ColorMode::kLight);
EXPECT_EQ(kDarkColor,
widget->GetColorProvider()->GetColor(ui::kColorSysPrimary));
EXPECT_EQ(kLightColor,