diff options
author | Tobrun <tobrun.van.nuland@gmail.com> | 2016-08-02 11:16:49 -0400 |
---|---|---|
committer | Tobrun <tobrun.van.nuland@gmail.com> | 2016-08-03 14:50:41 -0400 |
commit | f26c89c0b6f17039794e67756a610e7f2028100c (patch) | |
tree | 8c941ea2b4fc6929384e4a66cb595e08b04bcaf5 /platform/android/src | |
parent | 77c8f0a7058dff25268f69a74554007fc84601fe (diff) | |
download | qtlocation-mapboxgl-f26c89c0b6f17039794e67756a610e7f2028100c.tar.gz |
[android] #5663 - make shape annotations updateable
Diffstat (limited to 'platform/android/src')
-rwxr-xr-x | platform/android/src/jni.cpp | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp index 3a7963f11e..5fc29f4c29 100755 --- a/platform/android/src/jni.cpp +++ b/platform/android/src/jni.cpp @@ -788,6 +788,42 @@ jni::jarray<jlong>* nativeAddPolygons(JNIEnv *env, jni::jobject* obj, jlong nati return std_vector_uint_to_jobject(env, ids); } +jlong nativeUpdatePolygon(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jlong polygonId, jni::jobject* polygon) { + mbgl::Log::Debug(mbgl::Event::JNI, "nativeUpdatePolygon"); + assert(nativeMapViewPtr != 0); + NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); + if (polygonId == -1) { + return polygonId; + } + jni::jobject* points = jni::GetField<jni::jobject*>(*env, polygon, *polygonPointsId); + + mbgl::FillAnnotation annotation { mbgl::Polygon<double> { toGeometry<mbgl::LinearRing<double>>(env, points) } }; + annotation.opacity = { jni::GetField<jfloat>(*env, polygon, *polygonAlphaId) }; + annotation.outlineColor = { toColor(jni::GetField<jint>(*env, polygon, *polygonStrokeColorId)) }; + annotation.color = { toColor(jni::GetField<jint>(*env, polygon, *polygonFillColorId)) }; + //TODO replace remove add with updateAnnotation, https://github.com/mapbox/mapbox-gl-native/issues/5844 + nativeMapView->getMap().removeAnnotation(polygonId); + return nativeMapView->getMap().addAnnotation(annotation); +} + +jlong nativeUpdatePolyline(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jlong polylineId, jni::jobject* polyline) { + mbgl::Log::Debug(mbgl::Event::JNI, "nativeUpdatePolyline"); + assert(nativeMapViewPtr != 0); + NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); + if (polylineId == -1) { + return polylineId; + } + jni::jobject* points = jni::GetField<jni::jobject*>(*env, polyline, *polylinePointsId); + + mbgl::LineAnnotation annotation { toGeometry<mbgl::LineString<double>>(env, points) }; + annotation.opacity = { jni::GetField<jfloat>(*env, polyline, *polylineAlphaId) }; + annotation.color = { toColor(jni::GetField<jint>(*env, polyline, *polylineColorId)) }; + annotation.width = { jni::GetField<jfloat>(*env, polyline, *polylineWidthId) }; + //TODO replace remove add with updateAnnotation, https://github.com/mapbox/mapbox-gl-native/issues/5844 + nativeMapView->getMap().removeAnnotation(polylineId); + return nativeMapView->getMap().addAnnotation(annotation); +} + void nativeRemoveAnnotations(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jni::jarray<jlong>* jarray) { mbgl::Log::Debug(mbgl::Event::JNI, "nativeRemoveAnnotations"); assert(nativeMapViewPtr != 0); @@ -1724,6 +1760,8 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { MAKE_NATIVE_METHOD(nativeAddPolylines, "(J[Lcom/mapbox/mapboxsdk/annotations/Polyline;)[J"), MAKE_NATIVE_METHOD(nativeAddPolygons, "(J[Lcom/mapbox/mapboxsdk/annotations/Polygon;)[J"), MAKE_NATIVE_METHOD(nativeUpdateMarker, "(JJDDLjava/lang/String;)V"), + MAKE_NATIVE_METHOD(nativeUpdatePolygon, "(JJLcom/mapbox/mapboxsdk/annotations/Polygon;)J"), + MAKE_NATIVE_METHOD(nativeUpdatePolyline, "(JJLcom/mapbox/mapboxsdk/annotations/Polyline;)J"), MAKE_NATIVE_METHOD(nativeRemoveAnnotations, "(J[J)V"), MAKE_NATIVE_METHOD(nativeGetAnnotationsInBounds, "(JLcom/mapbox/mapboxsdk/geometry/LatLngBounds;)[J"), MAKE_NATIVE_METHOD(nativeAddAnnotationIcon, "(JLjava/lang/String;IIF[B)V"), |