Finalize audio clip movement, fix being able to drag audio clips out of bounds.

This commit is contained in:
2025-02-16 22:12:22 +01:00
parent cac8c85dec
commit 7301a65acd
3 changed files with 33 additions and 12 deletions

View File

@@ -15,6 +15,9 @@ var timeline: Timeline
var dragging: bool var dragging: bool
var selected: bool var selected: bool
var accumulated_movement := 0.0
var was_snapping := false
func _ready(): func _ready():
timeline = get_parent() timeline = get_parent()
%ClipName.text = clip_name %ClipName.text = clip_name
@@ -50,10 +53,7 @@ func _input(event):
if selected and dragging: if selected and dragging:
if event is InputEventMouseMotion: if event is InputEventMouseMotion:
var movement = event.relative / timeline.get_pixels_per_unit() * timeline.time_interval var movement_time = event.relative.x / 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) var track = timeline.get_track_idx_by_y(event.position.y)
@@ -61,12 +61,28 @@ func _input(event):
track_idx = track track_idx = track
if event.is_command_or_control_pressed(): if event.is_command_or_control_pressed():
var clip_length = end_time - start_time if not was_snapping:
start_time = mouse_position_snapped var clip_length = end_time - start_time
end_time = start_time + clip_length start_time = snapped(start_time, timeline.time_interval)
end_time = start_time + clip_length
accumulated_movement = 0
was_snapping = true
accumulated_movement += movement_time
var snapped_movement = snapped(accumulated_movement, timeline.time_interval)
if snapped_movement != 0:
if start_time + snapped_movement < 0:
return
start_time += snapped_movement
end_time += snapped_movement
accumulated_movement -= snapped_movement
else: else:
start_time += movement.x if start_time + movement_time < 0:
end_time += movement.x return
start_time += movement_time
end_time += movement_time
was_snapping = false
timeline.queue_sort() timeline.queue_sort()
pass pass

View File

@@ -35,6 +35,11 @@ func format_time_ms_minutes(ms: float) -> String:
var milliseconds = fmod(ms, 1000.0) var milliseconds = fmod(ms, 1000.0)
return "%02d:%02d.%03d" % [minutes, seconds, milliseconds] return "%02d:%02d.%03d" % [minutes, seconds, milliseconds]
func _ready():
await get_tree().process_frame
queue_redraw()
pass
func get_track_idx_by_y(y: float): func get_track_idx_by_y(y: float):
var idx = 0 var idx = 0
@@ -133,14 +138,13 @@ func _gui_input(event):
time_offset = max(0.0, time_offset) time_offset = max(0.0, time_offset)
func local_x_to_timeline(x: float) -> float: func local_x_to_timeline(x: float) -> float:
return (x / get_pixels_per_unit()) * time_interval + time_offset return (x + time_offset) / get_pixels_per_unit() * time_interval
func clip_dropped(at_position: Vector2, clip_name: String, clip_start_time: float, clip_end_time: float): func clip_dropped(at_position: Vector2, clip_name: String, clip_start_time: float, clip_end_time: float):
var local_position = at_position - global_position var local_position = at_position - global_position
var timeline_position = local_x_to_timeline(local_position.x) var timeline_position = local_x_to_timeline(local_position.x)
print(timeline_position)
print(time_offset)
var track_idx = get_track_idx_by_y(at_position.y) var track_idx = get_track_idx_by_y(at_position.y)
add_audio_clip(clip_name, track_idx, timeline_position + clip_start_time, timeline_position + clip_end_time) add_audio_clip(clip_name, track_idx, timeline_position + clip_start_time, timeline_position + clip_end_time)
pass pass

View File

@@ -31,6 +31,7 @@ layout_mode = 2
script = null script = null
[node name="Track2" parent="VBoxContainer/TrackList" instance=ExtResource("1_ueogm")] [node name="Track2" parent="VBoxContainer/TrackList" instance=ExtResource("1_ueogm")]
custom_minimum_size = Vector2(128, 74)
layout_mode = 2 layout_mode = 2
script = null script = null