From 239ce4f44950772a0013723e09072f6da69f3a43 Mon Sep 17 00:00:00 2001 From: kevin Date: Mon, 9 Mar 2020 18:26:23 +0800 Subject: [android] Add jni binding for styleable snapshotter --- platform/android/src/snapshotter/map_snapshotter.cpp | 13 +++++++++++-- platform/android/src/snapshotter/map_snapshotter.hpp | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/platform/android/src/snapshotter/map_snapshotter.cpp b/platform/android/src/snapshotter/map_snapshotter.cpp index 852e1f6adb..c3172c1cbd 100644 --- a/platform/android/src/snapshotter/map_snapshotter.cpp +++ b/platform/android/src/snapshotter/map_snapshotter.cpp @@ -37,13 +37,12 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env, auto size = mbgl::Size { static_cast(width), static_cast(height) }; showLogo = _showLogo; - // Create the core snapshotter snapshotter = std::make_unique( size, pixelRatio, mbgl::android::FileSource::getSharedResourceOptions(_env, _jFileSource), - mbgl::MapSnapshotterObserver::nullObserver(), + observer, _localIdeographFontFamily ? jni::Make(_env, _localIdeographFontFamily) : optional{}); if (position) { @@ -126,6 +125,15 @@ void MapSnapshotter::setRegion(JNIEnv& env, const jni::Object& reg snapshotter->setRegion(LatLngBounds::getLatLngBounds(env, region)); } +void MapSnapshotter::addLayer(JNIEnv &, jlong nativeLayerPtr) { + assert(nativeLayerPtr != 0); + Layer *layer = reinterpret_cast(nativeLayerPtr); + style::Layer &t = layer->get(); + std::unique_ptr u (&t); + observer.didFinishLoadingStyleCallback= [&] { + snapshotter->getStyle().addLayer(std::move(u)); + }; +} // Private methods // @@ -157,6 +165,7 @@ void MapSnapshotter::registerNative(jni::JNIEnv& env) { "nativeInitialize", "finalize", METHOD(&MapSnapshotter::setStyleUrl, "setStyleUrl"), + METHOD(&MapSnapshotter::addLayer, "nativeAddLayer"), METHOD(&MapSnapshotter::setStyleJson, "setStyleJson"), METHOD(&MapSnapshotter::setSize, "setSize"), METHOD(&MapSnapshotter::setCameraPosition, "setCameraPosition"), diff --git a/platform/android/src/snapshotter/map_snapshotter.hpp b/platform/android/src/snapshotter/map_snapshotter.hpp index 641a0e60f8..96214df090 100644 --- a/platform/android/src/snapshotter/map_snapshotter.hpp +++ b/platform/android/src/snapshotter/map_snapshotter.hpp @@ -6,6 +6,7 @@ #include "../file_source.hpp" #include "../geometry/lat_lng_bounds.hpp" #include "../map/camera_position.hpp" +#include "../style/layers/layer.hpp" #include @@ -13,6 +14,16 @@ namespace mbgl { namespace android { + class SnapshotObserver final : public mbgl::MapSnapshotterObserver { + public: + ~SnapshotObserver() = default; + void onDidFinishLoadingStyle() override { + if (didFinishLoadingStyleCallback) { + didFinishLoadingStyleCallback(); + } + } + std::function didFinishLoadingStyleCallback; + }; class MapSnapshotter { public: @@ -50,6 +61,8 @@ public: void cancel(JNIEnv&); + void addLayer(JNIEnv&, jlong); + private: MBGL_STORE_THREAD(tid); @@ -60,7 +73,7 @@ private: bool showLogo; std::unique_ptr snapshotter; - + SnapshotObserver observer; FileSource *jFileSource; void activateFilesource(JNIEnv&); void deactivateFilesource(JNIEnv&); -- cgit v1.2.1