diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2018-01-24 12:46:49 -0800 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2018-01-24 12:46:49 -0800 |
commit | 34c00e47b9dab84d9f963a26a17b01b5f0517f42 (patch) | |
tree | 7fc6a8f82c315bcb8460f078c3ffcacd79a15d1f | |
parent | 703c73fda83f71552936cc2568d2e89137b3ba9c (diff) | |
download | qtlocation-mapboxgl-34c00e47b9dab84d9f963a26a17b01b5f0517f42.tar.gz |
[node] add setLight support, and add transition ignoreupstream/node-light
m--------- | mapbox-gl-js | 0 | ||||
-rw-r--r-- | platform/node/src/node_map.cpp | 51 | ||||
-rw-r--r-- | platform/node/src/node_map.hpp | 1 | ||||
-rw-r--r-- | platform/node/test/ignores.json | 1 | ||||
-rw-r--r-- | platform/node/test/suite_implementation.js | 3 |
5 files changed, 50 insertions, 6 deletions
diff --git a/mapbox-gl-js b/mapbox-gl-js -Subproject 5e44e625ccf6e9d5e6d48011bb11281d1a4a197 +Subproject efd0308dab4e83d6a78a8577f253063aebaa0e7 diff --git a/platform/node/src/node_map.cpp b/platform/node/src/node_map.cpp index 5dd5e6b490..3e66aaa789 100644 --- a/platform/node/src/node_map.cpp +++ b/platform/node/src/node_map.cpp @@ -9,6 +9,7 @@ #include <mbgl/style/conversion/source.hpp> #include <mbgl/style/conversion/layer.hpp> #include <mbgl/style/conversion/filter.hpp> +#include <mbgl/style/conversion/light.hpp> #include <mbgl/style/layers/background_layer.hpp> #include <mbgl/style/layers/circle_layer.hpp> @@ -21,6 +22,7 @@ #include <mbgl/style/style.hpp> #include <mbgl/style/image.hpp> +#include <mbgl/style/light.hpp> #include <mbgl/map/map_observer.hpp> #include <mbgl/util/premultiply.hpp> @@ -31,6 +33,7 @@ namespace node_mbgl { struct NodeMap::RenderOptions { double zoom = 0; double bearing = 0; + mbgl::style::Light light; double pitch = 0; double latitude = 0; double longitude = 0; @@ -77,6 +80,7 @@ void NodeMap::Init(v8::Local<v8::Object> target) { Nan::SetPrototypeMethod(tpl, "setZoom", SetZoom); Nan::SetPrototypeMethod(tpl, "setBearing", SetBearing); Nan::SetPrototypeMethod(tpl, "setPitch", SetPitch); + Nan::SetPrototypeMethod(tpl, "setLight", SetLight); Nan::SetPrototypeMethod(tpl, "setAxonometric", SetAxonometric); Nan::SetPrototypeMethod(tpl, "setXSkew", SetXSkew); Nan::SetPrototypeMethod(tpl, "setYSkew", SetYSkew); @@ -266,6 +270,16 @@ NodeMap::RenderOptions NodeMap::ParseOptions(v8::Local<v8::Object> obj) { options.pitch = Nan::Get(obj, Nan::New("pitch").ToLocalChecked()).ToLocalChecked()->NumberValue(); } + if (Nan::Has(obj, Nan::New("light").ToLocalChecked()).FromJust()) { + auto lightObj = Nan::Get(obj, Nan::New("light").ToLocalChecked()).ToLocalChecked(); + mbgl::style::conversion::Error conversionError; + if (auto light = mbgl::style::conversion::convert<mbgl::style::Light>(lightObj, conversionError)) { + options.light = *light; + } else { + throw conversionError; + } + } + if (Nan::Has(obj, Nan::New("axonometric").ToLocalChecked()).FromJust()) { options.axonometric = Nan::Get(obj, Nan::New("axonometric").ToLocalChecked()).ToLocalChecked()->BooleanValue(); } @@ -373,14 +387,14 @@ void NodeMap::Render(const Nan::FunctionCallbackInfo<v8::Value>& info) { return Nan::ThrowError("Map is currently rendering an image"); } - auto options = ParseOptions(Nan::To<v8::Object>(info[0]).ToLocalChecked()); - - assert(!nodeMap->callback); - assert(!nodeMap->image.data); - nodeMap->callback = std::make_unique<Nan::Callback>(info[1].As<v8::Function>()); - try { + auto options = ParseOptions(Nan::To<v8::Object>(info[0]).ToLocalChecked()); + assert(!nodeMap->callback); + assert(!nodeMap->image.data); + nodeMap->callback = std::make_unique<Nan::Callback>(info[1].As<v8::Function>()); nodeMap->startRender(std::move(options)); + } catch (mbgl::style::conversion::Error& err) { + return Nan::ThrowTypeError(err.message.c_str()); } catch (mbgl::util::Exception &ex) { return Nan::ThrowError(ex.what()); } @@ -924,6 +938,31 @@ void NodeMap::SetPitch(const Nan::FunctionCallbackInfo<v8::Value>& info) { info.GetReturnValue().SetUndefined(); } +void NodeMap::SetLight(const Nan::FunctionCallbackInfo<v8::Value>& info) { + using namespace mbgl::style; + using namespace mbgl::style::conversion; + + auto nodeMap = Nan::ObjectWrap::Unwrap<NodeMap>(info.Holder()); + if (!nodeMap->map) return Nan::ThrowError(releasedMessage()); + + if (info.Length() <= 0 || !info[0]->IsObject()) { + return Nan::ThrowTypeError("First argument must be an object"); + } + + try { + Error conversionError; + if (auto light = convert<mbgl::style::Light>(info[0], conversionError)) { + nodeMap->map->getStyle().setLight(std::make_unique<Light>(*light)); + } else { + return Nan::ThrowTypeError(conversionError.message.c_str()); + } + } catch (const std::exception &ex) { + return Nan::ThrowError(ex.what()); + } + + info.GetReturnValue().SetUndefined(); +} + void NodeMap::SetAxonometric(const Nan::FunctionCallbackInfo<v8::Value>& info) { auto nodeMap = Nan::ObjectWrap::Unwrap<NodeMap>(info.Holder()); if (!nodeMap->map) return Nan::ThrowError(releasedMessage()); diff --git a/platform/node/src/node_map.hpp b/platform/node/src/node_map.hpp index b84f4d576f..efa6f6cee0 100644 --- a/platform/node/src/node_map.hpp +++ b/platform/node/src/node_map.hpp @@ -57,6 +57,7 @@ public: static void SetZoom(const Nan::FunctionCallbackInfo<v8::Value>&); static void SetBearing(const Nan::FunctionCallbackInfo<v8::Value>&); static void SetPitch(const Nan::FunctionCallbackInfo<v8::Value>&); + static void SetLight(const Nan::FunctionCallbackInfo<v8::Value>&); static void SetAxonometric(const Nan::FunctionCallbackInfo<v8::Value>&); static void SetXSkew(const Nan::FunctionCallbackInfo<v8::Value>&); static void SetYSkew(const Nan::FunctionCallbackInfo<v8::Value>&); diff --git a/platform/node/test/ignores.json b/platform/node/test/ignores.json index 1341fc86a1..ab187a86b3 100644 --- a/platform/node/test/ignores.json +++ b/platform/node/test/ignores.json @@ -50,6 +50,7 @@ "render-tests/regressions/mapbox-gl-js#5370": "skip - https://github.com/mapbox/mapbox-gl-native/pull/9439", "render-tests/regressions/mapbox-gl-js#5599": "https://github.com/mapbox/mapbox-gl-native/issues/10399", "render-tests/regressions/mapbox-gl-js#5740": "https://github.com/mapbox/mapbox-gl-native/issues/10619", + "render-tests/regressions/mapbox-gl-js#5982": "https://github.com/mapbox/mapbox-gl-native/issues/10619", "render-tests/regressions/mapbox-gl-native#7357": "https://github.com/mapbox/mapbox-gl-native/issues/7357", "render-tests/runtime-styling/image-add-sdf": "https://github.com/mapbox/mapbox-gl-native/issues/9847", "render-tests/runtime-styling/paint-property-fill-flat-to-extrude": "https://github.com/mapbox/mapbox-gl-native/issues/6745", diff --git a/platform/node/test/suite_implementation.js b/platform/node/test/suite_implementation.js index b0be2fa0eb..c09e8f50bf 100644 --- a/platform/node/test/suite_implementation.js +++ b/platform/node/test/suite_implementation.js @@ -53,6 +53,7 @@ module.exports = function (style, options, callback) { options.zoom = style.zoom || 0; options.bearing = style.bearing || 0; options.pitch = style.pitch || 0; + options.light = style.light || {}; map.load(style, { defaultStyleCamera: true }); @@ -129,6 +130,8 @@ module.exports = function (style, options, callback) { options.bearing = operation[1]; } else if (operation[0] === 'setPitch') { options.pitch = operation[1]; + } else if (operation[0] === 'setLight') { + options.light = operation[1]; } map[operation[0]].apply(map, operation.slice(1)); |