blob: 0686fbda4c514a04dfe8f59b6518f2c0a816dd61 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/base/themed_vector_icon.h"
#include "ui/color/color_provider.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/gfx/vector_icon_types.h"
#include "ui/gfx/vector_icon_utils.h"
namespace ui {
ThemedVectorIcon::ThemedVectorIcon() = default;
ThemedVectorIcon::ThemedVectorIcon(const gfx::VectorIcon* icon,
ColorId color_id,
int icon_size,
const gfx::VectorIcon* badge)
: icon_(icon), icon_size_(icon_size), color_(color_id), 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();
}
}
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&) =
default;
ThemedVectorIcon::ThemedVectorIcon(ThemedVectorIcon&&) = default;
ThemedVectorIcon& ThemedVectorIcon::operator=(ThemedVectorIcon&&) = default;
ThemedVectorIcon::~ThemedVectorIcon() = default;
gfx::ImageSkia ThemedVectorIcon::GetImageSkia(
const ColorProvider* color_provider) const {
DCHECK(!empty());
return GetImageSkia(color_provider, (icon_size_ > 0)
? icon_size_
: GetDefaultSizeOfVectorIcon(*icon_));
}
gfx::ImageSkia ThemedVectorIcon::GetImageSkia(
const ColorProvider* color_provider,
int icon_size) const {
DCHECK(!empty());
return GetImageSkia(GetColor(color_provider), icon_size);
}
gfx::ImageSkia ThemedVectorIcon::GetImageSkia(SkColor color) const {
DCHECK(!empty());
return GetImageSkia(color, (icon_size_ > 0)
? icon_size_
: GetDefaultSizeOfVectorIcon(*icon_));
}
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_);
}
gfx::ImageSkia ThemedVectorIcon::GetImageSkia(SkColor color,
int icon_size) const {
return badge_ ? CreateVectorIconWithBadge(*icon_, icon_size, color, *badge_)
: CreateVectorIcon(*icon_, icon_size, color);
}
} // namespace ui