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 75 76 77 78 79 80 81 82 83 84 85
|
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/services/app_service/public/cpp/icon_loader.h"
#include <utility>
#include <variant>
#include "base/functional/callback.h"
namespace apps {
IconLoader::Releaser::Releaser(std::unique_ptr<IconLoader::Releaser> next,
base::OnceClosure closure)
: next_(std::move(next)), closure_(std::move(closure)) {}
IconLoader::Releaser::~Releaser() {
std::move(closure_).Run();
}
IconLoader::Key::Key(const std::string& id,
const IconKey& icon_key,
IconType icon_type,
int32_t size_hint_in_dip,
bool allow_placeholder_icon)
: id_(id),
timeline_(std::holds_alternative<int32_t>(icon_key.update_version)
? std::get<int32_t>(icon_key.update_version)
: IconKey::kInvalidVersion),
resource_id_(icon_key.resource_id),
icon_effects_(icon_key.icon_effects),
icon_type_(icon_type),
size_hint_in_dip_(size_hint_in_dip),
allow_placeholder_icon_(allow_placeholder_icon) {}
IconLoader::Key::Key(const Key& other) = default;
bool IconLoader::Key::operator<(const Key& that) const {
if (this->timeline_ != that.timeline_) {
return this->timeline_ < that.timeline_;
}
if (this->resource_id_ != that.resource_id_) {
return this->resource_id_ < that.resource_id_;
}
if (this->icon_effects_ != that.icon_effects_) {
return this->icon_effects_ < that.icon_effects_;
}
if (this->icon_type_ != that.icon_type_) {
return this->icon_type_ < that.icon_type_;
}
if (this->size_hint_in_dip_ != that.size_hint_in_dip_) {
return this->size_hint_in_dip_ < that.size_hint_in_dip_;
}
if (this->allow_placeholder_icon_ != that.allow_placeholder_icon_) {
return this->allow_placeholder_icon_ < that.allow_placeholder_icon_;
}
return this->id_ < that.id_;
}
IconLoader::IconLoader() = default;
IconLoader::~IconLoader() = default;
std::optional<IconKey> IconLoader::GetIconKey(const std::string& id) {
return std::make_optional<IconKey>();
}
std::unique_ptr<IconLoader::Releaser> IconLoader::LoadIcon(
const std::string& id,
const IconType& icon_type,
int32_t size_hint_in_dip,
bool allow_placeholder_icon,
apps::LoadIconCallback callback) {
auto icon_key = GetIconKey(id);
if (!icon_key.has_value()) {
std::move(callback).Run(std::make_unique<IconValue>());
return nullptr;
}
return LoadIconFromIconKey(id, icon_key.value(), icon_type, size_hint_in_dip,
allow_placeholder_icon, std::move(callback));
}
} // namespace apps
|