[Containers] Fix missing colors for tabs (#34561)

* Fix wrong color ids for light-unpinned-inactive

* Add override_tab_background_color to TabAccentColors

We need to override tab background color for inactive tabs with accent in case
it's hovered.
This commit is contained in:
Sangwoo Ko
2026-03-10 07:55:37 +09:00
committed by GitHub
parent fef2a76f4c
commit 1b29733681
3 changed files with 40 additions and 17 deletions
@@ -41,6 +41,7 @@
ColorIds { \
.icon_color_id = COLOR_40(color), .icon_border_color_id = COLOR_20(color), \
.background_color_id = COLOR_10(color), .border_color_id = 0, \
.override_tab_background_color_id = COLOR_10(color), \
}
// Yield color ids for dark-unpinned-active
@@ -62,12 +63,13 @@
}
// Yield color ids for dark-unpinned-hovered
#define DARK_UNPINNED_HOVERED_COLOR_IDS(color) \
ColorIds { \
.icon_color_id = Primitive60(color), \
.icon_border_color_id = COLOR_20(color), \
.background_color_id = COLOR_20(color), \
.border_color_id = COLOR_20(color), \
#define DARK_UNPINNED_HOVERED_COLOR_IDS(color) \
ColorIds { \
.icon_color_id = Primitive60(color), \
.icon_border_color_id = COLOR_20(color), \
.background_color_id = COLOR_20(color), \
.border_color_id = COLOR_20(color), \
.override_tab_background_color_id = COLOR_10(color), \
}
// Yield color ids for light-pinned-active
@@ -91,6 +93,7 @@
ColorIds { \
.icon_color_id = COLOR_40(color), .icon_border_color_id = COLOR_20(color), \
.background_color_id = COLOR_10(color), .border_color_id = 0, \
.override_tab_background_color_id = COLOR_10(color), \
}
// Yield color ids for light-unpinned-active
@@ -103,20 +106,22 @@
}
// Yield color ids for light-unpinned-hovered
#define LIGHT_UNPINNED_HOVERED_COLOR_IDS(color) \
ColorIds { \
.icon_color_id = Primitive60(color), \
.icon_border_color_id = COLOR_20(color), \
.background_color_id = COLOR_20(color), \
.border_color_id = COLOR_20(color), \
#define LIGHT_UNPINNED_HOVERED_COLOR_IDS(color) \
ColorIds { \
.icon_color_id = Primitive60(color), \
.icon_border_color_id = COLOR_20(color), \
.background_color_id = COLOR_20(color), \
.border_color_id = COLOR_20(color), \
.override_tab_background_color_id = COLOR_10(color), \
}
// Yield color ids for light-unpinned-inactive
#define LIGHT_UNPINNED_INACTIVE_COLOR_IDS(color) \
ColorIds { \
.icon_color_id = Primitive60(color), \
.icon_border_color_id = COLOR_10(color), .background_color_id = 0, \
.border_color_id = COLOR_10(color), \
#define LIGHT_UNPINNED_INACTIVE_COLOR_IDS(color) \
ColorIds { \
.icon_color_id = Primitive60(color), \
.icon_border_color_id = COLOR_10(color), \
.background_color_id = COLOR_10(color), \
.border_color_id = COLOR_10(color), \
}
// [state]: active, hovered, inactive (each wrapped so one subobject)
@@ -176,6 +181,7 @@ struct ColorIds {
ui::ColorId icon_border_color_id = 0;
ui::ColorId background_color_id = 0;
ui::ColorId border_color_id = 0;
ui::ColorId override_tab_background_color_id = 0;
};
enum ColorKey {
@@ -274,6 +280,10 @@ TabAccentColors GetTabAccentColors(const TabAccentColorsParams& params,
ids.icon_border_color_id == 0
? SK_ColorTRANSPARENT
: color_provider->GetColor(ids.icon_border_color_id),
.override_tab_background_color =
ids.override_tab_background_color_id == 0
? SK_ColorTRANSPARENT
: color_provider->GetColor(ids.override_tab_background_color_id),
};
}
@@ -15,6 +15,7 @@ struct TabAccentColors {
SkColor background_color = 0;
SkColor icon_color = 0;
SkColor icon_border_color = 0;
SkColor override_tab_background_color = 0;
};
#endif // BRAVE_BROWSER_UI_VIEWS_TABS_ACCENT_COLOR_BRAVE_TAB_ACCENT_TYPES_H_
@@ -651,6 +651,18 @@ std::optional<SkColor> BraveVerticalTabStyle::GetTargetTabBackgroundColor(
return gfx::kPlaceholderColor;
}
// We have tab_background_color override for inactive tabs with accent in case
// it's hovered
if (selection_state == TabStyle::TabSelectionState::kInactive && hovered &&
static_cast<const BraveTab*>(tab())->ShouldPaintTabAccent()) {
auto accent_colors =
static_cast<const BraveTab*>(tab())->GetTabAccentColors();
if (accent_colors &&
accent_colors->override_tab_background_color != SK_ColorTRANSPARENT) {
return accent_colors->override_tab_background_color;
}
}
// Tab in tile doesn't have background in inactive state.
// In split view tile, we don't have selected tab's background.
// When any tab in a tile is clicked, the other tab in a same tile