summaryrefslogtreecommitdiff
path: root/src/mbgl/annotation/sprite_store.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mbgl/annotation/sprite_store.cpp')
-rw-r--r--src/mbgl/annotation/sprite_store.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/src/mbgl/annotation/sprite_store.cpp b/src/mbgl/annotation/sprite_store.cpp
new file mode 100644
index 0000000000..733d2c7b49
--- /dev/null
+++ b/src/mbgl/annotation/sprite_store.cpp
@@ -0,0 +1,40 @@
+#include <mbgl/annotation/sprite_store.hpp>
+
+#include <mbgl/util/exception.hpp>
+
+namespace mbgl {
+
+SpriteStore::SpriteStore(const float ratio_) : ratio(ratio_) {
+}
+
+void SpriteStore::setSprite(const std::string& name, std::shared_ptr<const SpriteImage> sprite) {
+ if (sprite && sprite->ratio != ratio) {
+ throw util::SpriteImageException("Sprite image has wrong pixel ratio");
+ }
+ std::lock_guard<std::mutex> lock(mutex);
+ if (sprite) {
+ sprites.emplace(name, sprite);
+ } else {
+ sprites.erase(name);
+ }
+ dirty.emplace(name, sprite);
+}
+
+void SpriteStore::removeSprite(const std::string& name) {
+ setSprite(name);
+}
+
+std::shared_ptr<const SpriteImage> SpriteStore::getSprite(const std::string& name) {
+ std::lock_guard<std::mutex> lock(mutex);
+ const auto it = sprites.find(name);
+ return it != sprites.end() ? it->second : nullptr;
+}
+
+SpriteStore::Sprites SpriteStore::getDirty() {
+ Sprites result;
+ std::lock_guard<std::mutex> lock(mutex);
+ dirty.swap(result);
+ return result;
+}
+
+} // namespace mbgl