class_name AudioClip extends Panel @export var clip_name: String = "New Audio Clip" @export var start_time: float = 0.0 @export var end_time: float = 0.0 @export var track_idx: int = 0 signal on_selected signal on_deselected signal on_double_click var timeline: Timeline var dragging: bool var selected: bool func _ready(): timeline = get_parent() func _input(event): var rect = get_global_rect() var mouse_position = get_global_mouse_position() if event is InputEventMouseButton: if selected and event.double_click: print("double clicked!") on_double_click.emit() return if event.pressed and event.button_mask == MOUSE_BUTTON_LEFT: if selected: Input.set_default_cursor_shape(Input.CursorShape.CURSOR_MOVE) dragging = true else: dragging = false Input.set_default_cursor_shape(Input.CursorShape.CURSOR_ARROW) if rect.has_point(mouse_position): selected = true make_selected() return else: selected = false make_deselected() return if !event.pressed and dragging: dragging = false Input.set_default_cursor_shape(Input.CursorShape.CURSOR_ARROW) if selected and dragging: if event is InputEventMouseMotion: var movement = event.relative / timeline.get_pixels_per_unit() * timeline.time_interval var mouse_position_timeline = (timeline.get_local_mouse_position().x / timeline.get_pixels_per_unit()) * timeline.time_interval var mouse_position_snapped = snapped(mouse_position_timeline, timeline.time_interval) var track = timeline.get_track_idx_by_y(event.position.y) if track != -1: track_idx = track if event.is_command_or_control_pressed(): var clip_length = end_time - start_time start_time = mouse_position_snapped end_time = start_time + clip_length else: start_time += movement.x end_time += movement.x timeline.queue_sort() pass func make_selected(): on_selected.emit() var color = get_theme_color("selected_modulate", "AudioClip") modulate = color pass func make_deselected(): on_deselected.emit() var color = get_theme_color("deselected_modulate", "AudioClip") modulate = color pass