<% const type = locals.type; const properties = locals.properties; -%> // This file is generated. Edit android/platform/scripts/generate-style-code.js, then run `make android-style-code`. #include "<%- type.replace('-', '_') %>_layer.hpp" #include #include "../conversion/property_value.hpp" #include "../conversion/transition_options.hpp" #include namespace mbgl { namespace android { inline mbgl::style::<%- camelize(type) %>Layer& to<%- camelize(type) %>Layer(mbgl::style::Layer& layer) { return static_castLayer&>(layer); } <% if (type === 'background') { -%> /** * 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(std::make_uniqueLayer>(jni::Make(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(std::make_uniqueLayer>(jni::Make(env, layerId), jni::Make(env, sourceId))) { <% } -%> } /** * Creates a non-owning peer object (for layers currently attached to the map) */ <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(mbgl::Map& map, mbgl::style::<%- camelize(type) %>Layer& coreLayer) : Layer(map, coreLayer) { } /** * Creates an owning peer object (for layers not attached to the map) */ <%- camelize(type) %>Layer::<%- camelize(type) %>Layer(mbgl::Map& map, std::unique_ptrLayer> coreLayer) : Layer(map, std::move(coreLayer)) { } <%- camelize(type) %>Layer::~<%- camelize(type) %>Layer() = default; // Property getters <% for (const property of properties) { -%> <% if (property.name != 'heatmap-color') { -%> jni::Local> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>(jni::JNIEnv& env) { using namespace mbgl::android::conversion; return std::move(*convert>>(env, to<%- camelize(type) %>Layer(layer).get<%- camelize(property.name) %>())); } <% } else { -%> jni::Local> HeatmapLayer::getHeatmapColor(jni::JNIEnv& env) { using namespace mbgl::android::conversion; auto propertyValue = to<%- camelize(type) %>Layer(layer).getHeatmapColor(); if (propertyValue.isUndefined()) { propertyValue = to<%- camelize(type) %>Layer(layer).getDefaultHeatmapColor(); } return std::move(*convert>>(env, propertyValue)); } <% } -%> <% if (property.transition) { -%> jni::Local> <%- camelize(type) %>Layer::get<%- camelize(property.name) %>Transition(jni::JNIEnv& env) { using namespace mbgl::android::conversion; mbgl::style::TransitionOptions options = to<%- camelize(type) %>Layer(layer).get<%- camelize(property.name) %>Transition(); return std::move(*convert>>(env, options)); } void <%- camelize(type) %>Layer::set<%- camelize(property.name) %>Transition(jni::JNIEnv&, jlong duration, jlong delay) { mbgl::style::TransitionOptions options; options.duration.emplace(mbgl::Milliseconds(duration)); options.delay.emplace(mbgl::Milliseconds(delay)); to<%- camelize(type) %>Layer(layer).set<%- camelize(property.name) %>Transition(options); } <% } -%> <% } -%> // <%- camelize(type) %>JavaLayerPeerFactory <%- camelize(type) %>JavaLayerPeerFactory::~<%- camelize(type) %>JavaLayerPeerFactory() = default; namespace { jni::Local> createJavaPeer(jni::JNIEnv& env, Layer* layer) { static auto& javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env); static auto constructor = javaClass.GetConstructor(env); return javaClass.New(env, constructor, reinterpret_cast(layer)); } } // namespace jni::Local> <%- camelize(type) %>JavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, mbgl::style::Layer& layer) { assert(layer.baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new <%- camelize(type) %>Layer(map, to<%- camelize(type) %>Layer(layer))); } jni::Local> <%- camelize(type) %>JavaLayerPeerFactory::createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr layer) { assert(layer->baseImpl->getTypeInfo() == getTypeInfo()); return createJavaPeer(env, new <%- camelize(type) %>Layer(map, std::unique_ptrLayer>(static_castLayer*>(layer.release())))); } void <%- camelize(type) %>JavaLayerPeerFactory::registerNative(jni::JNIEnv& env) { // Lookup the class static auto& javaClass = jni::Class<<%- camelize(type) %>Layer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod(name) // Register the peer jni::RegisterNativePeer<<%- camelize(type) %>Layer>( env, javaClass, "nativePtr", <% if (type === 'background') { -%> jni::MakePeer<<%- camelize(type) %>Layer, jni::String&>, <% } else { -%> jni::MakePeer<<%- camelize(type) %>Layer, jni::String&, jni::String&>, <% } -%> "initialize", "finalize",<% for(var i = 0; i < properties.length; i++) {%> <% if (properties[i].transition) { -%> METHOD(&<%- camelize(type) %>Layer::get<%- camelize(properties[i].name) %>Transition, "nativeGet<%- camelize(properties[i].name) %>Transition"), METHOD(&<%- camelize(type) %>Layer::set<%- camelize(properties[i].name) %>Transition, "nativeSet<%- camelize(properties[i].name) %>Transition"), <% } -%> METHOD(&<%- camelize(type) %>Layer::get<%- camelize(properties[i].name) %>, "nativeGet<%- camelize(properties[i].name) %>")<% if(i != (properties.length -1)) {-%>,<% } -%><% } -%>); } } // namespace android } // namespace mbgl