diff options
Diffstat (limited to 'logic/stage.gd')
| -rw-r--r-- | logic/stage.gd | 150 |
1 files changed, 65 insertions, 85 deletions
diff --git a/logic/stage.gd b/logic/stage.gd index 62e0a58..27962c6 100644 --- a/logic/stage.gd +++ b/logic/stage.gd @@ -4,21 +4,10 @@ class_name Stage signal save # (database_entry: Dictionary) signal discard # () -#onready var process_id: LineEdit = get_node("touch_scroll/controls/process_id") -#onready var surgery_id: LineEdit = get_node("touch_scroll/controls/surgery_id") -#onready var date: DatePicker = get_node("touch_scroll/controls/date_picker") -#onready var place: LineEdit = get_node("touch_scroll/controls/place") -#onready var anesthetic: LineEdit = get_node("touch_scroll/controls/anesthetic") -#onready var first_assistant: LineEdit = get_node("touch_scroll/controls/first_assistant") -#onready var type: LineEdit = get_node("touch_scroll/controls/type") -#onready var sub_type: LineEdit = get_node("touch_scroll/controls/sub_type") -#onready var sub_sub_type: LineEdit = get_node("touch_scroll/controls/sub_sub_type") -#onready var pathology: LineEdit = get_node("touch_scroll/controls/pathology") -#onready var intervention: LineEdit = get_node("touch_scroll/controls/intervention") -#onready var is_urgency: Button = get_node("touch_scroll/controls/is_urgency") -#onready var notes: LineEdit = get_node("touch_scroll/controls/notes") -#onready var save_button: Button = get_node("touch_scroll/controls/save") -#onready var discard_button: Button = get_node("touch_scroll/controls/discard") +const POINTER_VELOCITY_DECAYING_FACTOR: float = 2.5 + +var is_pointer_dragging := false +var pointer_drag_velocity := 0.0 onready var process_id: LineEdit = get_node("controls/process_id") onready var surgery_id: LineEdit = get_node("controls/surgery_id") @@ -35,94 +24,46 @@ onready var is_urgency: Button = get_node("controls/is_urgency") onready var notes: LineEdit = get_node("controls/notes") onready var save_button: Button = get_node("controls/save") onready var discard_button: Button = get_node("controls/discard") +onready var v_scroll_bar: VScrollBar = get_v_scrollbar() func _ready(): save_button.connect("pressed", self, "save_action") discard_button.connect("pressed", self, "discard_action") - for it in get_node("controls").get_children(): -# print("%s" % it.name) + it = it as Control match it.name: "date_picker", "save", "discard": - print("- %s" % it.name) - + pass + _: -# "first_assistant": - print("+ %s" % it.name) var drag_sensor = PointerInputSensor.new() + it.add_child(drag_sensor) + 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 + drag_sensor.connect("on_press", self, "pointer_input_handler") + drag_sensor.connect("on_drag", self, "pointer_input_handler") + drag_sensor.connect("on_end_drag", self, "pointer_input_handler") + drag_sensor.connect("on_click", self, "pointer_input_handler") + + it.connect("focus_entered", drag_sensor, "set_mouse_filter", [Control.MOUSE_FILTER_IGNORE]) + it.connect("focus_entered", drag_sensor, "mouse_default_cursor_shape", [Control.CURSOR_IBEAM]) + it.connect("focus_exited", drag_sensor, "set_mouse_filter", [Control.MOUSE_FILTER_STOP]) + it.connect("focus_exited", drag_sensor, "mouse_default_cursor_shape", [Control.CURSOR_ARROW]) + + if it is LineEdit: + it.connect("focus_exited", it, "deselect") -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 - - - - - - + # Apply drag movement inertia. + if is_pointer_dragging == false && abs(pointer_drag_velocity) > 0.5: + pointer_drag_velocity *= clamp((1.0 - POINTER_VELOCITY_DECAYING_FACTOR * delta), 0.0, 1.0) + v_scroll_bar.value -= pointer_drag_velocity * delta func save_action(): @@ -179,3 +120,42 @@ func _notification(what: int): discard_action() +func pointer_input_handler(pointer: PointerInputSensor.PointerInputData): + match pointer.action: + PointerInputSensor.PointerInputAction.ON_PRESS: + is_pointer_dragging = true + + PointerInputSensor.PointerInputAction.ON_DRAG: + is_pointer_dragging = true + pointer_drag_velocity = pointer.velocity.y + v_scroll_bar.value -= pointer.relative_position.y + + PointerInputSensor.PointerInputAction.ON_END_DRAG: + is_pointer_dragging = false + + PointerInputSensor.PointerInputAction.ON_CLICK: + 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) + + |
