[node] add setLight support
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user