summaryrefslogtreecommitdiff
path: root/src/mbgl/style
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2017-05-22 13:28:09 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-05-26 11:21:56 -0700
commitaa216d00254c18f7b5903026ab1a489ae7797dd8 (patch)
tree7decb42cb0f8a8a5ae0e9d3bdcfdf69e76949e15 /src/mbgl/style
parent6cf9d5cfbfe8120121d8d53cbbf8915cea8f4879 (diff)
downloadqtlocation-mapboxgl-aa216d00254c18f7b5903026ab1a489ae7797dd8.tar.gz
[core] Don't use a separate SpriteAtlas for annotation images
Instead, just add them to the Style as needed. Includes changes from #8905 and takes care to avoid regressing #3817.
Diffstat (limited to 'src/mbgl/style')
-rw-r--r--src/mbgl/style/image.cpp2
-rw-r--r--src/mbgl/style/style.cpp28
-rw-r--r--src/mbgl/style/style.hpp2
3 files changed, 18 insertions, 14 deletions
diff --git a/src/mbgl/style/image.cpp b/src/mbgl/style/image.cpp
index 0cce32ab98..6039c0458c 100644
--- a/src/mbgl/style/image.cpp
+++ b/src/mbgl/style/image.cpp
@@ -16,6 +16,8 @@ std::string Image::getID() const {
return impl->id;
}
+Image::Image(const Image&) = default;
+
const PremultipliedImage& Image::getImage() const {
return impl->image;
}
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index 1a4cf0ca10..9445772a66 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -16,7 +16,6 @@
#include <mbgl/style/parser.hpp>
#include <mbgl/style/transition_options.hpp>
#include <mbgl/sprite/sprite_atlas.hpp>
-#include <mbgl/sprite/sprite_image_collection.hpp>
#include <mbgl/sprite/sprite_loader.hpp>
#include <mbgl/text/glyph_atlas.hpp>
#include <mbgl/geometry/line_atlas.hpp>
@@ -36,6 +35,7 @@
#include <mbgl/renderer/layers/render_raster_layer.hpp>
#include <mbgl/renderer/layers/render_symbol_layer.hpp>
#include <mbgl/renderer/style_diff.hpp>
+#include <mbgl/sprite/sprite_atlas.hpp>
#include <mbgl/tile/tile.hpp>
#include <mbgl/util/constants.hpp>
#include <mbgl/util/exception.hpp>
@@ -506,22 +506,24 @@ bool Style::isLoaded() const {
}
void Style::addImage(std::unique_ptr<style::Image> image) {
- addSpriteImage(spriteImages, std::move(image), [&](style::Image& added) {
- spriteAtlas->addImage(added.impl);
- observer->onUpdate(Update::Repaint);
- });
+ std::string id = image->getID();
+ auto it = images.find(id);
+ if (it != images.end() && it->second->getImage().size != image->getImage().size) {
+ Log::Warning(Event::Sprite, "Can't change sprite dimensions for '%s'", id.c_str());
+ return;
+ }
+ spriteAtlas->addImage(image->impl);
+ images[id] = std::move(image);
}
void Style::removeImage(const std::string& id) {
- removeSpriteImage(spriteImages, id, [&] () {
- spriteAtlas->removeImage(id);
- observer->onUpdate(Update::Repaint);
- });
+ images.erase(id);
+ spriteAtlas->removeImage(id);
}
const style::Image* Style::getImage(const std::string& id) const {
- auto it = spriteImages.find(id);
- return it == spriteImages.end() ? nullptr : it->second.get();
+ auto it = images.find(id);
+ return it == images.end() ? nullptr : it->second.get();
}
RenderData Style::getRenderData(MapDebugOptions debugOptions, float angle) const {
@@ -735,8 +737,8 @@ void Style::onTileError(RenderSource& source, const OverscaledTileID& tileID, st
observer->onResourceError(error);
}
-void Style::onSpriteLoaded(std::vector<std::unique_ptr<Image>>&& images) {
- for (auto& image : images) {
+void Style::onSpriteLoaded(std::vector<std::unique_ptr<Image>>&& images_) {
+ for (auto& image : images_) {
addImage(std::move(image));
}
spriteAtlas->onSpriteLoaded();
diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp
index bc1d52eed8..5d3c2899fd 100644
--- a/src/mbgl/style/style.hpp
+++ b/src/mbgl/style/style.hpp
@@ -125,6 +125,7 @@ public:
RenderSource* getRenderSource(const std::string& id) const;
private:
+ std::unordered_map<std::string, std::unique_ptr<style::Image>> images;
std::vector<std::unique_ptr<Source>> sources;
std::vector<std::unique_ptr<Layer>> layers;
TransitionOptions transitionOptions;
@@ -150,7 +151,6 @@ private:
void onGlyphsError(const FontStack&, const GlyphRange&, std::exception_ptr) override;
// SpriteLoaderObserver implementation.
- std::unordered_map<std::string, std::unique_ptr<style::Image>> spriteImages;
void onSpriteLoaded(std::vector<std::unique_ptr<Image>>&&) override;
void onSpriteError(std::exception_ptr) override;