From a888e9b7f319741f15f6ee68d17466dfd23a4d13 Mon Sep 17 00:00:00 2001 From: Jordan Hollinger Date: Wed, 19 Nov 2014 12:36:11 -0800 Subject: [PATCH] Add temporary applied classes list in map, in case they are set before style is loaded. #620 --- include/mbgl/map/map.hpp | 2 ++ src/map/map.cpp | 25 ++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 135811daa..5c6302a5d 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -227,6 +227,8 @@ private: std::string styleURL; std::string styleJSON = ""; std::string accessToken = ""; + util::ptr> appliedClasses; + std::mutex appliedClassesMutex; bool debug = false; timestamp animationTime = 0; diff --git a/src/map/map.cpp b/src/map/map.cpp index a12cba00b..682731f0c 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -437,6 +437,18 @@ void Map::setStyleJSON(std::string newStyleJSON, const std::string &base) { } fileSource->setBase(base); glyphStore->setURL(util::mapbox::normalizeGlyphsURL(style->glyph_url, getAccessToken())); + + // set applied classes if theys were set while the style was loading + appliedClassesMutex.lock(); + util::ptr> classes = appliedClasses; + if (appliedClasses) { + appliedClasses.reset(); + } + appliedClassesMutex.unlock(); + if (classes) { + style->setAppliedClasses(*classes); + } + update(); } @@ -660,9 +672,16 @@ bool Map::getDebug() const { } void Map::setAppliedClasses(const std::vector &classes) { - style->setAppliedClasses(classes); - if (style->hasTransitions()) { - update(); + if (style) { + style->setAppliedClasses(classes); + if (style->hasTransitions()) { + update(); + } + } + else { + appliedClassesMutex.lock(); + appliedClasses = std::make_unique>(classes); + appliedClassesMutex.unlock(); } }