diff options
author | Leith Bade <leith@mapbox.com> | 2015-01-18 16:33:39 +1100 |
---|---|---|
committer | Leith Bade <leith@mapbox.com> | 2015-01-18 16:33:39 +1100 |
commit | 016c2948c5e5d0f49c6169bd5802b54747c60312 (patch) | |
tree | 0bc1c8968ddf78e26ed21f8dd1217873bad3c2da | |
parent | 4540a8ae83fb219e1166d31ebd3cbbe1f2937993 (diff) | |
parent | 9b2c8d0391a0f06d65e34a87279973d191035015 (diff) | |
download | qtlocation-mapboxgl-016c2948c5e5d0f49c6169bd5802b54747c60312.tar.gz |
Merge branch 'master' of github.com:mapbox/mapbox-gl-native into android-mason
Conflicts:
src/mbgl/map/map.cpp
-rw-r--r-- | bin/render.cpp | 2 | ||||
-rw-r--r-- | bin/render.gyp | 1 | ||||
-rw-r--r-- | include/mbgl/map/map.hpp | 10 | ||||
m--------- | ios/mapbox-gl-cocoa | 0 | ||||
-rw-r--r-- | platform/default/glfw_view.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/map/map.cpp | 41 | ||||
-rw-r--r-- | src/mbgl/style/style.cpp | 28 | ||||
-rw-r--r-- | src/mbgl/style/style.hpp | 14 | ||||
-rw-r--r-- | test/headless.cpp | 2 |
9 files changed, 49 insertions, 58 deletions
diff --git a/bin/render.cpp b/bin/render.cpp index feeb4fe3f4..ba17498c88 100644 --- a/bin/render.cpp +++ b/bin/render.cpp @@ -93,7 +93,7 @@ int main(int argc, char *argv[]) { Map map(view, fileSource); map.setStyleJSON(style, "."); - map.setAppliedClasses(classes); + map.setClasses(classes); view.resize(width, height, pixelRatio); map.resize(width, height, pixelRatio); diff --git a/bin/render.gyp b/bin/render.gyp index e9a2594236..0a41b02a8f 100644 --- a/bin/render.gyp +++ b/bin/render.gyp @@ -19,6 +19,7 @@ 'ldflags': [ '<@(glfw3_ldflags)', '<@(uv_ldflags)', + '<@(sqlite3_static_libs)', '<@(sqlite3_ldflags)', '<@(curl_ldflags)', '<@(png_ldflags)', diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 854d8c6a95..fa46f4a702 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -76,9 +76,12 @@ public: void resize(uint16_t width, uint16_t height, float ratio, uint16_t fbWidth, uint16_t fbHeight); // Styling - void setAppliedClasses(const std::vector<std::string> &classes); - void toggleClass(const std::string &name); - const std::vector<std::string> &getAppliedClasses() const; + void addClass(const std::string&); + void removeClass(const std::string&); + bool hasClass(const std::string&) const; + void setClasses(const std::vector<std::string>&); + std::vector<std::string> getClasses() const; + void setDefaultTransitionDuration(uint64_t milliseconds = 0); uint64_t getDefaultTransitionDuration(); void setStyleURL(const std::string &url); @@ -208,6 +211,7 @@ private: std::string styleURL; std::string styleJSON = ""; + std::vector<std::string> classes; std::atomic_uint_fast64_t defaultTransitionDuration; diff --git a/ios/mapbox-gl-cocoa b/ios/mapbox-gl-cocoa -Subproject 40b9b7b8e0e231345b3ba1fb83dc347c2eb6b8e +Subproject 2e5bfbdcd54c893864c263b41a27846627e10f0 diff --git a/platform/default/glfw_view.cpp b/platform/default/glfw_view.cpp index 1118bc23a7..e8197dabcd 100644 --- a/platform/default/glfw_view.cpp +++ b/platform/default/glfw_view.cpp @@ -188,7 +188,11 @@ void GLFWView::key(GLFWwindow *window, int key, int /*scancode*/, int action, in case GLFW_KEY_R: if (!mods) { view->map->setDefaultTransitionDuration(300); - view->map->toggleClass("night"); + if (view->map->hasClass("night")) { + view->map->removeClass("night"); + } else { + view->map->addClass("night"); + } } break; case GLFW_KEY_N: @@ -286,6 +290,9 @@ int GLFWView::run() { glfwWaitEvents(); }); + // Terminate here to save binary shaders + map->terminate(); + return 0; } diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index d135ce0da8..b1028e4675 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -301,8 +301,6 @@ void Map::run() { mode = Mode::None; fileSource.clearLoop(); } - - terminate(); } void Map::checkForPause() { @@ -387,6 +385,7 @@ void Map::setStyleJSON(std::string newStyleJSON, const std::string &base) { } style->loadJSON((const uint8_t *)styleJSON.c_str()); + style->cascadeClasses(classes); fileSource.setBase(base); glyphStore->setURL(style->glyph_url); @@ -587,28 +586,44 @@ bool Map::getDebug() const { return debug; } -void Map::setAppliedClasses(const std::vector<std::string> &classes) { +void Map::addClass(const std::string& klass) { + if (hasClass(klass)) return; + classes.push_back(klass); if (style) { - style->setAppliedClasses(classes); + style->cascadeClasses(classes); if (style->hasTransitions()) { update(); } - } else { - std::lock_guard<std::mutex> lock(appliedClassesMutex); - appliedClasses = mbgl::util::make_unique<std::vector<std::string>>(classes); } } +void Map::removeClass(const std::string& klass) { + if (!hasClass(klass)) return; + classes.erase(std::remove(classes.begin(), classes.end(), klass), classes.end()); + if (style) { + style->cascadeClasses(classes); + if (style->hasTransitions()) { + update(); + } + } +} -void Map::toggleClass(const std::string &name) { - style->toggleClass(name); - if (style->hasTransitions()) { - update(); +void Map::setClasses(const std::vector<std::string>& classes_) { + classes = classes_; + if (style) { + style->cascadeClasses(classes); + if (style->hasTransitions()) { + update(); + } } } -const std::vector<std::string> &Map::getAppliedClasses() const { - return style->getAppliedClasses(); +bool Map::hasClass(const std::string& klass) const { + return std::find(classes.begin(), classes.end(), klass) != classes.end(); +} + +std::vector<std::string> Map::getClasses() const { + return classes; } void Map::setDefaultTransitionDuration(uint64_t milliseconds) { diff --git a/src/mbgl/style/style.cpp b/src/mbgl/style/style.cpp index 9669e0e4a7..ecff6fb5ff 100644 --- a/src/mbgl/style/style.cpp +++ b/src/mbgl/style/style.cpp @@ -48,31 +48,9 @@ void Style::setDefaultTransitionDuration(uint16_t duration_milliseconds) { defaultTransition.duration = duration_milliseconds; } -const std::vector<std::string> &Style::getAppliedClasses() const { - return appliedClasses; -} - -void Style::setAppliedClasses(const std::vector<std::string> &class_names) { - appliedClasses = class_names; - updateClasses(); -} - -void Style::toggleClass(const std::string &name) { - if (name.length()) { - auto it = std::find(appliedClasses.begin(), appliedClasses.end(), name); - if (it == appliedClasses.end()) { - appliedClasses.push_back(name); - } else { - appliedClasses.erase(it); - } - } - - updateClasses(); -} - -void Style::updateClasses() { +void Style::cascadeClasses(const std::vector<std::string>& classes) { if (layers) { - layers->setClasses(appliedClasses, util::now(), defaultTransition); + layers->setClasses(classes, util::now(), defaultTransition); } } @@ -102,8 +80,6 @@ void Style::loadJSON(const uint8_t *const data) { layers = parser.getLayers(); sprite_url = parser.getSprite(); glyph_url = parser.getGlyphURL(); - - updateClasses(); } } diff --git a/src/mbgl/style/style.hpp b/src/mbgl/style/style.hpp index 56f318ecbb..e9205712ef 100644 --- a/src/mbgl/style/style.hpp +++ b/src/mbgl/style/style.hpp @@ -25,7 +25,6 @@ class Style { public: struct exception : std::runtime_error { exception(const char *msg) : std::runtime_error(msg) {} }; -public: Style(); ~Style(); @@ -35,31 +34,20 @@ public: void updateProperties(float z, timestamp t); void setDefaultTransitionDuration(uint16_t duration_milliseconds = 0); - - void setAppliedClasses(const std::vector<std::string> &classes); - const std::vector<std::string> &getAppliedClasses() const; - void toggleClass(const std::string &name); - - // Updates the styling information to reflect the current array - // of applied classes. - void updateClasses(); + void cascadeClasses(const std::vector<std::string>&); bool hasTransitions() const; const std::string &getSpriteURL() const; -public: util::ptr<StyleLayerGroup> layers; std::vector<std::string> appliedClasses; std::string glyph_url; private: std::string sprite_url; - -private: PropertyTransition defaultTransition; bool initial_render_complete = false; - std::unique_ptr<uv::rwlock> mtx; }; diff --git a/test/headless.cpp b/test/headless.cpp index dfa649da5d..86960fb08b 100644 --- a/test/headless.cpp +++ b/test/headless.cpp @@ -190,8 +190,8 @@ TEST_P(HeadlessTest, render) { CachingHTTPFileSource fileSource(platform::defaultCacheDatabase()); Map map(view, fileSource); + map.setClasses(classes); map.setStyleJSON(style, base_directory); - map.setAppliedClasses(classes); view.resize(width, height, pixelRatio); map.resize(width, height, pixelRatio); |