0

Migrate VectorIconModel and its related classes to ui::ColorVariant

Bug: b:394420459
Change-Id: I838ec1927823a0d77f8da9b7ef421baccb1dac57
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6236788
Reviewed-by: Xiyuan Xia <xiyuan@chromium.org>
Commit-Queue: Zoraiz Naeem <zoraiznaeem@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1427382}
This commit is contained in:
Zoraiz Naeem
2025-03-03 14:16:02 -08:00
committed by Chromium LUCI CQ
parent badbedab2a
commit dcba9470ae
10 changed files with 30 additions and 98 deletions

@ -718,14 +718,8 @@ std::pair<ui::ImageModel, ui::ImageModel> IconButton::VectorImages(
return {ui::ImageModel(), ui::ImageModel()};
}
ui::ImageModel new_normal_image_model;
if (auto sk_color = color.GetSkColor()) {
new_normal_image_model =
ui::ImageModel::FromVectorIcon(*icon, *sk_color, icon_size);
} else {
new_normal_image_model =
ui::ImageModel::FromVectorIcon(*icon, *color.GetColorId(), icon_size);
}
ui::ImageModel new_normal_image_model =
ui::ImageModel::FromVectorIcon(*icon, color, icon_size);
ui::ImageModel disabled_image_model = ui::ImageModel::FromVectorIcon(
*icon, cros_tokens::kCrosSysDisabled, icon_size);

@ -423,14 +423,9 @@ void PillButton::UpdateIconColor() {
// If custom icon color is set, use it to set icon color.
if (icon_color_) {
if (auto color = icon_color_->GetSkColor()) {
SetImageModel(views::Button::STATE_NORMAL,
ui::ImageModel::FromVectorIcon(*icon_, *color, kIconSize));
} else {
SetImageModel(views::Button::STATE_NORMAL,
ui::ImageModel::FromVectorIcon(
*icon_, *icon_color_->GetColorId(), kIconSize));
}
SetImageModel(
views::Button::STATE_NORMAL,
ui::ImageModel::FromVectorIcon(*icon_, *icon_color_, kIconSize));
} else {
// Otherwise, use default color ID to set icon color.
auto default_color_id = GetDefaultButtonTextIconColorId(type_);

@ -499,11 +499,7 @@ ui::ImageModel GetSizedAvatarImageModel(const ui::ImageModel& image, int size) {
gfx::Size(size, size)));
}
const ui::VectorIconModel& model = image.GetVectorIcon();
if (model.has_color()) {
return ui::ImageModel::FromVectorIcon(*model.vector_icon(), model.color(),
size);
}
return ui::ImageModel::FromVectorIcon(*model.vector_icon(), model.color_id(),
return ui::ImageModel::FromVectorIcon(*model.vector_icon(), model.color(),
size);
}

@ -30,21 +30,21 @@ class StarRatingViewTest : public views::ViewsTestBase {
const ui::VectorIconModel& model =
view()->GetVectorIconModelForIndexForTesting(index);
return model.vector_icon()->name == vector_icons::kStarIcon.name &&
model.color_id() == kColorStarRatingFullIcon;
model.color() == kColorStarRatingFullIcon;
}
bool IsHalfStarIconAt(int index) {
const ui::VectorIconModel& model =
view()->GetVectorIconModelForIndexForTesting(index);
return model.vector_icon()->name == vector_icons::kStarHalfIcon.name &&
model.color_id() == kColorStarRatingFullIcon;
model.color() == kColorStarRatingFullIcon;
}
bool IsEmptyStarIconAt(int index) {
const ui::VectorIconModel& model =
view()->GetVectorIconModelForIndexForTesting(index);
return model.vector_icon()->name == vector_icons::kStarIcon.name &&
model.color_id() == kColorStarRatingEmptyIcon;
model.color() == kColorStarRatingEmptyIcon;
}
private:

@ -477,18 +477,9 @@ std::optional<ui::ImageModel> ToolbarController::GetMenuIcon(
pinned_icon_image.IsVectorIcon()) {
ui::VectorIconModel vector_icon_model =
pinned_icon_image.GetVectorIcon();
if (vector_icon_model.has_color()) {
return std::make_optional(ui::ImageModel::FromVectorIcon(
*vector_icon_model.vector_icon(), vector_icon_model.color(),
ui::SimpleMenuModel::kDefaultIconSize));
} else {
return std::make_optional(ui::ImageModel::FromVectorIcon(
*vector_icon_model.vector_icon(),
vector_icon_model.color_id(),
ui::SimpleMenuModel::kDefaultIconSize));
}
} else {
return std::make_optional(pinned_icon_image);
}
@ -812,7 +803,7 @@ void ToolbarController::ActionItemChanged(actions::ActionItem* action_item) {
ui::VectorIconModel vector_icon_model = pinned_icon_image.GetVectorIcon();
menu_item->icon_view()->SetImage(ui::ImageModel::FromVectorIcon(
*vector_icon_model.vector_icon(), vector_icon_model.color_id(),
*vector_icon_model.vector_icon(), vector_icon_model.color(),
ui::SimpleMenuModel::kDefaultIconSize));
}
status_indicator->Hide();

@ -11,6 +11,7 @@
#include "base/trace_event/trace_event.h"
#include "ui/base/resource/resource_bundle.h"
#include "ui/color/color_id.h"
#include "ui/color/color_variant.h"
#include "ui/gfx/vector_icon_utils.h"
#if !BUILDFLAG(IS_IOS)
@ -22,16 +23,7 @@ namespace ui {
VectorIconModel::VectorIconModel() = default;
VectorIconModel::VectorIconModel(const gfx::VectorIcon& vector_icon,
ColorId color_id,
int icon_size,
const gfx::VectorIcon* badge_icon)
: vector_icon_(&vector_icon),
icon_size_(icon_size),
color_(color_id),
badge_icon_(badge_icon) {}
VectorIconModel::VectorIconModel(const gfx::VectorIcon& vector_icon,
SkColor color,
ui::ColorVariant color,
int icon_size,
const gfx::VectorIcon* badge_icon)
: vector_icon_(&vector_icon),
@ -73,18 +65,7 @@ ImageModel& ImageModel::operator=(ImageModel&&) = default;
// static
ImageModel ImageModel::FromVectorIcon(const gfx::VectorIcon& vector_icon,
ColorId color_id,
int icon_size,
const gfx::VectorIcon* badge_icon) {
if (!icon_size)
icon_size = gfx::GetDefaultSizeOfVectorIcon(vector_icon);
return ImageModel(
VectorIconModel(vector_icon, color_id, icon_size, badge_icon));
}
// static
ImageModel ImageModel::FromVectorIcon(const gfx::VectorIcon& vector_icon,
SkColor color,
ui::ColorVariant color,
int icon_size,
const gfx::VectorIcon* badge_icon) {
if (!icon_size)

@ -11,6 +11,7 @@
#include "third_party/abseil-cpp/absl/types/variant.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/color/color_id.h"
#include "ui/color/color_variant.h"
#include "ui/gfx/color_palette.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/image/image.h"
@ -33,14 +34,16 @@ class ColorProvider;
// eventually resolved by the ColorProvider from the correct context. This class
// is only used internal to ImageModel and should never be instantiated except
// by ImageModel.
class COMPONENT_EXPORT(UI_BASE) VectorIconModel {
public:
VectorIconModel();
VectorIconModel(const VectorIconModel&);
VectorIconModel& operator=(const VectorIconModel&);
VectorIconModel(VectorIconModel&&);
VectorIconModel& operator=(VectorIconModel&&);
~VectorIconModel();
bool is_empty() const { return !vector_icon_; }
@ -50,28 +53,20 @@ class COMPONENT_EXPORT(UI_BASE) VectorIconModel {
const gfx::VectorIcon* vector_icon() const { return vector_icon_; }
int icon_size() const { return icon_size_; }
ColorId color_id() const { return absl::get<ColorId>(color_); }
SkColor color() const { return absl::get<SkColor>(color_); }
bool has_color() const { return absl::holds_alternative<SkColor>(color_); }
ui::ColorVariant color() const { return color_; }
const gfx::VectorIcon* badge_icon() const { return badge_icon_; }
private:
friend class ImageModel;
VectorIconModel(const gfx::VectorIcon& vector_icon,
ColorId color_id,
int icon_size,
const gfx::VectorIcon* badge_icon);
// TODO (kylixrd): This should be eventually removed once all instances of
// hard-coded SkColor constants are removed in favor of using a color id.
VectorIconModel(const gfx::VectorIcon& vector_icon,
SkColor color,
ui::ColorVariant color,
int icon_size,
const gfx::VectorIcon* badge_icon);
raw_ptr<const gfx::VectorIcon> vector_icon_ = nullptr;
int icon_size_ = 0;
absl::variant<ColorId, SkColor> color_ = gfx::kPlaceholderColor;
ui::ColorVariant color_;
raw_ptr<const gfx::VectorIcon> badge_icon_ = nullptr;
};
@ -91,11 +86,7 @@ class COMPONENT_EXPORT(UI_BASE) ImageModel {
// TODO(pkasting): Remove the default `color_id` or replace with kColorIcon.
static ImageModel FromVectorIcon(const gfx::VectorIcon& vector_icon,
ColorId color_id = kColorMenuIcon,
int icon_size = 0,
const gfx::VectorIcon* badge_icon = nullptr);
static ImageModel FromVectorIcon(const gfx::VectorIcon& vector_icon,
SkColor color,
ui::ColorVariant color = kColorMenuIcon,
int icon_size = 0,
const gfx::VectorIcon* badge_icon = nullptr);
static ImageModel FromImage(const gfx::Image& image);

@ -5,6 +5,7 @@
#include "ui/base/themed_vector_icon.h"
#include "ui/color/color_provider.h"
#include "ui/color/color_variant.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/vector_icon_types.h"
#include "ui/gfx/vector_icon_utils.h"
@ -14,28 +15,18 @@ namespace ui {
ThemedVectorIcon::ThemedVectorIcon() = default;
ThemedVectorIcon::ThemedVectorIcon(const gfx::VectorIcon* icon,
ColorId color_id,
ui::ColorVariant color,
int icon_size,
const gfx::VectorIcon* badge)
: icon_(icon), icon_size_(icon_size), color_(color_id), badge_(badge) {}
: icon_(icon), icon_size_(icon_size), color_(color), badge_(badge) {}
ThemedVectorIcon::ThemedVectorIcon(const VectorIconModel& vector_icon_model)
: icon_(vector_icon_model.vector_icon()),
icon_size_(vector_icon_model.icon_size()),
badge_(vector_icon_model.badge_icon()) {
if (vector_icon_model.has_color()) {
color_ = vector_icon_model.color();
} else {
color_ = vector_icon_model.color_id();
}
color_ = vector_icon_model.color();
}
ThemedVectorIcon::ThemedVectorIcon(const gfx::VectorIcon* icon,
SkColor color,
int icon_size,
const gfx::VectorIcon* badge)
: icon_(icon), icon_size_(icon_size), color_(color), badge_(badge) {}
ThemedVectorIcon::ThemedVectorIcon(const ThemedVectorIcon&) = default;
ThemedVectorIcon& ThemedVectorIcon::operator=(const ThemedVectorIcon&) =
@ -70,9 +61,7 @@ gfx::ImageSkia ThemedVectorIcon::GetImageSkia(SkColor color) const {
}
SkColor ThemedVectorIcon::GetColor(const ColorProvider* color_provider) const {
return absl::holds_alternative<ColorId>(color_)
? color_provider->GetColor(absl::get<ColorId>(color_))
: absl::get<SkColor>(color_);
return color_.ConvertToSkColor(color_provider);
}
gfx::ImageSkia ThemedVectorIcon::GetImageSkia(SkColor color,

@ -11,6 +11,7 @@
#include "third_party/skia/include/core/SkColor.h"
#include "ui/base/models/image_model.h"
#include "ui/color/color_id.h"
#include "ui/color/color_variant.h"
namespace gfx {
class ImageSkia;
@ -25,16 +26,10 @@ class COMPONENT_EXPORT(UI_BASE) ThemedVectorIcon {
public:
ThemedVectorIcon();
explicit ThemedVectorIcon(const gfx::VectorIcon* icon,
ColorId color_id = kColorMenuIcon,
ui::ColorVariant color = kColorMenuIcon,
int icon_size = 0,
const gfx::VectorIcon* badge = nullptr);
explicit ThemedVectorIcon(const VectorIconModel& vector_icon_model);
// TODO (kylixrd): Remove this once all the hard-coded uses of color are
// removed.
ThemedVectorIcon(const gfx::VectorIcon* icon,
SkColor color,
int icon_size = 0,
const gfx::VectorIcon* badge = nullptr);
// Copyable and moveable
ThemedVectorIcon(const ThemedVectorIcon& other);
@ -57,7 +52,7 @@ class COMPONENT_EXPORT(UI_BASE) ThemedVectorIcon {
raw_ptr<const gfx::VectorIcon> icon_ = nullptr;
int icon_size_ = 0;
absl::variant<ColorId, SkColor> color_ = gfx::kPlaceholderColor;
ui::ColorVariant color_;
raw_ptr<const gfx::VectorIcon> badge_ = nullptr;
};

@ -64,7 +64,7 @@ void ImageView::OnThemeChanged() {
View::OnThemeChanged();
if (image_model_.IsImageGenerator() ||
(image_model_.IsVectorIcon() &&
!image_model_.GetVectorIcon().has_color())) {
!image_model_.GetVectorIcon().color().GetSkColor())) {
scaled_image_ = gfx::ImageSkia();
SchedulePaint();
}