diff options
Diffstat (limited to 'src/mbgl/sprite/sprite_atlas.cpp')
-rw-r--r-- | src/mbgl/sprite/sprite_atlas.cpp | 28 |
1 files changed, 13 insertions, 15 deletions
diff --git a/src/mbgl/sprite/sprite_atlas.cpp b/src/mbgl/sprite/sprite_atlas.cpp index 97bf9edcf9..69f2b0ce71 100644 --- a/src/mbgl/sprite/sprite_atlas.cpp +++ b/src/mbgl/sprite/sprite_atlas.cpp @@ -52,17 +52,16 @@ void SpriteAtlas::onSpriteLoaded() { } void SpriteAtlas::addImage(Immutable<style::Image::Impl> image_) { + assert(entries.find(image_->id) == entries.end()); + entries.emplace(image_->id, Entry { image_ }); icons.clear(); +} - auto it = entries.find(image_->id); - if (it == entries.end()) { - entries.emplace(image_->id, Entry { image_, {}, {} }); - return; - } +void SpriteAtlas::updateImage(Immutable<style::Image::Impl> image_) { + assert(entries.find(image_->id) != entries.end()); + Entry& entry = entries.at(image_->id); - Entry& entry = it->second; - - // There is already a sprite with that name in our store. + // Style::addImage should prevent changing size. assert(entry.image->image.size == image_->image.size); entry.image = std::move(image_); @@ -74,15 +73,13 @@ void SpriteAtlas::addImage(Immutable<style::Image::Impl> image_) { if (entry.patternBin) { copy(entry, &Entry::patternBin); } -} -void SpriteAtlas::removeImage(const std::string& id) { icons.clear(); +} - auto it = entries.find(id); - assert(it != entries.end()); - - Entry& entry = it->second; +void SpriteAtlas::removeImage(const std::string& id) { + assert(entries.find(id) != entries.end()); + Entry& entry = entries.at(id); if (entry.iconBin) { shelfPack.unref(*entry.iconBin); @@ -92,7 +89,8 @@ void SpriteAtlas::removeImage(const std::string& id) { shelfPack.unref(*entry.patternBin); } - entries.erase(it); + entries.erase(id); + icons.clear(); } const style::Image::Impl* SpriteAtlas::getImage(const std::string& id) const { |