From aa7f70075d2b59daff67d9c2328222b0ada4a48b Mon Sep 17 00:00:00 2001 From: Alexander Marchuk Date: Wed, 16 Dec 2015 14:24:57 +0300 Subject: [PATCH] [drape][android][ios][desktop] fix: Decoupled saving and setting 3D mode. --- android/jni/com/mapswithme/maps/Framework.cpp | 33 +++++++++++++++++-- android/jni/com/mapswithme/maps/Framework.hpp | 4 ++- .../src/com/mapswithme/maps/Framework.java | 10 +++++- .../Search/Console/MWMConsole.mm | 3 +- map/framework.cpp | 1 - qt/search_panel.cpp | 1 + 6 files changed, 45 insertions(+), 7 deletions(-) diff --git a/android/jni/com/mapswithme/maps/Framework.cpp b/android/jni/com/mapswithme/maps/Framework.cpp index 80ff9ea6ca..c84fed3148 100644 --- a/android/jni/com/mapswithme/maps/Framework.cpp +++ b/android/jni/com/mapswithme/maps/Framework.cpp @@ -188,11 +188,21 @@ MapStyle Framework::GetMapStyle() const return m_work.GetMapStyle(); } -void Framework::Allow3dMode(bool allow3d, bool allow3dBuildings) +void Framework::Save3dMode(bool allow3d, bool allow3dBuildings) +{ + m_work.Save3dMode(allow3d, allow3dBuildings); +} + +void Framework::Set3dMode(bool allow3d, bool allow3dBuildings) { m_work.Allow3dMode(allow3d, allow3dBuildings); } +void Framework::Get3dMode(bool & allow3d, bool & allow3dBuildings) +{ + m_work.Load3dMode(allow3d, allow3dBuildings); +} + Storage & Framework::Storage() { return m_work.Storage(); @@ -1319,14 +1329,31 @@ extern "C" } JNIEXPORT void JNICALL - Java_com_mapswithme_maps_Framework_nativeAllow3dMode(JNIEnv * env, jclass thiz, jboolean allow, jboolean allowBuildings) + Java_com_mapswithme_maps_Framework_nativeSet3dMode(JNIEnv * env, jclass thiz, jboolean allow, jboolean allowBuildings) { bool const allow3d = static_cast(allow); bool const allow3dBuildings = static_cast(allowBuildings); + g_framework->Save3dMode(allow3d, allow3dBuildings); g_framework->PostDrapeTask([allow3d, allow3dBuildings]() { - g_framework->Allow3dMode(allow3d, allow3dBuildings); + g_framework->Set3dMode(allow3d, allow3dBuildings); }); } + + JNIEXPORT void JNICALL + Java_com_mapswithme_maps_Framework_nativeGet3dMode(JNIEnv * env, jclass thiz, jobject result) + { + bool enabled; + bool buildings; + g_framework->Get3dMode(enabled, buildings); + + jclass const resultClass = env->GetObjectClass(result); + + static jfieldID const enabledField = env->GetFieldID(resultClass, "enabled", "Z"); + env->SetBooleanField(result, enabledField, enabled); + + static jfieldID const buildingsField = env->GetFieldID(resultClass, "buildings", "Z"); + env->SetBooleanField(result, buildingsField, buildings); + } } // extern "C" diff --git a/android/jni/com/mapswithme/maps/Framework.hpp b/android/jni/com/mapswithme/maps/Framework.hpp index f067224b04..154da0cf6d 100644 --- a/android/jni/com/mapswithme/maps/Framework.hpp +++ b/android/jni/com/mapswithme/maps/Framework.hpp @@ -156,7 +156,9 @@ namespace android location::EMyPositionMode GetMyPositionMode() const; void SetMyPositionMode(location::EMyPositionMode mode); - void Allow3dMode(bool allow3d, bool allow3dBuildings); + void Save3dMode(bool allow3d, bool allow3dBuildings); + void Set3dMode(bool allow3d, bool allow3dBuildings); + void Get3dMode(bool & allow3d, bool & allow3dBuildings); void SetupWidget(gui::EWidget widget, float x, float y, dp::Anchor anchor); void ApplyWidgets(); diff --git a/android/src/com/mapswithme/maps/Framework.java b/android/src/com/mapswithme/maps/Framework.java index 9269a4e25c..12cddabce6 100644 --- a/android/src/com/mapswithme/maps/Framework.java +++ b/android/src/com/mapswithme/maps/Framework.java @@ -48,6 +48,12 @@ public class Framework void onRouteBuildingProgress(float progress); } + public static class _3dModeParams + { + public boolean enabled; + public boolean buildings; + } + // this class is just bridge between Java and C++ worlds, we must not create it private Framework() {} @@ -178,5 +184,7 @@ public class Framework public native static void nativeDeregisterMaps(); - public native static void nativeAllow3dMode(boolean allow3d, boolean allow3dBuildings); + public native static void nativeGet3dMode(_3dModeParams result); + + public native static void nativeSet3dMode(boolean allow3d, boolean allow3dBuildings); } diff --git a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/Console/MWMConsole.mm b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/Console/MWMConsole.mm index 8d9d335581..e9b89d6cc9 100644 --- a/iphone/Maps/Classes/CustomViews/MapViewControls/Search/Console/MWMConsole.mm +++ b/iphone/Maps/Classes/CustomViews/MapViewControls/Search/Console/MWMConsole.mm @@ -43,8 +43,9 @@ return NO; Framework & frm = GetFramework(); + frm.Save3dMode(is3d || is3dBuildings, is3dBuildings); frm.Allow3dMode(is3d || is3dBuildings, is3dBuildings); - + return YES; } diff --git a/map/framework.cpp b/map/framework.cpp index f3f732badb..511012fa44 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -2078,7 +2078,6 @@ void Framework::SetRouteFinishPoint(m2::PointD const & pt, bool isValid) void Framework::Allow3dMode(bool allow3d, bool allow3dBuildings) { - Save3dMode(allow3d, allow3dBuildings); CallDrapeFunction(bind(&df::DrapeEngine::Allow3dMode, _1, allow3d, allow3dBuildings)); } diff --git a/qt/search_panel.cpp b/qt/search_panel.cpp index 9851e54496..e7c3e36b25 100644 --- a/qt/search_panel.cpp +++ b/qt/search_panel.cpp @@ -201,6 +201,7 @@ bool SearchPanel::Try3dModeCmd(QString const & str) if (!is3dModeOn && !is3dBuildingsOn && !is3dModeOff) return false; + m_pDrawWidget->GetFramework().Save3dMode(is3dModeOn || is3dBuildingsOn, is3dBuildingsOn); m_pDrawWidget->GetFramework().Allow3dMode(is3dModeOn || is3dBuildingsOn, is3dBuildingsOn); return true;