#pragma once #include #include #include #include #include #include "../file_source.hpp" #include "../geometry/lat_lng_bounds.hpp" #include "../map/camera_position.hpp" #include "../map/image.hpp" #include "../style/layers/layer.hpp" #include "../style/sources/source.hpp" namespace mbgl { namespace android { class MapSnapshotter final : public mbgl::MapSnapshotterObserver { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/snapshotter/MapSnapshotter"; }; static void registerNative(jni::JNIEnv&); MapSnapshotter(jni::JNIEnv&, const jni::Object&, const jni::Object&, jni::jfloat pixelRatio, jni::jint width, jni::jint height, const jni::String& styleURL, const jni::String& styleJSON, const jni::Object& region, const jni::Object& position, jni::jboolean showLogo, const jni::String& localIdeographFontFamily); virtual ~MapSnapshotter() override; void setStyleUrl(JNIEnv&, const jni::String& styleURL); void setStyleJson(JNIEnv&, const jni::String& styleJSON); void setSize(JNIEnv&, jni::jint width, jni::jint height); void setCameraPosition(JNIEnv&, const jni::Object& position); void setRegion(JNIEnv&, const jni::Object& region); void start(JNIEnv&); void cancel(JNIEnv&); void addLayerAt(JNIEnv&, jlong, jni::jint); void addLayerBelow(JNIEnv&, jlong, const jni::String&); void addLayerAbove(JNIEnv&, jlong, const jni::String&); void addSource(JNIEnv&, const jni::Object&, jlong nativePtr); void addImages(JNIEnv&, const jni::Array>&); jni::Local> getLayer(JNIEnv&, const jni::String&); jni::Local> getSource(JNIEnv&, const jni::String&); // MapSnapshotterObserver overrides void onDidFailLoadingStyle(const std::string&) override; void onDidFinishLoadingStyle() override; void onStyleImageMissing(const std::string&) override; private: MBGL_STORE_THREAD(tid); JavaVM *vm = nullptr; jni::WeakReference, jni::EnvAttachingDeleter> javaPeer; float pixelRatio; bool showLogo; FileSource *jFileSource; void activateFilesource(JNIEnv&); void deactivateFilesource(JNIEnv&); bool activatedFilesource = false; mapbox::base::WeakPtr weakScheduler; std::unique_ptr snapshotter; }; } // namespace android } // namespace mbgl