themed_vector_icon.cc 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/base/themed_vector_icon.h"
  5. #include "ui/color/color_provider.h"
  6. #include "ui/gfx/paint_vector_icon.h"
  7. #include "ui/gfx/vector_icon_types.h"
  8. #include "ui/gfx/vector_icon_utils.h"
  9. namespace ui {
  10. ThemedVectorIcon::ThemedVectorIcon() = default;
  11. ThemedVectorIcon::ThemedVectorIcon(const gfx::VectorIcon* icon,
  12. ColorId color_id,
  13. int icon_size,
  14. const gfx::VectorIcon* badge)
  15. : icon_(icon), icon_size_(icon_size), color_(color_id), badge_(badge) {}
  16. ThemedVectorIcon::ThemedVectorIcon(const VectorIconModel& vector_icon_model)
  17. : icon_(vector_icon_model.vector_icon()),
  18. icon_size_(vector_icon_model.icon_size()),
  19. badge_(vector_icon_model.badge_icon()) {
  20. if (vector_icon_model.has_color()) {
  21. color_ = vector_icon_model.color();
  22. } else {
  23. color_ = vector_icon_model.color_id();
  24. }
  25. }
  26. ThemedVectorIcon::ThemedVectorIcon(const gfx::VectorIcon* icon,
  27. SkColor color,
  28. int icon_size,
  29. const gfx::VectorIcon* badge)
  30. : icon_(icon), icon_size_(icon_size), color_(color), badge_(badge) {}
  31. ThemedVectorIcon::ThemedVectorIcon(const ThemedVectorIcon&) = default;
  32. ThemedVectorIcon& ThemedVectorIcon::operator=(const ThemedVectorIcon&) =
  33. default;
  34. ThemedVectorIcon::ThemedVectorIcon(ThemedVectorIcon&&) = default;
  35. ThemedVectorIcon& ThemedVectorIcon::operator=(ThemedVectorIcon&&) = default;
  36. ThemedVectorIcon::~ThemedVectorIcon() = default;
  37. gfx::ImageSkia ThemedVectorIcon::GetImageSkia(
  38. const ColorProvider* color_provider) const {
  39. DCHECK(!empty());
  40. return GetImageSkia(color_provider, (icon_size_ > 0)
  41. ? icon_size_
  42. : GetDefaultSizeOfVectorIcon(*icon_));
  43. }
  44. gfx::ImageSkia ThemedVectorIcon::GetImageSkia(
  45. const ColorProvider* color_provider,
  46. int icon_size) const {
  47. DCHECK(!empty());
  48. return GetImageSkia(GetColor(color_provider), icon_size);
  49. }
  50. gfx::ImageSkia ThemedVectorIcon::GetImageSkia(SkColor color) const {
  51. DCHECK(!empty());
  52. return GetImageSkia(color, (icon_size_ > 0)
  53. ? icon_size_
  54. : GetDefaultSizeOfVectorIcon(*icon_));
  55. }
  56. SkColor ThemedVectorIcon::GetColor(const ColorProvider* color_provider) const {
  57. return absl::holds_alternative<ColorId>(color_)
  58. ? color_provider->GetColor(absl::get<ColorId>(color_))
  59. : absl::get<SkColor>(color_);
  60. }
  61. gfx::ImageSkia ThemedVectorIcon::GetImageSkia(SkColor color,
  62. int icon_size) const {
  63. return badge_ ? CreateVectorIconWithBadge(*icon_, icon_size, color, *badge_)
  64. : CreateVectorIcon(*icon_, icon_size, color);
  65. }
  66. } // namespace ui