Add Android project settings for gesture support

- Include project setting to enable long press for Android devices
- Include project setting to enable pan and scale gestures on Android devices
This commit is contained in:
Fredia Huya-Kouadio 2023-11-03 05:23:20 -07:00 committed by Relintai
parent ae3b43f6ca
commit 6713693291
5 changed files with 29 additions and 0 deletions

View File

@ -3,6 +3,7 @@
<brief_description> <brief_description>
</brief_description> </brief_description>
<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> </description>
<tutorials> <tutorials>
</tutorials> </tutorials>

View File

@ -3,6 +3,7 @@
<brief_description> <brief_description>
</brief_description> </brief_description>
<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> </description>
<tutorials> <tutorials>
</tutorials> </tutorials>

View File

@ -808,6 +808,12 @@
If [code]false[/code], no input will be lost. 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. [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>
<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"> <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. If [code]true[/code], sends mouse input events when tapping or swiping on the touchscreen.
</member> </member>

View File

@ -1619,6 +1619,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))); 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"); MAIN_PRINT("Main: Load Translations and Remaps");
translation_server->setup(); //register translations, load them, etc. translation_server->setup(); //register translations, load them, etc.

View File

@ -120,6 +120,7 @@ import org.pandemoniumengine.pandemonium.plugin.PandemoniumPluginRegistry;
import org.pandemoniumengine.pandemonium.utils.BenchmarkUtils; import org.pandemoniumengine.pandemonium.utils.BenchmarkUtils;
import org.pandemoniumengine.pandemonium.utils.PandemoniumNetUtils; import org.pandemoniumengine.pandemonium.utils.PandemoniumNetUtils;
import org.pandemoniumengine.pandemonium.utils.PermissionsUtil; import org.pandemoniumengine.pandemonium.utils.PermissionsUtil;
import org.pandemoniumengine.pandemonium.input.PandemoniumInputHandler;
public class Pandemonium extends Fragment implements SensorEventListener, IDownloaderClient { public class Pandemonium extends Fragment implements SensorEventListener, IDownloaderClient {
private static final String TAG = Pandemonium.class.getSimpleName(); private static final String TAG = Pandemonium.class.getSimpleName();
@ -331,6 +332,21 @@ public class Pandemonium extends Fragment implements SensorEventListener, IDownl
*/ */
@CallSuper @CallSuper
protected void onPandemoniumSetupCompleted() { protected void onPandemoniumSetupCompleted() {
Log.d(TAG, "onPandemoniumSetupCompleted");
// These properties are defined after Godot setup completion, so we retrieve them here.
boolean longPressEnabled = Boolean.parseBoolean(PandemoniumLib.getGlobal("input_devices/pointing/android/enable_long_press_as_right_click"));
boolean panScaleEnabled = Boolean.parseBoolean(PandemoniumLib.getGlobal("input_devices/pointing/android/enable_pan_and_scale_gestures"));
runOnUiThread(() -> {
PandemoniumView renderView = getRenderView();
PandemoniumInputHandler inputHandler = renderView != null ? renderView.getInputHandler() : null;
if (inputHandler != null) {
inputHandler.enableLongPress(longPressEnabled);
inputHandler.enablePanningAndScalingGestures(panScaleEnabled);
}
});
for (PandemoniumPlugin plugin : pluginRegistry.getAllPlugins()) { for (PandemoniumPlugin plugin : pluginRegistry.getAllPlugins()) {
plugin.onPandemoniumSetupCompleted(); plugin.onPandemoniumSetupCompleted();
} }
@ -345,6 +361,8 @@ public class Pandemonium extends Fragment implements SensorEventListener, IDownl
*/ */
@CallSuper @CallSuper
protected void onPandemoniumMainLoopStarted() { protected void onPandemoniumMainLoopStarted() {
Log.d(TAG, "onPandemoniumMainLoopStarted");
for (PandemoniumPlugin plugin : pluginRegistry.getAllPlugins()) { for (PandemoniumPlugin plugin : pluginRegistry.getAllPlugins()) {
plugin.onPandemoniumMainLoopStarted(); plugin.onPandemoniumMainLoopStarted();
} }