summaryrefslogtreecommitdiff
path: root/src/mbgl/sprite
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-05-15 14:18:01 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-05-30 11:34:13 -0700
commit6be6263ebf32c45dcbbc2dbe2937422553bc897a (patch)
treef12021eb71905a0734378b42b03aeba94e287040 /src/mbgl/sprite
parentfb3cef632d7732fab54f93971d3c8ef4d8291bef (diff)
downloadqtlocation-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.cpp28
-rw-r--r--src/mbgl/sprite/sprite_atlas.hpp2
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);