From 81b0a2b5698c6b73fc76cc99caf04aad2846509d Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Mon, 13 Mar 2017 16:22:07 +0200 Subject: [PATCH] [android] Support mbgl::MapObserver --- platform/android/src/native_map_view.cpp | 64 ++++++++++++++++++++++++ platform/android/src/native_map_view.hpp | 19 ++++++- 2 files changed, 82 insertions(+), 1 deletion(-) diff --git a/platform/android/src/native_map_view.cpp b/platform/android/src/native_map_view.cpp index d6307ad80d8..864d4c9abb5 100755 --- a/platform/android/src/native_map_view.cpp +++ b/platform/android/src/native_map_view.cpp @@ -181,6 +181,70 @@ void NativeMapView::notifyMapChange(mbgl::MapChange change) { javaPeer->Call(*_env, onMapChanged, (int) change); } +void NativeMapView::onCameraWillChange(MapObserver::CameraChangeMode mode) { + if (mode == MapObserver::CameraChangeMode::Immediate) { + notifyMapChange(MapChange::MapChangeRegionWillChange); + } else { + notifyMapChange(MapChange::MapChangeRegionWillChangeAnimated); + } +} + +void NativeMapView::onCameraIsChanging() { + notifyMapChange(MapChange::MapChangeRegionIsChanging); +} + +void NativeMapView::onCameraDidChange(MapObserver::CameraChangeMode mode) { + if (mode == MapObserver::CameraChangeMode::Immediate) { + notifyMapChange(MapChange::MapChangeRegionDidChange); + } else { + notifyMapChange(MapChange::MapChangeRegionDidChangeAnimated); + } +} + +void NativeMapView::onWillStartLoadingMap() { + notifyMapChange(MapChange::MapChangeWillStartLoadingMap); +} + +void NativeMapView::onDidFinishLoadingMap() { + notifyMapChange(MapChange::MapChangeDidFinishLoadingMap); +} + +void NativeMapView::onDidFailLoadingMap() { + notifyMapChange(MapChange::MapChangeDidFailLoadingMap); +} + +void NativeMapView::onWillStartRenderingFrame() { + notifyMapChange(MapChange::MapChangeWillStartRenderingFrame); +} + +void NativeMapView::onDidFinishRenderingFrame(MapObserver::RenderMode mode) { + if (mode == MapObserver::RenderMode::Partial) { + notifyMapChange(MapChange::MapChangeDidFinishRenderingFrame); + } else { + notifyMapChange(MapChange::MapChangeDidFinishRenderingFrameFullyRendered); + } +} + +void NativeMapView::onWillStartRenderingMap() { + notifyMapChange(MapChange::MapChangeWillStartRenderingMap); +} + +void NativeMapView::onDidFinishRenderingMap(MapObserver::RenderMode mode) { + if (mode == MapObserver::RenderMode::Partial) { + notifyMapChange(MapChange::MapChangeDidFinishRenderingMap); + } else { + notifyMapChange(MapChange::MapChangeDidFinishRenderingMapFullyRendered); + } +} + +void NativeMapView::onDidFinishLoadingStyle() { + notifyMapChange(MapChange::MapChangeDidFinishLoadingStyle); +} + +void NativeMapView::onSourceDidChange() { + notifyMapChange(MapChange::MapChangeSourceDidChange); +} + // JNI Methods // void NativeMapView::initializeDisplay(jni::JNIEnv&) { diff --git a/platform/android/src/native_map_view.hpp b/platform/android/src/native_map_view.hpp index b7bf03402ed..3b2610c76dc 100755 --- a/platform/android/src/native_map_view.hpp +++ b/platform/android/src/native_map_view.hpp @@ -1,6 +1,7 @@ #pragma once #include +#include #include #include #include @@ -51,7 +52,23 @@ class NativeMapView : public View, public Backend { // mbgl::Backend // void invalidate() override; - void notifyMapChange(mbgl::MapChange) override; + + // Deprecated // + void notifyMapChange(mbgl::MapChange); + + // mbgl::Backend (mbgl::MapObserver) // + void onCameraWillChange(MapObserver::CameraChangeMode) override; + void onCameraIsChanging() override; + void onCameraDidChange(MapObserver::CameraChangeMode) override; + void onWillStartLoadingMap() override; + void onDidFinishLoadingMap() override; + void onDidFailLoadingMap() override; + void onWillStartRenderingFrame() override; + void onDidFinishRenderingFrame(MapObserver::RenderMode) override; + void onWillStartRenderingMap() override; + void onDidFinishRenderingMap(MapObserver::RenderMode) override; + void onDidFinishLoadingStyle() override; + void onSourceDidChange() override; // JNI //