#include "layers.hpp" #include #include #include #include #include #include #include #include #include #include #include #include "background_layer.hpp" #include "circle_layer.hpp" #include "custom_layer.hpp" #include "fill_extrusion_layer.hpp" #include "fill_layer.hpp" #include "heatmap_layer.hpp" #include "hillshade_layer.hpp" #include "line_layer.hpp" #include "raster_layer.hpp" #include "symbol_layer.hpp" #include "unknown_layer.hpp" #include "fill_extrusion_layer.hpp" namespace mbgl { namespace android { template inline std::unique_ptr to(std::unique_ptr layer) { return std::unique_ptr(layer.release()->as()); } template inline T& to(style::Layer& layer) { return *layer.as(); } template std::unique_ptr initializeLayerPeer(Map& map, style::LayerType type, T&& layer) { switch (type) { case style::LayerType::Fill: return std::unique_ptr(new FillLayer(map, to(std::forward(layer)))); case style::LayerType::Line: return std::unique_ptr(new LineLayer(map, to(std::forward(layer)))); case style::LayerType::Circle: return std::unique_ptr(new CircleLayer(map, to(std::forward(layer)))); case style::LayerType::Symbol: return std::unique_ptr(new SymbolLayer(map, to(std::forward(layer)))); case style::LayerType::Raster: return std::unique_ptr(new RasterLayer(map, to(std::forward(layer)))); case style::LayerType::Background: return std::unique_ptr(new BackgroundLayer(map, to(std::forward(layer)))); case style::LayerType::Hillshade: return std::unique_ptr(new HillshadeLayer(map, to(std::forward(layer)))); case style::LayerType::Custom: return std::unique_ptr(new CustomLayer(map, to(std::forward(layer)))); case style::LayerType::FillExtrusion: return std::unique_ptr(new FillExtrusionLayer(map, to(std::forward(layer)))); case style::LayerType::Heatmap: return std::unique_ptr(new HeatmapLayer(map, to(std::forward(layer)))); } // Not reachable, but placate GCC. assert(false); return std::unique_ptr(new UnknownLayer(map, std::forward(layer))); } jni::Local> createJavaLayerPeer(jni::JNIEnv& env, Map& map, style::Layer& coreLayer) { std::unique_ptr peerLayer = initializeLayerPeer(map, coreLayer.getType(), coreLayer); jni::Local> result = peerLayer->createJavaPeer(env); peerLayer.release(); return result; } jni::Local> createJavaLayerPeer(jni::JNIEnv& env, mbgl::Map& map, std::unique_ptr coreLayer) { auto type = coreLayer->getType(); std::unique_ptr peerLayer = initializeLayerPeer(map, type, std::move(coreLayer)); jni::Local> result = peerLayer->createJavaPeer(env); peerLayer.release(); return result; } void registerNativeLayers(jni::JNIEnv& env) { Layer::registerNative(env); BackgroundLayer::registerNative(env); CircleLayer::registerNative(env); CustomLayer::registerNative(env); FillExtrusionLayer::registerNative(env); FillLayer::registerNative(env); HeatmapLayer::registerNative(env); HillshadeLayer::registerNative(env); LineLayer::registerNative(env); RasterLayer::registerNative(env); SymbolLayer::registerNative(env); UnknownLayer::registerNative(env); } } // namespace android } // namespace mbgl