diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-02-16 16:16:47 +0200 |
---|---|---|
committer | Ivo van Dongen <ivovandongen@users.noreply.github.com> | 2017-02-24 17:54:20 +0200 |
commit | 465c949153a838bb3159204ab268eb551fbd2e6c (patch) | |
tree | 250922b879261580b1252a78b461218be9012bc0 /platform/android/src/native_map_view.hpp | |
parent | 7d9018093a61d327fa7ca1312845d2a00d928380 (diff) | |
download | qtlocation-mapboxgl-465c949153a838bb3159204ab268eb551fbd2e6c.tar.gz |
[android] jni high level binding refactor
Diffstat (limited to 'platform/android/src/native_map_view.hpp')
-rwxr-xr-x | platform/android/src/native_map_view.hpp | 256 |
1 files changed, 223 insertions, 33 deletions
diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index e776b839fc..b8a7a3914c 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -1,71 +1,265 @@ #pragma once +#include <mbgl/map/backend.hpp> +#include <mbgl/map/camera.hpp> #include <mbgl/map/map.hpp> #include <mbgl/map/view.hpp> -#include <mbgl/map/backend.hpp> #include <mbgl/util/noncopyable.hpp> #include <mbgl/util/default_thread_pool.hpp> +#include <mbgl/util/run_loop.hpp> #include <mbgl/storage/default_file_source.hpp> +#include <mbgl/storage/network_status.hpp> + +#include "file_source.hpp" +#include "annotation/marker.hpp" +#include "annotation/polygon.hpp" +#include "annotation/polyline.hpp" +#include "graphics/pointf.hpp" +#include "graphics/rectf.hpp" +#include "geometry/feature.hpp" +#include "geometry/lat_lng.hpp" +#include "geometry/projected_meters.hpp" +#include "style/layers/layers.hpp" +#include "style/sources/sources.hpp" #include <string> #include <jni.h> #include <android/native_window.h> #include <EGL/egl.h> +#include <jni/jni.hpp> namespace mbgl { namespace android { -class NativeMapView : public mbgl::View, public mbgl::Backend { +class NativeMapView : public View, public Backend { public: - NativeMapView(JNIEnv *env, jobject obj, float pixelRatio, int availableProcessors, size_t totalMemory); + + static constexpr auto Name() { return "com/mapbox/mapboxsdk/maps/NativeMapView"; }; + + static jni::Class<NativeMapView> javaClass; + + static void registerNative(jni::JNIEnv&); + + NativeMapView(jni::JNIEnv&, jni::Object<NativeMapView>, jni::Object<FileSource>, jni::jfloat, jni::jint, jni::jlong); + virtual ~NativeMapView(); - mbgl::Size getFramebufferSize() const; - void updateViewBinding(); + // mbgl::View // + void bind() override; - void invalidate() override; + // mbgl::Backend // + void invalidate() override; void notifyMapChange(mbgl::MapChange) override; - mbgl::Map &getMap(); - mbgl::DefaultFileSource &getFileSource(); + // JNI // - void initializeDisplay(); - void terminateDisplay(); + void destroy(jni::JNIEnv&); - void initializeContext(); - void terminateContext(); + void render(jni::JNIEnv&); - void createSurface(ANativeWindow *window); - void destroySurface(); + void update(jni::JNIEnv&); - void render(); + void resizeView(jni::JNIEnv&, int, int); - void enableFps(bool enable); - void updateFps(); + void resizeFramebuffer(jni::JNIEnv&, int, int); + + void initializeDisplay(jni::JNIEnv&); + + void terminateDisplay(jni::JNIEnv&); + + void initializeContext(jni::JNIEnv&); + + void terminateContext(jni::JNIEnv&); + + void createSurface(jni::JNIEnv&, jni::Object<>); + + void destroySurface(jni::JNIEnv&); + + jni::String getStyleUrl(jni::JNIEnv&); + + void setStyleUrl(jni::JNIEnv&, jni::String); + + jni::String getStyleJson(jni::JNIEnv&); + + void setStyleJson(jni::JNIEnv&, jni::String); + + 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::Object<LatLng> getLatLng(JNIEnv&); + + void setLatLng(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jlong); + + void setReachability(jni::JNIEnv&, jni::jboolean); + + void resetPosition(jni::JNIEnv&); + + jni::jdouble getPitch(jni::JNIEnv&); + + void setPitch(jni::JNIEnv&, jni::jdouble, jni::jlong); + + void scaleBy(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong); + + void setScale(jni::JNIEnv&, jni::jdouble, jni::jdouble, jni::jdouble, jni::jlong); + + jni::jdouble getScale(jni::JNIEnv&); + + void setZoom(jni::JNIEnv&, 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&, jni::Array<jni::Object<LatLng>>, jni::Object<RectF>, jni::jdouble, jni::jlong); + + void setContentPadding(JNIEnv&, double, double, double, double); + + void scheduleSnapshot(jni::JNIEnv&); + + void enableFps(jni::JNIEnv&, jni::jboolean enable); + + jni::Array<jni::jdouble> getCameraValues(jni::JNIEnv&); + + void updateMarker(jni::JNIEnv&, jni::jlong, jni::jdouble, jni::jdouble, jni::String); + + jni::Array<jni::jlong> addMarkers(jni::JNIEnv&, jni::Array<jni::Object<Marker>>); - void resizeView(int width, int height); - void resizeFramebuffer(int width, int height); - mbgl::EdgeInsets getInsets() { return insets;} - void setInsets(mbgl::EdgeInsets insets_); + void onLowMemory(JNIEnv& env); - void scheduleTakeSnapshot(); + 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::Object<ProjectedMeters> projectedMetersForLatLng(JNIEnv&, jni::jdouble, jni::jdouble); + + jni::Object<PointF> pixelForLatLng(JNIEnv&, jdouble, jdouble); + + jni::Object<LatLng> latLngForProjectedMeters(JNIEnv&, jdouble, jdouble); + + jni::Object<LatLng> latLngForPixel(JNIEnv&, jfloat, jfloat); + + jni::Array<jlong> addPolylines(JNIEnv&, jni::Array<jni::Object<Polyline>>); + + jni::Array<jlong> addPolygons(JNIEnv&, jni::Array<jni::Object<Polygon>>); + + void updatePolyline(JNIEnv&, jlong, jni::Object<Polyline>); + + void updatePolygon(JNIEnv&, jlong, jni::Object<Polygon>); + + void removeAnnotations(JNIEnv&, jni::Array<jlong>); + + void addAnnotationIcon(JNIEnv&, jni::String, jint, jint, jfloat, jni::Array<jbyte>); + + jni::jdouble getTopOffsetPixelsForAnnotationSymbol(JNIEnv&, jni::String); + + jni::jlong getTransitionDuration(JNIEnv&); + + void setTransitionDuration(JNIEnv&, jni::jlong); + + jni::jlong getTransitionDelay(JNIEnv&); + + void setTransitionDelay(JNIEnv&, jni::jlong); + + jni::Array<jlong> queryPointAnnotations(JNIEnv&, jni::Object<RectF>); + + jni::Array<jni::Object<Feature>> queryRenderedFeaturesForPoint(JNIEnv&, jni::jfloat, jni::jfloat, jni::Array<jni::String>); + + jni::Array<jni::Object<Feature>> queryRenderedFeaturesForBox(JNIEnv&, jni::jfloat, jni::jfloat, jni::jfloat, jni::jfloat, jni::Array<jni::String>); + + jni::Object<Layer> getLayer(JNIEnv&, jni::String); + + void addLayer(JNIEnv&, jlong, jni::String); + + void removeLayerById(JNIEnv&, jni::String); + + void removeLayer(JNIEnv&, jlong); + + jni::Object<Source> getSource(JNIEnv&, jni::String); + + void addSource(JNIEnv&, jni::jlong); + + void removeSourceById(JNIEnv&, jni::String); + + void removeSource(JNIEnv&, jlong); + + void addImage(JNIEnv&, jni::String, jni::jint, jni::jint, jni::jfloat, jni::Array<jbyte>); + + void removeImage(JNIEnv&, jni::String); protected: + // mbgl::Backend // + void activate() override; void deactivate() override; private: + void _initializeDisplay(); + + void _terminateDisplay(); + + void _initializeContext(); + + void _terminateContext(); + + void _createSurface(ANativeWindow*); + + void _destroySurface(); + EGLConfig chooseConfig(const EGLConfig configs[], EGLint numConfigs); + void updateViewBinding(); + mbgl::Size getFramebufferSize() const; + + void updateFps(); + private: + JavaVM *vm = nullptr; - JNIEnv *env = nullptr; - jweak obj = nullptr; + jni::UniqueWeakObject<NativeMapView> javaPeer; + + std::string styleUrl; + std::string apiKey; ANativeWindow *window = nullptr; + EGLConfig config = nullptr; + EGLint format = -1; + EGLDisplay oldDisplay = EGL_NO_DISPLAY; EGLSurface oldReadSurface = EGL_NO_SURFACE; EGLSurface oldDrawSurface = EGL_NO_SURFACE; @@ -75,15 +269,11 @@ private: EGLSurface surface = EGL_NO_SURFACE; EGLContext context = EGL_NO_CONTEXT; - EGLConfig config = nullptr; - EGLint format = -1; - std::string styleUrl; - std::string apiKey; - - bool firstTime = false; + float pixelRatio; bool fpsEnabled = false; bool snapshot = false; + bool firstRender = true; double fps = 0.0; int width = 0; @@ -96,12 +286,12 @@ private: size_t totalMemory = 0; // Ensure these are initialised last - mbgl::DefaultFileSource& fileSource; std::shared_ptr<mbgl::ThreadPool> threadPool; std::unique_ptr<mbgl::Map> map; mbgl::EdgeInsets insets; unsigned active = 0; }; -} -} + +} // namespace android +} // namespace mbgl |