diff options
Diffstat (limited to 'platform/android/src/style/layers')
-rw-r--r-- | platform/android/src/style/layers/custom_layer.cpp | 10 | ||||
-rw-r--r-- | platform/android/src/style/layers/custom_layer.hpp | 2 | ||||
-rw-r--r-- | platform/android/src/style/layers/heatmap_layer.cpp | 11 | ||||
-rw-r--r-- | platform/android/src/style/layers/heatmap_layer.hpp | 2 | ||||
-rw-r--r-- | platform/android/src/style/layers/layer.cpp | 34 | ||||
-rw-r--r-- | platform/android/src/style/layers/layer.cpp.ejs | 13 | ||||
-rw-r--r-- | platform/android/src/style/layers/layer.hpp | 5 |
7 files changed, 68 insertions, 9 deletions
diff --git a/platform/android/src/style/layers/custom_layer.cpp b/platform/android/src/style/layers/custom_layer.cpp index 51a48520bf..61e74a9cf5 100644 --- a/platform/android/src/style/layers/custom_layer.cpp +++ b/platform/android/src/style/layers/custom_layer.cpp @@ -7,14 +7,10 @@ namespace mbgl { namespace android { - CustomLayer::CustomLayer(jni::JNIEnv& env, jni::String layerId, jni::jlong initializeFunction, jni::jlong renderFunction, jni::jlong contextLostFunction, jni::jlong deinitializeFunction, jni::jlong context) + CustomLayer::CustomLayer(jni::JNIEnv& env, jni::String layerId, jni::jlong host) : Layer(env, std::make_unique<mbgl::style::CustomLayer>( jni::Make<std::string>(env, layerId), - reinterpret_cast<mbgl::style::CustomLayerInitializeFunction>(initializeFunction), - reinterpret_cast<mbgl::style::CustomLayerRenderFunction>(renderFunction), - reinterpret_cast<mbgl::style::CustomLayerContextLostFunction>(contextLostFunction), - reinterpret_cast<mbgl::style::CustomLayerDeinitializeFunction>(deinitializeFunction), - reinterpret_cast<void*>(context)) + std::unique_ptr<mbgl::style::CustomLayerHost>(reinterpret_cast<mbgl::style::CustomLayerHost*>(host))) ) { } @@ -53,7 +49,7 @@ namespace android { // Register the peer jni::RegisterNativePeer<CustomLayer>( env, CustomLayer::javaClass, "nativePtr", - std::make_unique<CustomLayer, JNIEnv&, jni::String, jni::jlong, jni::jlong, jni::jlong, jni::jlong, jni::jlong>, + std::make_unique<CustomLayer, JNIEnv&, jni::String, jni::jlong>, "initialize", "finalize", METHOD(&CustomLayer::update, "nativeUpdate")); diff --git a/platform/android/src/style/layers/custom_layer.hpp b/platform/android/src/style/layers/custom_layer.hpp index 9e079c1288..7eb649d923 100644 --- a/platform/android/src/style/layers/custom_layer.hpp +++ b/platform/android/src/style/layers/custom_layer.hpp @@ -16,7 +16,7 @@ public: static void registerNative(jni::JNIEnv&); - CustomLayer(jni::JNIEnv&, jni::String, jni::jlong, jni::jlong, jni::jlong, jni::jlong, jni::jlong); + CustomLayer(jni::JNIEnv&, jni::String, jni::jlong); CustomLayer(mbgl::Map&, mbgl::style::CustomLayer&); diff --git a/platform/android/src/style/layers/heatmap_layer.cpp b/platform/android/src/style/layers/heatmap_layer.cpp index 609499ec93..b3d90faab7 100644 --- a/platform/android/src/style/layers/heatmap_layer.cpp +++ b/platform/android/src/style/layers/heatmap_layer.cpp @@ -79,6 +79,16 @@ namespace android { layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::setHeatmapIntensityTransition(options); } + jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + auto propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapColor(); + if (propertyValue.isUndefined()) { + propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getDefaultHeatmapColor(); + } + Result<jni::jobject*> converted = convert<jni::jobject*>(env, propertyValue); + return jni::Object<jni::ObjectTag>(*converted); + } + jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapOpacity(jni::JNIEnv& env) { using namespace mbgl::android::conversion; Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapOpacity()); @@ -125,6 +135,7 @@ namespace android { METHOD(&HeatmapLayer::getHeatmapIntensityTransition, "nativeGetHeatmapIntensityTransition"), METHOD(&HeatmapLayer::setHeatmapIntensityTransition, "nativeSetHeatmapIntensityTransition"), METHOD(&HeatmapLayer::getHeatmapIntensity, "nativeGetHeatmapIntensity"), + METHOD(&HeatmapLayer::getHeatmapColor, "nativeGetHeatmapColor"), METHOD(&HeatmapLayer::getHeatmapOpacityTransition, "nativeGetHeatmapOpacityTransition"), METHOD(&HeatmapLayer::setHeatmapOpacityTransition, "nativeSetHeatmapOpacityTransition"), METHOD(&HeatmapLayer::getHeatmapOpacity, "nativeGetHeatmapOpacity")); diff --git a/platform/android/src/style/layers/heatmap_layer.hpp b/platform/android/src/style/layers/heatmap_layer.hpp index 85f9f0292e..9e8908b062 100644 --- a/platform/android/src/style/layers/heatmap_layer.hpp +++ b/platform/android/src/style/layers/heatmap_layer.hpp @@ -39,6 +39,8 @@ public: void setHeatmapIntensityTransition(jni::JNIEnv&, jlong duration, jlong delay); jni::Object<TransitionOptions> getHeatmapIntensityTransition(jni::JNIEnv&); + jni::Object<jni::ObjectTag> getHeatmapColor(jni::JNIEnv&); + jni::Object<jni::ObjectTag> getHeatmapOpacity(jni::JNIEnv&); void setHeatmapOpacityTransition(jni::JNIEnv&, jlong duration, jlong delay); jni::Object<TransitionOptions> getHeatmapOpacityTransition(jni::JNIEnv&); diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp index 29530879a5..6fe6e3cb29 100644 --- a/platform/android/src/style/layers/layer.cpp +++ b/platform/android/src/style/layers/layer.cpp @@ -25,6 +25,7 @@ // C++ -> Java conversion #include "../conversion/property_value.hpp" +#include <mbgl/style/filter.hpp> #include <string> @@ -134,6 +135,38 @@ namespace android { layer.accept(SetFilterEvaluator {std::move(*converted)}); } + struct GetFilterEvaluator { + mbgl::style::Filter noop(std::string layerType) { + Log::Warning(mbgl::Event::JNI, "%s doesn't support filter", layerType.c_str()); + return {}; + } + + mbgl::style::Filter operator()(style::BackgroundLayer&) { return noop("BackgroundLayer"); } + mbgl::style::Filter operator()(style::CustomLayer&) { return noop("CustomLayer"); } + mbgl::style::Filter operator()(style::RasterLayer&) { return noop("RasterLayer"); } + mbgl::style::Filter operator()(style::HillshadeLayer&) { return noop("HillshadeLayer"); } + + template <class LayerType> + mbgl::style::Filter operator()(LayerType& layer) { + return layer.getFilter(); + } + }; + + jni::Object<gson::JsonElement> Layer::getFilter(jni::JNIEnv& env) { + using namespace mbgl::style; + using namespace mbgl::style::conversion; + + Filter filter = layer.accept(GetFilterEvaluator()); + + jni::Object<gson::JsonElement> converted; + if (filter.is<ExpressionFilter>()) { + ExpressionFilter filterExpression = filter.get<ExpressionFilter>(); + mbgl::Value expressionValue = filterExpression.expression.get()->serialize(); + converted = gson::JsonElement::New(env, expressionValue); + } + return converted; + } + struct SetSourceLayerEvaluator { std::string sourceLayer; @@ -208,6 +241,7 @@ namespace android { METHOD(&Layer::setLayoutProperty, "nativeSetLayoutProperty"), METHOD(&Layer::setPaintProperty, "nativeSetPaintProperty"), METHOD(&Layer::setFilter, "nativeSetFilter"), + METHOD(&Layer::getFilter, "nativeGetFilter"), METHOD(&Layer::setSourceLayer, "nativeSetSourceLayer"), METHOD(&Layer::getSourceLayer, "nativeGetSourceLayer"), METHOD(&Layer::getMinZoom, "nativeGetMinZoom"), diff --git a/platform/android/src/style/layers/layer.cpp.ejs b/platform/android/src/style/layers/layer.cpp.ejs index 1debb096a3..b08f0ec4dc 100644 --- a/platform/android/src/style/layers/layer.cpp.ejs +++ b/platform/android/src/style/layers/layer.cpp.ejs @@ -48,12 +48,25 @@ namespace android { // Property getters <% for (const property of properties) { -%> +<% if (property.name != 'heatmap-color') { -%> jni::Object<jni::ObjectTag> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>(jni::JNIEnv& env) { using namespace mbgl::android::conversion; Result<jni::jobject*> converted = convert<jni::jobject*>(env, layer.as<mbgl::style::<%- camelize(type) %>Layer>()-><%- camelize(type) %>Layer::get<%- camelize(property.name) %>()); return jni::Object<jni::ObjectTag>(*converted); } +<% } else { -%> + jni::Object<jni::ObjectTag> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { + using namespace mbgl::android::conversion; + auto propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getHeatmapColor(); + if (propertyValue.isUndefined()) { + propertyValue = layer.as<mbgl::style::HeatmapLayer>()->HeatmapLayer::getDefaultHeatmapColor(); + } + Result<jni::jobject*> converted = convert<jni::jobject*>(env, propertyValue); + return jni::Object<jni::ObjectTag>(*converted); + } + +<% } -%> <% if (property.transition) { -%> jni::Object<TransitionOptions> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>Transition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp index 78c3f80b48..2486b0dfa6 100644 --- a/platform/android/src/style/layers/layer.hpp +++ b/platform/android/src/style/layers/layer.hpp @@ -3,8 +3,9 @@ #include <mbgl/util/noncopyable.hpp> #include <mbgl/map/map.hpp> #include <mbgl/style/layer.hpp> - +#include "../../gson/json_array.hpp" #include "../value.hpp" +#include "../../gson/json_element.hpp" #include <jni/jni.hpp> @@ -68,6 +69,8 @@ public: void setFilter(jni::JNIEnv&, jni::Array<jni::Object<>>); + jni::Object<gson::JsonElement> getFilter(jni::JNIEnv&); + void setSourceLayer(jni::JNIEnv&, jni::String); jni::String getSourceLayer(jni::JNIEnv&); |