You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

71 lines
2.0 KiB

tool
extends ScrollContainer
# store last attempts since godot sometimes misses drop events
var _is_drag_receiving = false
var _last_event_button_drop_attempt = ''
var _mouse_exited = false
# todo, getting timeline like this is prone to fail someday
onready var timeline_editor = get_parent()
func _ready():
connect("mouse_entered", self, '_on_mouse_entered')
connect("mouse_exited", self, '_on_mouse_exited')
connect("gui_input", self, '_on_gui_input')
func can_drop_data(position, data):
if data != null and data is Dictionary and data.has("source"):
if data["source"] == "EventButton":
if _last_event_button_drop_attempt.empty():
timeline_editor.create_drag_and_drop_event(data["event_id"])
_is_drag_receiving = true
_last_event_button_drop_attempt = data["event_id"]
return true
return false
func cancel_drop():
_is_drag_receiving = false
_last_event_button_drop_attempt = ''
timeline_editor.cancel_drop_event()
func drop_data(position, data):
# add event
if (data["source"] == "EventButton"):
timeline_editor.drop_event()
_is_drag_receiving = false
_last_event_button_drop_attempt = ''
func _on_mouse_exited():
if _is_drag_receiving and not _mouse_exited:
var preview_label = Label.new()
preview_label.text = "Cancel"
set_drag_preview(preview_label)
_mouse_exited = true
func _on_mouse_entered():
if _is_drag_receiving and _mouse_exited:
var preview_label = Label.new()
preview_label.text = "Insert Event"
set_drag_preview(preview_label)
_mouse_exited = false
func _input(event):
if (event is InputEventMouseButton and is_visible_in_tree() and event.button_index == BUTTON_LEFT):
if (_mouse_exited and _is_drag_receiving):
cancel_drop()
func _on_gui_input(event):
# godot sometimes misses drop events
if (event is InputEventMouseButton and event.button_index == BUTTON_LEFT):
if (_is_drag_receiving):
if (_last_event_button_drop_attempt != ''):
drop_data(Vector2.ZERO, { "source": "EventButton", "event_id": _last_event_button_drop_attempt} )
_is_drag_receiving = false