1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/views/controls/theme_tracking_image_view.h"
#include "base/functional/callback.h"
#include "ui/base/metadata/metadata_impl_macros.h"
#include "ui/base/models/image_model.h"
#include "ui/color/color_provider.h"
#include "ui/gfx/color_utils.h"
#include "ui/gfx/image/image_skia.h"
#include "ui/native_theme/native_theme.h"
namespace views {
ThemeTrackingImageView::ThemeTrackingImageView(
const ui::ImageModel& light_image_model,
const ui::ImageModel& dark_image_model,
const base::RepeatingCallback<ui::ColorVariant()>&
get_background_color_callback)
: light_image_model_(light_image_model),
dark_image_model_(dark_image_model),
get_background_color_callback_(get_background_color_callback) {
DCHECK_EQ(light_image_model_.Size(), dark_image_model_.Size());
SetImage(light_image_model_);
}
ThemeTrackingImageView::ThemeTrackingImageView(
const gfx::ImageSkia& light_image,
const gfx::ImageSkia& dark_image,
const base::RepeatingCallback<ui::ColorVariant()>&
get_background_color_callback)
: light_image_model_(ui::ImageModel::FromImageSkia(light_image)),
dark_image_model_(ui::ImageModel::FromImageSkia(dark_image)),
get_background_color_callback_(get_background_color_callback) {
DCHECK_EQ(light_image_model_.Size(), dark_image_model_.Size());
SetImage(light_image_model_);
}
ThemeTrackingImageView::~ThemeTrackingImageView() = default;
void ThemeTrackingImageView::OnThemeChanged() {
ImageView::OnThemeChanged();
SetImage(
color_utils::IsDark(get_background_color_callback_.Run().ResolveToSkColor(
GetColorProvider()))
? dark_image_model_
: light_image_model_);
}
void ThemeTrackingImageView::SetLightImage(
const ui::ImageModel& light_image_model) {
light_image_model_ = light_image_model;
if (!color_utils::IsDark(
get_background_color_callback_.Run().ResolveToSkColor(
GetColorProvider()))) {
SetImage(light_image_model_);
}
}
void ThemeTrackingImageView::SetDarkImage(
const ui::ImageModel& dark_image_model) {
dark_image_model_ = dark_image_model;
if (color_utils::IsDark(get_background_color_callback_.Run().ResolveToSkColor(
GetColorProvider()))) {
SetImage(dark_image_model_);
}
}
BEGIN_METADATA(ThemeTrackingImageView)
END_METADATA
} // namespace views
|