summaryrefslogtreecommitdiff
path: root/platform/node
diff options
context:
space:
mode:
authorJohn Firebaugh <john.firebaugh@gmail.com>2016-06-21 17:22:51 -0700
committerJohn Firebaugh <john.firebaugh@gmail.com>2016-06-21 18:24:49 -0700
commit3459b83736f0e4eedfb95a1394d9e4ee1523b917 (patch)
tree2e8cc0abacdaad54b394af1291e846c7483acfa2 /platform/node
parent220fc7adc952c97db3fb8ce7edb855db9469ef5a (diff)
downloadqtlocation-mapboxgl-3459b83736f0e4eedfb95a1394d9e4ee1523b917.tar.gz
[core, node] Node bindings for setFilter
Diffstat (limited to 'platform/node')
-rw-r--r--platform/node/src/node_conversion.hpp19
-rw-r--r--platform/node/src/node_map.cpp37
-rw-r--r--platform/node/src/node_map.hpp1
-rw-r--r--platform/node/src/node_style_properties.hpp24
-rw-r--r--platform/node/src/node_style_properties.hpp.ejs16
5 files changed, 97 insertions, 0 deletions
diff --git a/platform/node/src/node_conversion.hpp b/platform/node/src/node_conversion.hpp
index 51443f28eb..03c13b5846 100644
--- a/platform/node/src/node_conversion.hpp
+++ b/platform/node/src/node_conversion.hpp
@@ -7,6 +7,7 @@
#pragma GCC diagnostic pop
#include <mbgl/util/optional.hpp>
+#include <mbgl/util/feature.hpp>
namespace mbgl {
namespace style {
@@ -68,6 +69,24 @@ inline optional<std::string> toString(v8::Local<v8::Value> value) {
return std::string(*Nan::Utf8String(value));
}
+inline optional<Value> toValue(v8::Local<v8::Value> value) {
+ if (value->IsFalse()) {
+ return { false };
+ } else if (value->IsTrue()) {
+ return { true };
+ } else if (value->IsString()) {
+ return { std::string(*Nan::Utf8String(value)) };
+ } else if (value->IsUint32()) {
+ return { value->Uint32Value() };
+ } else if (value->IsInt32()) {
+ return { value->Int32Value() };
+ } else if (value->IsNumber()) {
+ return { value->NumberValue() };
+ } else {
+ return {};
+ }
+}
+
} // namespace conversion
} // namespace style
} // namespace mbgl
diff --git a/platform/node/src/node_map.cpp b/platform/node/src/node_map.cpp
index c416082b69..e6ee84ee53 100644
--- a/platform/node/src/node_map.cpp
+++ b/platform/node/src/node_map.cpp
@@ -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());
diff --git a/platform/node/src/node_map.hpp b/platform/node/src/node_map.hpp
index fb7fc77e5b..58773e33da 100644
--- a/platform/node/src/node_map.hpp
+++ b/platform/node/src/node_map.hpp
@@ -30,6 +30,7 @@ public:
static NAN_METHOD(AddClass);
static NAN_METHOD(SetLayoutProperty);
static NAN_METHOD(SetPaintProperty);
+ static NAN_METHOD(SetFilter);
static NAN_METHOD(DumpDebugLogs);
static NAN_METHOD(QueryRenderedFeatures);
diff --git a/platform/node/src/node_style_properties.hpp b/platform/node/src/node_style_properties.hpp
index 1ad06068f3..0e3100207a 100644
--- a/platform/node/src/node_style_properties.hpp
+++ b/platform/node/src/node_style_properties.hpp
@@ -122,4 +122,28 @@ inline PropertySetters makePaintPropertySetters() {
return result;
}
+inline bool setFilter(mbgl::style::Layer& layer, const mbgl::style::Filter& filter) {
+ using namespace mbgl::style;
+
+ if (layer.is<FillLayer>()) {
+ layer.as<FillLayer>()->setFilter(filter);
+ return true;
+ }
+ if (layer.is<LineLayer>()) {
+ layer.as<LineLayer>()->setFilter(filter);
+ return true;
+ }
+ if (layer.is<SymbolLayer>()) {
+ layer.as<SymbolLayer>()->setFilter(filter);
+ return true;
+ }
+ if (layer.is<CircleLayer>()) {
+ layer.as<CircleLayer>()->setFilter(filter);
+ return true;
+ }
+
+ Nan::ThrowTypeError("layer doesn't support filters");
+ return false;
+}
+
}
diff --git a/platform/node/src/node_style_properties.hpp.ejs b/platform/node/src/node_style_properties.hpp.ejs
index ebf45eb3cf..bfd3f74ca5 100644
--- a/platform/node/src/node_style_properties.hpp.ejs
+++ b/platform/node/src/node_style_properties.hpp.ejs
@@ -34,4 +34,20 @@ inline PropertySetters makePaintPropertySetters() {
return result;
}
+inline bool setFilter(mbgl::style::Layer& layer, const mbgl::style::Filter& filter) {
+ using namespace mbgl::style;
+
+<% for (const layer of locals.layers) { -%>
+<% if (layer.type !== 'raster' && layer.type !== 'background' && layer.type !== 'custom') { -%>
+ if (layer.is<<%- camelize(layer.type) %>Layer>()) {
+ layer.as<<%- camelize(layer.type) %>Layer>()->setFilter(filter);
+ return true;
+ }
+<% } -%>
+<% } -%>
+
+ Nan::ThrowTypeError("layer doesn't support filters");
+ return false;
+}
+
}