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:

committed by
Chromium LUCI CQ

parent
badbedab2a
commit
dcba9470ae
ash/style
chrome/browser
profiles
ui
views
ui
base
views
controls
@ -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();
|
||||
}
|
||||
|
Reference in New Issue
Block a user