diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-15 14:18:01 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-30 11:34:13 -0700 |
commit | 6be6263ebf32c45dcbbc2dbe2937422553bc897a (patch) | |
tree | f12021eb71905a0734378b42b03aeba94e287040 /src/mbgl/sprite | |
parent | fb3cef632d7732fab54f93971d3c8ef4d8291bef (diff) | |
download | qtlocation-mapboxgl-6be6263ebf32c45dcbbc2dbe2937422553bc897a.tar.gz |
[core] Replace inline SpriteAtlas updates with diffing
Diffstat (limited to 'src/mbgl/sprite')
-rw-r--r-- | src/mbgl/sprite/sprite_atlas.cpp | 28 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_atlas.hpp | 2 |
2 files changed, 15 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 { diff --git a/src/mbgl/sprite/sprite_atlas.hpp b/src/mbgl/sprite/sprite_atlas.hpp index 807c871731..1dbef86f7e 100644 --- a/src/mbgl/sprite/sprite_atlas.hpp +++ b/src/mbgl/sprite/sprite_atlas.hpp @@ -73,7 +73,9 @@ public: void dumpDebugLogs() const; const style::Image::Impl* getImage(const std::string&) const; + void addImage(Immutable<style::Image::Impl>); + void updateImage(Immutable<style::Image::Impl>); void removeImage(const std::string&); void getIcons(IconRequestor&, IconDependencies); |