1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-23 14:03:13 +00:00

Merge branch 'Orama-Interactive:master' into resource

This commit is contained in:
Variable 2024-09-01 13:52:22 +05:00 committed by GitHub
commit c4755b2628
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
7 changed files with 134 additions and 55 deletions

View file

@ -43,6 +43,7 @@ Stable versions:
- [GitHub Pages (Web)](https://orama-interactive.github.io/Pixelorama/) - [GitHub Pages (Web)](https://orama-interactive.github.io/Pixelorama/)
- [Flathub (Linux)](https://flathub.org/apps/details/com.orama_interactive.Pixelorama) - [Flathub (Linux)](https://flathub.org/apps/details/com.orama_interactive.Pixelorama)
- [Snap Store (Linux)](https://snapcraft.io/pixelorama) - [Snap Store (Linux)](https://snapcraft.io/pixelorama)
- WinGet (Windows) - `winget install pixelorama`
You can also find early access builds in the [GitHub Actions page](https://github.com/Orama-Interactive/Pixelorama/actions). There's also a [Web version available](https://orama-interactive.github.io/Pixelorama/early_access/). You can also find early access builds in the [GitHub Actions page](https://github.com/Orama-Interactive/Pixelorama/actions). There's also a [Web version available](https://orama-interactive.github.io/Pixelorama/early_access/).
Keep in mind that these versions will have bugs and are unstable. Unless you're interested in testing the main branch of Pixelorama, it's recommended that you stick to a stable version. Keep in mind that these versions will have bugs and are unstable. Unless you're interested in testing the main branch of Pixelorama, it's recommended that you stick to a stable version.

View file

@ -544,6 +544,10 @@ msgstr ""
msgid "Resize:" msgid "Resize:"
msgstr "" msgstr ""
#. Found in the export dialog, when exporting a jpeg file. Refers to the quality of the exported file.
msgid "Quality:"
msgstr ""
msgid "Cancel Export" msgid "Cancel Export"
msgstr "" msgstr ""

View file

@ -60,6 +60,7 @@ var export_layers := 0
var number_of_frames := 1 var number_of_frames := 1
var direction := AnimationDirection.FORWARD var direction := AnimationDirection.FORWARD
var resize := 100 var resize := 100
var save_quality := 0.75 ## Used when saving jpg and webp images. Goes from 0 to 1.
var interpolation := Image.INTERPOLATE_NEAREST var interpolation := Image.INTERPOLATE_NEAREST
var include_tag_in_filename := false var include_tag_in_filename := false
var new_dir_for_each_frame_tag := false ## We don't need to store this after export var new_dir_for_each_frame_tag := false ## We don't need to store this after export
@ -441,7 +442,7 @@ func export_processed_images(
) )
elif project.file_format == FileFormat.JPEG: elif project.file_format == FileFormat.JPEG:
JavaScriptBridge.download_buffer( JavaScriptBridge.download_buffer(
processed_images[i].image.save_jpg_to_buffer(), processed_images[i].image.save_jpg_to_buffer(save_quality),
export_paths[i].get_file(), export_paths[i].get_file(),
"image/jpeg" "image/jpeg"
) )
@ -453,7 +454,7 @@ func export_processed_images(
elif project.file_format == FileFormat.WEBP: elif project.file_format == FileFormat.WEBP:
err = processed_images[i].image.save_webp(export_paths[i]) err = processed_images[i].image.save_webp(export_paths[i])
elif project.file_format == FileFormat.JPEG: elif project.file_format == FileFormat.JPEG:
err = processed_images[i].image.save_jpg(export_paths[i]) err = processed_images[i].image.save_jpg(export_paths[i], save_quality)
if err != OK: if err != OK:
Global.popup_error( Global.popup_error(
tr("File failed to save. Error code %s (%s)") % [err, error_string(err)] tr("File failed to save. Error code %s (%s)") % [err, error_string(err)]

View file

@ -344,6 +344,10 @@ func _on_Resize_value_changed(value: float) -> void:
update_dimensions_label() update_dimensions_label()
func _on_quality_value_changed(value: float) -> void:
Export.save_quality = value / 100.0
func _on_Interpolation_item_selected(id: Image.Interpolation) -> void: func _on_Interpolation_item_selected(id: Image.Interpolation) -> void:
Export.interpolation = id Export.interpolation = id
@ -392,6 +396,10 @@ func _on_FileFormat_item_selected(idx: int) -> void:
else: else:
get_tree().set_group("ExportMultipleFilesOptions", "disabled", true) get_tree().set_group("ExportMultipleFilesOptions", "disabled", true)
get_tree().set_group("ExportMultipleFilesEditableOptions", "editable", false) get_tree().set_group("ExportMultipleFilesEditableOptions", "editable", false)
var show_quality := id == Export.FileFormat.JPEG
%QualityLabel.visible = show_quality
%Quality.visible = show_quality
set_preview() set_preview()

View file

@ -79,12 +79,11 @@ unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
item_count = 4
selected = 0 selected = 0
item_count = 4
popup/item_0/text = "Columns" popup/item_0/text = "Columns"
popup/item_0/id = 1 popup/item_0/id = 1
popup/item_1/text = "Rows" popup/item_1/text = "Rows"
popup/item_1/id = 0
popup/item_2/text = "Tags by column" popup/item_2/text = "Tags by column"
popup/item_2/id = 2 popup/item_2/id = 2
popup/item_3/text = "Tags by row" popup/item_3/text = "Tags by row"
@ -116,7 +115,6 @@ size_flags_horizontal = 3
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
item_count = 2 item_count = 2
popup/item_0/text = "All frames" popup/item_0/text = "All frames"
popup/item_0/id = 0
popup/item_1/text = "Selected frames" popup/item_1/text = "Selected frames"
popup/item_1/id = 1 popup/item_1/id = 1
@ -130,7 +128,6 @@ layout_mode = 2
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
item_count = 2 item_count = 2
popup/item_0/text = "Visible layers" popup/item_0/text = "Visible layers"
popup/item_0/id = 0
popup/item_1/text = "Selected layers" popup/item_1/text = "Selected layers"
popup/item_1/id = 1 popup/item_1/id = 1
@ -143,10 +140,9 @@ custom_minimum_size = Vector2(100, 0)
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
item_count = 3
selected = 0 selected = 0
item_count = 3
popup/item_0/text = "Forward" popup/item_0/text = "Forward"
popup/item_0/id = 0
popup/item_1/text = "Backwards" popup/item_1/text = "Backwards"
popup/item_1/id = 1 popup/item_1/id = 1
popup/item_2/text = "Ping-Pong" popup/item_2/text = "Ping-Pong"
@ -176,6 +172,28 @@ script = ExtResource("4")
suffix = "%" suffix = "%"
snap_step = 100.0 snap_step = 100.0
[node name="QualityLabel" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
unique_name_in_owner = true
visible = false
custom_minimum_size = Vector2(30, 0)
layout_mode = 2
text = "Quality:"
[node name="Quality" type="TextureProgressBar" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
unique_name_in_owner = true
visible = false
layout_mode = 2
focus_mode = 2
mouse_default_cursor_shape = 2
theme_type_variation = &"ValueSlider"
value = 75.0
nine_patch_stretch = true
stretch_margin_left = 3
stretch_margin_top = 3
stretch_margin_right = 3
stretch_margin_bottom = 3
script = ExtResource("4")
[node name="DimensionLabelText" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"] [node name="DimensionLabelText" type="Label" parent="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
@ -255,10 +273,9 @@ unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
item_count = 5
selected = 0 selected = 0
item_count = 5
popup/item_0/text = "Nearest" popup/item_0/text = "Nearest"
popup/item_0/id = 0
popup/item_1/text = "Bilinear" popup/item_1/text = "Bilinear"
popup/item_1/id = 1 popup/item_1/id = 1
popup/item_2/text = "Cubic" popup/item_2/text = "Cubic"
@ -350,6 +367,7 @@ size_flags_horizontal = 3
[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Layers" to="." method="_on_Layers_item_selected"] [connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Layers" to="." method="_on_Layers_item_selected"]
[connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Direction" to="." method="_on_Direction_item_selected"] [connection signal="item_selected" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Direction" to="." method="_on_Direction_item_selected"]
[connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Resize" to="." method="_on_Resize_value_changed"] [connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Resize" to="." method="_on_Resize_value_changed"]
[connection signal="value_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/GridContainer/Quality" to="." method="_on_quality_value_changed"]
[connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/PathLineEdit" to="." method="_on_PathLineEdit_text_changed"] [connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/PathLineEdit" to="." method="_on_PathLineEdit_text_changed"]
[connection signal="pressed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/PathButton" to="." method="_on_PathButton_pressed"] [connection signal="pressed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/PathButton" to="." method="_on_PathButton_pressed"]
[connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/FileLineEdit" to="." method="_on_FileLineEdit_text_changed"] [connection signal="text_changed" from="VBoxContainer/VSplitContainer/VBoxContainer/FilePath/FileLineEdit" to="." method="_on_FileLineEdit_text_changed"]

View file

@ -32,6 +32,7 @@ var global_layer_expand := true
@onready var tag_spacer := %TagSpacer as Control @onready var tag_spacer := %TagSpacer as Control
@onready var layer_settings_container := %LayerSettingsContainer as VBoxContainer @onready var layer_settings_container := %LayerSettingsContainer as VBoxContainer
@onready var layer_container := %LayerContainer as VBoxContainer @onready var layer_container := %LayerContainer as VBoxContainer
@onready var layer_header_container := %LayerHeaderContainer as HBoxContainer
@onready var add_layer_list := %AddLayerList as MenuButton @onready var add_layer_list := %AddLayerList as MenuButton
@onready var remove_layer := %RemoveLayer as Button @onready var remove_layer := %RemoveLayer as Button
@onready var move_up_layer := %MoveUpLayer as Button @onready var move_up_layer := %MoveUpLayer as Button
@ -43,6 +44,7 @@ var global_layer_expand := true
@onready var frame_scroll_bar := %FrameScrollBar as HScrollBar @onready var frame_scroll_bar := %FrameScrollBar as HScrollBar
@onready var tag_scroll_container := %TagScroll as ScrollContainer @onready var tag_scroll_container := %TagScroll as ScrollContainer
@onready var layer_frame_h_split := %LayerFrameHSplit as HSplitContainer @onready var layer_frame_h_split := %LayerFrameHSplit as HSplitContainer
@onready var layer_frame_header_h_split := %LayerFrameHeaderHSplit as HSplitContainer
@onready var delete_frame := %DeleteFrame as Button @onready var delete_frame := %DeleteFrame as Button
@onready var move_frame_left := %MoveFrameLeft as Button @onready var move_frame_left := %MoveFrameLeft as Button
@onready var move_frame_right := %MoveFrameRight as Button @onready var move_frame_right := %MoveFrameRight as Button
@ -60,6 +62,7 @@ func _ready() -> void:
Global.control.find_child("LayerProperties").layer_property_changed.connect(_update_layer_ui) Global.control.find_child("LayerProperties").layer_property_changed.connect(_update_layer_ui)
min_cel_size = get_tree().current_scene.theme.default_font_size + 24 min_cel_size = get_tree().current_scene.theme.default_font_size + 24
layer_container.custom_minimum_size.x = layer_settings_container.size.x + 12 layer_container.custom_minimum_size.x = layer_settings_container.size.x + 12
layer_header_container.custom_minimum_size.x = layer_container.custom_minimum_size.x
cel_size = min_cel_size cel_size = min_cel_size
cel_size_slider.min_value = min_cel_size cel_size_slider.min_value = min_cel_size
cel_size_slider.max_value = max_cel_size cel_size_slider.max_value = max_cel_size
@ -71,6 +74,7 @@ func _ready() -> void:
_fill_blend_modes_option_button() _fill_blend_modes_option_button()
# Config loading # Config loading
layer_frame_h_split.split_offset = Global.config_cache.get_value("timeline", "layer_size", 0) layer_frame_h_split.split_offset = Global.config_cache.get_value("timeline", "layer_size", 0)
layer_frame_header_h_split.split_offset = layer_frame_h_split.split_offset
cel_size = Global.config_cache.get_value("timeline", "cel_size", cel_size) # Call setter cel_size = Global.config_cache.get_value("timeline", "cel_size", cel_size) # Call setter
var past_rate = Global.config_cache.get_value( var past_rate = Global.config_cache.get_value(
"timeline", "past_rate", Global.onion_skinning_past_rate "timeline", "past_rate", Global.onion_skinning_past_rate
@ -109,6 +113,7 @@ func _notification(what: int) -> void:
await get_tree().process_frame await get_tree().process_frame
if is_instance_valid(layer_settings_container): if is_instance_valid(layer_settings_container):
layer_container.custom_minimum_size.x = layer_settings_container.size.x + 12 layer_container.custom_minimum_size.x = layer_settings_container.size.x + 12
layer_header_container.custom_minimum_size.x = layer_container.custom_minimum_size.x
func _input(event: InputEvent) -> void: func _input(event: InputEvent) -> void:
@ -1326,3 +1331,10 @@ func update_global_layer_buttons() -> void:
Global.change_button_texturerect(%GlobalExpandButton.get_child(0), "group_expanded.png") Global.change_button_texturerect(%GlobalExpandButton.get_child(0), "group_expanded.png")
else: else:
Global.change_button_texturerect(%GlobalExpandButton.get_child(0), "group_collapsed.png") Global.change_button_texturerect(%GlobalExpandButton.get_child(0), "group_collapsed.png")
func _on_layer_frame_h_split_dragged(offset: int) -> void:
if layer_frame_header_h_split.split_offset != offset:
layer_frame_header_h_split.split_offset = offset
if layer_frame_h_split.split_offset != offset:
layer_frame_h_split.split_offset = offset

View file

@ -786,36 +786,32 @@ mouse_filter = 1
[node name="MainBodyVBoxContainer" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel"] [node name="MainBodyVBoxContainer" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
theme_override_constants/separation = 0
[node name="TimelineScroll" type="ScrollContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"] [node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"]
layout_mode = 2 clip_contents = true
size_flags_vertical = 3 custom_minimum_size = Vector2(0, 38)
[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 theme_override_constants/margin_bottom = 0
[node name="LayerFrameHSplit" type="HSplitContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer"] [node name="LayerFrameHeaderHSplit" type="HSplitContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
size_flags_vertical = 3 size_flags_vertical = 3
theme_override_constants/separation = 0 theme_override_constants/separation = 6
theme_override_constants/minimum_grab_thickness = 12 theme_override_constants/minimum_grab_thickness = 12
theme_override_icons/grabber = SubResource("ImageTexture_ku1qg") theme_override_icons/grabber = SubResource("ImageTexture_ku1qg")
[node name="LayerContainer" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit"] [node name="LayerHeaderContainer" type="HBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 1
[node name="HBoxContainer" type="HBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer"]
custom_minimum_size = Vector2(84, 0) custom_minimum_size = Vector2(84, 0)
layout_mode = 2 layout_mode = 2
size_flags_vertical = 0
theme_override_constants/separation = 0 theme_override_constants/separation = 0
[node name="GlobalVisibilityButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer" groups=["UIButtons"]] [node name="GlobalVisibilityButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer" groups=["UIButtons"]]
unique_name_in_owner = true unique_name_in_owner = true
custom_minimum_size = Vector2(28, 22) custom_minimum_size = Vector2(28, 22)
layout_mode = 2 layout_mode = 2
@ -823,7 +819,7 @@ tooltip_text = "Toggle layer's visibility"
focus_mode = 0 focus_mode = 0
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer/GlobalVisibilityButton"] [node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalVisibilityButton"]
layout_mode = 0 layout_mode = 0
anchor_left = 0.5 anchor_left = 0.5
anchor_top = 0.5 anchor_top = 0.5
@ -837,7 +833,7 @@ size_flags_horizontal = 0
size_flags_vertical = 0 size_flags_vertical = 0
texture = ExtResource("24_6ikqj") texture = ExtResource("24_6ikqj")
[node name="GlobalLockButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer" groups=["UIButtons"]] [node name="GlobalLockButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer" groups=["UIButtons"]]
unique_name_in_owner = true unique_name_in_owner = true
custom_minimum_size = Vector2(28, 22) custom_minimum_size = Vector2(28, 22)
layout_mode = 2 layout_mode = 2
@ -845,7 +841,7 @@ tooltip_text = "Lock/unlock layer"
focus_mode = 0 focus_mode = 0
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer/GlobalLockButton"] [node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalLockButton"]
layout_mode = 0 layout_mode = 0
anchor_left = 0.5 anchor_left = 0.5
anchor_top = 0.5 anchor_top = 0.5
@ -859,7 +855,7 @@ size_flags_horizontal = 0
size_flags_vertical = 0 size_flags_vertical = 0
texture = ExtResource("25_7x5su") texture = ExtResource("25_7x5su")
[node name="GlobalExpandButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer" groups=["UIButtons"]] [node name="GlobalExpandButton" type="Button" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer" groups=["UIButtons"]]
unique_name_in_owner = true unique_name_in_owner = true
custom_minimum_size = Vector2(28, 22) custom_minimum_size = Vector2(28, 22)
layout_mode = 2 layout_mode = 2
@ -867,7 +863,7 @@ tooltip_text = "Expand/collapse group"
focus_mode = 0 focus_mode = 0
mouse_default_cursor_shape = 2 mouse_default_cursor_shape = 2
[node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer/GlobalExpandButton"] [node name="TextureRect" type="TextureRect" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalExpandButton"]
layout_mode = 0 layout_mode = 0
anchor_left = 0.5 anchor_left = 0.5
anchor_top = 0.5 anchor_top = 0.5
@ -881,7 +877,7 @@ size_flags_horizontal = 0
size_flags_vertical = 0 size_flags_vertical = 0
texture = ExtResource("27_lrc8y") texture = ExtResource("27_lrc8y")
[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer"] [node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
theme_override_constants/margin_left = 0 theme_override_constants/margin_left = 0
@ -889,7 +885,7 @@ theme_override_constants/margin_top = 2
theme_override_constants/margin_right = 1 theme_override_constants/margin_right = 1
theme_override_constants/margin_bottom = 0 theme_override_constants/margin_bottom = 0
[node name="OpacitySlider" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer/MarginContainer" instance=ExtResource("9")] [node name="OpacitySlider" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/MarginContainer" instance=ExtResource("9")]
unique_name_in_owner = true unique_name_in_owner = true
custom_minimum_size = Vector2(0, 29) custom_minimum_size = Vector2(0, 29)
layout_mode = 2 layout_mode = 2
@ -897,6 +893,56 @@ size_flags_vertical = 0
value = 100.0 value = 100.0
prefix = "Opacity:" prefix = "Opacity:"
[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit"]
layout_mode = 2
theme_override_constants/margin_left = -2
theme_override_constants/margin_top = 0
theme_override_constants/margin_right = 0
theme_override_constants/margin_bottom = 0
[node name="FrameScrollHeaderContainer" type="Container" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/MarginContainer" node_paths=PackedStringArray("h_scroll_bar")]
clip_contents = true
layout_mode = 2
script = ExtResource("11")
h_scroll_bar = NodePath("../../../../FrameScrollBar")
[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/MarginContainer/FrameScrollHeaderContainer"]
layout_mode = 2
theme_override_constants/margin_left = 1
theme_override_constants/margin_top = 2
theme_override_constants/margin_right = 0
theme_override_constants/margin_bottom = 0
[node name="FrameHBox" type="HBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/MarginContainer/FrameScrollHeaderContainer/MarginContainer"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
theme_override_constants/separation = 0
[node name="TimelineScroll" type="ScrollContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"]
layout_mode = 2
size_flags_vertical = 3
vertical_scroll_mode = 2
[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll"]
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/margin_right = 0
[node name="LayerFrameHSplit" type="HSplitContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/separation = 6
theme_override_constants/minimum_grab_thickness = 12
theme_override_icons/grabber = SubResource("ImageTexture_ku1qg")
[node name="LayerContainer" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit"]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 1
[node name="LayerVBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer"] [node name="LayerVBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer"]
layout_mode = 2 layout_mode = 2
size_flags_horizontal = 3 size_flags_horizontal = 3
@ -905,7 +951,7 @@ theme_override_constants/separation = 0
[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit"] [node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit"]
layout_mode = 2 layout_mode = 2
theme_override_constants/margin_left = -2 theme_override_constants/margin_left = -2
theme_override_constants/margin_top = 0 theme_override_constants/margin_top = -2
theme_override_constants/margin_right = 0 theme_override_constants/margin_right = 0
theme_override_constants/margin_bottom = 0 theme_override_constants/margin_bottom = 0
@ -914,7 +960,7 @@ unique_name_in_owner = true
clip_contents = true clip_contents = true
layout_mode = 2 layout_mode = 2
script = ExtResource("11") script = ExtResource("11")
h_scroll_bar = NodePath("../../../../../BreakFreeFromContainer/FrameScrollBar") h_scroll_bar = NodePath("../../../../../FrameScrollBar")
[node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer"] [node name="MarginContainer" type="MarginContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer"]
layout_mode = 2 layout_mode = 2
@ -923,28 +969,14 @@ theme_override_constants/margin_top = 2
theme_override_constants/margin_right = 0 theme_override_constants/margin_right = 0
theme_override_constants/margin_bottom = 0 theme_override_constants/margin_bottom = 0
[node name="FrameAndCelBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer/MarginContainer"] [node name="CelVBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer/MarginContainer"]
layout_mode = 2 layout_mode = 2
theme_override_constants/separation = 0 theme_override_constants/separation = 0
[node name="FrameHBox" type="HBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer/MarginContainer/FrameAndCelBox"] [node name="FrameScrollBar" type="HScrollBar" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"]
custom_minimum_size = Vector2(0, 30)
layout_mode = 2
theme_override_constants/separation = 0
[node name="CelVBox" type="VBoxContainer" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/MarginContainer/FrameScrollContainer/MarginContainer/FrameAndCelBox"]
layout_mode = 2
theme_override_constants/separation = 0
[node name="BreakFreeFromContainer" type="Control" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer"]
layout_mode = 2
[node name="FrameScrollBar" type="HScrollBar" parent="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/BreakFreeFromContainer"]
unique_name_in_owner = true unique_name_in_owner = true
layout_mode = 0 z_index = 2
anchor_right = 1.0 layout_mode = 2
offset_left = 41.0
offset_top = -12.0
size_flags_horizontal = 3 size_flags_horizontal = 3
[node name="AnimationTimer" type="Timer" parent="."] [node name="AnimationTimer" type="Timer" parent="."]
@ -1114,11 +1146,14 @@ color = Color(0, 0.741176, 1, 0.501961)
[connection signal="pressed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/OnionSkinning" to="." method="_on_OnionSkinning_pressed"] [connection signal="pressed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/OnionSkinning" to="." method="_on_OnionSkinning_pressed"]
[connection signal="pressed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/LoopAnim" to="." method="_on_LoopAnim_pressed"] [connection signal="pressed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/LoopAnim" to="." method="_on_LoopAnim_pressed"]
[connection signal="value_changed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/FPSValue" to="." method="_on_FPSValue_value_changed"] [connection signal="value_changed" from="TimelineContainer/TimelineButtons/VBoxContainer/AnimationToolsScrollContainer/AnimationTools/AnimationButtons/LoopButtons/FPSValue" to="." method="_on_FPSValue_value_changed"]
[connection signal="dragged" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit" to="." method="_on_layer_frame_h_split_dragged"]
[connection signal="gui_input" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit" to="." method="_on_LayerFrameSplitContainer_gui_input"]
[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalVisibilityButton" to="." method="_on_global_visibility_button_pressed"]
[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalLockButton" to="." method="_on_global_lock_button_pressed"]
[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/GlobalExpandButton" to="." method="_on_global_expand_button_pressed"]
[connection signal="value_changed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/MarginContainer/LayerFrameHeaderHSplit/LayerHeaderContainer/MarginContainer/OpacitySlider" to="." method="_on_opacity_slider_value_changed"]
[connection signal="dragged" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit" to="." method="_on_layer_frame_h_split_dragged"]
[connection signal="gui_input" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit" to="." method="_on_LayerFrameSplitContainer_gui_input"] [connection signal="gui_input" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit" to="." method="_on_LayerFrameSplitContainer_gui_input"]
[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer/GlobalVisibilityButton" to="." method="_on_global_visibility_button_pressed"]
[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer/GlobalLockButton" to="." method="_on_global_lock_button_pressed"]
[connection signal="pressed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer/GlobalExpandButton" to="." method="_on_global_expand_button_pressed"]
[connection signal="value_changed" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/HBoxContainer/MarginContainer/OpacitySlider" to="." method="_on_opacity_slider_value_changed"]
[connection signal="resized" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/LayerVBox" to="." method="_on_LayerVBox_resized"] [connection signal="resized" from="TimelineContainer/MainBodyPanel/MainBodyVBoxContainer/TimelineScroll/MarginContainer/LayerFrameHSplit/LayerContainer/LayerVBox" to="." method="_on_LayerVBox_resized"]
[connection signal="timeout" from="AnimationTimer" to="." method="_on_AnimationTimer_timeout"] [connection signal="timeout" from="AnimationTimer" to="." method="_on_AnimationTimer_timeout"]
[connection signal="close_requested" from="TimelineSettings" to="." method="_on_timeline_settings_close_requested"] [connection signal="close_requested" from="TimelineSettings" to="." method="_on_timeline_settings_close_requested"]