diff options
Diffstat (limited to 'platform/android/src/annotation')
-rw-r--r-- | platform/android/src/annotation/marker.cpp | 27 | ||||
-rw-r--r-- | platform/android/src/annotation/marker.hpp | 30 | ||||
-rw-r--r-- | platform/android/src/annotation/multi_point.hpp | 42 | ||||
-rw-r--r-- | platform/android/src/annotation/polygon.cpp | 49 | ||||
-rw-r--r-- | platform/android/src/annotation/polygon.hpp | 40 | ||||
-rw-r--r-- | platform/android/src/annotation/polyline.cpp | 49 | ||||
-rw-r--r-- | platform/android/src/annotation/polyline.hpp | 40 |
7 files changed, 277 insertions, 0 deletions
diff --git a/platform/android/src/annotation/marker.cpp b/platform/android/src/annotation/marker.cpp new file mode 100644 index 0000000000..fa709fd1c9 --- /dev/null +++ b/platform/android/src/annotation/marker.cpp @@ -0,0 +1,27 @@ +#include "marker.hpp" + +namespace mbgl { +namespace android { + +jni::Class<Marker> Marker::javaClass; + +mbgl::Point<double> Marker::getPosition(jni::JNIEnv& env, jni::Object<Marker> marker) { + static auto positionField = Marker::javaClass.GetField<jni::Object<LatLng>>(env, "position"); + auto position = marker.Get(env, positionField); + return LatLng::getGeometry(env, position); +} + +std::string Marker::getIconId(jni::JNIEnv& env, jni::Object<Marker> marker) { + static auto iconIdField = Marker::javaClass.GetField<jni::String>(env, "iconId"); + auto jIconId = marker.Get(env, iconIdField); + return jni::Make<std::string>(env, jIconId); +} + +void Marker::registerNative(jni::JNIEnv& env) { + // Lookup the class + Marker::javaClass = *jni::Class<Marker>::Find(env).NewGlobalRef(env).release(); +} + + +} // namespace android +} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/annotation/marker.hpp b/platform/android/src/annotation/marker.hpp new file mode 100644 index 0000000000..b11a225245 --- /dev/null +++ b/platform/android/src/annotation/marker.hpp @@ -0,0 +1,30 @@ +#pragma once + +#include <mbgl/util/noncopyable.hpp> +#include <jni/jni.hpp> + +#include <string> + +#include "../geometry/lat_lng.hpp" + +namespace mbgl { +namespace android { + +class Marker : private mbgl::util::noncopyable { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/annotations/Marker"; }; + + static jni::Class<Marker> javaClass; + + static mbgl::Point<double> getPosition(jni::JNIEnv&, jni::Object<Marker>); + + static std::string getIconId(jni::JNIEnv&, jni::Object<Marker>); + + static void registerNative(jni::JNIEnv&); + +}; + + +} // namespace android +} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/annotation/multi_point.hpp b/platform/android/src/annotation/multi_point.hpp new file mode 100644 index 0000000000..e1152dfd60 --- /dev/null +++ b/platform/android/src/annotation/multi_point.hpp @@ -0,0 +1,42 @@ +#pragma once + +#include <mbgl/util/noncopyable.hpp> +#include <jni/jni.hpp> + +#include "../geometry/lat_lng.hpp" +#include "../java/util.hpp" + +namespace mbgl { +namespace android { + +class MultiPoint : protected mbgl::util::noncopyable { + +protected: + + template <class Geometry> + static Geometry toGeometry(JNIEnv& env, jni::Object<java::util::List> pointsList) { + NullCheck(env, &pointsList); + auto jarray = java::util::List::toArray<LatLng>(env, pointsList); + NullCheck(env, &jarray); + + std::size_t size = jarray.Length(env); + + Geometry geometry; + geometry.reserve(size); + + for (std::size_t i = 0; i < size; i++) { + auto latLng = jarray.Get(env, i); + NullCheck(env, &latLng); + + geometry.push_back(LatLng::getGeometry(env, latLng)); + + jni::DeleteLocalRef(env, latLng); + } + + jni::DeleteLocalRef(env, jarray); + return geometry; + } +}; + +} // namespace android +} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/annotation/polygon.cpp b/platform/android/src/annotation/polygon.cpp new file mode 100644 index 0000000000..b0419628b0 --- /dev/null +++ b/platform/android/src/annotation/polygon.cpp @@ -0,0 +1,49 @@ +#include "polygon.hpp" + +#include "../conversion/color.hpp" + +namespace mbgl { +namespace android { + +jni::Class<Polygon> Polygon::javaClass; + +mbgl::FillAnnotation Polygon::toAnnotation(jni::JNIEnv& env, jni::Object<Polygon> polygon) { + auto points = Polygon::getPoints(env, polygon); + + mbgl::FillAnnotation annotation { mbgl::Polygon<double> { MultiPoint::toGeometry<mbgl::LinearRing<double>>(env, points) } }; + annotation.opacity = { Polygon::getOpacity(env, polygon) }; + annotation.color = { Polygon::getFillColor(env, polygon) }; + annotation.outlineColor = { Polygon::getOutlineColor(env, polygon) }; + + jni::DeleteLocalRef(env, points); + + return annotation; +} + +jni::Object<java::util::List> Polygon::getPoints(jni::JNIEnv& env, jni::Object<Polygon> polygon) { + static auto field = Polygon::javaClass.GetField<jni::Object<java::util::List>>(env, "points"); + return polygon.Get(env, field); +} + +float Polygon::getOpacity(jni::JNIEnv& env, jni::Object<Polygon> polygon) { + static auto field = Polygon::javaClass.GetField<float>(env, "alpha"); + return polygon.Get(env, field); +} + +mbgl::Color Polygon::getFillColor(jni::JNIEnv& env, jni::Object<Polygon> polygon) { + static auto field = Polygon::javaClass.GetField<int>(env, "fillColor"); + return *conversion::convert<mbgl::Color, int>(env, polygon.Get(env, field)); +} + +mbgl::Color Polygon::getOutlineColor(jni::JNIEnv& env, jni::Object<Polygon> polygon) { + static auto field = Polygon::javaClass.GetField<float>(env, "strokeColor"); + return *conversion::convert<mbgl::Color, int>(env, polygon.Get(env, field)); +} + +void Polygon::registerNative(jni::JNIEnv& env) { + Polygon::javaClass = *jni::Class<Polygon>::Find(env).NewGlobalRef(env).release(); +} + + +} // namespace android +} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/annotation/polygon.hpp b/platform/android/src/annotation/polygon.hpp new file mode 100644 index 0000000000..658aa5344b --- /dev/null +++ b/platform/android/src/annotation/polygon.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include <mbgl/annotation/annotation.hpp> +#include <mbgl/util/color.hpp> + +#include <string> + +#include "multi_point.hpp" + +#include "../geometry/lat_lng.hpp" +#include "../java/util.hpp" + +namespace mbgl { +namespace android { + +class Polygon : private MultiPoint { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/annotations/Polygon"; }; + + static jni::Class<Polygon> javaClass; + + static mbgl::FillAnnotation toAnnotation(jni::JNIEnv&, jni::Object<Polygon>); + + static void registerNative(jni::JNIEnv&); + +private: + + static jni::Object<java::util::List> getPoints(jni::JNIEnv&, jni::Object<Polygon>); + + static float getOpacity(jni::JNIEnv&, jni::Object<Polygon>); + + static mbgl::Color getFillColor(jni::JNIEnv&, jni::Object<Polygon>); + + static mbgl::Color getOutlineColor(jni::JNIEnv&, jni::Object<Polygon>); +}; + + +} // namespace android +} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/annotation/polyline.cpp b/platform/android/src/annotation/polyline.cpp new file mode 100644 index 0000000000..3723dc1871 --- /dev/null +++ b/platform/android/src/annotation/polyline.cpp @@ -0,0 +1,49 @@ +#include "polyline.hpp" + +#include "../conversion/color.hpp" + +namespace mbgl { +namespace android { + +jni::Class<Polyline> Polyline::javaClass; + +mbgl::LineAnnotation Polyline::toAnnotation(jni::JNIEnv& env, jni::Object<Polyline> polyline) { + auto points = Polyline::getPoints(env, polyline); + + mbgl::LineAnnotation annotation { MultiPoint::toGeometry<mbgl::LineString<double>>(env, points) }; + annotation.opacity = { Polyline::getOpacity(env, polyline) }; + annotation.color = { Polyline::getColor(env, polyline) }; + annotation.width = { Polyline::getWidth(env, polyline) }; + + jni::DeleteLocalRef(env, points); + + return annotation; +} + +jni::Object<java::util::List> Polyline::getPoints(jni::JNIEnv& env, jni::Object<Polyline> polyline) { + static auto field = Polyline::javaClass.GetField<jni::Object<java::util::List>>(env, "points"); + return polyline.Get(env, field); +} + +float Polyline::getOpacity(jni::JNIEnv& env, jni::Object<Polyline> polyline) { + static auto field = Polyline::javaClass.GetField<float>(env, "alpha"); + return polyline.Get(env, field); +} + +mbgl::Color Polyline::getColor(jni::JNIEnv& env, jni::Object<Polyline> polyline) { + static auto field = Polyline::javaClass.GetField<int>(env, "color"); + return *conversion::convert<mbgl::Color, int>(env, polyline.Get(env, field)); +} + +float Polyline::getWidth(jni::JNIEnv& env, jni::Object<Polyline> polyline) { + static auto field = Polyline::javaClass.GetField<float>(env, "width"); + return polyline.Get(env, field); +} + +void Polyline::registerNative(jni::JNIEnv& env) { + Polyline::javaClass = *jni::Class<Polyline>::Find(env).NewGlobalRef(env).release(); +} + + +} // namespace android +} // namespace mbgl
\ No newline at end of file diff --git a/platform/android/src/annotation/polyline.hpp b/platform/android/src/annotation/polyline.hpp new file mode 100644 index 0000000000..bcc616a5f7 --- /dev/null +++ b/platform/android/src/annotation/polyline.hpp @@ -0,0 +1,40 @@ +#pragma once + +#include <mbgl/annotation/annotation.hpp> +#include <mbgl/util/color.hpp> + +#include <string> + +#include "multi_point.hpp" + +#include "../geometry/lat_lng.hpp" +#include "../java/util.hpp" + +namespace mbgl { +namespace android { + +class Polyline : private MultiPoint { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/annotations/Polyline"; }; + + static jni::Class<Polyline> javaClass; + + static mbgl::LineAnnotation toAnnotation(jni::JNIEnv&, jni::Object<Polyline>); + + static void registerNative(jni::JNIEnv&); + +private: + + static jni::Object<java::util::List> getPoints(jni::JNIEnv&, jni::Object<Polyline>); + + static float getOpacity(jni::JNIEnv&, jni::Object<Polyline>); + + static mbgl::Color getColor(jni::JNIEnv&, jni::Object<Polyline>); + + static float getWidth(jni::JNIEnv&, jni::Object<Polyline>); +}; + + +} // namespace android +} // namespace mbgl
\ No newline at end of file |