Timeline enhancements

This commit is contained in:
2025-02-16 15:07:50 +01:00
parent 231b0d4936
commit 49c0e6c071
10 changed files with 149 additions and 58 deletions

View File

@@ -1,4 +1,4 @@
[gd_resource type="Theme" load_steps=227 format=3 uid="uid://b8rk41gjual2b"]
[gd_resource type="Theme" load_steps=228 format=3 uid="uid://b8rk41gjual2b"]
[ext_resource type="FontFile" uid="uid://501bous51s3p" path="res://Assets/Fonts/Inter-Regular.ttf" id="1_a74l0"]
[ext_resource type="Texture2D" uid="uid://blqywcg2e22in" path="res://Assets/Icons/checked.svg" id="2_jlkvh"]
@@ -1700,7 +1700,7 @@ corner_radius_bottom_left = 3
corner_detail = 3
anti_aliasing = false
[sub_resource type="Image" id="Image_3ih7l"]
[sub_resource type="Image" id="Image_8w8ju"]
data = {
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 3, 255, 255, 255, 41, 255, 255, 255, 67, 255, 255, 255, 67, 255, 255, 255, 40, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 41, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 40, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 67, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 67, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 67, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 67, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 40, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 74, 255, 255, 255, 40, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 3, 255, 255, 255, 40, 255, 255, 255, 67, 255, 255, 255, 67, 255, 255, 255, 40, 255, 255, 255, 3, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
"format": "RGBA8",
@@ -1710,7 +1710,7 @@ data = {
}
[sub_resource type="ImageTexture" id="ImageTexture_bk0hb"]
image = SubResource("Image_3ih7l")
image = SubResource("Image_8w8ju")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_0hke8"]
content_margin_left = 7.0
@@ -1723,7 +1723,7 @@ texture_margin_top = 6.0
texture_margin_right = 6.0
texture_margin_bottom = 6.0
[sub_resource type="Image" id="Image_1xahl"]
[sub_resource type="Image" id="Image_tx7cq"]
data = {
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 6, 248, 248, 248, 102, 249, 249, 249, 168, 249, 249, 249, 168, 248, 248, 248, 101, 213, 213, 213, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 248, 248, 248, 102, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 186, 248, 248, 248, 101, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 249, 249, 249, 168, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 168, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 249, 249, 249, 168, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 186, 248, 248, 248, 168, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 248, 248, 248, 101, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 186, 249, 249, 249, 186, 250, 250, 250, 99, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 213, 213, 213, 6, 248, 248, 248, 101, 249, 249, 249, 168, 248, 248, 248, 168, 250, 250, 250, 99, 213, 213, 213, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
"format": "RGBA8",
@@ -1733,7 +1733,7 @@ data = {
}
[sub_resource type="ImageTexture" id="ImageTexture_uc42h"]
image = SubResource("Image_1xahl")
image = SubResource("Image_tx7cq")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_asndq"]
content_margin_left = 6.0
@@ -1746,7 +1746,7 @@ texture_margin_top = 5.0
texture_margin_right = 5.0
texture_margin_bottom = 5.0
[sub_resource type="Image" id="Image_pbefk"]
[sub_resource type="Image" id="Image_8almr"]
data = {
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 213, 213, 213, 6, 180, 180, 180, 102, 181, 181, 181, 168, 181, 181, 181, 168, 179, 179, 179, 101, 170, 170, 170, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 180, 180, 180, 102, 180, 180, 180, 186, 180, 180, 180, 186, 180, 180, 180, 186, 180, 180, 180, 186, 179, 179, 179, 101, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 181, 181, 181, 168, 180, 180, 180, 186, 180, 180, 180, 186, 180, 180, 180, 186, 180, 180, 180, 186, 181, 181, 181, 168, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 181, 181, 181, 168, 180, 180, 180, 186, 180, 180, 180, 186, 180, 180, 180, 186, 180, 180, 180, 186, 179, 179, 179, 168, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 179, 179, 179, 101, 180, 180, 180, 186, 180, 180, 180, 186, 180, 180, 180, 186, 180, 180, 180, 186, 181, 181, 181, 99, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 170, 170, 170, 6, 179, 179, 179, 101, 181, 181, 181, 168, 179, 179, 179, 168, 181, 181, 181, 99, 170, 170, 170, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
"format": "RGBA8",
@@ -1756,7 +1756,7 @@ data = {
}
[sub_resource type="ImageTexture" id="ImageTexture_y6fi8"]
image = SubResource("Image_pbefk")
image = SubResource("Image_8almr")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_7amsq"]
content_margin_left = 7.0
@@ -1769,7 +1769,7 @@ texture_margin_top = 6.0
texture_margin_right = 6.0
texture_margin_bottom = 6.0
[sub_resource type="Image" id="Image_gf5m0"]
[sub_resource type="Image" id="Image_kfbnc"]
data = {
"data": PackedByteArray(255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 19, 255, 255, 255, 19, 255, 255, 255, 7, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 21, 255, 255, 255, 21, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 19, 255, 255, 255, 21, 255, 255, 255, 21, 255, 255, 255, 19, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 7, 255, 255, 255, 19, 255, 255, 255, 19, 255, 255, 255, 6, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0, 255, 255, 255, 0),
"format": "RGBA8",
@@ -1779,7 +1779,7 @@ data = {
}
[sub_resource type="ImageTexture" id="ImageTexture_lfhcu"]
image = SubResource("Image_gf5m0")
image = SubResource("Image_kfbnc")
[sub_resource type="StyleBoxTexture" id="StyleBoxTexture_tef5f"]
content_margin_left = 0.0
@@ -2437,6 +2437,15 @@ border_color = Color(0.337255, 0.619608, 1, 1)
corner_detail = 1
anti_aliasing = false
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_ek1lj"]
content_margin_left = 6.0
content_margin_top = 4.0
content_margin_right = 6.0
content_margin_bottom = 4.0
bg_color = Color(0.116078, 0.116078, 0.116078, 1)
corner_detail = 3
anti_aliasing = false
[sub_resource type="StyleBoxFlat" id="StyleBoxFlat_qr21i"]
content_margin_left = 12.0
content_margin_top = 6.0
@@ -4415,8 +4424,11 @@ TextEdit/styles/read_only = SubResource("StyleBoxFlat_6ucq2")
ThemeEditor/colors/preview_picker_overlay_color = Color(0.1, 0.1, 0.1, 0.25)
ThemeEditor/styles/preview_picker_label = SubResource("StyleBoxFlat_jtsa3")
ThemeEditor/styles/preview_picker_overlay = SubResource("StyleBoxFlat_qixj3")
Timeline/colors/line_primary_color = Color(0.517184, 0.517184, 0.517184, 1)
Timeline/colors/line_primary_color = Color(0.4, 0.4, 0.4, 1)
Timeline/colors/line_secondary_color = Color(0.2, 0.2, 0.2, 1)
Timeline/constants/time_label_offset_x = 30
Timeline/constants/time_label_offset_y = 20
Timeline/styles/top_panel = SubResource("StyleBoxFlat_ek1lj")
TooltipLabel/colors/font_color = Color(0.893137, 0.893137, 0.893137, 1)
TooltipLabel/colors/font_shadow_color = Color(0, 0, 0, 0)
TooltipPanel/styles/panel = SubResource("StyleBoxFlat_qr21i")

View File

@@ -14,7 +14,7 @@ dest_files=["res://.godot/imported/Inter-Regular.ttf-2ec9900abaf32134c660163ed92
Rendering=null
antialiasing=1
generate_mipmaps=false
generate_mipmaps=true
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8

Binary file not shown.

View File

@@ -0,0 +1,40 @@
[remap]
importer="font_data_dynamic"
type="FontFile"
uid="uid://ctw3g5gundhpj"
path="res://.godot/imported/InterVariable.ttf-09b44e72d6af299ef8705b08a9e9ca36.fontdata"
[deps]
source_file="res://Assets/Fonts/InterVariable.ttf"
dest_files=["res://.godot/imported/InterVariable.ttf-09b44e72d6af299ef8705b08a9e9ca36.fontdata"]
[params]
Rendering=null
antialiasing=1
generate_mipmaps=true
disable_embedded_bitmaps=true
multichannel_signed_distance_field=false
msdf_pixel_range=8
msdf_size=48
allow_system_fallback=true
force_autohinter=false
hinting=1
subpixel_positioning=1
oversampling=0.0
Fallbacks=null
fallbacks=[]
Compress=null
compress=true
preload=[{
"chars": [],
"glyphs": [],
"name": "New Configuration",
"size": Vector2i(16, 0),
"variation_embolden": 0.0
}]
language_support={}
script_support={}
opentype_features={}

View File

@@ -1,7 +1,15 @@
[gd_scene load_steps=3 format=3 uid="uid://c3kajrpp2ux7"]
[gd_scene load_steps=5 format=3 uid="uid://c3kajrpp2ux7"]
[ext_resource type="Theme" uid="uid://b8rk41gjual2b" path="res://Assets/DefaultTheme.tres" id="1_tbi88"]
[ext_resource type="Texture2D" uid="uid://bwfbs4jxbia3o" path="res://Assets/Icons/microphone_track.svg" id="2_r2pin"]
[ext_resource type="FontFile" uid="uid://ctw3g5gundhpj" path="res://Assets/Fonts/InterVariable.ttf" id="3_12y3l"]
[sub_resource type="FontVariation" id="FontVariation_lbdn3"]
base_font = ExtResource("3_12y3l")
variation_opentype = {
1869640570: 14,
2003265652: 500
}
[node name="Track" type="Control"]
clip_children = 1
@@ -63,6 +71,7 @@ expand_mode = 2
[node name="TrackName" type="LineEdit" parent="PanelContainer/HBoxContainer/Body/HBoxContainer/NameIconControls/IconAndName"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_fonts/font = SubResource("FontVariation_lbdn3")
text = "Track Name"
expand_to_text_length = true
context_menu_enabled = false

View File

@@ -54,11 +54,11 @@ layout_mode = 2
[node name="CurrentTime" type="Label" parent="HBoxContainer/Time/HBoxContainer"]
layout_mode = 2
text = "00:00.00"
text = "00:00:00.00"
[node name="VSeparator" type="VSeparator" parent="HBoxContainer/Time/HBoxContainer"]
layout_mode = 2
[node name="Length" type="Label" parent="HBoxContainer/Time/HBoxContainer"]
layout_mode = 2
text = "00:00.00"
text = "00:00:00.00"

View File

@@ -2,21 +2,70 @@
class_name Timeline
extends Control
@export var track_list: VBoxContainer
@export var font_scale: float = 1.0
@export var time_offset: float = 0.0
@export var grid_space_seconds: float = 0.25
@export var label_interval_seconds: float = 1.0
@export var time_interval: float = 1000.0 # 1 second
@export var grid_space_ms: float = 250 # 0.25 seconds
@export var label_interval_ms: float = 1000.0 # 1 second
@export var line_thickness: int = 1
@export var primary_line_step: int = 4
@export var major_line_step: int = 4
@export var cursor_width: int = 8
@export var base_scale: float = 2.0
@export var zoom: float = 1.0
@export var start_time: float = 0.0
@export var end_time: float = 10000.0 # 10 seconds
@export var min_zoom: float = 0.1
func format_time_ms_hours(ms: float) -> String:
var total_seconds = ms / 1000
var hours = int(total_seconds / 3600)
var minutes = int(total_seconds / 60) % 60
var seconds = int(total_seconds) % 60
var milliseconds = fmod(ms, 1000.0)
return "%02d:%02d:%02d.%03d" % [hours, minutes, seconds, milliseconds]
func format_time_ms_minutes(ms: float) -> String:
var total_seconds = ms / 1000
var minutes = int(total_seconds / 60) % 60
var seconds = int(total_seconds) % 60
var milliseconds = fmod(ms, 1000.0)
return "%02d:%02d.%03d" % [minutes, seconds, milliseconds]
func _draw():
draw_intervals()
# draw_top_time_labels()
var primary_color = get_theme_color("line_primary_color", "Timeline")
var secondary_color = get_theme_color("line_secondary_color", "Timeline")
var font = get_theme_default_font()
var font_size = get_theme_default_font_size()
var time_label_offset_x = get_theme_constant("time_label_offset_x", "Timeline")
var time_label_offset_y = get_theme_constant("time_label_offset_y", "Timeline")
# top panel
var stylebox = get_theme_stylebox("top_panel", "Timeline")
draw_style_box(stylebox, Rect2(0.0, 0.0, size.x, 28.0))
var timeline_y := size.y
var screen_width := size.x
var pixels_per_unit := 50.0 * zoom
var start := (time_offset / pixels_per_unit) - 1
var end := start + (screen_width / pixels_per_unit) + 2
for t in range(int(start), int(end) + 1):
var x := t * pixels_per_unit - time_offset
if x >= 0 and x <= screen_width:
if t % 4 == 0:
draw_line(Vector2(x, 28.0), Vector2(x, size.y), primary_color, 2)
var time = t * int(time_interval)
draw_string(font, Vector2(x - time_label_offset_x, time_label_offset_y), format_time_ms_minutes(time), HORIZONTAL_ALIGNMENT_CENTER, -1, font_size, primary_color)
else:
draw_line(Vector2(x, 28.0), Vector2(x, timeline_y), secondary_color, 1)
pass
func _gui_input(event):
@@ -28,44 +77,11 @@ func _gui_input(event):
zoom *= zoom_factor
queue_redraw()
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_WHEEL_LEFT:
time_offset -= 0.1 / zoom
time_offset -= 50 / zoom
queue_redraw()
if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_WHEEL_RIGHT:
time_offset += 0.1 / zoom
time_offset += 50 / zoom
queue_redraw()
zoom = max(min_zoom, zoom)
time_offset = max(0.0, time_offset)
func draw_intervals():
var font = get_theme_default_font()
var font_size = get_theme_default_font_size()
var current_width = size.x
var current_height = size.y
var primary_color = get_theme_color("line_primary_color", "Timeline")
var secondary_color = get_theme_color("line_secondary_color", "Timeline")
var interval = grid_space_seconds * base_scale * zoom * current_width
var first_line_index = roundi(time_offset / grid_space_seconds)
var first_line_position = -(time_offset - (first_line_index * grid_space_seconds)) * interval
var line_count = ceil(current_width / interval) + 4
var current_position = first_line_position
for i in range(first_line_index, first_line_index + line_count):
if current_position > current_width:
break
if current_position >= -interval:
var color = secondary_color
if i % primary_line_step == 0:
draw_string(font, Vector2(current_position, 0), str(i * grid_space_seconds), HORIZONTAL_ALIGNMENT_CENTER, -1, font_size * font_scale)
color = primary_color
draw_line(Vector2(current_position, 0), Vector2(current_position, current_height), color, line_thickness)
current_position += interval

View File

@@ -58,6 +58,7 @@ grow_vertical = 2
[node name="MenuBar" type="MenuBar" parent="VBoxContainer"]
layout_mode = 2
size_flags_horizontal = 3
theme_override_font_sizes/font_size = 13
flat = true
[node name="File" type="PopupMenu" parent="VBoxContainer/MenuBar"]
@@ -146,9 +147,10 @@ layout = SubResource("Resource_20kxa")
[node name="Tracks" parent="VBoxContainer/VSplitContainer/HSplitContainer/LeftDock" instance=ExtResource("5_rgxdu")]
layout_mode = 2
[node name="Timeline" parent="VBoxContainer/VSplitContainer/HSplitContainer" instance=ExtResource("7_xu70y")]
[node name="Timeline" parent="VBoxContainer/VSplitContainer/HSplitContainer" node_paths=PackedStringArray("track_list") instance=ExtResource("7_xu70y")]
layout_mode = 2
size_flags_vertical = 3
track_list = NodePath("../LeftDock/Tracks/VBoxContainer/TrackList")
[node name="BottomDock" type="Container" parent="VBoxContainer/VSplitContainer"]
visible = false
@@ -177,3 +179,5 @@ grow_horizontal = 2
grow_vertical = 2
mouse_filter = 2
theme_override_styles/panel = SubResource("StyleBoxFlat_3f3qp")
[editable path="VBoxContainer/VSplitContainer/HSplitContainer/LeftDock/Tracks"]

View File

@@ -11,7 +11,7 @@ grow_horizontal = 2
grow_vertical = 2
size_flags_horizontal = 3
script = ExtResource("1_h2mev")
base_scale = 0.05
end_time = 4000.0
[node name="ScrollBar" type="HScrollBar" parent="."]
custom_minimum_size = Vector2(0, 20)
@@ -25,7 +25,7 @@ grow_horizontal = 2
grow_vertical = 0
[node name="Panel" type="Panel" parent="."]
modulate = Color(0.329158, 0.329158, 0.329158, 1)
modulate = Color(0.674815, 0.674815, 0.674814, 1)
show_behind_parent = true
layout_mode = 1
anchors_preset = 15

View File

@@ -23,10 +23,20 @@ grow_vertical = 2
[node name="TrackList" type="VBoxContainer" parent="VBoxContainer"]
custom_minimum_size = Vector2(128, 0)
layout_mode = 2
size_flags_vertical = 3
[node name="Track" parent="VBoxContainer/TrackList" instance=ExtResource("1_ueogm")]
layout_mode = 2
[node name="Track2" parent="VBoxContainer/TrackList" instance=ExtResource("1_ueogm")]
layout_mode = 2
[node name="Track3" parent="VBoxContainer/TrackList" instance=ExtResource("1_ueogm")]
layout_mode = 2
[node name="Track4" parent="VBoxContainer/TrackList" instance=ExtResource("1_ueogm")]
layout_mode = 2
[node name="AddTrack" type="MenuButton" parent="VBoxContainer"]
layout_mode = 2
icon = ExtResource("2_rekuu")