diff options
| author | dam <dam@gudinoff> | 2022-02-17 00:30:16 +0000 |
|---|---|---|
| committer | dam <dam@gudinoff> | 2022-02-17 00:30:16 +0000 |
| commit | 48a26128f175047528fcc1c96590f1a7bbc281eb (patch) | |
| tree | 03cebc078fd30f74da8fdce4469055d9b70b3985 /touch_vertical_container | |
| parent | 00825f2a5664000fa98d36922c0c329b052a724f (diff) | |
| download | surgery-log-48a26128f175047528fcc1c96590f1a7bbc281eb.tar.zst surgery-log-48a26128f175047528fcc1c96590f1a7bbc281eb.zip | |
Prototype with custom option set control.
Diffstat (limited to 'touch_vertical_container')
| -rw-r--r-- | touch_vertical_container/touch_vertical_container.gd | 35 |
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 |
