diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-15 14:09:06 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2017-05-16 12:26:35 -0700 |
commit | cc1ea759a681cadcfd06fd7bdda79ca6deb38c62 (patch) | |
tree | 97ece422b0516b11979c84b8136f95aeabb1aa91 /src/mbgl/sprite | |
parent | c0f6e5ccefc67dbdaa6ab7c7ea75a2a2d0c3f2ae (diff) | |
download | qtlocation-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.cpp | 13 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_atlas.hpp | 6 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_image_collection.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_image_collection.hpp | 1 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_loader.cpp | 5 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_loader.hpp | 6 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_loader_observer.hpp | 7 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_parser.cpp | 25 | ||||
-rw-r--r-- | src/mbgl/sprite/sprite_parser.hpp | 24 |
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 |