1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-08 19:39:50 +00:00
Pixelorama/src/UI/Timeline/AnimationTimeline.gd

935 lines
34 KiB
GDScript3
Raw Normal View History

extends Panel
var is_animation_running := false
var animation_loop := 1 # 0 is no loop, 1 is cycle loop, 2 is ping-pong loop
var animation_forward := true
var first_frame := 0
var last_frame := 0
var is_mouse_hover := false
var cel_size := 36 setget cel_size_changed
var min_cel_size := 36
var max_cel_size := 144
var past_above_canvas := true
var future_above_canvas := true
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var frame_button_node = preload("res://src/UI/Timeline/FrameButton.tscn")
onready var old_scroll: int = 0 # The previous scroll state of $ScrollContainer
onready var tag_spacer = find_node("TagSpacer")
onready var start_spacer = find_node("StartSpacer")
onready var timeline_scroll: ScrollContainer = find_node("TimelineScroll")
onready var main_scroll: ScrollContainer = find_node("ScrollContainer")
onready var timeline_container: VBoxContainer = find_node("TimelineContainer")
onready var tag_scroll_container: ScrollContainer = find_node("TagScroll")
onready var fps_spinbox: SpinBox = find_node("FPSValue")
onready var onion_skinning_button: BaseButton = find_node("OnionSkinning")
onready var loop_animation_button: BaseButton = find_node("LoopAnim")
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
onready var drag_highlight: ColorRect = find_node("DragHighlight")
2021-11-23 00:36:22 +00:00
func _ready() -> void:
timeline_scroll.get_h_scrollbar().connect("value_changed", self, "_h_scroll_changed")
Global.animation_timer.wait_time = 1 / Global.current_project.fps
fps_spinbox.value = Global.current_project.fps
# Set important size_flags (intentionally set at runtime)
# Otherwise you yont be able to see "TimelineScroll" in editor
find_node("EndSpacer").size_flags_horizontal = SIZE_EXPAND_FILL
timeline_scroll.size_flags_horizontal = SIZE_FILL
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
func _notification(what: int) -> void:
if what == NOTIFICATION_DRAG_END:
drag_highlight.hide()
func _input(event: InputEvent) -> void:
var mouse_pos := get_global_mouse_position()
var timeline_rect := Rect2(rect_global_position, rect_size)
if timeline_rect.has_point(mouse_pos):
if Input.is_key_pressed(KEY_CONTROL):
self.cel_size += (
2 * int(event.is_action("zoom_in"))
- 2 * int(event.is_action("zoom_out"))
)
func _h_scroll_changed(value: float) -> void:
# Let the main timeline ScrollContainer affect the tag ScrollContainer too
tag_scroll_container.get_child(0).rect_min_size.x = (
timeline_scroll.scroll_horizontal
+ tag_scroll_container.rect_size.x * 3
)
old_scroll = value # Needed for (_on_TimelineContainer_item_rect_changed)
var diff = start_spacer.rect_min_size.x - value
var a = main_scroll.scroll_horizontal
var b = timeline_scroll.scroll_horizontal
if a > b:
tag_scroll_container.scroll_horizontal = 0
tag_spacer.rect_min_size.x = diff
else:
tag_spacer.rect_min_size.x = 0
tag_scroll_container.scroll_horizontal = -diff
# the below two signals control scrolling functionality
func _on_AnimationTimeline_item_rect_changed() -> void:
# Timeline size
timeline_scroll.rect_min_size.x = rect_size.x
func _on_TimelineContainer_item_rect_changed() -> void:
if not timeline_container:
return
# Layer movement
var limit = timeline_container.rect_size.x - main_scroll.rect_size.x
var amount = main_scroll.scroll_horizontal
start_spacer.rect_min_size.x = min(amount, max(0, limit - 1))
# Tag movement
var diff = start_spacer.rect_min_size.x - old_scroll
var a = main_scroll.scroll_horizontal
var b = timeline_scroll.scroll_horizontal
if a > b:
tag_spacer.rect_min_size.x = diff
tag_scroll_container.scroll_horizontal = 0
else:
tag_spacer.rect_min_size.x = 0
tag_scroll_container.scroll_horizontal = -diff
func cel_size_changed(value: int) -> void:
cel_size = clamp(value, min_cel_size, max_cel_size)
for layer_button in Global.layers_container.get_children():
layer_button.rect_min_size.y = cel_size
layer_button.rect_size.y = cel_size
for container in Global.frames_container.get_children():
for cel_button in container.get_children():
cel_button.rect_min_size.x = cel_size
cel_button.rect_min_size.y = cel_size
cel_button.rect_size.x = cel_size
cel_button.rect_size.y = cel_size
for frame_id in Global.frame_ids.get_children():
frame_id.rect_min_size.x = cel_size
frame_id.rect_size.x = cel_size
for tag_c in Global.tag_container.get_children():
var tag_base_size = cel_size + 4
var tag: AnimationTag = tag_c.tag
# Added 1 to answer to get starting position of next cel
tag_c.rect_position.x = (tag.from - 1) * tag_base_size + 1
var tag_size: int = tag.to - tag.from
# We dont need the 4 pixels at the end of last cel
tag_c.rect_min_size.x = (tag_size + 1) * tag_base_size - 4
# We dont need the 4 pixels at the end of last cel
tag_c.rect_size.x = (tag_size + 1) * tag_base_size - 4
tag_c.get_node("Line2D").points[2] = Vector2(tag_c.rect_min_size.x, 0)
tag_c.get_node("Line2D").points[3] = Vector2(tag_c.rect_min_size.x, 32)
func add_frame() -> void:
var project: Project = Global.current_project
var frame_add_index := project.current_frame + 1
var frame: Frame = project.new_empty_frame()
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
project.undos += 1
project.undo_redo.create_action("Add Frame")
for l in range(project.layers.size()):
if project.layers[l].new_cels_linked: # If the link button is pressed
var prev_cel: BaseCel = project.frames[project.current_frame].cels[l]
if prev_cel.link_set == null:
prev_cel.link_set = {}
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
project.undo_redo.add_do_method(
project.layers[l], "link_cel", prev_cel, prev_cel.link_set
)
project.undo_redo.add_undo_method(project.layers[l], "link_cel", prev_cel, null)
frame.cels[l].set_content(prev_cel.get_content(), prev_cel.image_texture)
frame.cels[l].link_set = prev_cel.link_set
# Code to PUSH AHEAD tags starting after the frame
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var new_animation_tags := project.animation_tags.duplicate()
# Loop through the tags to create new classes for them, so that they won't be the same
# as Global.current_project.animation_tags's classes. Needed for undo/redo to work properly.
for i in new_animation_tags.size():
new_animation_tags[i] = AnimationTag.new(
new_animation_tags[i].name,
new_animation_tags[i].color,
new_animation_tags[i].from,
new_animation_tags[i].to
)
# Loop through the tags to see if the frame is in one
for tag in new_animation_tags:
if frame_add_index >= tag.from && frame_add_index <= tag.to:
tag.to += 1
elif (frame_add_index) < tag.from:
tag.from += 1
tag.to += 1
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undo_redo.add_do_method(project, "add_frames", [frame], [frame_add_index])
project.undo_redo.add_undo_method(project, "remove_frames", [frame_add_index])
project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags)
project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags)
project.undo_redo.add_do_property(project, "current_frame", project.current_frame + 1)
project.undo_redo.add_undo_property(project, "current_frame", project.current_frame)
project.undo_redo.commit_action()
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
func _on_DeleteFrame_pressed() -> void:
var indices := []
for cel in Global.current_project.selected_cels:
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var f: int = cel[0]
if not f in indices:
indices.append(f)
indices.sort()
delete_frames(indices)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
func delete_frames(indices := []) -> void:
var project: Project = Global.current_project
if project.frames.size() == 1:
return
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
if indices.size() == project.frames.size():
indices.remove(indices.size() - 1) # Ensure the project has at least 1 frame
elif indices.size() == 0:
indices.append(project.current_frame)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var current_frame: int = min(project.current_frame, project.frames.size() - indices.size() - 1)
var frames := []
var frame_correction := 0 # Only needed for tag adjustment
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var new_animation_tags := project.animation_tags.duplicate()
# Loop through the tags to create new classes for them, so that they won't be the same
# as Global.current_project.animation_tags's classes. Needed for undo/redo to work properly.
for i in new_animation_tags.size():
new_animation_tags[i] = AnimationTag.new(
new_animation_tags[i].name,
new_animation_tags[i].color,
new_animation_tags[i].from,
new_animation_tags[i].to
)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
for f in indices:
frames.append(project.frames[f])
# Loop through the tags to see if the frame is in one
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
f -= frame_correction # Erasing made frames indexes 1 step ahead their intended tags
var tag_correction := 0 # needed when tag is erased
for tag_ind in new_animation_tags.size():
var tag = new_animation_tags[tag_ind - tag_correction]
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
if f + 1 >= tag.from && f + 1 <= tag.to:
if tag.from == tag.to: # If we're deleting the only frame in the tag
new_animation_tags.erase(tag)
tag_correction += 1
else:
tag.to -= 1
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
elif f + 1 < tag.from:
tag.from -= 1
tag.to -= 1
frame_correction += 1 # Compensation for the next batch
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undos += 1
project.undo_redo.create_action("Remove Frame")
project.undo_redo.add_do_method(project, "remove_frames", indices)
project.undo_redo.add_undo_method(project, "add_frames", frames, indices)
project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags)
project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags)
project.undo_redo.add_do_property(project, "current_frame", current_frame)
project.undo_redo.add_undo_property(project, "current_frame", project.current_frame)
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
project.undo_redo.commit_action()
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
func _on_CopyFrame_pressed() -> void:
var indices := []
for cel in Global.current_project.selected_cels:
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var f: int = cel[0]
if not f in indices:
indices.append(f)
indices.sort()
copy_frames(indices)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
func copy_frames(indices := []) -> void:
var project: Project = Global.current_project
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
if indices.size() == 0:
indices.append(project.current_frame)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var copied_frames := []
var copied_indices := range(indices[-1] + 1, indices[-1] + 1 + indices.size())
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var new_animation_tags := project.animation_tags.duplicate()
# Loop through the tags to create new classes for them, so that they won't be the same
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
# as project.animation_tags's classes. Needed for undo/redo to work properly.
for i in new_animation_tags.size():
new_animation_tags[i] = AnimationTag.new(
new_animation_tags[i].name,
new_animation_tags[i].color,
new_animation_tags[i].from,
new_animation_tags[i].to
)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
project.undos += 1
project.undo_redo.create_action("Add Frame")
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
for f in indices:
var new_frame := Frame.new()
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
copied_frames.append(new_frame)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
var src_frame: Frame = project.frames[f]
new_frame.duration = src_frame.duration
for l in range(project.layers.size()):
var src_cel: BaseCel = project.frames[f].cels[l] # Cel we're copying from, the source
var new_cel: BaseCel = src_cel.get_script().new()
if project.layers[l].new_cels_linked:
if src_cel.link_set == null:
src_cel.link_set = {}
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
project.undo_redo.add_do_method(
project.layers[l], "link_cel", src_cel, src_cel.link_set
)
project.undo_redo.add_undo_method(project.layers[l], "link_cel", src_cel, null)
new_cel.set_content(src_cel.get_content(), src_cel.image_texture)
new_cel.link_set = src_cel.link_set
else:
new_cel.set_content(src_cel.copy_content())
new_cel.opacity = src_cel.opacity
new_frame.cels.append(new_cel)
# Loop through the tags to see if the frame is in one
for tag in new_animation_tags:
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
if indices[-1] + 1 >= tag.from && indices[-1] + 1 <= tag.to:
tag.to += 1
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
elif indices[-1] + 1 < tag.from:
tag.from += 1
tag.to += 1
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
project.undo_redo.add_do_method(project, "add_frames", copied_frames, copied_indices)
project.undo_redo.add_undo_method(project, "remove_frames", copied_indices)
project.undo_redo.add_do_property(project, "current_frame", indices[-1] + 1)
project.undo_redo.add_undo_property(project, "current_frame", indices[-1])
project.undo_redo.add_do_property(project, "animation_tags", new_animation_tags)
project.undo_redo.add_undo_property(project, "animation_tags", project.animation_tags)
project.undo_redo.commit_action()
func _on_FrameTagButton_pressed() -> void:
2021-11-23 00:36:22 +00:00
find_node("FrameTagDialog").popup_centered()
func _on_MoveLeft_pressed() -> void:
var frame: int = Global.current_project.current_frame
if frame == 0:
return
Global.frame_ids.get_child(frame).change_frame_order(-1)
func _on_MoveRight_pressed() -> void:
var frame: int = Global.current_project.current_frame
if frame == Global.current_project.frames.size() - 1: # using last_frame caused problems
return
Global.frame_ids.get_child(frame).change_frame_order(1)
func _on_OnionSkinning_pressed() -> void:
Global.onion_skinning = !Global.onion_skinning
Global.canvas.refresh_onion()
var texture_button: TextureRect = onion_skinning_button.get_child(0)
if Global.onion_skinning:
Global.change_button_texturerect(texture_button, "onion_skinning.png")
else:
Global.change_button_texturerect(texture_button, "onion_skinning_off.png")
func _on_OnionSkinningSettings_pressed() -> void:
$OnionSkinningSettings.popup(
Rect2(
onion_skinning_button.rect_global_position.x - $OnionSkinningSettings.rect_size.x - 16,
onion_skinning_button.rect_global_position.y - 106,
136,
126
)
)
func _on_LoopAnim_pressed() -> void:
var texture_button: TextureRect = loop_animation_button.get_child(0)
match animation_loop:
0: # Make it loop
animation_loop = 1
Global.change_button_texturerect(texture_button, "loop.png")
2021-11-23 00:36:22 +00:00
loop_animation_button.hint_tooltip = "Cycle loop"
1: # Make it ping-pong
animation_loop = 2
Global.change_button_texturerect(texture_button, "loop_pingpong.png")
2021-11-23 00:36:22 +00:00
loop_animation_button.hint_tooltip = "Ping-pong loop"
2: # Make it stop
animation_loop = 0
Global.change_button_texturerect(texture_button, "loop_none.png")
2021-11-23 00:36:22 +00:00
loop_animation_button.hint_tooltip = "No loop"
func _on_PlayForward_toggled(button_pressed: bool) -> void:
if button_pressed:
Global.change_button_texturerect(Global.play_forward.get_child(0), "pause.png")
else:
Global.change_button_texturerect(Global.play_forward.get_child(0), "play.png")
play_animation(button_pressed, true)
func _on_PlayBackwards_toggled(button_pressed: bool) -> void:
if button_pressed:
Global.change_button_texturerect(Global.play_backwards.get_child(0), "pause.png")
else:
Global.change_button_texturerect(Global.play_backwards.get_child(0), "play_backwards.png")
play_animation(button_pressed, false)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
# Called on each frame of the animation
func _on_AnimationTimer_timeout() -> void:
if first_frame == last_frame:
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
Global.play_forward.pressed = false
Global.play_backwards.pressed = false
Global.animation_timer.stop()
return
Global.canvas.selection.transform_content_confirm()
var fps = Global.current_project.fps
if animation_forward:
if Global.current_project.current_frame < last_frame:
Global.current_project.selected_cels.clear()
Global.current_project.current_frame += 1
Global.animation_timer.wait_time = (
Global.current_project.frames[Global.current_project.current_frame].duration
* (1 / fps)
)
Global.animation_timer.start() # Change the frame, change the wait time and start a cycle
else:
match animation_loop:
0: # No loop
Global.play_forward.pressed = false
Global.play_backwards.pressed = false
Global.animation_timer.stop()
is_animation_running = false
1: # Cycle loop
Global.current_project.selected_cels.clear()
Global.current_project.current_frame = first_frame
Global.animation_timer.wait_time = (
Global.current_project.frames[Global.current_project.current_frame].duration
* (1 / fps)
)
Global.animation_timer.start()
2: # Ping pong loop
animation_forward = false
_on_AnimationTimer_timeout()
else:
if Global.current_project.current_frame > first_frame:
Global.current_project.selected_cels.clear()
Global.current_project.current_frame -= 1
Global.animation_timer.wait_time = (
Global.current_project.frames[Global.current_project.current_frame].duration
* (1 / fps)
)
Global.animation_timer.start()
else:
match animation_loop:
0: # No loop
Global.play_backwards.pressed = false
Global.play_forward.pressed = false
Global.animation_timer.stop()
is_animation_running = false
1: # Cycle loop
Global.current_project.selected_cels.clear()
Global.current_project.current_frame = last_frame
Global.animation_timer.wait_time = (
Global.current_project.frames[Global.current_project.current_frame].duration
* (1 / fps)
)
Global.animation_timer.start()
2: # Ping pong loop
animation_forward = true
_on_AnimationTimer_timeout()
func play_animation(play: bool, forward_dir: bool) -> void:
first_frame = 0
last_frame = Global.current_project.frames.size() - 1
if Global.play_only_tags:
for tag in Global.current_project.animation_tags:
if (
Global.current_project.current_frame + 1 >= tag.from
&& Global.current_project.current_frame + 1 <= tag.to
):
first_frame = tag.from - 1
last_frame = min(Global.current_project.frames.size() - 1, tag.to - 1)
if first_frame == last_frame:
if forward_dir:
Global.play_forward.pressed = false
else:
Global.play_backwards.pressed = false
return
if forward_dir:
Global.play_backwards.disconnect("toggled", self, "_on_PlayBackwards_toggled")
Global.play_backwards.pressed = false
Global.change_button_texturerect(Global.play_backwards.get_child(0), "play_backwards.png")
Global.play_backwards.connect("toggled", self, "_on_PlayBackwards_toggled")
else:
Global.play_forward.disconnect("toggled", self, "_on_PlayForward_toggled")
Global.play_forward.pressed = false
Global.change_button_texturerect(Global.play_forward.get_child(0), "play.png")
Global.play_forward.connect("toggled", self, "_on_PlayForward_toggled")
if play:
Global.animation_timer.set_one_shot(true) # wait_time can't change correctly if it's playing
var duration: float = Global.current_project.frames[Global.current_project.current_frame].duration
var fps = Global.current_project.fps
Global.animation_timer.wait_time = duration * (1 / fps)
Global.animation_timer.start()
animation_forward = forward_dir
else:
Global.animation_timer.stop()
is_animation_running = play
func _on_NextFrame_pressed() -> void:
Global.canvas.selection.transform_content_confirm()
Global.current_project.selected_cels.clear()
if Global.current_project.current_frame < Global.current_project.frames.size() - 1:
Global.current_project.current_frame += 1
func _on_PreviousFrame_pressed() -> void:
Global.canvas.selection.transform_content_confirm()
Global.current_project.selected_cels.clear()
if Global.current_project.current_frame > 0:
Global.current_project.current_frame -= 1
func _on_LastFrame_pressed() -> void:
Global.canvas.selection.transform_content_confirm()
Global.current_project.selected_cels.clear()
Global.current_project.current_frame = Global.current_project.frames.size() - 1
func _on_FirstFrame_pressed() -> void:
Global.canvas.selection.transform_content_confirm()
Global.current_project.selected_cels.clear()
Global.current_project.current_frame = 0
func _on_FPSValue_value_changed(value: float) -> void:
Global.current_project.fps = float(value)
Global.animation_timer.wait_time = 1 / Global.current_project.fps
func _on_PastOnionSkinning_value_changed(value: float) -> void:
Global.onion_skinning_past_rate = int(value)
Global.canvas.update()
func _on_FutureOnionSkinning_value_changed(value: float) -> void:
Global.onion_skinning_future_rate = int(value)
Global.canvas.update()
func _on_BlueRedMode_toggled(button_pressed: bool) -> void:
Global.onion_skinning_blue_red = button_pressed
Global.canvas.update()
func _on_PastPlacement_item_selected(index: int) -> void:
past_above_canvas = (index == 0)
Global.canvas.get_node("OnionPast").set("show_behind_parent", !past_above_canvas)
func _on_FuturePlacement_item_selected(index: int) -> void:
future_above_canvas = (index == 0)
Global.canvas.get_node("OnionFuture").set("show_behind_parent", !future_above_canvas)
# Layer buttons
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
func _on_AddLayer_pressed() -> void:
var project: Project = Global.current_project
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var l := PixelLayer.new(project)
var cels := []
for f in project.frames:
cels.append(l.new_empty_cel())
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undos += 1
project.undo_redo.create_action("Add Layer")
project.undo_redo.add_do_property(project, "current_layer", project.layers.size())
project.undo_redo.add_undo_property(project, "current_layer", project.current_layer)
project.undo_redo.add_do_method(project, "add_layers", [l], [project.layers.size()], [cels])
project.undo_redo.add_undo_method(project, "remove_layers", [project.layers.size()])
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
project.undo_redo.commit_action()
func _on_AddGroup_pressed() -> void:
var project: Project = Global.current_project
var l := GroupLayer.new(project)
var cels := []
for f in project.frames:
cels.append(l.new_empty_cel())
project.undos += 1
project.undo_redo.create_action("Add Layer")
project.undo_redo.add_do_property(project, "current_layer", project.layers.size())
project.undo_redo.add_undo_property(project, "current_layer", project.current_layer)
project.undo_redo.add_do_method(project, "add_layers", [l], [project.layers.size()], [cels])
project.undo_redo.add_undo_method(project, "remove_layers", [project.layers.size()])
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
project.undo_redo.commit_action()
func _on_CloneLayer_pressed() -> void:
var project: Project = Global.current_project
var source_layers: Array = project.layers[project.current_layer].get_children(true)
source_layers.append(project.layers[project.current_layer])
var clones := [] # Array of Layers
var cels := [] # 2D Array of Cels
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
for src_layer in source_layers:
var cl_layer: BaseLayer = src_layer.get_script().new(project)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
cl_layer.project = project
cl_layer.index = src_layer.index
var src_layer_data: Dictionary = src_layer.serialize()
for link_set in src_layer_data.get("link_sets", []):
link_set["cels"].clear() # Clear away the indices
cl_layer.deserialize(src_layer_data)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
clones.append(cl_layer)
cels.append([])
for frame in project.frames:
var src_cel: BaseCel = frame.cels[src_layer.index]
var new_cel: BaseCel = src_cel.get_script().new()
if src_cel.link_set == null:
new_cel.set_content(src_cel.copy_content())
else:
new_cel.link_set = cl_layer.cel_link_sets[src_layer.cel_link_sets.find(
src_cel.link_set
)]
if new_cel.link_set["cels"].size() > 0:
var linked_cel: BaseCel = new_cel.link_set["cels"][0]
new_cel.set_content(linked_cel.get_content(), linked_cel.image_texture)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
else:
new_cel.set_content(src_cel.copy_content())
new_cel.link_set["cels"].append(new_cel)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
new_cel.opacity = src_cel.opacity
cels[-1].append(new_cel)
for cl_layer in clones:
var p = source_layers.find(cl_layer.parent)
if p > -1: # Swap parent with clone if the parent is one of the source layers
cl_layer.parent = clones[p]
else: # Add (Copy) to the name if its not a child of another copied layer
cl_layer.name = str(cl_layer.name, " (", tr("copy"), ")")
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var indices := range(project.current_layer + 1, project.current_layer + clones.size() + 1)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undos += 1
project.undo_redo.create_action("Add Layer")
project.undo_redo.add_do_property(
project, "current_layer", project.current_layer + clones.size()
)
project.undo_redo.add_undo_property(project, "current_layer", project.current_layer)
project.undo_redo.add_do_method(project, "add_layers", clones, indices, cels)
project.undo_redo.add_undo_method(project, "remove_layers", indices)
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
project.undo_redo.commit_action()
func _on_RemoveLayer_pressed() -> void:
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var project: Project = Global.current_project
if project.layers.size() == 1:
return
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var layers: Array = project.layers[project.current_layer].get_children(true)
layers.append(project.layers[project.current_layer])
var indices := []
for l in layers:
indices.append(l.index)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var cels := []
for l in layers:
cels.append([])
for f in project.frames:
cels[-1].append(f.cels[l.index])
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undos += 1
project.undo_redo.create_action("Remove Layer")
project.undo_redo.add_do_property(project, "current_layer", max(indices[0] - 1, 0))
project.undo_redo.add_undo_property(project, "current_layer", project.current_layer)
project.undo_redo.add_do_method(project, "remove_layers", indices)
project.undo_redo.add_undo_method(project, "add_layers", layers, indices, cels)
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
project.undo_redo.commit_action()
# Move the layer up or down in layer order and/or reparent to be deeper/shallower in the
# layer hierarchy depending on its current index and parent
func change_layer_order(up: bool) -> void:
var project: Project = Global.current_project
var layer: BaseLayer = project.layers[project.current_layer]
var child_count = layer.get_child_count(true)
var from_indices := range(layer.index - child_count, layer.index + 1)
var from_parents := []
for l in from_indices:
from_parents.append(project.layers[l].parent)
var to_parents := from_parents.duplicate()
var to_index = layer.index - child_count # the index where the LOWEST shifted layer should end up
if up:
var above_layer: BaseLayer = project.layers[project.current_layer + 1]
if layer.parent == above_layer: # Above is the parent, leave the parent and go up
to_parents[-1] = above_layer.parent
to_index = to_index + 1
elif layer.parent != above_layer.parent: # Above layer must be deeper in the hierarchy
# Move layer 1 level deeper in hierarchy. Done by setting its parent to the parent of
# above_layer, and if that is multiple levels, drop levels until its just 1
to_parents[-1] = above_layer.parent
while to_parents[-1].parent != layer.parent:
to_parents[-1] = to_parents[-1].parent
elif above_layer.accepts_child(layer):
to_parents[-1] = above_layer
else:
to_index = to_index + 1
else: # Down
if layer.index == child_count: # If at the very bottom of the layer stack
if not is_instance_valid(layer.parent):
return
to_parents[-1] = layer.parent.parent # Drop a level in the hierarchy
else:
var below_layer: BaseLayer = project.layers[project.current_layer - 1 - child_count]
if layer.parent != below_layer.parent: # If there is a hierarchy change
to_parents[-1] = layer.parent.parent # Drop a level in the hierarchy
elif below_layer.accepts_child(layer):
to_parents[-1] = below_layer
to_index = to_index - 1
else:
to_index = to_index - 1
var to_indices := range(to_index, to_index + child_count + 1)
project.undo_redo.create_action("Change Layer Order")
project.undo_redo.add_do_property(project, "current_layer", to_index + child_count)
project.undo_redo.add_undo_property(project, "current_layer", project.current_layer)
project.undo_redo.add_do_method(project, "move_layers", from_indices, to_indices, to_parents)
project.undo_redo.add_undo_method(
project, "move_layers", to_indices, from_indices, from_parents
)
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
project.undo_redo.commit_action()
func _on_MergeDownLayer_pressed() -> void:
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var project: Project = Global.current_project
var top_layer: PixelLayer = project.layers[project.current_layer]
var bottom_layer: PixelLayer = project.layers[project.current_layer - 1]
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
var top_cels := []
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undos += 1
project.undo_redo.create_action("Merge Layer")
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
for frame in project.frames:
top_cels.append(frame.cels[top_layer.index]) # Store for undo purposes
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var top_image := Image.new()
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
top_image.copy_from(frame.cels[top_layer.index].image)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
top_image.lock()
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
if frame.cels[top_layer.index].opacity < 1: # If we have layer transparency
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
for xx in top_image.get_size().x:
for yy in top_image.get_size().y:
var pixel_color: Color = top_image.get_pixel(xx, yy)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
var alpha: float = pixel_color.a * frame.cels[top_layer.index].opacity
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
top_image.set_pixel(
xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha)
)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
top_image.unlock()
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
var bottom_cel: BaseCel = frame.cels[bottom_layer.index]
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var bottom_image := Image.new()
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
bottom_image.copy_from(bottom_cel.image)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
bottom_image.blend_rect(top_image, Rect2(Vector2.ZERO, project.size), Vector2.ZERO)
if (
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
bottom_cel.link_set != null
and bottom_cel.link_set.size() > 1
and not top_image.is_invisible()
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
):
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
# Unlink cel:
project.undo_redo.add_do_method(bottom_layer, "link_cel", bottom_cel, null)
project.undo_redo.add_undo_method(
bottom_layer, "link_cel", bottom_cel, bottom_cel.link_set
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
project.undo_redo.add_do_property(bottom_cel, "image_texture", ImageTexture.new())
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undo_redo.add_undo_property(
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
bottom_cel, "image_texture", bottom_cel.image_texture
)
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
project.undo_redo.add_do_property(bottom_cel, "image", bottom_image)
project.undo_redo.add_undo_property(bottom_cel, "image", bottom_cel.image)
else:
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
project.undo_redo.add_do_property(bottom_cel.image, "data", bottom_image.data)
project.undo_redo.add_undo_property(bottom_cel.image, "data", bottom_cel.image.data)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undo_redo.add_do_property(project, "current_layer", bottom_layer.index)
project.undo_redo.add_undo_property(project, "current_layer", top_layer.index)
project.undo_redo.add_do_method(project, "remove_layers", [top_layer.index])
project.undo_redo.add_undo_method(
project, "add_layers", [top_layer], [top_layer.index], [top_cels]
)
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
project.undo_redo.add_undo_method(Global, "undo_or_redo", true)
project.undo_redo.add_do_method(Global, "undo_or_redo", false)
project.undo_redo.commit_action()
func _on_OpacitySlider_value_changed(value) -> void:
var current_frame: Frame = Global.current_project.frames[Global.current_project.current_frame]
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
var cel: BaseCel = current_frame.cels[Global.current_project.current_layer]
cel.opacity = value / 100
Global.canvas.update()
func _on_OnionSkinningSettings_popup_hide() -> void:
Global.can_draw = true
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
# Methods to update the UI in response to changes in the current project
func project_changed() -> void:
var project: Project = Global.current_project
# These must be removed from tree immediately to not mess up the indices of
# the new buttons, so use either free or queue_free + parent.remove_child
for child in Global.layers_container.get_children():
child.free()
for child in Global.frame_ids.get_children():
child.free()
for container in Global.frames_container.get_children():
container.free()
for i in project.layers.size():
project_layer_added(i)
for f in project.frames.size():
var button: Button = frame_button_node.instance()
button.frame = f
Global.frame_ids.add_child(button)
# Press selected cel/frame/layer buttons
Linked Cel Refactor and Timeline Refactor Tweaks (#764) * Updated PixelLayerButton's LinkButton's hint_tooltip to be more accurate * Don't automatically link the current frame's cel when enabling new_cels_linked on a layer * Mostly added new system * renamed link group to link set * Enable drag and drop of linked cels on the same layer * formatted CelButton.gd * serialize/deserialize * Copy frames w/ new linked cels system. Removed copy_cel from layer classes * Removed commented out code from AnimationTimeline.copy_frames * Removed Project.duplicate_layers * Removed unlink_cel in favour of using null with link cel (as the first part of that method was the same) * Disabled show_behind_parent on PixelCelButton's LinkedIndicator, as it wasn't enough to improve visibility of selection * Moved BaseLayer.copy out of the Methods to Override section * Added optional texture param to Cel's set_content method (needed for use when deserializing, and otherwise helpful * set textures with set_content where needed * open_image_as_spritesheet_layer new_cels_linked part updated * clone layer with linked cels implemented. Removed copy_all_cels from layer classes * weaked how copied layers names are updated * Merge layers works with new linked cels now * Fixed texture on cel buttons not being updated on button setup * fixed bug where using set_content with new image texture would result in an empty texture * Open old .pxo with new linked cels * simplified backwards compatiblity * removed linked_cels * better linked cels backwards compatibility * Removed some old TODO comments * fixed linked_cels conversion bug when linked_cels is empty * Added undo for linking the previous cel when creating new cels with new_cels_linked enabled * Removed TODOs * Cleaned up some method variable naming * Cleaned up deserialization * combined matching for loops * Inlined BaseLayer.copy() where its used * gdformat * Fixed Translations,pot Co-authored-by: MrTriPie <MrTriPie>
2022-10-16 14:44:01 +00:00
for cel_index in project.selected_cels:
var frame: int = cel_index[0]
var layer: int = cel_index[1]
Basic Layer Groups and Timeline Refactor (#698) * Fixed issues with Shading tool Saturation and Value not always being right in Hue Shading mode * Shading tool hue shifting fixes and tweaks * Bringing over changes from layer groups brach, without any changes to layer blending * Some quick fixes to make it work again * Fixed some of the places where GroupLayers cause errors. Cel Buttons are now hidden when groups are collapsed * Layer drag highlighting (need to actually drop them correctly, also need to do cels) * Added more layer hierarchy related functions, organized the function order in the Layer classes a bit * Switched the layer type changing from string to int * Moved layer type enum to Global * Added get_layer_type_name(), currently used for the default layer name * Renamed the layer get_children/is_a_parent_of functions * changed get_layer_type_name() to get_default_name(number) * New layer drag and dropping behavior * Added read/write_image_data_from/to_pxo functions to Cel classes to handle saving/loading the binary image data for each cel type * Fixed warning * Added a line to child layers wich makes it easier to see where they are in the hierarchy * Fixed debugger warning * Fixed all cel types loading as PixelCels * Fixed spacing issue with cels when collapsing groups * Fixed bug when dropping a child layer to the bottom region of its parent group, where it would end up to far down (maybe disappearing) * updated temporary todo comments * Created a base scene for layer buttons and merged layer button script into one * Prevent the case of parenting to itself in layer drag and drop, fixed static reference to LayerButton still being BaseLayerButton * Use a base scene for CelButtons * First bit of the refactoring work * Several bits of refactoring * Fixed moving cels * Cleaned up Project.move_cel function * Fixed project_layer_removed * Updated change_frame_order on FrameButton. Some (not all) work on getting the layer UI updated when pressing buttons such as collapse/visible/lock * Bug fixes. Updating layer button's buttons * Fixed timeline selection issues when creating a new project. Some code cleanup * tweaks * Removed a bunch of commented out code * Removing more commented out code * Fixed bugs with timeline selectio. Fixed cels being placed in the reverse layer order when adding a frame * Changed add/remove_frame to add/remove_frames (multiple support) * Refactored copy_frames in animation timeline * added copy function to cel classes * added layer copy function * simplifed copy_frames a tiny bit * Updated TODO comments to categorize them and remove any that were already done * Turned Project.add/remove_layer into Project.add/remove_layers (multiple support), not yet tested * Seperated the layer cloning functionality in timeline's add_layer to its own function, since they're only used by one button, renamed to _on_Button_pressed naming scheme, added children support to the delete layer button * some TODOs * Added layer swapping * Added priorities to refactor TODOs * Simplified layer swapping code a little * Fixed performance regression on changing project, updated TODOs * Included _on_MergeDownLayer_pressed in timeline refactor * Cleaned up _on_MergeDownLayer_pressed refactor * If all frames are selected, prevent being able to remove all of them * Fixed cel linking when cloning layers/frames. Moved the copy function from cel classes to layer classes, splitting into copy_cel and copy_all_cels * Combined and rewrote the 2 project _toggle_layer_buttons_.. functions into 1 simpler _toggle_layer_buttons function * Simplified _toggle_layer_buttons some more * Added hierarchy support for move up/down layer buttons * Added toggle_frame_buttons method to project (extracted from _frame_changed). Called from main when setting up startup project. Removed _ from start of _toggle_layer_buttons name * Fixed duplicate_layers parent references being to the original layers * cleaned up project.move_layers method a bit * TODOs * moved the transform_content_confirm calls for the layer buttons in AnimationTimeline (Add/remove/clone) to the project layer modification functions * animation first/last_frame tweaks and un-press play buttons when the first/last_frame are the same in _on_AnimationTimer_timeout in AnimationTimeline * Cleaned up project_changed in ANimationTimeline a bit * Cleaned up project_layer_added in AnimationTimeline * Changed Layer classes get_default_name to set_name_to_default * Cleaned up LayerButton.drop_data slightly * Looked at some of my TODOs * cleaned up copying cels * Fixed CelButton linked_indicator not showing up right away when becoming linked * Cleand up link/unlink cel menu option a little. Fixed situatoin where trying to call button_setup on cel_button that doesn't exist anymore due to undo/redo * Fixed regression with copy_cel (linked) in when cloning a frame * Minor cleanup, more detailed comments, updated TODOs * more improved comments * Made focus_mode on Cel/Layer/FrameButton NONE to fix bug where it looks like one is selected after pressing it and adding a new Layer/Frame (but its just in the focus state, not the pressed state * Made AnimationTimeline.change_layer_order work a little more consistantly with LayerButton.drop_data, and fixed a minor bug in it * Updated comments and TODOs * cleanup * removed some code that should no longer be needed * updated comment * removed Project's frames and layers setters _frames_changed and _layers_changed * Made some 'for x in range(array.size())' just 'for x in array.size()' * updated comments/TODOs * Cel content changes intial * Added 'content' methods to Cel classes * Removed image var from PixelCelButton * Reusing PixelCelButton.gd on GroupCelButton scene * Renamed PixelCelButton.gd to CelButton.gd (as it will be used for all Cel Buttons) and deleted GroupCelButton.gd * Hide the TransparentChecker on GroupCelButton.tscn until a preview texture is added for GroupCels * TODOs, prevent memory leak when closing projects * Link/unlink cel cleanup : * Added _project param to _init methods of Layer classes * Added update_texture method to Cel classes (moving part from the update_texture and update_selected_cels_textures methods from Canvas.gd * Removed a temporary check (which also fixed another bug) * Clone child layers when cloning a layer * Added temp dummy get_image method to GroupCel, and use get_image when copying or picking colors * TODOs * Made open_image_as_spritesheet_layer work after the timeline refactor (still doesn't work with groups yet though). TODO comment updates * Added create_new_cel methods to Layer classes * Updated TODOs and comments * Renamed Layer class's create_empty_cel to new_empty_cel to match Project's new_emtpy_frame * Renamed create_layer/cel_button to instantiate_layer/cel_button * updated TODOs * prioritized TODOs * Fixed some warnings * removed commented out code from previous commit * Fixed export * Made open_image_as_new_frame work after timeline refactor * Fixed open_image_as_new_layer after timeline refactor * Some linked cel fixes * More linked cels fixes * cleanup * Optimized importing spreadsheet as new layer * Fixed Scale Image crash with Groups * Fixed onion skin with groups * Removed blend_mode from BaseLayer for now * Mostly fixed image effects * Fixed resize canvas * Fixed drag and drop not working with Cel Buttons on Group Layers * updated TODOs * Renamed Replace Frame (in open image) to Replace Cel * Continued renaming Replace Frame to Replace Cel * Made open_image_at_cels work after timeline refactor * Added get_layer_path method to BaseLayer * Replaced AtLayerSpinbox with AtLayerOption for Open Image as New Frame or Replace Cel * Updated TODOs * updated TODOs * Comments for cel content methods * fixed right clicking group cel button deselecting the button (even though cel is still selected * frame/layer modification methods comments * Removed unneeded size flags * TODO updates * Removed a loop that would never run from open_image_as_spritesheet_tab * TODO update * Combined BaseLayer.get_children_direct and get_children_recursive into a single get_children method with a bool for recursive. Added a get_child_count method * Removed unneeded frame paramaters from _on_DeleteFrame_pressed and _on_CopyFrame_pressed * TODO Updates * Removed unneeded code from delete_frames * Made delete_frames variable names more consistent with my other changes * Continuation * made variable names in copy_frames more consistent with rest of changes * Update TODOs * Removed TODOs for after this PR (moved to my notes) * Fixed crash when pasting image on Group * Fixed layer .visible check to be is_visible_in_hierarchy() * Removed some drag highlight polish code that didn't work * Removed code from Canvas update_texture and update_selected_cels_textures that was redundant * gdformat * gdformat * gdlint fixes * Fixed Cel button not having its linked indicator show when enabling new cels linked on a layer other than the current layer * Fixed crop image and centralize image * Added '# gdlint: ignore=max-public-methods' to the top of Project' * Fixed dragging cels to layer of different type crash * Formatted CelButton.gd Co-authored-by: MrTriPie <MrTriPie>
2022-09-28 18:59:49 +00:00
if frame < Global.frame_ids.get_child_count():
var frame_button: BaseButton = Global.frame_ids.get_child(frame)
frame_button.pressed = true
var container_child_count: int = Global.frames_container.get_child_count()
if layer < container_child_count:
var container = Global.frames_container.get_child(container_child_count - 1 - layer)
if frame < container.get_child_count():
var cel_button = container.get_child(frame)
cel_button.pressed = true
var layer_button = Global.layers_container.get_child(container_child_count - 1 - layer)
layer_button.pressed = true
func project_frame_added(frame: int) -> void:
var project: Project = Global.current_project
var button: Button = frame_button_node.instance()
button.frame = frame
Global.frame_ids.add_child(button)
Global.frame_ids.move_child(button, frame)
var layer := Global.frames_container.get_child_count() - 1
for container in Global.frames_container.get_children():
var cel_button = project.frames[frame].cels[layer].instantiate_cel_button()
cel_button.frame = frame
cel_button.layer = layer
container.add_child(cel_button)
container.move_child(cel_button, frame)
layer -= 1
func project_frame_removed(frame: int) -> void:
Global.frame_ids.get_child(frame).queue_free()
Global.frame_ids.remove_child(Global.frame_ids.get_child(frame))
for container in Global.frames_container.get_children():
container.get_child(frame).free()
func project_layer_added(layer: int) -> void:
var project: Project = Global.current_project
var layer_button: LayerButton = project.layers[layer].instantiate_layer_button()
layer_button.layer = layer
if project.layers[layer].name == "":
project.layers[layer].set_name_to_default(layer)
var layer_cel_container := HBoxContainer.new()
for f in project.frames.size():
var cel_button = project.frames[f].cels[layer].instantiate_cel_button()
cel_button.frame = f
cel_button.layer = layer
layer_cel_container.add_child(cel_button)
layer_button.visible = Global.current_project.layers[layer].is_expanded_in_hierarchy()
layer_cel_container.visible = layer_button.visible
Global.layers_container.add_child(layer_button)
var count := Global.layers_container.get_child_count()
Global.layers_container.move_child(layer_button, count - 1 - layer)
Global.frames_container.add_child(layer_cel_container)
Global.frames_container.move_child(layer_cel_container, count - 1 - layer)
func project_layer_removed(layer: int) -> void:
var count := Global.layers_container.get_child_count()
Global.layers_container.get_child(count - 1 - layer).free()
Global.frames_container.get_child(count - 1 - layer).free()
func project_cel_added(frame: int, layer: int) -> void:
var container := Global.frames_container.get_child(
Global.frames_container.get_child_count() - 1 - layer
)
var cel_button = Global.current_project.frames[frame].cels[layer].instantiate_cel_button()
cel_button.frame = frame
cel_button.layer = layer
container.add_child(cel_button)
container.move_child(cel_button, frame)
func project_cel_removed(frame: int, layer: int) -> void:
var container := Global.frames_container.get_child(
Global.frames_container.get_child_count() - 1 - layer
)
container.get_child(frame).queue_free()
container.remove_child(container.get_child(frame))