aboutsummaryrefslogtreecommitdiff
path: root/touch_vertical_container/touch_vertical_container.gd
diff options
context:
space:
mode:
Diffstat (limited to 'touch_vertical_container/touch_vertical_container.gd')
-rw-r--r--touch_vertical_container/touch_vertical_container.gd35
1 files changed, 31 insertions, 4 deletions
diff --git a/touch_vertical_container/touch_vertical_container.gd b/touch_vertical_container/touch_vertical_container.gd
index f9c43e9..7c2ba84 100644
--- a/touch_vertical_container/touch_vertical_container.gd
+++ b/touch_vertical_container/touch_vertical_container.gd
@@ -27,8 +27,8 @@ func _ready():
sensor.connect("on_end_drag", self, "pointer_input_on_end_drag_handler")
sensor.connect("on_click", self, "pointer_input_on_click_handler")
- it.connect("focus_entered", sensor, "set_visible", [false])
- it.connect("focus_exited", sensor, "set_visible", [true])
+# it.connect("focus_entered", sensor, "set_visible", [false])
+# it.connect("focus_exited", sensor, "set_visible", [true])
func _process(delta: float):
@@ -54,6 +54,33 @@ func pointer_input_on_end_drag_handler(pointer: PointerInputSensor.PointerInputD
func pointer_input_on_click_handler(pointer: PointerInputSensor.PointerInputData):
- pointer.target.get_parent().grab_focus()
-
+ propagate_click(pointer.target.get_parent(), pointer)
+
+
+# @DAM Maybe replace this with a stack of next items to process approach.
+func propagate_click(control: Control, pointer: PointerInputSensor.PointerInputData) -> bool:
+ if control is PointerInputSensor || control.mouse_filter == MOUSE_FILTER_IGNORE || control.visible == false:
+ return false
+ var click_processed := false
+ if control.get_global_rect().has_point(pointer.current_position):
+ var children = control.get_children()
+ children.invert() # @DAM Use inverted index for loop to avoid invert() operation.
+ for child in children:
+ if child is Control:
+ click_processed = click_processed || propagate_click(child, pointer)
+ if click_processed == true:
+ break
+
+ if click_processed == false:
+ if control is CheckBox || control is CheckButton:
+ control.pressed = !control.pressed
+ control.grab_focus()
+ control.emit_signal("button_down")
+ control.emit_signal("pressed")
+ control.emit_signal("button_up")
+ click_processed = true
+ pointer.target.visible = false
+ control.connect("focus_exited", pointer.target, "set_visible", [true])
+
+ return click_processed