Skip to content

Commit

Permalink
Merge pull request godotengine#84409 from m4gr3d/add_android_gestures…
Browse files Browse the repository at this point in the history
…_project_settings

[3.x] Add Android project settings for gesture support
  • Loading branch information
akien-mga committed Dec 13, 2023
2 parents 96bc1dc + e9045a6 commit 4c4cb12
Show file tree
Hide file tree
Showing 5 changed files with 29 additions and 0 deletions.
1 change: 1 addition & 0 deletions doc/classes/InputEventMagnifyGesture.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<brief_description>
</brief_description>
<description>
[b]Note:[/b] On Android, this requires the [member ProjectSettings.input_devices/pointing/android/enable_pan_and_scale_gestures] project setting to be enabled.
</description>
<tutorials>
</tutorials>
Expand Down
1 change: 1 addition & 0 deletions doc/classes/InputEventPanGesture.xml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
<brief_description>
</brief_description>
<description>
[b]Note:[/b] On Android, this requires the [member ProjectSettings.input_devices/pointing/android/enable_pan_and_scale_gestures] project setting to be enabled.
</description>
<tutorials>
</tutorials>
Expand Down
6 changes: 6 additions & 0 deletions doc/classes/ProjectSettings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -669,6 +669,12 @@
If [code]false[/code], no input will be lost.
[b]Note:[/b] You should in nearly all cases prefer the [code]false[/code] setting. The legacy behavior is to enable supporting old projects that rely on the old logic, without changes to script.
</member>
<member name="input_devices/pointing/android/enable_long_press_as_right_click" type="bool" setter="" getter="" default="false">
If [code]true[/code], long press events on an Android touchscreen are transformed into right click events.
</member>
<member name="input_devices/pointing/android/enable_pan_and_scale_gestures" type="bool" setter="" getter="" default="false">
If [code]true[/code], multi-touch pan and scale gestures are enabled on Android devices.
</member>
<member name="input_devices/pointing/emulate_mouse_from_touch" type="bool" setter="" getter="" default="true">
If [code]true[/code], sends mouse input events when tapping or swiping on the touchscreen.
</member>
Expand Down
3 changes: 3 additions & 0 deletions main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1579,6 +1579,9 @@ Error Main::setup2(Thread::ID p_main_tid_override) {
id->set_emulate_mouse_from_touch(bool(GLOBAL_DEF("input_devices/pointing/emulate_mouse_from_touch", true)));
}

GLOBAL_DEF("input_devices/pointing/android/enable_long_press_as_right_click", false);
GLOBAL_DEF("input_devices/pointing/android/enable_pan_and_scale_gestures", false);

MAIN_PRINT("Main: Load Translations and Remaps");

translation_server->setup(); //register translations, load them, etc.
Expand Down
18 changes: 18 additions & 0 deletions platform/android/java/lib/src/org/godotengine/godot/Godot.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
import static android.content.Context.WINDOW_SERVICE;

import org.godotengine.godot.input.GodotEditText;
import org.godotengine.godot.input.GodotInputHandler;
import org.godotengine.godot.io.directory.DirectoryAccessHandler;
import org.godotengine.godot.io.file.FileAccessHandler;
import org.godotengine.godot.plugin.GodotPlugin;
Expand Down Expand Up @@ -334,6 +335,21 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in
*/
@CallSuper
protected void onGodotSetupCompleted() {
Log.d(TAG, "OnGodotSetupCompleted");

// These properties are defined after Godot setup completion, so we retrieve them here.
boolean longPressEnabled = Boolean.parseBoolean(GodotLib.getGlobal("input_devices/pointing/android/enable_long_press_as_right_click"));
boolean panScaleEnabled = Boolean.parseBoolean(GodotLib.getGlobal("input_devices/pointing/android/enable_pan_and_scale_gestures"));

runOnUiThread(() -> {
GodotView renderView = getRenderView();
GodotInputHandler inputHandler = renderView != null ? renderView.getInputHandler() : null;
if (inputHandler != null) {
inputHandler.enableLongPress(longPressEnabled);
inputHandler.enablePanningAndScalingGestures(panScaleEnabled);
}
});

for (GodotPlugin plugin : pluginRegistry.getAllPlugins()) {
plugin.onGodotSetupCompleted();
}
Expand All @@ -348,6 +364,8 @@ protected void onGodotSetupCompleted() {
*/
@CallSuper
protected void onGodotMainLoopStarted() {
Log.d(TAG, "OnGodotMainLoopStarted");

for (GodotPlugin plugin : pluginRegistry.getAllPlugins()) {
plugin.onGodotMainLoopStarted();
}
Expand Down

0 comments on commit 4c4cb12

Please sign in to comment.