diff options
Diffstat (limited to 'platform/android/src/map_renderer.cpp')
-rw-r--r-- | platform/android/src/map_renderer.cpp | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/platform/android/src/map_renderer.cpp b/platform/android/src/map_renderer.cpp index 1f8c82ac05..13790c4544 100644 --- a/platform/android/src/map_renderer.cpp +++ b/platform/android/src/map_renderer.cpp @@ -14,15 +14,17 @@ namespace mbgl { namespace android { -MapRenderer::MapRenderer(jni::JNIEnv& _env, jni::Object<MapRenderer> obj, - jni::Object<FileSource> _fileSource, jni::jfloat pixelRatio_, - jni::String programCacheDir_, - jni::String localIdeographFontFamily_) - : javaPeer(SeizeGenericWeak(obj.NewWeakGlobalRef(_env).release())) +MapRenderer::MapRenderer(jni::JNIEnv& _env, + const jni::Object<MapRenderer>& obj, + const jni::Object<FileSource>& _fileSource, + jni::jfloat pixelRatio_, + const jni::String& programCacheDir_, + const jni::String& localIdeographFontFamily_) + : javaPeer(_env, obj) , pixelRatio(pixelRatio_) , fileSource(FileSource::getDefaultFileSource(_env, _fileSource)) , programCacheDir(jni::Make<std::string>(_env, programCacheDir_)) - , localIdeographFontFamily(localIdeographFontFamily_ == nullptr ? optional<std::string>{} : jni::Make<std::string>(_env, localIdeographFontFamily_ )) + , localIdeographFontFamily(localIdeographFontFamily_ ? jni::Make<std::string>(_env, localIdeographFontFamily_) : optional<std::string>{}) , threadPool(sharedThreadPool()) , mailbox(std::make_shared<Mailbox>(*this)) { } @@ -53,10 +55,10 @@ void MapRenderer::schedule(std::weak_ptr<Mailbox> scheduled) { auto peer = runnable->peer(); // Queue the event on the Java Peer - static auto javaClass = jni::Class<MapRenderer>::Singleton(*_env); + static auto& javaClass = jni::Class<MapRenderer>::Singleton(*_env); static auto queueEvent = javaClass.GetMethod<void( jni::Object<MapRendererRunnable>)>(*_env, "queueEvent"); - javaPeer->Call(*_env, queueEvent, *peer); + javaPeer.get(*_env).Call(*_env, queueEvent, peer); // Release the c++ peer as it will be destroyed on GC of the Java Peer runnable.release(); @@ -64,9 +66,9 @@ void MapRenderer::schedule(std::weak_ptr<Mailbox> scheduled) { void MapRenderer::requestRender() { android::UniqueEnv _env = android::AttachEnv(); - static auto javaClass = jni::Class<MapRenderer>::Singleton(*_env); + static auto& javaClass = jni::Class<MapRenderer>::Singleton(*_env); static auto onInvalidate = javaClass.GetMethod<void()>(*_env, "requestRender"); - javaPeer->Call(*_env, onInvalidate); + javaPeer.get(*_env).Call(*_env, onInvalidate); } void MapRenderer::update(std::shared_ptr<UpdateParameters> params) { @@ -184,13 +186,13 @@ void MapRenderer::onSurfaceChanged(JNIEnv&, jint width, jint height) { void MapRenderer::registerNative(jni::JNIEnv& env) { // Lookup the class - static auto javaClass = jni::Class<MapRenderer>::Singleton(env); + static auto& javaClass = jni::Class<MapRenderer>::Singleton(env); #define METHOD(MethodPtr, name) jni::MakeNativePeerMethod<decltype(MethodPtr), (MethodPtr)>(name) // Register the peer jni::RegisterNativePeer<MapRenderer>(env, javaClass, "nativePtr", - std::make_unique<MapRenderer, JNIEnv&, jni::Object<MapRenderer>, jni::Object<FileSource>, jni::jfloat, jni::String, jni::String>, + jni::MakePeer<MapRenderer, const jni::Object<MapRenderer>&, const jni::Object<FileSource>&, jni::jfloat, const jni::String&, const jni::String&>, "nativeInitialize", "finalize", METHOD(&MapRenderer::render, "nativeRender"), METHOD(&MapRenderer::onSurfaceCreated, @@ -199,8 +201,8 @@ void MapRenderer::registerNative(jni::JNIEnv& env) { "nativeOnSurfaceChanged")); } -MapRenderer& MapRenderer::getNativePeer(JNIEnv& env, jni::Object<MapRenderer> jObject) { - static auto javaClass = jni::Class<MapRenderer>::Singleton(env); +MapRenderer& MapRenderer::getNativePeer(JNIEnv& env, const jni::Object<MapRenderer>& jObject) { + static auto& javaClass = jni::Class<MapRenderer>::Singleton(env); static auto field = javaClass.GetField<jlong>(env, "nativePtr"); MapRenderer* mapRenderer = reinterpret_cast<MapRenderer*>(jObject.Get(env, field)); assert(mapRenderer != nullptr); |