|
|
|
|
@@ -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());
|
|
|
|
|
|