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/CelButton.gd

259 lines
10 KiB
GDScript3
Raw Normal View History

extends Button
enum MenuOptions { DELETE, LINK, PROPERTIES }
var frame := 0
var layer := 0
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
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 popup_menu: PopupMenu = get_node_or_null("PopupMenu")
onready var linked_indicator: Polygon2D = get_node_or_null("LinkedIndicator")
func _ready() -> void:
button_setup()
func button_setup() -> void:
rect_min_size.x = Global.animation_timeline.cel_size
rect_min_size.y = Global.animation_timeline.cel_size
hint_tooltip = tr("Frame: %s, Layer: %s") % [frame + 1, layer]
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 is_instance_valid(linked_indicator):
if Global.current_project.frames[frame] in Global.current_project.layers[layer].linked_cels:
linked_indicator.visible = true
popup_menu.set_item_text(MenuOptions.LINK, "Unlink Cel")
popup_menu.set_item_metadata(MenuOptions.LINK, "Unlink Cel")
else:
linked_indicator.visible = false
popup_menu.set_item_text(MenuOptions.LINK, "Link Cel")
popup_menu.set_item_metadata(MenuOptions.LINK, "Link Cel")
# Reset the checkers size because it assumes you want the same size as the canvas
var checker = $CelTexture/TransparentChecker
checker.rect_size = checker.get_parent().rect_size
cel = Global.current_project.frames[frame].cels[layer]
func _on_CelButton_resized() -> void:
get_node("CelTexture").rect_min_size.x = rect_min_size.x - 4
get_node("CelTexture").rect_min_size.y = rect_min_size.y - 4
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 is_instance_valid(linked_indicator):
linked_indicator.polygon[1].x = rect_min_size.x
linked_indicator.polygon[2].x = rect_min_size.x
linked_indicator.polygon[2].y = rect_min_size.y
linked_indicator.polygon[3].y = rect_min_size.y
func _on_CelButton_pressed() -> void:
var project = Global.current_project
if Input.is_action_just_released("left_mouse"):
Global.canvas.selection.transform_content_confirm()
var change_cel := true
var prev_curr_frame: int = project.current_frame
var prev_curr_layer: int = project.current_layer
if Input.is_action_pressed("shift"):
var frame_diff_sign = sign(frame - prev_curr_frame)
if frame_diff_sign == 0:
frame_diff_sign = 1
var layer_diff_sign = sign(layer - prev_curr_layer)
if layer_diff_sign == 0:
layer_diff_sign = 1
for i in range(prev_curr_frame, frame + frame_diff_sign, frame_diff_sign):
for j in range(prev_curr_layer, layer + layer_diff_sign, layer_diff_sign):
var frame_layer := [i, j]
if !project.selected_cels.has(frame_layer):
project.selected_cels.append(frame_layer)
elif Input.is_action_pressed("ctrl"):
var frame_layer := [frame, layer]
if project.selected_cels.has(frame_layer):
if project.selected_cels.size() > 1:
project.selected_cels.erase(frame_layer)
change_cel = false
else:
project.selected_cels.append(frame_layer)
else: # If the button is pressed without Shift or Control
project.selected_cels.clear()
var frame_layer := [frame, layer]
if !project.selected_cels.has(frame_layer):
project.selected_cels.append(frame_layer)
if change_cel:
project.current_frame = frame
project.current_layer = layer
else:
project.current_frame = project.selected_cels[0][0]
project.current_layer = project.selected_cels[0][1]
release_focus()
2019-12-21 02:20:55 +00:00
elif Input.is_action_just_released("right_mouse"):
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 is_instance_valid(popup_menu):
popup_menu.popup(Rect2(get_global_mouse_position(), Vector2.ONE))
pressed = !pressed
elif Input.is_action_just_released("middle_mouse"):
2019-12-21 02:20:55 +00:00
pressed = !pressed
_delete_cel_content()
else: # An example of this would be Space
pressed = !pressed
func _on_PopupMenu_id_pressed(id: int) -> void:
match id:
MenuOptions.DELETE:
_delete_cel_content()
MenuOptions.LINK:
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 f: Frame = project.frames[frame]
var cel_index: int = project.layers[layer].linked_cels.find(f)
var new_linked_cels: Array = project.layers[layer].linked_cels.duplicate()
if popup_menu.get_item_metadata(MenuOptions.LINK) == "Unlink 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
new_linked_cels.remove(cel_index)
project.undo_redo.create_action("Unlink Cel")
project.undo_redo.add_do_property(cel, "image_texture", ImageTexture.new())
project.undo_redo.add_undo_property(cel, "image_texture", cel.image_texture)
project.undo_redo.add_do_method(cel, "set_content", cel.copy_content())
project.undo_redo.add_undo_method(cel, "set_content", cel.get_content())
elif popup_menu.get_item_metadata(MenuOptions.LINK) == "Link 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
new_linked_cels.append(f)
project.undo_redo.create_action("Link Cel")
if new_linked_cels.size() > 1:
# If there are already linked cels, set the current cel's image
# to the first linked cel's 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
var linked_cel: BaseCel = project.layers[layer].linked_cels[0].cels[layer]
project.undo_redo.add_do_property(
cel, "image_texture", linked_cel.image_texture
)
project.undo_redo.add_undo_property(cel, "image_texture", cel.image_texture)
project.undo_redo.add_do_method(cel, "set_content", linked_cel.get_content())
project.undo_redo.add_undo_method(cel, "set_content", cel.get_content())
project.undo_redo.add_do_property(project.layers[layer], "linked_cels", new_linked_cels)
project.undo_redo.add_undo_property(
project.layers[layer], "linked_cels", project.layers[layer].linked_cels
)
# Remove and add a new cel button to update appearance (can't use self.button_setup
# because there is no guarantee that it will be the exact same cel button instance)
project.undo_redo.add_do_method(
Global.animation_timeline, "project_cel_removed", frame, layer
)
project.undo_redo.add_undo_method(
Global.animation_timeline, "project_cel_removed", frame, layer
)
project.undo_redo.add_do_method(
Global.animation_timeline, "project_cel_added", frame, layer
)
project.undo_redo.add_undo_method(
Global.animation_timeline, "project_cel_added", frame, layer
)
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.commit_action()
func _delete_cel_content() -> void:
var 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 empty_content = cel.create_empty_content()
var old_content = cel.get_content()
project.undos += 1
project.undo_redo.create_action("Draw")
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 project.frames[frame] in project.layers[layer].linked_cels:
for f in project.layers[layer].linked_cels:
project.undo_redo.add_do_method(f.cels[layer], "set_content", empty_content)
project.undo_redo.add_undo_method(f.cels[layer], "set_content", old_content)
else:
project.undo_redo.add_do_method(cel, "set_content", empty_content)
project.undo_redo.add_undo_method(cel, "set_content", old_content)
project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer, 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
project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer, project)
project.undo_redo.commit_action()
func get_drag_data(_position) -> Array:
var button := Button.new()
button.rect_size = rect_size
button.theme = Global.control.theme
var texture_rect := TextureRect.new()
texture_rect.rect_size = $CelTexture.rect_size
texture_rect.rect_position = $CelTexture.rect_position
texture_rect.expand = true
texture_rect.texture = $CelTexture.texture
button.add_child(texture_rect)
set_drag_preview(button)
return ["Cel", frame, layer]
func can_drop_data(_pos, data) -> bool:
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 typeof(data) == TYPE_ARRAY and data[0] == "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
var drag_frame = data[1]
var drag_layer = data[2]
if project.layers[drag_layer].get_script() == project.layers[layer].get_script():
if (
project.layers[layer] is GroupLayer
or not (
(project.frames[frame] in project.layers[layer].linked_cels)
or (project.frames[drag_frame] in project.layers[drag_layer].linked_cels)
)
):
if not (drag_frame == frame and drag_layer == layer):
var region: Rect2
if Input.is_action_pressed("ctrl") or layer != drag_layer: # Swap cels
region = get_global_rect()
else: # Move cels
if _get_region_rect(0, 0.5).has_point(get_global_mouse_position()): # Left
region = _get_region_rect(-0.125, 0.125)
region.position.x -= 2 # Container spacing
else: # Right
region = _get_region_rect(0.875, 1.125)
region.position.x += 2 # Container spacing
Global.animation_timeline.drag_highlight.rect_global_position = region.position
Global.animation_timeline.drag_highlight.rect_size = region.size
Global.animation_timeline.drag_highlight.visible = true
return true
Global.animation_timeline.drag_highlight.visible = false
return false
func drop_data(_pos, data) -> 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 drop_frame = data[1]
var drop_layer = data[2]
var project = Global.current_project
project.undo_redo.create_action("Move Cels")
if Input.is_action_pressed("ctrl") or layer != drop_layer: # Swap cels
project.undo_redo.add_do_method(project, "swap_cel", frame, layer, drop_frame, drop_layer)
project.undo_redo.add_undo_method(project, "swap_cel", frame, layer, drop_frame, drop_layer)
else: # Move cels
var to_frame: int
if _get_region_rect(0, 0.5).has_point(get_global_mouse_position()): # Left
to_frame = frame
else: # Right
to_frame = frame + 1
if drop_frame < frame:
to_frame -= 1
project.undo_redo.add_do_method(project, "move_cel", drop_frame, to_frame, layer)
project.undo_redo.add_undo_method(project, "move_cel", to_frame, drop_frame, layer)
project.undo_redo.add_do_property(project, "current_layer", layer)
project.undo_redo.add_undo_property(project, "current_layer", project.current_layer)
if frame != drop_frame: # If the cel moved to a different frame
project.undo_redo.add_do_property(project, "current_frame", frame)
project.undo_redo.add_undo_property(project, "current_frame", project.current_frame)
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 _get_region_rect(x_begin: float, x_end: float) -> Rect2:
var rect := get_global_rect()
rect.position.x += rect.size.x * x_begin
rect.size.x *= x_end - x_begin
return rect