From f578b262820c02b0621b7c512118f92b755cc06d Mon Sep 17 00:00:00 2001 From: Tobrun Date: Tue, 24 Oct 2017 17:43:53 -0700 Subject: [android] - add bulk addImages api on MapboxMap --- platform/android/src/map/image.cpp | 44 ++++++++++++++++++++++++++++++++++++++ platform/android/src/map/image.hpp | 26 ++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 platform/android/src/map/image.cpp create mode 100644 platform/android/src/map/image.hpp (limited to 'platform/android/src/map') diff --git a/platform/android/src/map/image.cpp b/platform/android/src/map/image.cpp new file mode 100644 index 0000000000..5f5c90eddd --- /dev/null +++ b/platform/android/src/map/image.cpp @@ -0,0 +1,44 @@ +#include +#include +#include "image.hpp" + +namespace mbgl { +namespace android { + +mbgl::style::Image Image::getImage(jni::JNIEnv& env, jni::Object image) { + static auto widthField = Image::javaClass.GetField(env, "width"); + static auto heightField = Image::javaClass.GetField(env, "height"); + static auto pixelRatioField = Image::javaClass.GetField(env, "pixelRatio"); + static auto bufferField = Image::javaClass.GetField>(env, "buffer"); + static auto nameField = Image::javaClass.GetField(env, "name"); + + auto height = image.Get(env, heightField); + auto width = image.Get(env, widthField); + auto pixelRatio = image.Get(env, pixelRatioField); + auto pixels = image.Get(env, bufferField); + auto name = jni::Make(env, image.Get(env, nameField)); + + jni::NullCheck(env, &pixels); + std::size_t size = pixels.Length(env); + + mbgl::PremultipliedImage premultipliedImage({ static_cast(width), static_cast(height) }); + if (premultipliedImage.bytes() != uint32_t(size)) { + throw mbgl::util::SpriteImageException("Sprite image pixel count mismatch"); + } + + jni::GetArrayRegion(env, *pixels, 0, size, reinterpret_cast(premultipliedImage.data.get())); + + return mbgl::style::Image {name, std::move(premultipliedImage), pixelRatio}; +} + +void Image::registerNative(jni::JNIEnv &env) { + // Lookup the class + Image::javaClass = *jni::Class::Find(env).NewGlobalRef(env).release(); +} + +jni::Class Image::javaClass; + + +} // namespace android +} // namespace mb + diff --git a/platform/android/src/map/image.hpp b/platform/android/src/map/image.hpp new file mode 100644 index 0000000000..1513e13ee7 --- /dev/null +++ b/platform/android/src/map/image.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include +#include + +namespace mbgl { +namespace android { + +class Image : private mbgl::util::noncopyable { +public: + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/maps/Image"; }; + + static mbgl::style::Image getImage(jni::JNIEnv&, jni::Object); + + static jni::Class javaClass; + + static void registerNative(jni::JNIEnv&); + +}; + + +} // namespace android +} // namespace mbgl \ No newline at end of file -- cgit v1.2.1