summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkevin <kevin.li@mapbox.com>2020-03-16 16:43:38 +0800
committerkevin <kevin.li@mapbox.com>2020-03-24 10:39:42 +0800
commitf8977feba2be26431daa91d515f88325f954e07b (patch)
tree4b1343178de7ec20c725c0502801a2758617e2d0
parente0b27c52d94bfbb417741a3932e4373c4745c431 (diff)
downloadqtlocation-mapboxgl-f8977feba2be26431daa91d515f88325f954e07b.tar.gz
Implement addsource function for snapshotter
-rw-r--r--platform/android/src/snapshotter/map_snapshotter.cpp12
-rw-r--r--platform/android/src/snapshotter/map_snapshotter.hpp2
-rw-r--r--platform/android/src/style/sources/source.cpp15
-rw-r--r--platform/android/src/style/sources/source.hpp2
4 files changed, 31 insertions, 0 deletions
diff --git a/platform/android/src/snapshotter/map_snapshotter.cpp b/platform/android/src/snapshotter/map_snapshotter.cpp
index abef7eeb21..3ec16e8baa 100644
--- a/platform/android/src/snapshotter/map_snapshotter.cpp
+++ b/platform/android/src/snapshotter/map_snapshotter.cpp
@@ -241,6 +241,17 @@ void MapSnapshotter::addLayerAbove(JNIEnv& env, jlong nativeLayerPtr, const jni:
jni::ThrowNew(env, jni::FindClass(env, "com/mapbox/mapboxsdk/style/layers/CannotAddLayerException"), error.what());
}
}
+
+void MapSnapshotter::addSource(JNIEnv& env, const jni::Object<Source>& obj, jlong sourcePtr) {
+ assert(sourcePtr != 0);
+
+ Source *source = reinterpret_cast<Source *>(sourcePtr);
+ try {
+ source->addToStyle(env, obj, snapshotter->getStyle());
+ } catch (const std::runtime_error& error) {
+ jni::ThrowNew(env, jni::FindClass(env, "com/mapbox/mapboxsdk/style/sources/CannotAddSourceException"), error.what());
+ }
+}
// Static methods //
void MapSnapshotter::registerNative(jni::JNIEnv& env) {
@@ -258,6 +269,7 @@ void MapSnapshotter::registerNative(jni::JNIEnv& env) {
METHOD(&MapSnapshotter::addLayerAt, "nativeAddLayerAt"),
METHOD(&MapSnapshotter::addLayerBelow, "nativeAddLayerBelow"),
METHOD(&MapSnapshotter::addLayerAbove, "nativeAddLayerAbove"),
+ METHOD(&MapSnapshotter::addSource, "nativeAddSource"),
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 69895821ca..9239a5ea19 100644
--- a/platform/android/src/snapshotter/map_snapshotter.hpp
+++ b/platform/android/src/snapshotter/map_snapshotter.hpp
@@ -7,6 +7,7 @@
#include "../geometry/lat_lng_bounds.hpp"
#include "../map/camera_position.hpp"
#include "../style/layers/layer.hpp"
+#include "../style/sources/source.hpp"
#include <jni/jni.hpp>
@@ -54,6 +55,7 @@ public:
void addLayerAt(JNIEnv&, jlong, jni::jint);
void addLayerBelow(JNIEnv&, jlong, const jni::String&);
void addLayerAbove(JNIEnv&, jlong, const jni::String&);
+ void addSource(JNIEnv&, const jni::Object<Source>&, jlong nativePtr);
// MapSnapshotterObserver overrides
void onDidFailLoadingStyle(const std::string&) override;
diff --git a/platform/android/src/style/sources/source.cpp b/platform/android/src/style/sources/source.cpp
index fda0f0084c..d16dd592fb 100644
--- a/platform/android/src/style/sources/source.cpp
+++ b/platform/android/src/style/sources/source.cpp
@@ -109,6 +109,21 @@ namespace android {
return jni::Local<jni::Integer>(env, nullptr);
}
+ void Source::addToStyle(JNIEnv &env, const jni::Object<Source> &obj, mbgl::style::Style& style) {
+ if (!ownedSource) {
+ throw std::runtime_error("Cannot add source twice");
+ }
+
+ // Add source to style and release ownership
+ style.addSource(std::move(ownedSource));
+
+ // Add peer to core source
+ source.peer = std::unique_ptr<Source>(this);
+
+ // Add strong reference to java source
+ javaPeer = jni::NewGlobal(env, obj);
+ }
+
void Source::addToMap(JNIEnv& env, const jni::Object<Source>& obj, mbgl::Map& map, AndroidRendererFrontend& frontend) {
// Check to see if we own the source first
if (!ownedSource) {
diff --git a/platform/android/src/style/sources/source.hpp b/platform/android/src/style/sources/source.hpp
index 91e31ea8e2..723d4740b0 100644
--- a/platform/android/src/style/sources/source.hpp
+++ b/platform/android/src/style/sources/source.hpp
@@ -47,6 +47,8 @@ public:
jni::Local<jni::Integer> getPrefetchZoomDelta(jni::JNIEnv&);
+ void addToStyle(JNIEnv &env, const jni::Object<Source> &obj, mbgl::style::Style& style);
+
protected:
// Set on newly created sources until added to the map.
std::unique_ptr<mbgl::style::Source> ownedSource;