From d6f5dd35e820ec6e8ee3b3f88290019a2300ab7c Mon Sep 17 00:00:00 2001 From: Relintai Date: Sun, 11 Jun 2023 12:57:25 +0200 Subject: [PATCH] Ported: Enable granular control of touchscreen related settings - m4gr3d https://github.com/godotengine/godot/commit/61e41facc7e7aceac0fcdb1b90e433566301098c --- doc/classes/EditorSettings.xml | 16 +++++++++--- editor/editor_settings.cpp | 9 ++++++- editor/editor_themes.cpp | 6 ++--- .../pandemonium/editor/PandemoniumEditor.kt | 25 ++++++++++++++----- .../pandemonium/PandemoniumLib.java | 7 ++++++ platform/android/java_pandemonium_lib_jni.cpp | 16 ++++++++++++ platform/android/java_pandemonium_lib_jni.h | 1 + 7 files changed, 66 insertions(+), 14 deletions(-) diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index c4fa1e9e3..c7170fc23 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -490,10 +490,6 @@ The custom theme resource to use for the editor. Must be a Godot theme resource in [code].tres[/code] or [code].res[/code] format. - - If [code]true[/code], increases the touch area for the UI elements to improve usability on touchscreen devices. - [b]Note:[/b] Defaults to [code]true[/code] on touchscreen devices. - If [code]true[/code], makes the background of selected tabs more contrasted in the editor theme (brighter on dark themes, darker on light themes). @@ -512,6 +508,18 @@ If [code]true[/code], use colored header backgrounds for individual [GraphNode]s in the visual script and visual shader editors. This can improve usability when frequently using these editors at low zoom levels. + + If [code]true[/code], long press on touchscreen is treated as right click. + [b]Note:[/b] Defaults to [code]true[/code] on touchscreen devices. + + + If [code]true[/code], enable two finger pan and scale gestures on touchscreen devices. + [b]Note:[/b] Defaults to [code]true[/code] on touchscreen devices. + + + If [code]true[/code], increases the scrollbar touch area to improve usability on touchscreen devices. + [b]Note:[/b] Defaults to [code]true[/code] on touchscreen devices. + The address to listen to when starting the remote debugger. This can be set to [code]0.0.0.0[/code] to allow external clients to connect to the remote debugger (instead of restricting the remote debugger to connections from [code]localhost[/code]). diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index 9b2c2cfb5..0e00ec16c 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -362,7 +362,6 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { // Theme _initial_set("interface/theme/preset", "Default"); hints["interface/theme/preset"] = PropertyInfo(Variant::STRING, "interface/theme/preset", PROPERTY_HINT_ENUM, "Default,Pandemonium 3,Alien,Arc,Pandemonium 2,Grey,Light,Solarized (Dark),Solarized (Light),Custom", PROPERTY_USAGE_DEFAULT); - _initial_set("interface/theme/enable_touchscreen_touch_area", OS::get_singleton()->has_touchscreen_ui_hint()); _initial_set("interface/theme/icon_and_font_color", 0); hints["interface/theme/icon_and_font_color"] = PropertyInfo(Variant::INT, "interface/theme/icon_and_font_color", PROPERTY_HINT_ENUM, "Auto,Dark,Light", PROPERTY_USAGE_DEFAULT); _initial_set("interface/theme/base_color", Color(0.2, 0.23, 0.31)); @@ -382,6 +381,14 @@ void EditorSettings::_load_defaults(Ref p_extra_config) { _initial_set("interface/theme/custom_theme", ""); hints["interface/theme/custom_theme"] = PropertyInfo(Variant::STRING, "interface/theme/custom_theme", PROPERTY_HINT_GLOBAL_FILE, "*.res,*.tres,*.theme", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED); + // Touchscreen + bool has_touchscreen_ui = OS::get_singleton()->has_touchscreen_ui_hint(); + _initial_set("interface/touchscreen/increase_scrollbar_touch_area", has_touchscreen_ui); + _initial_set("interface/touchscreen/enable_long_press_as_right_click", has_touchscreen_ui); + set_restart_if_changed("interface/touchscreen/enable_long_press_as_right_click", true); + _initial_set("interface/touchscreen/enable_pan_and_scale_gestures", has_touchscreen_ui); + set_restart_if_changed("interface/touchscreen/enable_pan_and_scale_gestures", true); + // Scene tabs _initial_set("interface/scene_tabs/show_thumbnail_on_hover", true); _initial_set("interface/scene_tabs/resize_if_many_tabs", true); diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 5467c916d..7e9c33cf1 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -329,7 +329,7 @@ Ref create_editor_theme(const Ref p_theme) { String preset = EDITOR_GET("interface/theme/preset"); - bool enable_touchscreen_touch_area = EDITOR_GET("interface/theme/enable_touchscreen_touch_area"); + bool increase_scrollbar_touch_area = EDITOR_GET("interface/touchscreen/increase_scrollbar_touch_area"); bool highlight_tabs = EDITOR_GET("interface/theme/highlight_tabs"); int border_size = EDITOR_GET("interface/theme/border_size"); @@ -1082,7 +1082,7 @@ Ref create_editor_theme(const Ref p_theme) { // HScrollBar Ref empty_icon = memnew(ImageTexture); - if (enable_touchscreen_touch_area) { + if (increase_scrollbar_touch_area) { theme->set_stylebox("scroll", "HScrollBar", make_line_stylebox(separator_color, 50)); } else { theme->set_stylebox("scroll", "HScrollBar", make_stylebox(theme->get_icon("GuiScrollBg", "EditorIcons"), 5, 5, 5, 5, 0, 0, 0, 0)); @@ -1102,7 +1102,7 @@ Ref create_editor_theme(const Ref p_theme) { // VScrollBar - if (enable_touchscreen_touch_area) { + if (increase_scrollbar_touch_area) { theme->set_stylebox("scroll", "VScrollBar", make_line_stylebox(separator_color, 50, 1, 1, true)); } else { theme->set_stylebox("scroll", "VScrollBar", make_stylebox(theme->get_icon("GuiScrollBg", "EditorIcons"), 5, 5, 5, 5, 0, 0, 0, 0)); diff --git a/platform/android/java/editor/src/main/java/net/relintai/pandemonium/editor/PandemoniumEditor.kt b/platform/android/java/editor/src/main/java/net/relintai/pandemonium/editor/PandemoniumEditor.kt index c99470500..8d4223ba1 100644 --- a/platform/android/java/editor/src/main/java/net/relintai/pandemonium/editor/PandemoniumEditor.kt +++ b/platform/android/java/editor/src/main/java/net/relintai/pandemonium/editor/PandemoniumEditor.kt @@ -103,11 +103,20 @@ open class PandemoniumEditor : FullScreenPandemoniumApp() { } super.onCreate(savedInstanceState); + } - // Enable long press, panning and scaling gestures - pandemoniumFragment?.renderView?.inputHandler?.apply { - enableLongPress(enableLongPressGestures()) - enablePanningAndScalingGestures(enablePanAndScaleGestures()) + override fun onPandemoniumSetupCompleted() { + super.onPandemoniumSetupCompleted() + val longPressEnabled = enableLongPressGestures() + val panScaleEnabled = enablePanAndScaleGestures() + + + runOnUiThread { + // Enable long press, panning and scaling gestures + pandemoniumFragment?.renderView?.inputHandler?.apply { + enableLongPress(longPressEnabled) + enablePanningAndScalingGestures(panScaleEnabled) + } } } @@ -227,12 +236,16 @@ open class PandemoniumEditor : FullScreenPandemoniumApp() { /** * Enable long press gestures for the Pandemonium Android editor. */ - protected open fun enableLongPressGestures() = true + protected open fun enableLongPressGestures() = + java.lang.Boolean.parseBoolean(PandemoniumLib.getEditorSetting("interface/touchscreen/enable_long_press_as_right_click")) /** * Enable pan and scale gestures for the Pandemonium Android editor. */ - protected open fun enablePanAndScaleGestures() = true + protected open fun enablePanAndScaleGestures() = + java.lang.Boolean.parseBoolean(PandemoniumLib.getEditorSetting("interface/touchscreen/enable_pan_and_scale_gestures")) + + private fun shouldGameLaunchAdjacent(): Boolean { return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { diff --git a/platform/android/java/lib/src/net/relintai/pandemonium/pandemonium/PandemoniumLib.java b/platform/android/java/lib/src/net/relintai/pandemonium/pandemonium/PandemoniumLib.java index 96a741c13..8936b4c20 100644 --- a/platform/android/java/lib/src/net/relintai/pandemonium/pandemonium/PandemoniumLib.java +++ b/platform/android/java/lib/src/net/relintai/pandemonium/pandemonium/PandemoniumLib.java @@ -172,6 +172,13 @@ public class PandemoniumLib { */ public static native String getGlobal(String p_key); + /** + * Used to access Pandemonium's editor settings. + * @param settingKey Setting key + * @return String value of the setting + */ + public static native String getEditorSetting(String settingKey); + /** * Invoke method |p_method| on the Pandemonium object specified by |p_id| * @param p_id Id of the Pandemonium object to invoke diff --git a/platform/android/java_pandemonium_lib_jni.cpp b/platform/android/java_pandemonium_lib_jni.cpp index 79fcc82c1..bd0da5c76 100644 --- a/platform/android/java_pandemonium_lib_jni.cpp +++ b/platform/android/java_pandemonium_lib_jni.cpp @@ -49,6 +49,10 @@ #include "string_android.h" #include "thread_jandroid.h" +#ifdef TOOLS_ENABLED +#include "editor/editor_settings.h" +#endif + #include #include @@ -446,6 +450,18 @@ JNIEXPORT jstring JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumL return env->NewStringUTF(ProjectSettings::get_singleton()->get(js).operator String().utf8().get_data()); } +JNIEXPORT jstring JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_getEditorSetting(JNIEnv *env, jclass clazz, jstring p_setting_key) { + String editor_setting = ""; +#ifdef TOOLS_ENABLED + String godot_setting_key = jstring_to_string(p_setting_key, env); + editor_setting = EDITOR_GET(godot_setting_key).operator String(); +#else + WARN_PRINT("Access to the Editor Settings in only available on Editor builds"); +#endif + + return env->NewStringUTF(editor_setting.utf8().get_data()); +} + JNIEXPORT void JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_callobject(JNIEnv *env, jclass clazz, jlong ID, jstring method, jobjectArray params) { Object *obj = ObjectDB::get_instance(ID); ERR_FAIL_COND(!obj); diff --git a/platform/android/java_pandemonium_lib_jni.h b/platform/android/java_pandemonium_lib_jni.h index 071a70992..870da9f96 100644 --- a/platform/android/java_pandemonium_lib_jni.h +++ b/platform/android/java_pandemonium_lib_jni.h @@ -60,6 +60,7 @@ JNIEXPORT void JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_ JNIEXPORT void JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_focusin(JNIEnv *env, jclass clazz); JNIEXPORT void JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_focusout(JNIEnv *env, jclass clazz); JNIEXPORT jstring JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_getGlobal(JNIEnv *env, jclass clazz, jstring path); +JNIEXPORT jstring JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_getEditorSetting(JNIEnv *env, jclass clazz, jstring p_setting_key); JNIEXPORT void JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_callobject(JNIEnv *env, jclass clazz, jlong ID, jstring method, jobjectArray params); JNIEXPORT void JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_calldeferred(JNIEnv *env, jclass clazz, jlong ID, jstring method, jobjectArray params); JNIEXPORT void JNICALL Java_net_relintai_pandemonium_pandemonium_PandemoniumLib_setVirtualKeyboardHeight(JNIEnv *env, jclass clazz, jint p_height);