blob: 3a6470e97404df9da7421ee74ed54e93f7edad5a [file] [log] [blame]
// Copyright 2013 The Flutter 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 "impeller/typographer/glyph_atlas.h"
#include <utility>
namespace impeller {
GlyphAtlasContext::GlyphAtlasContext()
: atlas_(std::make_shared<GlyphAtlas>(GlyphAtlas::Type::kAlphaBitmap)) {}
GlyphAtlasContext::~GlyphAtlasContext() {}
std::shared_ptr<GlyphAtlas> GlyphAtlasContext::GetGlyphAtlas() const {
return atlas_;
}
void GlyphAtlasContext::UpdateGlyphAtlas(std::shared_ptr<GlyphAtlas> atlas) {
atlas_ = std::move(atlas);
}
GlyphAtlas::GlyphAtlas(Type type) : type_(type) {}
GlyphAtlas::~GlyphAtlas() = default;
bool GlyphAtlas::IsValid() const {
return !!texture_;
}
GlyphAtlas::Type GlyphAtlas::GetType() const {
return type_;
}
const std::shared_ptr<Texture>& GlyphAtlas::GetTexture() const {
return texture_;
}
void GlyphAtlas::SetTexture(std::shared_ptr<Texture> texture) {
texture_ = std::move(texture);
}
void GlyphAtlas::AddTypefaceGlyphPosition(const FontGlyphPair& pair,
Rect rect) {
positions_[pair] = rect;
}
std::optional<Rect> GlyphAtlas::FindFontGlyphPosition(
const FontGlyphPair& pair) const {
auto found = positions_.find(pair);
if (found == positions_.end()) {
return std::nullopt;
}
return found->second;
}
size_t GlyphAtlas::GetGlyphCount() const {
return positions_.size();
}
size_t GlyphAtlas::IterateGlyphs(
const std::function<bool(const FontGlyphPair& pair, const Rect& rect)>&
iterator) const {
if (!iterator) {
return 0u;
}
size_t count = 0u;
for (const auto& position : positions_) {
count++;
if (!iterator(position.first, position.second)) {
return count;
}
}
return count;
}
bool GlyphAtlas::HasSamePairs(const FontGlyphPair::Vector& new_glyphs) {
for (const auto& pair : new_glyphs) {
if (positions_.find(pair) == positions_.end()) {
return false;
}
}
return true;
}
} // namespace impeller