diff options
author | zmiao <zmiao.jamie@gmail.com> | 2019-08-29 18:35:01 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-08-29 18:35:01 +0300 |
commit | 3f6b39bc7ca720c29460201e499b0de94f70dd37 (patch) | |
tree | 3b3af4e71622839d98836fd2d6ef0cb293ee80dd /platform/android/src | |
parent | 504c4b1296cec20f589398db3d85d68e5dbb0204 (diff) | |
parent | 544aabd0204235579e99fe4d9b8c2de16f70e897 (diff) | |
download | qtlocation-mapboxgl-3f6b39bc7ca720c29460201e499b0de94f70dd37.tar.gz |
Merge branch 'master' into icon/text_translation
Diffstat (limited to 'platform/android/src')
-rw-r--r-- | platform/android/src/map/camera_position.cpp | 22 | ||||
-rw-r--r-- | platform/android/src/map/camera_position.hpp | 4 | ||||
-rwxr-xr-x | platform/android/src/native_map_view.cpp | 61 | ||||
-rwxr-xr-x | platform/android/src/native_map_view.hpp | 13 | ||||
-rw-r--r-- | platform/android/src/snapshotter/map_snapshotter.cpp | 4 |
5 files changed, 56 insertions, 48 deletions
diff --git a/platform/android/src/map/camera_position.cpp b/platform/android/src/map/camera_position.cpp index fcbec5639a..03aca79bda 100644 --- a/platform/android/src/map/camera_position.cpp +++ b/platform/android/src/map/camera_position.cpp @@ -4,9 +4,9 @@ namespace mbgl { namespace android { -jni::Local<jni::Object<CameraPosition>> CameraPosition::New(jni::JNIEnv &env, mbgl::CameraOptions options) { +jni::Local<jni::Object<CameraPosition>> CameraPosition::New(jni::JNIEnv &env, mbgl::CameraOptions options, float pixelRatio) { static auto& javaClass = jni::Class<CameraPosition>::Singleton(env); - static auto constructor = javaClass.GetConstructor<jni::Object<LatLng>, double, double, double>(env); + static auto constructor = javaClass.GetConstructor<jni::Object<LatLng>, double, double, double, jni::Array<jni::jdouble>>(env); // wrap LatLng values coming from core auto center = options.center.value(); @@ -25,21 +25,33 @@ jni::Local<jni::Object<CameraPosition>> CameraPosition::New(jni::JNIEnv &env, mb // convert tilt, core ranges from [0 rad, 1,0472 rad], android ranges from 0 to 60 double tilt_degrees = options.pitch.value_or(0); - return javaClass.New(env, constructor, LatLng::New(env, center), options.zoom.value_or(0), tilt_degrees, bearing_degrees); + std::vector<jdouble> paddingVect; + auto insets = options.padding.value_or(EdgeInsets {0, 0, 0, 0}); + auto padding = jni::Array<jni::jdouble>::New(env, 4); + paddingVect.push_back(insets.left() * pixelRatio); + paddingVect.push_back(insets.top() * pixelRatio); + paddingVect.push_back(insets.right() * pixelRatio); + paddingVect.push_back(insets.bottom() * pixelRatio); + padding.SetRegion<std::vector<jni::jdouble>>(env, 0, paddingVect); + + return javaClass.New(env, constructor, LatLng::New(env, center), options.zoom.value_or(0), tilt_degrees, bearing_degrees, padding); } -mbgl::CameraOptions CameraPosition::getCameraOptions(jni::JNIEnv& env, const jni::Object<CameraPosition>& position) { +mbgl::CameraOptions CameraPosition::getCameraOptions(jni::JNIEnv& env, const jni::Object<CameraPosition>& position, float pixelRatio) { static auto& javaClass = jni::Class<CameraPosition>::Singleton(env); static auto bearing = javaClass.GetField<jni::jdouble>(env, "bearing"); static auto target = javaClass.GetField<jni::Object<LatLng>>(env, "target"); static auto tilt = javaClass.GetField<jni::jdouble>(env, "tilt"); static auto zoom = javaClass.GetField<jni::jdouble>(env, "zoom"); + static auto paddingField = javaClass.GetField<jni::Array<jni::jdouble>>(env, "padding"); + static auto padding = position.Get(env, paddingField); auto center = LatLng::getLatLng(env, position.Get(env, target)); return mbgl::CameraOptions { center, - {}, + EdgeInsets {padding.Get(env, 1) * pixelRatio, padding.Get(env, 0) * pixelRatio, + padding.Get(env, 3) * pixelRatio, padding.Get(env, 2) * pixelRatio}, {}, position.Get(env, zoom), position.Get(env, bearing), diff --git a/platform/android/src/map/camera_position.hpp b/platform/android/src/map/camera_position.hpp index 7579f9fed1..b677f04ea0 100644 --- a/platform/android/src/map/camera_position.hpp +++ b/platform/android/src/map/camera_position.hpp @@ -12,9 +12,9 @@ class CameraPosition : private mbgl::util::noncopyable { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/camera/CameraPosition"; }; - static jni::Local<jni::Object<CameraPosition>> New(jni::JNIEnv&, mbgl::CameraOptions); + static jni::Local<jni::Object<CameraPosition>> New(jni::JNIEnv&, mbgl::CameraOptions, float pixelRatio); - static mbgl::CameraOptions getCameraOptions(jni::JNIEnv&, const jni::Object<CameraPosition>&); + static mbgl::CameraOptions getCameraOptions(jni::JNIEnv&, const jni::Object<CameraPosition>&, float pixelRatio); static void registerNative(jni::JNIEnv&); }; diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index e94ef0153e..8ef757de15 100755 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -336,13 +336,17 @@ void NativeMapView::moveBy(jni::JNIEnv&, jni::jdouble dx, jni::jdouble dy, jni:: map->moveBy({dx, dy}, animationOptions); } -void NativeMapView::jumpTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jdouble pitch, jni::jdouble zoom) { +void NativeMapView::jumpTo(jni::JNIEnv& env, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jdouble pitch, jni::jdouble zoom, const jni::Array<jni::jdouble>& padding) { mbgl::CameraOptions options; if (bearing != -1) { options.bearing = bearing; } options.center = mbgl::LatLng(latitude, longitude); - options.padding = insets; + if (padding) { + assert(padding.Length(env) == 4); + options.padding = mbgl::EdgeInsets{padding.Get(env, 0), padding.Get(env, 1), + padding.Get(env, 2), padding.Get(env, 3)}; + } if (pitch != -1) { options.pitch = pitch; } @@ -353,13 +357,17 @@ void NativeMapView::jumpTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble lati map->jumpTo(options); } -void NativeMapView::easeTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration, jni::jdouble pitch, jni::jdouble zoom, jni::jboolean easing) { +void NativeMapView::easeTo(jni::JNIEnv& env, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration, jni::jdouble pitch, jni::jdouble zoom, const jni::Array<jni::jdouble>& padding, jni::jboolean easing) { mbgl::CameraOptions cameraOptions; if (bearing != -1) { cameraOptions.bearing = bearing; } cameraOptions.center = mbgl::LatLng(latitude, longitude); - cameraOptions.padding = insets; + if (padding) { + assert(padding.Length(env) == 4); + cameraOptions.padding = mbgl::EdgeInsets{padding.Get(env, 0), padding.Get(env, 1), + padding.Get(env, 2), padding.Get(env, 3)}; + } if (pitch != -1) { cameraOptions.pitch = pitch; } @@ -377,13 +385,17 @@ void NativeMapView::easeTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble lati map->easeTo(cameraOptions, animationOptions); } -void NativeMapView::flyTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration, jni::jdouble pitch, jni::jdouble zoom) { +void NativeMapView::flyTo(jni::JNIEnv& env, jni::jdouble bearing, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration, jni::jdouble pitch, jni::jdouble zoom, const jni::Array<jni::jdouble>& padding) { mbgl::CameraOptions cameraOptions; if (bearing != -1) { cameraOptions.bearing = bearing; } cameraOptions.center = mbgl::LatLng(latitude, longitude); - cameraOptions.padding = insets; + if (padding) { + assert(padding.Length(env) == 4); + cameraOptions.padding = mbgl::EdgeInsets{padding.Get(env, 0), padding.Get(env, 1), + padding.Get(env, 2), padding.Get(env, 3)}; + } if (pitch != -1) { cameraOptions.pitch = pitch; } @@ -397,23 +409,29 @@ void NativeMapView::flyTo(jni::JNIEnv&, jni::jdouble bearing, jni::jdouble latit } jni::Local<jni::Object<LatLng>> NativeMapView::getLatLng(JNIEnv& env) { - return LatLng::New(env, *map->getCameraOptions(insets).center); + return LatLng::New(env, *map->getCameraOptions(mbgl::nullopt).center); } -void NativeMapView::setLatLng(jni::JNIEnv&, jni::jdouble latitude, jni::jdouble longitude, jni::jlong duration) { - map->easeTo(mbgl::CameraOptions().withCenter(mbgl::LatLng(latitude, longitude)).withPadding(insets), - mbgl::AnimationOptions{mbgl::Milliseconds(duration)}); +void NativeMapView::setLatLng(jni::JNIEnv& env, jni::jdouble latitude, jni::jdouble longitude, const jni::Array<jni::jdouble>& padding, jni::jlong duration) { + mbgl::CameraOptions cameraOptions; + cameraOptions.center = mbgl::LatLng(latitude, longitude); + if (padding) { + assert(padding.Length(env) == 4); + cameraOptions.padding = mbgl::EdgeInsets{padding.Get(env, 0), padding.Get(env, 1), + padding.Get(env, 2), padding.Get(env, 3)}; + } + map->easeTo(cameraOptions, mbgl::AnimationOptions{mbgl::Milliseconds(duration)}); } jni::Local<jni::Object<CameraPosition>> NativeMapView::getCameraForLatLngBounds(jni::JNIEnv& env, const jni::Object<LatLngBounds>& jBounds, double top, double left, double bottom, double right, double bearing, double tilt) { mbgl::EdgeInsets padding = {top, left, bottom, right}; - return CameraPosition::New(env, map->cameraForLatLngBounds(mbgl::android::LatLngBounds::getLatLngBounds(env, jBounds), padding, bearing, tilt)); + return CameraPosition::New(env, map->cameraForLatLngBounds(mbgl::android::LatLngBounds::getLatLngBounds(env, jBounds), padding, bearing, tilt), pixelRatio); } jni::Local<jni::Object<CameraPosition>> NativeMapView::getCameraForGeometry(jni::JNIEnv& env, const jni::Object<geojson::Geometry>& jGeometry, double top, double left, double bottom, double right, double bearing, double tilt) { auto geometry = geojson::Geometry::convert(env, jGeometry); mbgl::EdgeInsets padding = {top, left, bottom, right}; - return CameraPosition::New(env, map->cameraForGeometry(geometry, padding, bearing, tilt)); + return CameraPosition::New(env, map->cameraForGeometry(geometry, padding, bearing, tilt), pixelRatio); } void NativeMapView::setReachability(jni::JNIEnv&, jni::jboolean reachable) { @@ -514,21 +532,6 @@ void NativeMapView::setVisibleCoordinateBounds(JNIEnv& env, const jni::Array<jni map->easeTo(cameraOptions, animationOptions); } -void NativeMapView::setContentPadding(JNIEnv&, float top, float left, float bottom, float right) { - insets = {top, left, bottom, right}; -} - -jni::Local<jni::Array<jni::jfloat>> NativeMapView::getContentPadding(JNIEnv& env) { - auto result = jni::Array<jni::jfloat>::New(env, 4); - std::vector<jfloat> vect; - vect.push_back(insets.top()); - vect.push_back(insets.left()); - vect.push_back(insets.bottom()); - vect.push_back(insets.right()); - result.SetRegion<std::vector<jni::jfloat>>(env, 0, vect); - return result; -} - void NativeMapView::scheduleSnapshot(jni::JNIEnv&) { mapRenderer.requestSnapshot([&](PremultipliedImage image) { auto _env = android::AttachEnv(); @@ -546,7 +549,7 @@ void NativeMapView::scheduleSnapshot(jni::JNIEnv&) { } jni::Local<jni::Object<CameraPosition>> NativeMapView::getCameraPosition(jni::JNIEnv& env) { - return CameraPosition::New(env, map->getCameraOptions(insets)); + return CameraPosition::New(env, map->getCameraOptions(mbgl::nullopt), pixelRatio); } void NativeMapView::updateMarker(jni::JNIEnv& env, jni::jlong markerId, jni::jdouble lat, jni::jdouble lon, const jni::String& jid) { @@ -1096,8 +1099,6 @@ void NativeMapView::registerNative(jni::JNIEnv& env) { METHOD(&NativeMapView::getBearing, "nativeGetBearing"), METHOD(&NativeMapView::resetNorth, "nativeResetNorth"), METHOD(&NativeMapView::setVisibleCoordinateBounds, "nativeSetVisibleCoordinateBounds"), - METHOD(&NativeMapView::setContentPadding, "nativeSetContentPadding"), - METHOD(&NativeMapView::getContentPadding, "nativeGetContentPadding"), METHOD(&NativeMapView::scheduleSnapshot, "nativeTakeSnapshot"), METHOD(&NativeMapView::getCameraPosition, "nativeGetCameraPosition"), METHOD(&NativeMapView::updateMarker, "nativeUpdateMarker"), diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index 10b2af0669..26567a003c 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -91,15 +91,15 @@ public: void moveBy(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jlong); - void jumpTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble); + void jumpTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble, const jni::Array<jni::jdouble>&); - void easeTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble, jni::jboolean); + void easeTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble, const jni::Array<jni::jdouble>&, jni::jboolean); - void flyTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble); + void flyTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble, const jni::Array<jni::jdouble>&); jni::Local<jni::Object<LatLng>> getLatLng(JNIEnv&); - void setLatLng(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jlong); + void setLatLng(jni::JNIEnv&, jni::jdouble, jni::jdouble, const jni::Array<jni::jdouble>&, jni::jlong); jni::Local<jni::Object<CameraPosition>> getCameraForLatLngBounds(jni::JNIEnv&, const jni::Object<mbgl::android::LatLngBounds>&, double top, double left, double bottom, double right, double bearing, double tilt); @@ -139,10 +139,6 @@ public: void setVisibleCoordinateBounds(JNIEnv&, const jni::Array<jni::Object<LatLng>>&, const jni::Object<RectF>&, jni::jdouble, jni::jlong); - void setContentPadding(JNIEnv&, float, float, float, float); - - jni::Local<jni::Array<jni::jfloat>> getContentPadding(JNIEnv&); - void scheduleSnapshot(jni::JNIEnv&); jni::Local<jni::Object<CameraPosition>> getCameraPosition(jni::JNIEnv&); @@ -259,7 +255,6 @@ private: // Ensure these are initialised last std::unique_ptr<mbgl::Map> map; - mbgl::EdgeInsets insets; }; } // namespace android diff --git a/platform/android/src/snapshotter/map_snapshotter.cpp b/platform/android/src/snapshotter/map_snapshotter.cpp index 2d37710605..0b38269ada 100644 --- a/platform/android/src/snapshotter/map_snapshotter.cpp +++ b/platform/android/src/snapshotter/map_snapshotter.cpp @@ -38,7 +38,7 @@ MapSnapshotter::MapSnapshotter(jni::JNIEnv& _env, optional<mbgl::CameraOptions> cameraOptions; if (position) { - cameraOptions = CameraPosition::getCameraOptions(_env, position); + cameraOptions = CameraPosition::getCameraOptions(_env, position, pixelRatio); } optional<mbgl::LatLngBounds> bounds; @@ -124,7 +124,7 @@ void MapSnapshotter::setSize(JNIEnv&, jni::jint width, jni::jint height) { } void MapSnapshotter::setCameraPosition(JNIEnv& env, const jni::Object<CameraPosition>& position) { - auto options = CameraPosition::getCameraOptions(env, position); + auto options = CameraPosition::getCameraOptions(env, position, pixelRatio); snapshotter->setCameraOptions(options); } |