aboutsummaryrefslogtreecommitdiff
path: root/logic/stage.gd
diff options
context:
space:
mode:
authordam <dam@gudinoff>2022-01-01 04:56:58 +0000
committerdam <dam@gudinoff>2022-01-01 04:56:58 +0000
commitc59f89e99c90c0e756cdf780bcbf04d782eb3e6f (patch)
treeafeea78d9d5f68092f61d573dff2f677b1c40aa8 /logic/stage.gd
parent7f0580b6b49a9dbafc54a0190bf573503c54417a (diff)
downloadsurgery-log-c59f89e99c90c0e756cdf780bcbf04d782eb3e6f.tar.zst
surgery-log-c59f89e99c90c0e756cdf780bcbf04d782eb3e6f.zip
Change touch scroll detection to pointer-input-sensor approach using signals/events.
Diffstat (limited to 'logic/stage.gd')
-rw-r--r--logic/stage.gd104
1 files changed, 73 insertions, 31 deletions
diff --git a/logic/stage.gd b/logic/stage.gd
index f7cced4..62e0a58 100644
--- a/logic/stage.gd
+++ b/logic/stage.gd
@@ -37,7 +37,6 @@ onready var save_button: Button = get_node("controls/save")
onready var discard_button: Button = get_node("controls/discard")
-
func _ready():
save_button.connect("pressed", self, "save_action")
discard_button.connect("pressed", self, "discard_action")
@@ -48,19 +47,82 @@ func _ready():
match it.name:
"date_picker", "save", "discard":
print("- %s" % it.name)
-
+
_:
# "first_assistant":
print("+ %s" % it.name)
- var touch_scroll = TouchScroll.new()
- touch_scroll.name = "touch_scroll"
- touch_scroll.click_target_path = "../"
- touch_scroll.scroll_target_path = "../../../"
- touch_scroll.scroll_bar_get_method = "get_v_scrollbar"
- touch_scroll.mouse_default_cursor_shape = Control.CURSOR_IBEAM
- (it as Control).add_child(touch_scroll)
- touch_scroll.anchor_right = 1.0
- touch_scroll.anchor_bottom = 1.0
+ var drag_sensor = PointerInputSensor.new()
+ drag_sensor.name = "drag_sensor"
+ drag_sensor.mouse_default_cursor_shape = Control.CURSOR_IBEAM
+ (it as Control).add_child(drag_sensor)
+ drag_sensor.anchor_right = 1.0
+ drag_sensor.anchor_bottom = 1.0
+
+ drag_sensor.connect("on_press", self, "on_press")
+ drag_sensor.connect("on_drag", self, "on_drag")
+ drag_sensor.connect("on_end_drag", self, "on_end_drag")
+ drag_sensor.connect("on_click", self, "on_click")
+ drag_sensor.on_process = funcref(self, "bazinga")
+
+
+# @DAM Cleanup this code.
+onready var v_scroll_bar: VScrollBar = get_v_scrollbar()
+export var scroll_velocity_decaying_factor: float = 2.5
+var drag_velocity := 0.0
+var is_dragging := false
+
+func bazinga(delta: float, pointer: PointerInputSensor):
+ if (pointer.get_parent() as Control).has_focus():
+ pointer.mouse_filter = Control.MOUSE_FILTER_IGNORE
+ else:
+ pointer.mouse_filter = Control.MOUSE_FILTER_STOP
+
+func _process(delta: float):
+ if is_dragging == false && abs(drag_velocity) > 0.5:
+ drag_velocity *= clamp((1.0 - scroll_velocity_decaying_factor * delta), 0.0, 1.0)
+ v_scroll_bar.value -= drag_velocity * delta
+
+func on_click(pointer: PointerInputSensor.PointerInputData):
+ var target: Control = pointer.target.get_parent()
+ var position := target.get_global_mouse_position() - target.rect_global_position
+
+ var event_touch := InputEventScreenTouch.new()
+ event_touch.index = 0
+ event_touch.position = position
+
+ var event_mouse := InputEventMouseButton.new()
+ event_mouse.button_index = BUTTON_LEFT
+ event_mouse.button_mask = BUTTON_MASK_LEFT
+ event_mouse.position = position
+
+ event_mouse.pressed = true
+ event_touch.pressed = true
+ target._gui_input(event_mouse)
+ target._gui_input(event_touch)
+
+ target.grab_focus()
+
+ event_mouse.pressed = false
+ event_touch.pressed = false
+ target._gui_input(event_mouse)
+ target._gui_input(event_touch)
+
+func on_press(pointer: PointerInputSensor.PointerInputData):
+ is_dragging = true
+
+func on_end_drag(pointer: PointerInputSensor.PointerInputData):
+ is_dragging = false
+
+func on_drag(pointer: PointerInputSensor.PointerInputData):
+ is_dragging = true
+ drag_velocity = pointer.velocity.y
+ v_scroll_bar.value -= pointer.relative_position.y
+
+
+
+
+
+
func save_action():
@@ -91,18 +153,6 @@ func set_stage(entry: Dictionary):
func get_stage() -> Dictionary:
-
-# var entry: Dictionary = Database.instance_entry({
-# "process_id": process_id.text,
-# "surgery_id": surgery_id.text,
-# "date_year": date.get_year(),
-# "date_month": date.get_month(),
-# "date_day": date.get_day(),
-# "place": place.text,
-# "anesthetic": anesthetic.text,
-# "first_assistant": first_assistant.text,
-# "type": type.text,
-# })
# @DAM Simplify all this... avoid creating multiple entries/dictionaries.
var entry: Dictionary = {
"process_id": process_id.text,
@@ -124,14 +174,6 @@ func get_stage() -> Dictionary:
return entry
-# @DAM Testing. Needs all children controllers to have Mouse > Filter : Pass.
-#func _gui_input(event):
-# accept_event()
-# if event is InputEventScreenDrag:
-# self.scroll_vertical -= event.relative.y
-# return
-
-
func _notification(what: int):
if what == MainLoop.NOTIFICATION_WM_GO_BACK_REQUEST:
discard_action()