#pragma once #include #include #include #include #include #include #include "annotation/marker.hpp" #include "annotation/polygon.hpp" #include "annotation/polyline.hpp" #include "graphics/pointf.hpp" #include "graphics/rectf.hpp" #include "geojson/feature.hpp" #include "geojson/geometry.hpp" #include "geometry/lat_lng.hpp" #include "geometry/projected_meters.hpp" #include "style/layers/layer_manager.hpp" #include "style/sources/source.hpp" #include "geometry/lat_lng_bounds.hpp" #include "map/camera_position.hpp" #include "map/image.hpp" #include "style/light.hpp" #include "bitmap.hpp" #include #include #include #include #include #include namespace mbgl { namespace android { class AndroidRendererFrontend; class FileSource; class MapRenderer; class NativeMapView : public MapObserver { public: static constexpr auto Name() { return "com/mapbox/mapboxsdk/maps/NativeMapView"; }; static void registerNative(jni::JNIEnv&); NativeMapView(jni::JNIEnv&, const jni::Object&, const jni::Object&, const jni::Object&, jni::jfloat, jni::jboolean); virtual ~NativeMapView(); // mbgl::RendererBackend (mbgl::MapObserver) // void onCameraWillChange(MapObserver::CameraChangeMode) override; void onCameraIsChanging() override; void onCameraDidChange(MapObserver::CameraChangeMode) override; void onWillStartLoadingMap() override; void onDidFinishLoadingMap() override; void onDidFailLoadingMap(MapLoadError, const std::string&) override; void onWillStartRenderingFrame() override; void onDidFinishRenderingFrame(MapObserver::RenderMode, bool) override; void onWillStartRenderingMap() override; void onDidFinishRenderingMap(MapObserver::RenderMode) override; void onDidBecomeIdle() override; void onDidFinishLoadingStyle() override; void onSourceChanged(mbgl::style::Source&) override; void onStyleImageMissing(const std::string&) override; bool onCanRemoveUnusedStyleImage(const std::string&) override; // JNI // void resizeView(jni::JNIEnv&, int, int); jni::Local getStyleUrl(jni::JNIEnv&); void setStyleUrl(jni::JNIEnv&, const jni::String&); jni::Local getStyleJson(jni::JNIEnv&); void setStyleJson(jni::JNIEnv&, const jni::String&); void setLatLngBounds(jni::JNIEnv&, const jni::Object&); void cancelTransitions(jni::JNIEnv&); void setGestureInProgress(jni::JNIEnv&, jni::jboolean); 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 easeTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble, jni::jboolean); void flyTo(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong, jni::jdouble, jni::jdouble); jni::Local> getLatLng(JNIEnv&); void setLatLng(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jlong); jni::Local> getCameraForLatLngBounds(jni::JNIEnv&, const jni::Object&, double top, double left, double bottom, double right, double bearing, double tilt); jni::Local> getCameraForGeometry(jni::JNIEnv&, const jni::Object&, double top, double left, double bottom, double right, double bearing, double tilt); void setReachability(jni::JNIEnv&, jni::jboolean); void resetPosition(jni::JNIEnv&); jni::jdouble getPitch(jni::JNIEnv&); void setPitch(jni::JNIEnv&, jni::jdouble, jni::jlong); void setZoom(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong); jni::jdouble getZoom(jni::JNIEnv&); void resetZoom(jni::JNIEnv&); void setMinZoom(jni::JNIEnv&, jni::jdouble); jni::jdouble getMinZoom(jni::JNIEnv&); void setMaxZoom(jni::JNIEnv&, jni::jdouble); jni::jdouble getMaxZoom(jni::JNIEnv&); void rotateBy(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong); void setBearing(jni::JNIEnv&, jni::jdouble, jni::jlong); void setBearingXY(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong); jni::jdouble getBearing(jni::JNIEnv&); void resetNorth(jni::JNIEnv&); void setVisibleCoordinateBounds(JNIEnv&, const jni::Array>&, const jni::Object&, jni::jdouble, jni::jlong); void setContentPadding(JNIEnv&, float, float, float, float); jni::Local> getContentPadding(JNIEnv&); void scheduleSnapshot(jni::JNIEnv&); jni::Local> getCameraPosition(jni::JNIEnv&); void updateMarker(jni::JNIEnv&, jni::jlong, jni::jdouble, jni::jdouble, const jni::String&); jni::Local> addMarkers(jni::JNIEnv&, const jni::Array>&); void onLowMemory(JNIEnv& env); void setDebug(JNIEnv&, jni::jboolean); void cycleDebugOptions(JNIEnv&); jni::jboolean getDebug(JNIEnv&); jni::jboolean isFullyLoaded(JNIEnv&); jni::jdouble getMetersPerPixelAtLatitude(JNIEnv&, jni::jdouble, jni::jdouble); jni::Local> projectedMetersForLatLng(JNIEnv&, jni::jdouble, jni::jdouble); jni::Local> pixelForLatLng(JNIEnv&, jdouble, jdouble); jni::Local> latLngForProjectedMeters(JNIEnv&, jdouble, jdouble); jni::Local> latLngForPixel(JNIEnv&, jfloat, jfloat); jni::Local> addPolylines(JNIEnv&, const jni::Array>&); jni::Local> addPolygons(JNIEnv&, const jni::Array>&); void updatePolyline(JNIEnv&, jlong, const jni::Object&); void updatePolygon(JNIEnv&, jlong, const jni::Object&); void removeAnnotations(JNIEnv&, const jni::Array&); void addAnnotationIcon(JNIEnv&, const jni::String&, jint, jint, jfloat, const jni::Array&); void removeAnnotationIcon(JNIEnv&, const jni::String&); jni::jdouble getTopOffsetPixelsForAnnotationSymbol(JNIEnv&, const jni::String&); jni::Local> getTransitionOptions(JNIEnv&); void setTransitionOptions(JNIEnv&, const jni::Object&); jni::Local> queryPointAnnotations(JNIEnv&, const jni::Object&); jni::Local> queryShapeAnnotations(JNIEnv&, const jni::Object&); jni::Local>> queryRenderedFeaturesForPoint(JNIEnv&, jni::jfloat, jni::jfloat, const jni::Array&, const jni::Array>& jfilter); jni::Local>> queryRenderedFeaturesForBox(JNIEnv&, jni::jfloat, jni::jfloat, jni::jfloat, jni::jfloat, const jni::Array&, const jni::Array>& jfilter); jni::Local> getLight(JNIEnv&); jni::Local>> getLayers(JNIEnv&); jni::Local> getLayer(JNIEnv&, const jni::String&); void addLayer(JNIEnv&, jlong, const jni::String&); void addLayerAbove(JNIEnv&, jlong, const jni::String&); void addLayerAt(JNIEnv&, jni::jlong, jni::jint); jni::jboolean removeLayerAt(JNIEnv&, jni::jint); jni::jboolean removeLayer(JNIEnv&, jlong); jni::Local>> getSources(JNIEnv&); jni::Local> getSource(JNIEnv&, const jni::String&); void addSource(JNIEnv&, const jni::Object&, jlong nativePtr); jni::jboolean removeSource(JNIEnv&, const jni::Object&, jlong nativePtr); void addImage(JNIEnv&, const jni::String&, const jni::Object& bitmap, jni::jfloat, jni::jboolean); void addImages(JNIEnv&, const jni::Array>&); void removeImage(JNIEnv&, const jni::String&); jni::Local> getImage(JNIEnv&, const jni::String&); void setPrefetchTiles(JNIEnv&, jni::jboolean); jni::jboolean getPrefetchTiles(JNIEnv&); mbgl::Map& getMap(); private: std::unique_ptr rendererFrontend; JavaVM *vm = nullptr; jni::WeakReference> javaPeer; MapRenderer& mapRenderer; std::string styleUrl; float pixelRatio; // Minimum texture size according to OpenGL ES 2.0 specification. int width = 64; int height = 64; // Ensure these are initialised last std::unique_ptr map; mbgl::EdgeInsets insets; }; } // namespace android } // namespace mbgl