diff options
author | Guardiola31337 <pablo.guardiola@mapbox.com> | 2017-05-23 12:46:14 +0200 |
---|---|---|
committer | Guardiola31337 <pablo.guardiola@mapbox.com> | 2017-05-25 17:10:31 +0200 |
commit | 92fd70f40cb19a8bcc5cea576af7a1ff36f762a3 (patch) | |
tree | d425393cbc05b100a3656fa71628fe56511ba414 | |
parent | 30cc103d98fe251b02901759c448211d8d4c42de (diff) | |
download | qtlocation-mapboxgl-92fd70f40cb19a8bcc5cea576af7a1ff36f762a3.tar.gz |
[WIP] wrap statement in filter and start replacing get filter nested conditional with visitor
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs | 4 | ||||
-rw-r--r-- | platform/android/config.cmake | 2 | ||||
-rw-r--r-- | platform/android/src/style/conversion/filter.hpp | 9 | ||||
-rw-r--r-- | platform/android/src/style/filter.cpp | 16 | ||||
-rw-r--r-- | platform/android/src/style/filter.hpp | 9 | ||||
-rw-r--r-- | platform/android/src/style/layers/layer.cpp | 42 | ||||
-rw-r--r-- | platform/android/src/style/layers/layer.hpp | 3 | ||||
-rw-r--r-- | platform/android/src/style/statement.cpp | 15 | ||||
-rw-r--r-- | platform/android/src/style/statement.hpp | 23 |
9 files changed, 51 insertions, 72 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs index 6206e30be5..b20f284387 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/style/layers/layer.java.ejs @@ -9,6 +9,7 @@ package com.mapbox.mapboxsdk.style.layers; import android.support.annotation.ColorInt; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.annotation.UiThread; import static com.mapbox.mapboxsdk.utils.ColorUtils.rgbaToColor; @@ -91,8 +92,9 @@ public class <%- camelize(type) %>Layer extends Layer { /** * Gets the filter of the layer. * - * @return {@link Filter.Statement} filter layer is using + * @return {@link Filter.Statement} filter layer is using or null */ + @Nullable public Filter.Statement getFilter() { return nativeGetFilter(); } diff --git a/platform/android/config.cmake b/platform/android/config.cmake index ef364e8226..087a5ef2f8 100644 --- a/platform/android/config.cmake +++ b/platform/android/config.cmake @@ -113,8 +113,6 @@ add_library(mbgl-android STATIC platform/android/src/style/conversion/types_string_values.hpp platform/android/src/style/filter.cpp platform/android/src/style/filter.hpp - platform/android/src/style/statement.cpp - platform/android/src/style/statement.hpp platform/android/src/map/camera_position.cpp platform/android/src/map/camera_position.hpp diff --git a/platform/android/src/style/conversion/filter.hpp b/platform/android/src/style/conversion/filter.hpp index 229ddbf296..9f29a4dc08 100644 --- a/platform/android/src/style/conversion/filter.hpp +++ b/platform/android/src/style/conversion/filter.hpp @@ -2,7 +2,6 @@ #include "../android_conversion.hpp" #include "../filter.hpp" -#include "../statement.hpp" #include "../../conversion/conversion.hpp" #include <mbgl/style/conversion.hpp> #include <mbgl/style/conversion/filter.hpp> @@ -31,12 +30,10 @@ inline optional<mbgl::style::Filter> toFilter(jni::JNIEnv& env, jni::Array<jni:: } template <> -struct Converter<jni::Object<mbgl::android::Statement>, mbgl::style::Filter> { - Result<jni::Object<mbgl::android::Statement>> operator()(jni::JNIEnv& env, const mbgl::style::Filter& value) const { +struct Converter<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter> { + Result<jni::Object<mbgl::android::Filter::Statement>> operator()(jni::JNIEnv& env, const mbgl::style::Filter& value) const { using namespace mbgl::android; - auto statement = Filter::fromFilter(env, value); - - return statement; + return Filter::fromFilter(env, value); } }; diff --git a/platform/android/src/style/filter.cpp b/platform/android/src/style/filter.cpp index 73c10cd775..3e5c28c08f 100644 --- a/platform/android/src/style/filter.cpp +++ b/platform/android/src/style/filter.cpp @@ -3,19 +3,19 @@ namespace mbgl { namespace android { -jni::Object<Statement> Filter::fromFilter(jni::JNIEnv& env, const mbgl::style::Filter&) { - static auto constructor = Statement::javaClass.template GetConstructor<>(env); - - return Statement::javaClass.New(env, constructor); +jni::Object<Filter::Statement> Filter::fromFilter(jni::JNIEnv& env, const mbgl::style::Filter&) { + static auto constructor = Filter::Statement::javaClass.template GetConstructor<>(env); + return Filter::Statement::javaClass.New(env, constructor); } +jni::Class<Filter> Filter::javaClass; + +jni::Class<Filter::Statement> Filter::Statement::javaClass; + void Filter::registerNative(jni::JNIEnv& env) { - // Lookup the class Filter::javaClass = *jni::Class<Filter>::Find(env).NewGlobalRef(env).release(); + Filter::Statement::javaClass = *jni::Class<Filter::Statement>::Find(env).NewGlobalRef(env).release(); } -jni::Class<Filter> Filter::javaClass; - - } // namespace android } // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/style/filter.hpp b/platform/android/src/style/filter.hpp index 959ab90f1f..bfd8838f3d 100644 --- a/platform/android/src/style/filter.hpp +++ b/platform/android/src/style/filter.hpp @@ -4,7 +4,6 @@ #include <mbgl/util/noncopyable.hpp> #include <jni/jni.hpp> -#include "statement.hpp" namespace mbgl { namespace android { @@ -14,12 +13,18 @@ public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/Filter"; }; - static jni::Object<Statement> fromFilter(jni::JNIEnv&, const mbgl::style::Filter&); + static jni::Object<Filter::Statement> fromFilter(jni::JNIEnv&, const mbgl::style::Filter&); static jni::Class<Filter> javaClass; static void registerNative(jni::JNIEnv&); + class Statement : private mbgl::util::noncopyable { + public: + static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/Filter$Statement"; }; + + static jni::Class<Filter::Statement> javaClass; + }; }; } // namespace android diff --git a/platform/android/src/style/layers/layer.cpp b/platform/android/src/style/layers/layer.cpp index 4fa0d1a690..c01745e879 100644 --- a/platform/android/src/style/layers/layer.cpp +++ b/platform/android/src/style/layers/layer.cpp @@ -99,36 +99,52 @@ namespace android { } } - struct SetFilterEvaluator { - style::Filter filter; + struct GetFilterEvaluator { + std::string noop(std::string layerType) { + Log::Warning(mbgl::Event::JNI, "%s doesn't support filters", layerType.c_str()); + return {}; + } - void operator()(style::BackgroundLayer&) { Log::Warning(mbgl::Event::JNI, "BackgroundLayer doesn't support filters"); } - void operator()(style::CustomLayer&) { Log::Warning(mbgl::Event::JNI, "CustomLayer doesn't support filters"); } - void operator()(style::RasterLayer&) { Log::Warning(mbgl::Event::JNI, "RasterLayer doesn't support filters"); } + std::string operator()(style::BackgroundLayer&) { return noop("BackgroundLayer doesn't support filters"); } + std::string operator()(style::CustomLayer&) { return noop("CustomLayer doesn't support filters"); } + std::string operator()(style::RasterLayer&) { return noop("RasterLayer doesn't support filters"); } template <class LayerType> - void operator()(LayerType& layer) { - layer.setFilter(filter); + std::string operator()(LayerType& layer) { + return layer.getSourceLayer(); } }; - jni::Object<mbgl::android::Statement> Layer::getFilter(jni::JNIEnv& env) { + jni::Object<mbgl::android::Filter::Statement> Layer::getFilter(jni::JNIEnv& env) { using namespace mbgl::style; using namespace mbgl::android::conversion; if (layer.is<FillLayer>()) { - return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, layer.as<FillLayer>()->getFilter()); + return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, layer.as<FillLayer>()->getFilter()); } else if (layer.is<LineLayer>()) { - return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, layer.as<LineLayer>()->getFilter()); + return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, layer.as<LineLayer>()->getFilter()); } else if (layer.is<SymbolLayer>()) { - return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, layer.as<SymbolLayer>()->getFilter()); + return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, layer.as<SymbolLayer>()->getFilter()); } else if (layer.is<CircleLayer>()) { - return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, layer.as<CircleLayer>()->getFilter()); + return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, layer.as<CircleLayer>()->getFilter()); } else { - return *convert<jni::Object<mbgl::android::Statement>, mbgl::style::Filter>(env, NullFilter()); + return *convert<jni::Object<mbgl::android::Filter::Statement>, mbgl::style::Filter>(env, NullFilter()); } } + struct SetFilterEvaluator { + style::Filter filter; + + void operator()(style::BackgroundLayer&) { Log::Warning(mbgl::Event::JNI, "BackgroundLayer doesn't support filters"); } + void operator()(style::CustomLayer&) { Log::Warning(mbgl::Event::JNI, "CustomLayer doesn't support filters"); } + void operator()(style::RasterLayer&) { Log::Warning(mbgl::Event::JNI, "RasterLayer doesn't support filters"); } + + template <class LayerType> + void operator()(LayerType& layer) { + layer.setFilter(filter); + } + }; + void Layer::setFilter(jni::JNIEnv& env, jni::Array<jni::Object<>> jfilter) { using namespace mbgl::style; using namespace mbgl::style::conversion; diff --git a/platform/android/src/style/layers/layer.hpp b/platform/android/src/style/layers/layer.hpp index aff08406dc..d72b294508 100644 --- a/platform/android/src/style/layers/layer.hpp +++ b/platform/android/src/style/layers/layer.hpp @@ -6,7 +6,6 @@ #include "../value.hpp" #include "../filter.hpp" -#include "../statement.hpp" #include <jni/jni.hpp> @@ -68,7 +67,7 @@ public: /* common properties, but not shared by all */ - jni::Object<mbgl::android::Statement> getFilter(jni::JNIEnv&); + jni::Object<mbgl::android::Filter::Statement> getFilter(jni::JNIEnv&); void setFilter(jni::JNIEnv&, jni::Array<jni::Object<>>); diff --git a/platform/android/src/style/statement.cpp b/platform/android/src/style/statement.cpp deleted file mode 100644 index f63a800297..0000000000 --- a/platform/android/src/style/statement.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "statement.hpp" - -namespace mbgl { -namespace android { - -void Statement::registerNative(jni::JNIEnv& env) { - // Lookup the class - Statement::javaClass = *jni::Class<Statement>::Find(env).NewGlobalRef(env).release(); -} - -jni::Class<Statement> Statement::javaClass; - - -} // namespace android -} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/style/statement.hpp b/platform/android/src/style/statement.hpp deleted file mode 100644 index cd74ca898c..0000000000 --- a/platform/android/src/style/statement.hpp +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -#include <mbgl/style/filter.hpp> -#include <mbgl/util/noncopyable.hpp> - -#include <jni/jni.hpp> - -namespace mbgl { -namespace android { - -class Statement : private mbgl::util::noncopyable { -public: - - static constexpr auto Name() { return "com/mapbox/mapboxsdk/style/layers/Filter$Statement"; }; - - static jni::Class<Statement> javaClass; - - static void registerNative(jni::JNIEnv&); - -}; - -} // namespace android -} // namespace mbgl
\ No newline at end of file |