diff options
Diffstat (limited to 'platform/android/src/style/layers/layer.cpp.ejs')
-rw-r--r-- | platform/android/src/style/layers/layer.cpp.ejs | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/platform/android/src/style/layers/layer.cpp.ejs b/platform/android/src/style/layers/layer.cpp.ejs index 5fd8537c5a..1489d83a5e 100644 --- a/platform/android/src/style/layers/layer.cpp.ejs +++ b/platform/android/src/style/layers/layer.cpp.ejs @@ -11,6 +11,8 @@ #include "../conversion/property_value.hpp" #include "../conversion/transition_options.hpp" +#include <mbgl/style/layer_impl.hpp> + namespace mbgl { namespace android { @@ -23,13 +25,13 @@ namespace android { * Creates an owning peer object (for layers not attached to the map) from the JVM side */ <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(jni::JNIEnv& env, jni::String& layerId) - : Layer(env, std::make_unique<mbgl::style::<%- camelize(type) %>Layer>(jni::Make<std::string>(env, layerId))) { + : Layer(std::make_unique<mbgl::style::<%- camelize(type) %>Layer>(jni::Make<std::string>(env, layerId))) { <% } else { -%> /** * Creates an owning peer object (for layers not attached to the map) from the JVM side */ <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(jni::JNIEnv& env, jni::String& layerId, jni::String& sourceId) - : Layer(env, std::make_unique<mbgl::style::<%- camelize(type) %>Layer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { + : Layer(std::make_unique<mbgl::style::<%- camelize(type) %>Layer>(jni::Make<std::string>(env, layerId), jni::Make<std::string>(env, sourceId))) { <% } -%> } @@ -86,13 +88,29 @@ namespace android { <% } -%> <% } -%> - jni::Local<jni::Object<Layer>> <%- camelize(type) %>Layer::createJavaPeer(jni::JNIEnv& env) { - static auto& javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env); - static auto constructor = javaClass.GetConstructor<jni::jlong>(env); - return javaClass.New(env, constructor, reinterpret_cast<jni::jlong>(this)); + // <%- camelize(type) %>JavaLayerPeerFactory + + <%- camelize(type) %>JavaLayerPeerFactory::~<%- camelize(type) %>JavaLayerPeerFactory() = default; + + namespace { + jni::Local<jni::Object<Layer>> createJavaPeer(jni::JNIEnv& env, Layer* layer) { + static auto& javaClass = jni::Class<<%- camelize(type) %>Layer>::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>> <%- camelize(type) %>JavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, mbgl::style::Layer& layer) { + assert(layer.baseImpl->getLayerFactory() == this); + return createJavaPeer(env, new <%- camelize(type) %>Layer(map, to<%- camelize(type) %>Layer(layer))); + } + + jni::Local<jni::Object<Layer>> <%- camelize(type) %>JavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr<mbgl::style::Layer> layer) { + assert(layer->baseImpl->getLayerFactory() == this); + return createJavaPeer(env, new <%- camelize(type) %>Layer(map, std::unique_ptr<mbgl::style::<%- camelize(type) %>Layer>(static_cast<mbgl::style::<%- camelize(type) %>Layer*>(layer.release())))); } - void <%- camelize(type) %>Layer::registerNative(jni::JNIEnv& env) { + void <%- camelize(type) %>JavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { // Lookup the class static auto& javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env); |