[core, node] Node bindings for setFilter

This commit is contained in:
John Firebaugh
2016-06-21 17:22:51 -07:00
parent 220fc7adc9
commit 3459b83736
13 changed files with 291 additions and 176 deletions

View File

@@ -58,6 +58,7 @@ NAN_MODULE_INIT(NodeMap::Init) {
Nan::SetPrototypeMethod(tpl, "addClass", AddClass);
Nan::SetPrototypeMethod(tpl, "setLayoutProperty", SetLayoutProperty);
Nan::SetPrototypeMethod(tpl, "setPaintProperty", SetPaintProperty);
Nan::SetPrototypeMethod(tpl, "setFilter", SetFilter);
Nan::SetPrototypeMethod(tpl, "dumpDebugLogs", DumpDebugLogs);
Nan::SetPrototypeMethod(tpl, "queryRenderedFeatures", QueryRenderedFeatures);
@@ -526,6 +527,42 @@ NAN_METHOD(NodeMap::SetPaintProperty) {
setProperty(info, setters);
}
NAN_METHOD(NodeMap::SetFilter) {
auto nodeMap = Nan::ObjectWrap::Unwrap<NodeMap>(info.Holder());
if (!nodeMap->map) return Nan::ThrowError(releasedMessage());
if (info.Length() < 2) {
return Nan::ThrowTypeError("Two arguments required");
}
if (!info[0]->IsString()) {
return Nan::ThrowTypeError("First argument must be a string");
}
mbgl::style::Layer* layer = nodeMap->map->getLayer(*Nan::Utf8String(info[0]));
if (!layer) {
return Nan::ThrowTypeError("layer not found");
}
mbgl::style::Filter filter;
if (!info[1]->IsNull() && !info[1]->IsUndefined()) {
mbgl::style::conversion::Result<mbgl::style::Filter> converted
= mbgl::style::conversion::convertFilter(info[1]);
if (converted.is<mbgl::style::conversion::Error>()) {
Nan::ThrowTypeError(converted.get<mbgl::style::conversion::Error>().message);
return;
}
filter = std::move(converted.get<mbgl::style::Filter>());
}
if (!setFilter(*layer, filter)) {
return;
}
info.GetReturnValue().SetUndefined();
}
NAN_METHOD(NodeMap::DumpDebugLogs) {
auto nodeMap = Nan::ObjectWrap::Unwrap<NodeMap>(info.Holder());
if (!nodeMap->map) return Nan::ThrowError(releasedMessage());