diff options
author | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2018-11-06 11:25:09 +0200 |
---|---|---|
committer | Mikhail Pozdnyakov <mikhail.pozdnyakov@mapbox.com> | 2018-11-07 16:34:20 +0200 |
commit | 80ec05cf47feb9f225d46222980d6942b9a4038f (patch) | |
tree | e0e2781efbdd9eae40cbde9ddf695fff80efa1ab /platform/android/src/style/layers/raster_layer.cpp | |
parent | ffdeef3a26306e447f1cc52a8e14d42fb035611d (diff) | |
download | qtlocation-mapboxgl-80ec05cf47feb9f225d46222980d6942b9a4038f.tar.gz |
[core][android] Implement LayerManager for Android
The newly introduced `LayerManagerAndroid` is now responsible
for creating both style layer objects and their java peers on Android.
Diffstat (limited to 'platform/android/src/style/layers/raster_layer.cpp')
-rw-r--r-- | platform/android/src/style/layers/raster_layer.cpp | 30 |
1 files changed, 24 insertions, 6 deletions
diff --git a/platform/android/src/style/layers/raster_layer.cpp b/platform/android/src/style/layers/raster_layer.cpp index 5acbb8fe89..00286c0f16 100644 --- a/platform/android/src/style/layers/raster_layer.cpp +++ b/platform/android/src/style/layers/raster_layer.cpp @@ -7,6 +7,8 @@ #include "../conversion/property_value.hpp" #include "../conversion/transition_options.hpp" +#include <mbgl/style/layer_impl.hpp> + namespace mbgl { namespace android { @@ -18,7 +20,7 @@ namespace android { * Creates an owning peer object (for layers not attached to the map) from the JVM side */ RasterLayer::RasterLayer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) - : Layer(env, std::make_unique<mbgl::style::RasterLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { + : Layer(std::make_unique<mbgl::style::RasterLayer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { } /** @@ -158,13 +160,29 @@ namespace android { } - jni::Local<jni::Object<Layer>> RasterLayer::createJavaPeer(jni::JNIEnv& env) { - static auto& javaClass = jni::Class<RasterLayer>::Singleton(env); - static auto constructor = javaClass.GetConstructor<jni::jlong>(env); - return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); + // RasterJavaLayerPeerFactory + + RasterJavaLayerPeerFactory::~RasterJavaLayerPeerFactory() = default; + + namespace { + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv& env, Layer* layer) { + static auto& javaClass = jni::Class<RasterLayer>::Singleton(env); + static auto constructor = javaClass.GetConstructor<jni::jlong>(env); + return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(layer)); + } + } // namespace + + jni::Local<jni::Object<Layer>> RasterJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, mbgl::style::Layer& layer) { + assert(layer.baseImpl->getLayerFactory() == this); + return createJavaPeer(env, new RasterLayer(map, toRasterLayer(layer))); + } + + jni::Local<jni::Object<Layer>> RasterJavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer> layer) { + assert(layer->baseImpl->getLayerFactory() == this); + return createJavaPeer(env, new RasterLayer(map, std::unique_ptr<mbgl::style::RasterLayer>(static_cast<mbgl::style::RasterLayer*>(layer.release())))); } - void RasterLayer::registerNative(jni::JNIEnv& env) { + void RasterJavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { // Lookup the class static auto& javaClass = jni::Class<RasterLayer>::Singleton(env); |