From d37bd549bc4bcaa80df667e6e218251607d94586 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Mon, 6 Jul 2015 13:53:30 +0200 Subject: make sure that the SpriteStore object correctly replaces the SpriteImages --- src/mbgl/annotation/sprite_store.cpp | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/mbgl/annotation/sprite_store.cpp b/src/mbgl/annotation/sprite_store.cpp index ac7730fb4e..1cc5d76412 100644 --- a/src/mbgl/annotation/sprite_store.cpp +++ b/src/mbgl/annotation/sprite_store.cpp @@ -13,14 +13,24 @@ void SpriteStore::_setSprite(const std::string& name, const std::shared_ptr& sprite) { if (sprite) { auto it = sprites.find(name); - if (it != sprites.end() && - (it->second->width != sprite->width || it->second->height != sprite->height)) { - Log::Warning(Event::Sprite, "Can't change sprite dimensions for '%s'", name.c_str()); - return; + if (it != sprites.end()) { + // There is already a sprite with that name in our store. + if ((it->second->width != sprite->width || it->second->height != sprite->height)) { + Log::Warning(Event::Sprite, "Can't change sprite dimensions for '%s'", name.c_str()); + return; + } + it->second = sprite; + } else { + sprites.emplace(name, sprite); } - sprites.emplace_hint(it, name, sprite); - dirty.emplace(name, sprite); + // Always add/replace the value in the dirty list. + auto dirty_it = dirty.find(name); + if (dirty_it != dirty.end()) { + dirty_it->second = sprite; + } else { + dirty.emplace(name, sprite); + } } else if (sprites.erase(name) > 0) { dirty.emplace(name, nullptr); } -- cgit v1.2.1