diff options
| -rw-r--r-- | doc/classes/EditorSettings.xml | 16 | ||||
| -rw-r--r-- | editor/editor_settings.cpp | 9 | ||||
| -rw-r--r-- | editor/editor_themes.cpp | 6 | ||||
| -rw-r--r-- | platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt | 23 | ||||
| -rw-r--r-- | platform/android/java/lib/src/org/godotengine/godot/GodotLib.java | 7 | ||||
| -rw-r--r-- | platform/android/java_godot_lib_jni.cpp | 16 | ||||
| -rw-r--r-- | platform/android/java_godot_lib_jni.h | 1 | 
7 files changed, 64 insertions, 14 deletions
| diff --git a/doc/classes/EditorSettings.xml b/doc/classes/EditorSettings.xml index 29123dbc70..86b84849f8 100644 --- a/doc/classes/EditorSettings.xml +++ b/doc/classes/EditorSettings.xml @@ -607,10 +607,6 @@  		<member name="interface/theme/draw_extra_borders" type="bool" setter="" getter="">  			If [code]true[/code], draws additional borders around interactive UI elements in the editor. This is automatically enabled when using the [b]Black (OLED)[/b] theme preset, as this theme preset uses a fully black background.  		</member> -		<member name="interface/theme/enable_touchscreen_touch_area" type="bool" setter="" getter=""> -			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. -		</member>  		<member name="interface/theme/icon_and_font_color" type="int" setter="" getter="">  			The icon and font color scheme to use in the editor.  			- [b]Auto[/b] determines the color scheme to use automatically based on [member interface/theme/base_color]. @@ -627,6 +623,18 @@  		<member name="interface/theme/relationship_line_opacity" type="float" setter="" getter="">  			The opacity to use when drawing relationship lines in the editor's [Tree]-based GUIs (such as the Scene tree dock).  		</member> +		<member name="interface/touchscreen/enable_long_press_as_right_click" type="bool" setter="" getter=""> +			If [code]true[/code], long press on touchscreen is treated as right click. +			[b]Note:[/b] Defaults to [code]true[/code] on touchscreen devices. +		</member> +		<member name="interface/touchscreen/enable_pan_and_scale_gestures" type="bool" setter="" getter=""> +			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. +		</member> +		<member name="interface/touchscreen/increase_scrollbar_touch_area" type="bool" setter="" getter=""> +			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. +		</member>  		<member name="network/debug/remote_host" type="String" setter="" getter="">  			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]).  		</member> diff --git a/editor/editor_settings.cpp b/editor/editor_settings.cpp index b4f5eeda84..41d175fcd1 100644 --- a/editor/editor_settings.cpp +++ b/editor/editor_settings.cpp @@ -450,7 +450,6 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {  	// Theme  	EDITOR_SETTING(Variant::STRING, PROPERTY_HINT_ENUM, "interface/theme/preset", "Default", "Default,Breeze Dark,Godot 2,Gray,Light,Solarized (Dark),Solarized (Light),Black (OLED),Custom") -	EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/theme/enable_touchscreen_touch_area", DisplayServer::get_singleton()->is_touchscreen_available(), "")  	EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/theme/icon_and_font_color", 0, "Auto,Dark,Light")  	EDITOR_SETTING(Variant::COLOR, PROPERTY_HINT_NONE, "interface/theme/base_color", Color(0.2, 0.23, 0.31), "")  	EDITOR_SETTING(Variant::COLOR, PROPERTY_HINT_NONE, "interface/theme/accent_color", Color(0.41, 0.61, 0.91), "") @@ -463,6 +462,14 @@ void EditorSettings::_load_defaults(Ref<ConfigFile> p_extra_config) {  	EDITOR_SETTING(Variant::FLOAT, PROPERTY_HINT_RANGE, "interface/theme/additional_spacing", 0.0, "0,5,0.1")  	EDITOR_SETTING_USAGE(Variant::STRING, PROPERTY_HINT_GLOBAL_FILE, "interface/theme/custom_theme", "", "*.res,*.tres,*.theme", PROPERTY_USAGE_DEFAULT | PROPERTY_USAGE_RESTART_IF_CHANGED) +	// Touchscreen +	bool has_touchscreen_ui = DisplayServer::get_singleton()->is_touchscreen_available(); +	EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/touchscreen/increase_scrollbar_touch_area", has_touchscreen_ui, "") +	EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/touchscreen/enable_long_press_as_right_click", has_touchscreen_ui, "") +	set_restart_if_changed("interface/touchscreen/enable_long_press_as_right_click", true); +	EDITOR_SETTING(Variant::BOOL, PROPERTY_HINT_NONE, "interface/touchscreen/enable_pan_and_scale_gestures", has_touchscreen_ui, "") +	set_restart_if_changed("interface/touchscreen/enable_pan_and_scale_gestures", true); +  	// Scene tabs  	EDITOR_SETTING(Variant::INT, PROPERTY_HINT_ENUM, "interface/scene_tabs/display_close_button", 1, "Never,If Tab Active,Always"); // TabBar::CloseButtonDisplayPolicy  	_initial_set("interface/scene_tabs/show_thumbnail_on_hover", true); diff --git a/editor/editor_themes.cpp b/editor/editor_themes.cpp index 304a7acff1..2ab15c1c2c 100644 --- a/editor/editor_themes.cpp +++ b/editor/editor_themes.cpp @@ -394,7 +394,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {  	Color accent_color = EDITOR_GET("interface/theme/accent_color");  	Color base_color = EDITOR_GET("interface/theme/base_color");  	float contrast = EDITOR_GET("interface/theme/contrast"); -	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 draw_extra_borders = EDITOR_GET("interface/theme/draw_extra_borders");  	float icon_saturation = EDITOR_GET("interface/theme/icon_saturation");  	float relationship_line_opacity = EDITOR_GET("interface/theme/relationship_line_opacity"); @@ -1526,7 +1526,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {  	// HScrollBar  	Ref<Texture2D> 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(SNAME("GuiScrollBg"), SNAME("EditorIcons")), 5, 5, 5, 5, 1, 1, 1, 1)); @@ -1544,7 +1544,7 @@ Ref<Theme> create_editor_theme(const Ref<Theme> p_theme) {  	theme->set_icon("decrement_pressed", "HScrollBar", empty_icon);  	// 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(SNAME("GuiScrollBg"), SNAME("EditorIcons")), 5, 5, 5, 5, 1, 1, 1, 1)); diff --git a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt index 71385315ae..42ef1436f3 100644 --- a/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt +++ b/platform/android/java/editor/src/main/java/org/godotengine/editor/GodotEditor.kt @@ -40,6 +40,7 @@ import android.util.Log  import android.widget.Toast  import androidx.window.layout.WindowMetricsCalculator  import org.godotengine.godot.FullScreenGodotApp +import org.godotengine.godot.GodotLib  import org.godotengine.godot.utils.PermissionsUtil  import org.godotengine.godot.utils.ProcessPhoenix  import java.util.* @@ -90,11 +91,19 @@ open class GodotEditor : FullScreenGodotApp() {  		}  		super.onCreate(savedInstanceState) +	} + +	override fun onGodotSetupCompleted() { +		super.onGodotSetupCompleted() +		val longPressEnabled = enableLongPressGestures() +		val panScaleEnabled = enablePanAndScaleGestures() -		// Enable long press, panning and scaling gestures -		godotFragment?.renderView?.inputHandler?.apply { -			enableLongPress(enableLongPressGestures()) -			enablePanningAndScalingGestures(enablePanAndScaleGestures()) +		runOnUiThread { +			// Enable long press, panning and scaling gestures +			godotFragment?.renderView?.inputHandler?.apply { +				enableLongPress(longPressEnabled) +				enablePanningAndScalingGestures(panScaleEnabled) +			}  		}  	} @@ -210,12 +219,14 @@ open class GodotEditor : FullScreenGodotApp() {  	/**  	 * Enable long press gestures for the Godot Android editor.  	 */ -	protected open fun enableLongPressGestures() = true +	protected open fun enableLongPressGestures() = +		java.lang.Boolean.parseBoolean(GodotLib.getEditorSetting("interface/touchscreen/enable_long_press_as_right_click"))  	/**  	 * Enable pan and scale gestures for the Godot Android editor.  	 */ -	protected open fun enablePanAndScaleGestures() = true +	protected open fun enablePanAndScaleGestures() = +		java.lang.Boolean.parseBoolean(GodotLib.getEditorSetting("interface/touchscreen/enable_pan_and_scale_gestures"))  	override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {  		super.onActivityResult(requestCode, resultCode, data) diff --git a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java index 75a01dc787..d9aab950df 100644 --- a/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java +++ b/platform/android/java/lib/src/org/godotengine/godot/GodotLib.java @@ -190,6 +190,13 @@ public class GodotLib {  	public static native String getGlobal(String p_key);  	/** +	 * Used to access Godot'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 Godot object specified by |p_id|  	 * @param p_id Id of the Godot object to invoke  	 * @param p_method Name of the method to invoke diff --git a/platform/android/java_godot_lib_jni.cpp b/platform/android/java_godot_lib_jni.cpp index e7abe580f1..1a0087e18d 100644 --- a/platform/android/java_godot_lib_jni.cpp +++ b/platform/android/java_godot_lib_jni.cpp @@ -57,6 +57,10 @@  #include <android/native_window_jni.h> +#ifdef TOOLS_ENABLED +#include "editor/editor_settings.h" +#endif +  static JavaClassWrapper *java_class_wrapper = nullptr;  static OS_Android *os_android = nullptr;  static AndroidInputHandler *input_handler = nullptr; @@ -427,6 +431,18 @@ JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv *  	return env->NewStringUTF(GLOBAL_GET(js).operator String().utf8().get_data());  } +JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_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_org_godotengine_godot_GodotLib_callobject(JNIEnv *env, jclass clazz, jlong ID, jstring method, jobjectArray params) {  	Object *obj = ObjectDB::get_instance(ObjectID(ID));  	ERR_FAIL_NULL(obj); diff --git a/platform/android/java_godot_lib_jni.h b/platform/android/java_godot_lib_jni.h index 0020ddffd2..59ab2448d7 100644 --- a/platform/android/java_godot_lib_jni.h +++ b/platform/android/java_godot_lib_jni.h @@ -61,6 +61,7 @@ JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_gyroscope(JNIEnv *env  JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusin(JNIEnv *env, jclass clazz);  JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_focusout(JNIEnv *env, jclass clazz);  JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getGlobal(JNIEnv *env, jclass clazz, jstring path); +JNIEXPORT jstring JNICALL Java_org_godotengine_godot_GodotLib_getEditorSetting(JNIEnv *env, jclass clazz, jstring p_setting_key);  JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_callobject(JNIEnv *env, jclass clazz, jlong ID, jstring method, jobjectArray params);  JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_calldeferred(JNIEnv *env, jclass clazz, jlong ID, jstring method, jobjectArray params);  JNIEXPORT void JNICALL Java_org_godotengine_godot_GodotLib_setVirtualKeyboardHeight(JNIEnv *env, jclass clazz, jint p_height); |