aboutsummaryrefslogtreecommitdiff
path: root/touch_scroll.gd
diff options
context:
space:
mode:
Diffstat (limited to 'touch_scroll.gd')
-rw-r--r--touch_scroll.gd66
1 files changed, 66 insertions, 0 deletions
diff --git a/touch_scroll.gd b/touch_scroll.gd
new file mode 100644
index 0000000..ea92087
--- /dev/null
+++ b/touch_scroll.gd
@@ -0,0 +1,66 @@
+extends Control
+
+
+func _gui_input(event: InputEvent):
+#func _input(event: InputEvent):
+# return
+ if event is InputEventScreenDrag:
+ self.v_scroll.value -= event.relative.y
+# accept_event()
+
+#func _gui_input(event):
+# accept_event()
+# get_tree().set_input_as_handled()
+# if event is InputEventScreenDrag:
+# get_parent().v_scroll.value -= event.relative.y
+
+
+export(float) var drag_threshold = 5
+onready var touch_enabled = OS.has_touchscreen_ui_hint()
+onready var v_scroll = get_parent().get_v_scroll()
+
+var dragging = false
+var pressed = false
+var last_event
+# must be _input, as _gui_input has bugs, with no touch.pressed = false events
+# see: https://github.com/godotengine/godot/issues/16761
+func _input_disabled(event):
+#func _gui_input(event):
+
+ if not visible:
+ return
+
+ if not touch_enabled:
+ return
+
+ if event is InputEventScreenDrag:
+ accept_event()
+ if event.speed == Vector2():
+ # we're on a device and speed is broken
+ # see: https://github.com/godotengine/godot/issues/3623
+ event.speed = event.relative
+ if abs(event.speed.y) >= drag_threshold:
+ # scroll the list
+ dragging = true
+ v_scroll.value -= event.relative.y
+ return
+
+ if event is InputEventScreenTouch:
+ if event.index == 0:
+ accept_event()
+ if dragging && event.pressed == false:
+ # prints("end drag")
+ dragging = false
+ pressed = false
+ else:
+ if event.pressed && pressed == false:
+ # prints("touch start")
+ pressed = true
+ # TODO: prevent select highlight
+ elif !event.pressed && pressed == true:
+ # prints("touch end and accept")
+ pressed = false
+ var ev = InputEventAction.new()
+ ev.action = "ui_accept"
+ ev.pressed = true
+ Input.parse_input_event(ev)