summaryrefslogtreecommitdiff
path: root/src/mbgl/sprite
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-05-15 14:09:06 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-05-16 12:26:35 -0700
commitcc1ea759a681cadcfd06fd7bdda79ca6deb38c62 (patch)
tree97ece422b0516b11979c84b8136f95aeabb1aa91 /src/mbgl/sprite
parentc0f6e5ccefc67dbdaa6ab7c7ea75a2a2d0c3f2ae (diff)
downloadqtlocation-mapboxgl-cc1ea759a681cadcfd06fd7bdda79ca6deb38c62.tar.gz
[core, node, darwin, android, qt] Make image ID part of Image
More like Source and Layer.
Diffstat (limited to 'src/mbgl/sprite')
-rw-r--r--src/mbgl/sprite/sprite_atlas.cpp13
-rw-r--r--src/mbgl/sprite/sprite_atlas.hpp6
-rw-r--r--src/mbgl/sprite/sprite_image_collection.cpp4
-rw-r--r--src/mbgl/sprite/sprite_image_collection.hpp1
-rw-r--r--src/mbgl/sprite/sprite_loader.cpp5
-rw-r--r--src/mbgl/sprite/sprite_loader.hpp6
-rw-r--r--src/mbgl/sprite/sprite_loader_observer.hpp7
-rw-r--r--src/mbgl/sprite/sprite_parser.cpp25
-rw-r--r--src/mbgl/sprite/sprite_parser.hpp24
9 files changed, 36 insertions, 55 deletions
diff --git a/src/mbgl/sprite/sprite_atlas.cpp b/src/mbgl/sprite/sprite_atlas.cpp
index f677f7bb60..0f4cde56ad 100644
--- a/src/mbgl/sprite/sprite_atlas.cpp
+++ b/src/mbgl/sprite/sprite_atlas.cpp
@@ -42,25 +42,20 @@ SpriteAtlas::SpriteAtlas(Size size_, float pixelRatio_)
SpriteAtlas::~SpriteAtlas() = default;
-void SpriteAtlas::onSpriteLoaded(Images&& result) {
+void SpriteAtlas::onSpriteLoaded() {
markAsLoaded();
-
- for (auto& pair : result) {
- addImage(pair.first, pair.second->impl);
- }
-
for (auto requestor : requestors) {
requestor->onIconsAvailable(buildIconMap());
}
requestors.clear();
}
-void SpriteAtlas::addImage(const std::string& id, Immutable<style::Image::Impl> image_) {
+void SpriteAtlas::addImage(Immutable<style::Image::Impl> image_) {
icons.clear();
- auto it = entries.find(id);
+ auto it = entries.find(image_->id);
if (it == entries.end()) {
- entries.emplace(id, Entry { std::move(image_), {}, {} });
+ entries.emplace(image_->id, Entry { image_, {}, {} });
return;
}
diff --git a/src/mbgl/sprite/sprite_atlas.hpp b/src/mbgl/sprite/sprite_atlas.hpp
index 4e03c32b30..bcec26b7ba 100644
--- a/src/mbgl/sprite/sprite_atlas.hpp
+++ b/src/mbgl/sprite/sprite_atlas.hpp
@@ -43,12 +43,10 @@ public:
class SpriteAtlas : public util::noncopyable {
public:
- using Images = std::unordered_map<std::string, std::unique_ptr<style::Image>>;
-
SpriteAtlas(Size, float pixelRatio);
~SpriteAtlas();
- void onSpriteLoaded(Images&&);
+ void onSpriteLoaded();
void markAsLoaded() {
loaded = true;
@@ -61,7 +59,7 @@ public:
void dumpDebugLogs() const;
const style::Image::Impl* getImage(const std::string&) const;
- void addImage(const std::string&, Immutable<style::Image::Impl>);
+ void addImage(Immutable<style::Image::Impl>);
void removeImage(const std::string&);
void getIcons(IconRequestor& requestor);
diff --git a/src/mbgl/sprite/sprite_image_collection.cpp b/src/mbgl/sprite/sprite_image_collection.cpp
index 787ba83db2..ae00a6b146 100644
--- a/src/mbgl/sprite/sprite_image_collection.cpp
+++ b/src/mbgl/sprite/sprite_image_collection.cpp
@@ -3,10 +3,10 @@
namespace mbgl {
-void addSpriteImage(Images& images, const std::string& id,
+void addSpriteImage(Images& images,
std::unique_ptr<style::Image> image_,
std::function<void (style::Image&)> onAdded) {
-
+ std::string id = image_->getID();
auto it = images.find(id);
if (it == images.end()) {
// Add new
diff --git a/src/mbgl/sprite/sprite_image_collection.hpp b/src/mbgl/sprite/sprite_image_collection.hpp
index 00e252f74f..44c7bcd411 100644
--- a/src/mbgl/sprite/sprite_image_collection.hpp
+++ b/src/mbgl/sprite/sprite_image_collection.hpp
@@ -12,7 +12,6 @@ namespace mbgl {
using Images = std::unordered_map<std::string, std::unique_ptr<style::Image>>;
void addSpriteImage(Images&,
- const std::string&,
std::unique_ptr<style::Image>,
std::function<void (style::Image&)> onAdded = [] (style::Image&){});
diff --git a/src/mbgl/sprite/sprite_loader.cpp b/src/mbgl/sprite/sprite_loader.cpp
index 86325bba35..7c5fe40e05 100644
--- a/src/mbgl/sprite/sprite_loader.cpp
+++ b/src/mbgl/sprite/sprite_loader.cpp
@@ -89,10 +89,7 @@ void SpriteLoader::emitSpriteLoadedIfComplete() {
loader->worker.invoke(&SpriteLoaderWorker::parse, loader->image, loader->json);
}
-void SpriteLoader::onParsed(Images&& result) {
-
-
-
+void SpriteLoader::onParsed(std::vector<std::unique_ptr<style::Image>>&& result) {
observer->onSpriteLoaded(std::move(result));
}
diff --git a/src/mbgl/sprite/sprite_loader.hpp b/src/mbgl/sprite/sprite_loader.hpp
index dbebede03b..0daf46be9c 100644
--- a/src/mbgl/sprite/sprite_loader.hpp
+++ b/src/mbgl/sprite/sprite_loader.hpp
@@ -6,7 +6,7 @@
#include <string>
#include <map>
#include <set>
-#include <unordered_map>
+#include <vector>
#include <array>
#include <memory>
@@ -18,8 +18,6 @@ class SpriteLoaderObserver;
class SpriteLoader : public util::noncopyable {
public:
- using Images = std::unordered_map<std::string, std::unique_ptr<style::Image>>;
-
SpriteLoader(float pixelRatio);
~SpriteLoader();
@@ -32,7 +30,7 @@ private:
// Invoked by SpriteAtlasWorker
friend class SpriteLoaderWorker;
- void onParsed(Images&& result);
+ void onParsed(std::vector<std::unique_ptr<style::Image>>&&);
void onError(std::exception_ptr);
const float pixelRatio;
diff --git a/src/mbgl/sprite/sprite_loader_observer.hpp b/src/mbgl/sprite/sprite_loader_observer.hpp
index 632c48ea56..c730549c2c 100644
--- a/src/mbgl/sprite/sprite_loader_observer.hpp
+++ b/src/mbgl/sprite/sprite_loader_observer.hpp
@@ -2,8 +2,7 @@
#include <exception>
#include <memory>
-#include <unordered_map>
-#include <string>
+#include <vector>
namespace mbgl {
@@ -13,11 +12,9 @@ class Image;
class SpriteLoaderObserver {
public:
- using Images = std::unordered_map<std::string, std::unique_ptr<style::Image>>;
-
virtual ~SpriteLoaderObserver() = default;
- virtual void onSpriteLoaded(Images&&) {}
+ virtual void onSpriteLoaded(std::vector<std::unique_ptr<style::Image>>&&) {}
virtual void onSpriteError(std::exception_ptr) {}
};
diff --git a/src/mbgl/sprite/sprite_parser.cpp b/src/mbgl/sprite/sprite_parser.cpp
index c3ed20d03f..1a36e3e990 100644
--- a/src/mbgl/sprite/sprite_parser.cpp
+++ b/src/mbgl/sprite/sprite_parser.cpp
@@ -13,13 +13,14 @@
namespace mbgl {
-std::unique_ptr<style::Image> createStyleImage(const PremultipliedImage& image,
- const uint32_t srcX,
- const uint32_t srcY,
- const uint32_t width,
- const uint32_t height,
- const double ratio,
- const bool sdf) {
+std::unique_ptr<style::Image> createStyleImage(const std::string& id,
+ const PremultipliedImage& image,
+ const uint32_t srcX,
+ const uint32_t srcY,
+ const uint32_t width,
+ const uint32_t height,
+ const double ratio,
+ const bool sdf) {
// Disallow invalid parameter configurations.
if (width <= 0 || height <= 0 || width > 1024 || height > 1024 ||
ratio <= 0 || ratio > 10 ||
@@ -37,7 +38,7 @@ std::unique_ptr<style::Image> createStyleImage(const PremultipliedImage& image,
// Copy from the source image into our individual sprite image
PremultipliedImage::copy(image, dstImage, { srcX, srcY }, { 0, 0 }, { width, height });
- return std::make_unique<style::Image>(std::move(dstImage), ratio, sdf);
+ return std::make_unique<style::Image>(id, std::move(dstImage), ratio, sdf);
}
namespace {
@@ -84,7 +85,7 @@ bool getBoolean(const JSValue& value, const char* name, const bool def = false)
} // namespace
-Images parseSprite(const std::string& encodedImage, const std::string& json) {
+std::vector<std::unique_ptr<style::Image>> parseSprite(const std::string& encodedImage, const std::string& json) {
const PremultipliedImage raster = decodeImage(encodedImage);
JSDocument doc;
@@ -96,7 +97,7 @@ Images parseSprite(const std::string& encodedImage, const std::string& json) {
} else if (!doc.IsObject()) {
throw std::runtime_error("Sprite JSON root must be an object");
} else {
- Images images;
+ std::vector<std::unique_ptr<style::Image>> images;
for (const auto& property : doc.GetObject()) {
const std::string name = { property.name.GetString(), property.name.GetStringLength() };
const JSValue& value = property.value;
@@ -109,9 +110,9 @@ Images parseSprite(const std::string& encodedImage, const std::string& json) {
const double pixelRatio = getDouble(value, "pixelRatio", 1);
const bool sdf = getBoolean(value, "sdf", false);
- auto image = createStyleImage(raster, x, y, width, height, pixelRatio, sdf);
+ auto image = createStyleImage(name, raster, x, y, width, height, pixelRatio, sdf);
if (image) {
- images.emplace(name, std::move(image));
+ images.push_back(std::move(image));
}
}
}
diff --git a/src/mbgl/sprite/sprite_parser.hpp b/src/mbgl/sprite/sprite_parser.hpp
index 175ec8a883..f602818d3b 100644
--- a/src/mbgl/sprite/sprite_parser.hpp
+++ b/src/mbgl/sprite/sprite_parser.hpp
@@ -1,13 +1,10 @@
#pragma once
#include <mbgl/util/image.hpp>
-#include <mbgl/util/noncopyable.hpp>
-#include <mbgl/util/variant.hpp>
-#include <mbgl/util/geo.hpp>
#include <string>
#include <memory>
-#include <unordered_map>
+#include <vector>
namespace mbgl {
@@ -16,17 +13,16 @@ class Image;
} // namespace style
// Extracts an individual image from a spritesheet from the given location.
-std::unique_ptr<style::Image> createStyleImage(const PremultipliedImage&,
- uint32_t srcX,
- uint32_t srcY,
- uint32_t srcWidth,
- uint32_t srcHeight,
- double ratio,
- bool sdf);
-
-using Images = std::unordered_map<std::string, std::unique_ptr<style::Image>>;
+std::unique_ptr<style::Image> createStyleImage(const std::string& id,
+ const PremultipliedImage&,
+ uint32_t srcX,
+ uint32_t srcY,
+ uint32_t srcWidth,
+ uint32_t srcHeight,
+ double ratio,
+ bool sdf);
// Parses an image and an associated JSON file and returns the sprite objects.
-Images parseSprite(const std::string& image, const std::string& json);
+std::vector<std::unique_ptr<style::Image>> parseSprite(const std::string& image, const std::string& json);
} // namespace mbgl