summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLeith Bade <leith@mapbox.com>2015-01-18 16:33:39 +1100
committerLeith Bade <leith@mapbox.com>2015-01-18 16:33:39 +1100
commit016c2948c5e5d0f49c6169bd5802b54747c60312 (patch)
tree0bc1c8968ddf78e26ed21f8dd1217873bad3c2da
parent4540a8ae83fb219e1166d31ebd3cbbe1f2937993 (diff)
parent9b2c8d0391a0f06d65e34a87279973d191035015 (diff)
downloadqtlocation-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.cpp2
-rw-r--r--bin/render.gyp1
-rw-r--r--include/mbgl/map/map.hpp10
m---------ios/mapbox-gl-cocoa0
-rw-r--r--platform/default/glfw_view.cpp9
-rw-r--r--src/mbgl/map/map.cpp41
-rw-r--r--src/mbgl/style/style.cpp28
-rw-r--r--src/mbgl/style/style.hpp14
-rw-r--r--test/headless.cpp2
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);