summaryrefslogtreecommitdiff
path: root/src/mbgl/style/style.cpp
diff options
context:
space:
mode:
authorIvo van Dongen <ivovandongen@users.noreply.github.com>2017-05-12 23:19:00 +0300
committerJohn Firebaugh <john.firebaugh@gmail.com>2017-05-12 13:19:00 -0700
commitcc9f040a2d35293c51dcc5be9c7affea7f1263bd (patch)
treede62a5610e719f5bfe07226c3382d4d2a5e17530 /src/mbgl/style/style.cpp
parentc80f3e9d29d1c26ccc88ef30f8f17329c9bfb1b7 (diff)
downloadqtlocation-mapboxgl-cc9f040a2d35293c51dcc5be9c7affea7f1263bd.tar.gz
[core] Split style image collection from SpriteAtlas
Diffstat (limited to 'src/mbgl/style/style.cpp')
-rw-r--r--src/mbgl/style/style.cpp41
1 files changed, 37 insertions, 4 deletions
diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp
index 6af876d740..0dcb110443 100644
--- a/src/mbgl/style/style.cpp
+++ b/src/mbgl/style/style.cpp
@@ -17,6 +17,8 @@
#include <mbgl/style/transition_options.hpp>
#include <mbgl/style/class_dictionary.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>
#include <mbgl/renderer/update_parameters.hpp>
@@ -72,13 +74,14 @@ Style::Style(Scheduler& scheduler_, FileSource& fileSource_, float pixelRatio)
: scheduler(scheduler_),
fileSource(fileSource_),
glyphAtlas(std::make_unique<GlyphAtlas>(Size{ 2048, 2048 }, fileSource)),
+ spriteLoader(std::make_unique<SpriteLoader>(pixelRatio)),
spriteAtlas(std::make_unique<SpriteAtlas>(Size{ 1024, 1024 }, pixelRatio)),
lineAtlas(std::make_unique<LineAtlas>(Size{ 256, 512 })),
light(std::make_unique<Light>()),
renderLight(light->impl),
observer(&nullObserver) {
glyphAtlas->setObserver(this);
- spriteAtlas->setObserver(this);
+ spriteLoader->setObserver(this);
light->setObserver(this);
}
@@ -160,7 +163,7 @@ void Style::setJSON(const std::string& json) {
setLight(std::make_unique<Light>(parser.light));
glyphAtlas->setURL(parser.glyphURL);
- spriteAtlas->load(parser.spriteURL, scheduler, fileSource);
+ spriteLoader->load(parser.spriteURL, scheduler, fileSource);
loaded = true;
@@ -539,6 +542,24 @@ bool Style::isLoaded() const {
return true;
}
+void Style::addImage(const std::string& id, std::unique_ptr<style::Image> image) {
+ addSpriteImage(spriteImages, id, std::move(image), [&](style::Image& added) {
+ spriteAtlas->addImage(id, std::make_unique<style::Image>(added));
+ observer->onUpdate(Update::Repaint);
+ });
+}
+
+void Style::removeImage(const std::string& id) {
+ removeSpriteImage(spriteImages, id, [&] () {
+ spriteAtlas->removeImage(id);
+ observer->onUpdate(Update::Repaint);
+ });
+}
+
+const style::Image* Style::getImage(const std::string& id) const {
+ return spriteAtlas->getImage(id);
+}
+
RenderData Style::getRenderData(MapDebugOptions debugOptions, float angle) const {
RenderData result;
@@ -755,8 +776,20 @@ void Style::onTileError(RenderSource& source, const OverscaledTileID& tileID, st
observer->onResourceError(error);
}
-void Style::onSpriteLoaded() {
- observer->onSpriteLoaded();
+void Style::onSpriteLoaded(SpriteLoader::Images&& images) {
+ // Add images to collection
+ Images addedImages;
+ for (auto& entry : images) {
+ addSpriteImage(spriteImages, entry.first, std::move(entry.second), [&] (style::Image& added) {
+ addedImages.emplace(entry.first, std::make_unique<Image>(added));
+ });
+ }
+
+ // Update render sprite atlas
+ spriteAtlas->onSpriteLoaded(std::move(addedImages));
+
+ // Update observer
+ observer->onSpriteLoaded(std::move(images));
observer->onUpdate(Update::Repaint); // For *-pattern properties.
}