diff options
author | John Firebaugh <john.firebaugh@gmail.com> | 2016-06-21 17:22:51 -0700 |
---|---|---|
committer | John Firebaugh <john.firebaugh@gmail.com> | 2016-06-21 18:24:49 -0700 |
commit | 3459b83736f0e4eedfb95a1394d9e4ee1523b917 (patch) | |
tree | 2e8cc0abacdaad54b394af1291e846c7483acfa2 /platform/node | |
parent | 220fc7adc952c97db3fb8ce7edb855db9469ef5a (diff) | |
download | qtlocation-mapboxgl-3459b83736f0e4eedfb95a1394d9e4ee1523b917.tar.gz |
[core, node] Node bindings for setFilter
Diffstat (limited to 'platform/node')
-rw-r--r-- | platform/node/src/node_conversion.hpp | 19 | ||||
-rw-r--r-- | platform/node/src/node_map.cpp | 37 | ||||
-rw-r--r-- | platform/node/src/node_map.hpp | 1 | ||||
-rw-r--r-- | platform/node/src/node_style_properties.hpp | 24 | ||||
-rw-r--r-- | platform/node/src/node_style_properties.hpp.ejs | 16 |
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; +} + } |