From 548c78d023e375e3c692854cf56393a49c2170bd Mon Sep 17 00:00:00 2001 From: Relintai Date: Mon, 30 Nov 2020 13:57:07 +0100 Subject: [PATCH] The frames variable in Project is not an array anymore. --- addons/draw_gd/src/Autoload/DrawGD.gd | 6 +- addons/draw_gd/src/Autoload/OpenSave.gd | 20 +-- addons/draw_gd/src/Classes/Project.gd | 120 +++++++++--------- addons/draw_gd/src/Tools/Base.gd | 2 +- addons/draw_gd/src/Tools/Draw.gd | 19 +-- addons/draw_gd/src/UI/Canvas/Canvas.gd | 12 +- addons/draw_gd/src/UI/Canvas/CanvasPreview.gd | 5 +- addons/draw_gd/src/UI/Canvas/TileMode.gd | 2 +- .../draw_gd/src/UI/Dialogs/CreateNewImage.gd | 2 +- .../src/UI/Timeline/AnimationTimeline.gd | 101 ++++++++------- 10 files changed, 134 insertions(+), 155 deletions(-) diff --git a/addons/draw_gd/src/Autoload/DrawGD.gd b/addons/draw_gd/src/Autoload/DrawGD.gd index 525ba42..58c9dbb 100644 --- a/addons/draw_gd/src/Autoload/DrawGD.gd +++ b/addons/draw_gd/src/Autoload/DrawGD.gd @@ -308,14 +308,14 @@ func undo(_frame_index := -1, _layer_index := -1, project : Project = current_pr func redo(_frame_index := -1, _layer_index := -1, project : Project = current_project) -> void: general_redo(project) + var action_name : String = project.undo_redo.get_current_action_name() if action_name == "Draw" or action_name == "Rectangle Select" or action_name == "Scale" or action_name == "Merge Layer" or action_name == "Link Cel" or action_name == "Unlink Cel": if _layer_index > -1 and _frame_index > -1: canvas.update_texture(_layer_index, _frame_index, project) else: - for i in project.frames.size(): - for j in project.layers.size(): - canvas.update_texture(j, i, project) + for j in project.layers.size(): + canvas.update_texture(j, 0, project) if action_name == "Scale": canvas.camera_zoom() diff --git a/addons/draw_gd/src/Autoload/OpenSave.gd b/addons/draw_gd/src/Autoload/OpenSave.gd index 6465aa9..0c4e65a 100644 --- a/addons/draw_gd/src/Autoload/OpenSave.gd +++ b/addons/draw_gd/src/Autoload/OpenSave.gd @@ -67,16 +67,7 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void: file.close() return - var empty_project : bool = DrawGD.current_project.frames.size() == 1 and DrawGD.current_project.layers.size() == 1 and DrawGD.current_project.frames[0].cels[0].image.is_invisible() and DrawGD.current_project.animation_tags.size() == 0 - var new_project : Project - if empty_project: - new_project = DrawGD.current_project - new_project.frames = [] - new_project.layers = [] - new_project.animation_tags.clear() - new_project.name = path.get_file() - else: - new_project = Project.new(DrawGD, [], path.get_file()) + var new_project = Project.new(DrawGD, null, path.get_file()) var first_line := file.get_line() var dict := JSON.parse(first_line) @@ -106,12 +97,9 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void: Brushes.add_project_brush(DrawGD, image) file.close() - if !empty_project: - DrawGD.projects.append(new_project) - DrawGD.tabs.current_tab = DrawGD.tabs.get_tab_count() - 1 - else: - new_project.frames = new_project.frames # Just to call frames_changed - new_project.layers = new_project.layers # Just to call layers_changed + + DrawGD.projects.append(new_project) + DrawGD.tabs.current_tab = DrawGD.tabs.get_tab_count() - 1 DrawGD.canvas.camera_zoom() if not untitled_backup: diff --git a/addons/draw_gd/src/Classes/Project.gd b/addons/draw_gd/src/Classes/Project.gd index ea90af0..8539ef6 100644 --- a/addons/draw_gd/src/Classes/Project.gd +++ b/addons/draw_gd/src/Classes/Project.gd @@ -12,9 +12,8 @@ var size : Vector2 setget size_changed var undo_redo : UndoRedo var undos := 0 # The number of times we added undo properties var has_changed := false setget has_changed_changed -var frames := [] +var frames = null var layers := [] setget layers_changed # Array of Layers -var current_frame := 0 setget frame_changed var current_layer := 0 setget layer_changed var guides := [] # Array of Guides @@ -38,8 +37,16 @@ var file_name := "untitled" var file_format : int = Export.FileFormat.PNG -func _init(pDrawGD, _frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) -> void: - frames = _frames +func _init(pDrawGD, _frames = null, _name := tr("untitled"), _size := Vector2(64, 64)) -> void: + if !_frames: + frames = Frame.new() + else: + frames = _frames + + if _frames is Array: + print("dadad") + + name = _name size = _size select_all_pixels() @@ -109,7 +116,8 @@ func change_project() -> void: layer_container.label.text = layers[i].name layer_container.line_edit.text = layers[i].name - layer_container.cel_button.texture = frames[0].cels[0].image_texture + if frames && frames.cels.size() > 0: + layer_container.cel_button.texture = frames.cels[0].image_texture var layer_button = DrawGD.layers_container.get_child(DrawGD.layers_container.get_child_count() - 1 - current_layer) layer_button.pressed = true @@ -179,16 +187,10 @@ func change_project() -> void: func serialize() -> Dictionary: var layer_data := [] for layer in layers: - var linked_cels := [] - for cel in layer.linked_cels: - linked_cels.append(frames.find(cel)) - layer_data.append({ "name" : layer.name, "visible" : layer.visible, "locked" : layer.locked, - "new_cels_linked" : layer.new_cels_linked, - "linked_cels" : linked_cels, }) var guide_data := [] @@ -204,16 +206,16 @@ func serialize() -> Dictionary: guide_data.append({"type" : guide.type, "pos" : coords}) var frame_data := [] - for frame in frames: - var cel_data := [] - for cel in frame.cels: - cel_data.append({ - "opacity" : cel.opacity, -# "image_data" : cel.image.get_data() - }) - frame_data.append({ - "cels" : cel_data + var cel_data := [] + for cel in frames.cels: + cel_data.append({ + "opacity" : cel.opacity, +# "image_data" : cel.image.get_data() }) + frame_data.append({ + "cels" : cel_data + }) + var brush_data := [] for brush in brushes: brush_data.append({ @@ -249,23 +251,23 @@ func deserialize(dict : Dictionary) -> void: select_all_pixels() if dict.has("save_path"): DrawGD.opensave.current_save_paths[DrawGD.projects.find(self)] = dict.save_path + if dict.has("frames"): - for frame in dict.frames: - var cels := [] - for cel in frame.cels: - cels.append(Cel.new(Image.new(), cel.opacity)) - frames.append(Frame.new(cels)) + var frame = dict.frames + var cels := [] + for cel in frame.cels: + cels.append(Cel.new(Image.new(), cel.opacity)) + + frames = Frame.new(cels) + if dict.has("layers"): var layer_i := 0 for saved_layer in dict.layers: - var linked_cels := [] - for linked_cel_number in saved_layer.linked_cels: - linked_cels.append(frames[linked_cel_number]) - frames[linked_cel_number].cels[layer_i].image = linked_cels[0].cels[layer_i].image - frames[linked_cel_number].cels[layer_i].image_texture = linked_cels[0].cels[layer_i].image_texture - var layer := Layer.new(saved_layer.name, saved_layer.visible, saved_layer.locked, HBoxContainer.new(), saved_layer.new_cels_linked, linked_cels) + var layer := Layer.new(saved_layer.name, saved_layer.visible, saved_layer.locked, HBoxContainer.new()) layers.append(layer) layer_i += 1 + + if dict.has("guides"): for g in dict.guides: var guide := Guide.new() @@ -279,6 +281,7 @@ func deserialize(dict : Dictionary) -> void: guide.has_focus = false DrawGD.canvas.add_child(guide) guides.append(guide) + if dict.has("symmetry_points"): x_symmetry_point = dict.symmetry_points[0] y_symmetry_point = dict.symmetry_points[1] @@ -286,6 +289,7 @@ func deserialize(dict : Dictionary) -> void: x_symmetry_axis.points[1].y = floor(y_symmetry_point / 2 + 1) y_symmetry_axis.points[0].x = floor(x_symmetry_point / 2 + 1) y_symmetry_axis.points[1].x = floor(x_symmetry_point / 2 + 1) + if dict.has("export_directory_path"): directory_path = dict.export_directory_path if dict.has("export_file_name"): @@ -326,40 +330,39 @@ func layers_changed(value : Array) -> void: layer_container.label.text = layers[i].name layer_container.line_edit.text = layers[i].name - if frames.size() > 0: - layer_container.cel_button.texture = frames[0].cels[0].image_texture - - - var layer_button = DrawGD.layers_container.get_child(DrawGD.layers_container.get_child_count() - 1 - current_layer) - layer_button.pressed = true - self.current_frame = current_frame # Call frame_changed to update UI - toggle_layer_buttons_layers() - -func frame_changed(value : int) -> void: - current_frame = value - - for i in frames.size(): - var text_color := Color.white - if DrawGD.theme_type == DrawGD.Theme_Types.CARAMEL || DrawGD.theme_type == DrawGD.Theme_Types.LIGHT: - text_color = Color.black + if frames && frames.cels.size() > 0: + layer_container.cel_button.texture = frames.cels[0].image_texture - for layer in layers: # De-select all the other frames - if i < layer.frame_container.get_child_count(): - layer.frame_container.get_child(i).pressed = false - - # Select the new frame - if layers and current_frame < layers[current_layer].frame_container.get_child_count(): - layers[current_layer].frame_container.get_child(current_frame).pressed = true - DrawGD.canvas.update() DrawGD.transparent_checker._ready() # To update the rect size + var layer_button = DrawGD.layers_container.get_child(DrawGD.layers_container.get_child_count() - 1 - current_layer) + layer_button.pressed = true + toggle_layer_buttons_layers() + +#func frame_changed(value : int) -> void: +# var text_color := Color.white +# if DrawGD.theme_type == DrawGD.Theme_Types.CARAMEL || DrawGD.theme_type == DrawGD.Theme_Types.LIGHT: +# text_color = Color.black +# +# for layer in layers: # De-select all the other frames +# if 0 < layer.frame_container.get_child_count(): +# layer.frame_container.get_child(0).pressed = false +# +# # Select the new frame +# if layers and current_frame < layers[current_layer].frame_container.get_child_count(): +# layers[current_layer].frame_container.get_child(current_frame).pressed = true +# +# DrawGD.canvas.update() +# DrawGD.transparent_checker._ready() # To update the rect size + + func layer_changed(value : int) -> void: current_layer = value - if current_frame < frames.size(): - DrawGD.layer_opacity_slider.value = frames[current_frame].cels[current_layer].opacity * 100 - DrawGD.layer_opacity_spinbox.value = frames[current_frame].cels[current_layer].opacity * 100 + + DrawGD.layer_opacity_slider.value = frames.cels[current_layer].opacity * 100 + DrawGD.layer_opacity_spinbox.value = frames.cels[current_layer].opacity * 100 for container in DrawGD.layers_container.get_children(): container.pressed = false @@ -371,7 +374,6 @@ func layer_changed(value : int) -> void: toggle_layer_buttons_current_layer() yield(DrawGD.get_tree().create_timer(0.01), "timeout") - self.current_frame = current_frame # Call frame_changed to update UI func toggle_layer_buttons_layers() -> void: diff --git a/addons/draw_gd/src/Tools/Base.gd b/addons/draw_gd/src/Tools/Base.gd index 7dcac7f..86ed39b 100644 --- a/addons/draw_gd/src/Tools/Base.gd +++ b/addons/draw_gd/src/Tools/Base.gd @@ -95,7 +95,7 @@ func _get_tile_mode_rect() -> Rect2: func _get_draw_image() -> Image: var project : Project = DrawGD.current_project - return project.frames[project.current_frame].cels[project.current_layer].image + return project.frames.cels[project.current_layer].image func _flip_rect(rect : Rect2, size : Vector2, horizontal : bool, vertical : bool) -> Rect2: diff --git a/addons/draw_gd/src/Tools/Draw.gd b/addons/draw_gd/src/Tools/Draw.gd index 97aef4c..082d82e 100644 --- a/addons/draw_gd/src/Tools/Draw.gd +++ b/addons/draw_gd/src/Tools/Draw.gd @@ -158,10 +158,8 @@ func prepare_undo() -> void: func commit_undo(action : String) -> void: var redo_data = _get_undo_data() var project : Project = DrawGD.current_project - var frame := -1 var layer := -1 - frame = project.current_frame layer = project.current_layer project.undos += 1 @@ -170,8 +168,8 @@ func commit_undo(action : String) -> void: project.undo_redo.add_do_property(image, "data", redo_data[image]) for image in _undo_data: project.undo_redo.add_undo_property(image, "data", _undo_data[image]) - project.undo_redo.add_do_method(DrawGD, "redo", frame, layer) - project.undo_redo.add_undo_method(DrawGD, "undo", frame, layer) + project.undo_redo.add_do_method(DrawGD, "redo", 0, layer) + project.undo_redo.add_undo_method(DrawGD, "undo", 0, layer) project.undo_redo.commit_action() _undo_data.clear() @@ -510,13 +508,10 @@ func _line_angle_constraint(start : Vector2, end : Vector2) -> Dictionary: func _get_undo_data() -> Dictionary: var data = {} var project : Project = DrawGD.current_project - var frames := project.frames + var frame = project.frames - frames = [project.frames[project.current_frame]] - - for frame in frames: - var image : Image = frame.cels[project.current_layer].image - image.unlock() - data[image] = image.data - image.lock() + var image : Image = frame.cels[project.current_layer].image + image.unlock() + data[image] = image.data + image.lock() return data diff --git a/addons/draw_gd/src/UI/Canvas/Canvas.gd b/addons/draw_gd/src/UI/Canvas/Canvas.gd index 5d4252b..5f39ae0 100644 --- a/addons/draw_gd/src/UI/Canvas/Canvas.gd +++ b/addons/draw_gd/src/UI/Canvas/Canvas.gd @@ -2,7 +2,6 @@ tool class_name Canvas extends Node2D - var location := Vector2.ZERO var fill_color := Color(0, 0, 0, 0) var current_pixel := Vector2.ZERO # pretty much same as mouse_pos, but can be accessed externally @@ -16,7 +15,6 @@ onready var indicators = $Indicators var DrawGD : Node = null - # Called when the node enters the scene tree for the first time. func _enter_tree() -> void: var n : Node = get_parent() @@ -27,16 +25,15 @@ func _enter_tree() -> void: n = n.get_parent() var frame : Frame = new_empty_frame(true) - DrawGD.current_project.frames.append(frame) + DrawGD.current_project.frames = frame yield(get_tree().create_timer(0.2), "timeout") camera_zoom() - func _draw() -> void: DrawGD.second_viewport.get_child(0).get_node("CanvasPreview").update() DrawGD.small_preview_viewport.get_child(0).get_node("CanvasPreview").update() - var current_cels : Array = DrawGD.current_project.frames[DrawGD.current_project.current_frame].cels + var current_cels : Array = DrawGD.current_project.frames.cels # Draw current frame layers for i in range(DrawGD.current_project.layers.size()): @@ -46,7 +43,6 @@ func _draw() -> void: tile_mode.update() - func _input(event : InputEvent) -> void: # Don't process anything below if the input isn't a mouse event, or Shift/Ctrl. # This decreases CPU/GPU usage slightly. @@ -196,9 +192,7 @@ func handle_redo(_action : String, project : Project = DrawGD.current_project, l func update_texture(layer_index : int, frame_index := -1, project : Project = DrawGD.current_project) -> void: - if frame_index == -1: - frame_index = project.current_frame - var current_cel : Cel = project.frames[frame_index].cels[layer_index] + var current_cel : Cel = project.frames.cels[layer_index] current_cel.image_texture.create_from_image(current_cel.image, 0) if project == DrawGD.current_project: diff --git a/addons/draw_gd/src/UI/Canvas/CanvasPreview.gd b/addons/draw_gd/src/UI/Canvas/CanvasPreview.gd index 3d53b3d..841c366 100644 --- a/addons/draw_gd/src/UI/Canvas/CanvasPreview.gd +++ b/addons/draw_gd/src/UI/Canvas/CanvasPreview.gd @@ -17,11 +17,8 @@ func _enter_tree(): func _draw() -> void: var current_project : Project = DrawGD.current_project - if frame >= current_project.frames.size(): - frame = current_project.current_frame - - var current_cels : Array = current_project.frames[frame].cels + var current_cels : Array = current_project.frames.cels # Draw current frame layers for i in range(current_cels.size()): diff --git a/addons/draw_gd/src/UI/Canvas/TileMode.gd b/addons/draw_gd/src/UI/Canvas/TileMode.gd index d39aad8..94dbe7b 100644 --- a/addons/draw_gd/src/UI/Canvas/TileMode.gd +++ b/addons/draw_gd/src/UI/Canvas/TileMode.gd @@ -15,7 +15,7 @@ func _enter_tree(): n = n.get_parent() func _draw() -> void: - var current_cels : Array = DrawGD.current_project.frames[DrawGD.current_project.current_frame].cels + var current_cels : Array = DrawGD.current_project.frames.cels var size : Vector2 = DrawGD.current_project.size var positions := [ Vector2(location.x, location.y + size.y), # Down diff --git a/addons/draw_gd/src/UI/Dialogs/CreateNewImage.gd b/addons/draw_gd/src/UI/Dialogs/CreateNewImage.gd index aa31707..0235f0a 100644 --- a/addons/draw_gd/src/UI/Dialogs/CreateNewImage.gd +++ b/addons/draw_gd/src/UI/Dialogs/CreateNewImage.gd @@ -99,7 +99,7 @@ func _on_CreateNewImage_confirmed() -> void: DrawGD.canvas.fill_color = fill_color var frame : Frame = DrawGD.canvas.new_empty_frame(false, true, Vector2(width, height)) - var new_project := Project.new(DrawGD, [frame], tr("untitled"), Vector2(width, height).floor()) + var new_project := Project.new(DrawGD, frame, tr("untitled"), Vector2(width, height).floor()) new_project.layers.append(Layer.new()) DrawGD.projects.append(new_project) DrawGD.tabs.current_tab = DrawGD.tabs.get_tab_count() - 1 diff --git a/addons/draw_gd/src/UI/Timeline/AnimationTimeline.gd b/addons/draw_gd/src/UI/Timeline/AnimationTimeline.gd index 5c84a15..88728dc 100644 --- a/addons/draw_gd/src/UI/Timeline/AnimationTimeline.gd +++ b/addons/draw_gd/src/UI/Timeline/AnimationTimeline.gd @@ -21,19 +21,20 @@ func add_layer(is_new := true) -> void: DrawGD.current_project.undos += 1 DrawGD.current_project.undo_redo.create_action("Add Layer") - for f in DrawGD.current_project.frames: - var new_layer := Image.new() - if is_new: - new_layer.create(DrawGD.current_project.size.x, DrawGD.current_project.size.y, false, Image.FORMAT_RGBA8) - else: # Clone layer - new_layer.copy_from(f.cels[DrawGD.current_project.current_layer].image) + var f = DrawGD.current_project.frames + + var new_layer := Image.new() + if is_new: + new_layer.create(DrawGD.current_project.size.x, DrawGD.current_project.size.y, false, Image.FORMAT_RGBA8) + else: # Clone layer + new_layer.copy_from(f.cels[DrawGD.current_project.current_layer].image) - new_layer.lock() + new_layer.lock() - var new_cels : Array = f.cels.duplicate() - new_cels.append(Cel.new(new_layer, 1)) - DrawGD.current_project.undo_redo.add_do_property(f, "cels", new_cels) - DrawGD.current_project.undo_redo.add_undo_property(f, "cels", f.cels) + var new_cels : Array = f.cels.duplicate() + new_cels.append(Cel.new(new_layer, 1)) + DrawGD.current_project.undo_redo.add_do_property(f, "cels", new_cels) + DrawGD.current_project.undo_redo.add_undo_property(f, "cels", f.cels) DrawGD.current_project.undo_redo.add_do_property(DrawGD.current_project, "current_layer", DrawGD.current_project.current_layer + 1) DrawGD.current_project.undo_redo.add_do_property(DrawGD.current_project, "layers", new_layers) @@ -57,11 +58,11 @@ func _on_RemoveLayer_pressed() -> void: else: DrawGD.current_project.undo_redo.add_do_property(DrawGD.current_project, "current_layer", DrawGD.current_project.current_layer) - for f in DrawGD.current_project.frames: - var new_cels : Array = f.cels.duplicate() - new_cels.remove(DrawGD.current_project.current_layer) - DrawGD.current_project.undo_redo.add_do_property(f, "cels", new_cels) - DrawGD.current_project.undo_redo.add_undo_property(f, "cels", f.cels) + var f = DrawGD.current_project.frames + var new_cels : Array = f.cels.duplicate() + new_cels.remove(DrawGD.current_project.current_layer) + DrawGD.current_project.undo_redo.add_do_property(f, "cels", new_cels) + DrawGD.current_project.undo_redo.add_undo_property(f, "cels", f.cels) DrawGD.current_project.undo_redo.add_do_property(DrawGD.current_project, "layers", new_layers) DrawGD.current_project.undo_redo.add_undo_property(DrawGD.current_project, "current_layer", DrawGD.current_project.current_layer) @@ -79,13 +80,14 @@ func change_layer_order(rate : int) -> void: new_layers[DrawGD.current_project.current_layer] = new_layers[change] new_layers[change] = temp DrawGD.current_project.undo_redo.create_action("Change Layer Order") - for f in DrawGD.current_project.frames: - var new_cels : Array = f.cels.duplicate() - var temp_canvas = new_cels[DrawGD.current_project.current_layer] - new_cels[DrawGD.current_project.current_layer] = new_cels[change] - new_cels[change] = temp_canvas - DrawGD.current_project.undo_redo.add_do_property(f, "cels", new_cels) - DrawGD.current_project.undo_redo.add_undo_property(f, "cels", f.cels) + + var f = DrawGD.current_project.frames + var new_cels : Array = f.cels.duplicate() + var temp_canvas = new_cels[DrawGD.current_project.current_layer] + new_cels[DrawGD.current_project.current_layer] = new_cels[change] + new_cels[change] = temp_canvas + DrawGD.current_project.undo_redo.add_do_property(f, "cels", new_cels) + DrawGD.current_project.undo_redo.add_undo_property(f, "cels", f.cels) DrawGD.current_project.undo_redo.add_do_property(DrawGD.current_project, "current_layer", change) DrawGD.current_project.undo_redo.add_do_property(DrawGD.current_project, "layers", new_layers) @@ -107,35 +109,36 @@ func _on_MergeDownLayer_pressed() -> void: DrawGD.current_project.undos += 1 DrawGD.current_project.undo_redo.create_action("Merge Layer") - for f in DrawGD.current_project.frames: - var new_cels : Array = f.cels.duplicate() - for i in new_cels.size(): - new_cels[i] = Cel.new(new_cels[i].image, new_cels[i].opacity) - var selected_layer := Image.new() - selected_layer.copy_from(new_cels[DrawGD.current_project.current_layer].image) - selected_layer.lock() + var f = DrawGD.current_project.frames + + var new_cels : Array = f.cels.duplicate() + for i in new_cels.size(): + new_cels[i] = Cel.new(new_cels[i].image, new_cels[i].opacity) + var selected_layer := Image.new() + selected_layer.copy_from(new_cels[DrawGD.current_project.current_layer].image) + selected_layer.lock() - if f.cels[DrawGD.current_project.current_layer].opacity < 1: # If we have layer transparency - for xx in selected_layer.get_size().x: - for yy in selected_layer.get_size().y: - var pixel_color : Color = selected_layer.get_pixel(xx, yy) - var alpha : float = pixel_color.a * f.cels[DrawGD.current_project.current_layer].opacity - selected_layer.set_pixel(xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha)) + if f.cels[DrawGD.current_project.current_layer].opacity < 1: # If we have layer transparency + for xx in selected_layer.get_size().x: + for yy in selected_layer.get_size().y: + var pixel_color : Color = selected_layer.get_pixel(xx, yy) + var alpha : float = pixel_color.a * f.cels[DrawGD.current_project.current_layer].opacity + selected_layer.set_pixel(xx, yy, Color(pixel_color.r, pixel_color.g, pixel_color.b, alpha)) - var new_layer := Image.new() - new_layer.copy_from(f.cels[DrawGD.current_project.current_layer - 1].image) - new_layer.lock() - new_layer.blend_rect(selected_layer, Rect2(DrawGD.canvas.location, DrawGD.current_project.size), Vector2.ZERO) - new_cels.remove(DrawGD.current_project.current_layer) - if !selected_layer.is_invisible() and DrawGD.current_project.layers[DrawGD.current_project.current_layer - 1].linked_cels.size() > 1 and (f in DrawGD.current_project.layers[DrawGD.current_project.current_layer - 1].linked_cels): - new_layers[DrawGD.current_project.current_layer - 1].linked_cels.erase(f) - new_cels[DrawGD.current_project.current_layer - 1].image = new_layer - else: - DrawGD.current_project.undo_redo.add_do_property(f.cels[DrawGD.current_project.current_layer - 1].image, "data", new_layer.data) - DrawGD.current_project.undo_redo.add_undo_property(f.cels[DrawGD.current_project.current_layer - 1].image, "data", f.cels[DrawGD.current_project.current_layer - 1].image.data) + var new_layer := Image.new() + new_layer.copy_from(f.cels[DrawGD.current_project.current_layer - 1].image) + new_layer.lock() + new_layer.blend_rect(selected_layer, Rect2(DrawGD.canvas.location, DrawGD.current_project.size), Vector2.ZERO) + new_cels.remove(DrawGD.current_project.current_layer) + if !selected_layer.is_invisible() and DrawGD.current_project.layers[DrawGD.current_project.current_layer - 1].linked_cels.size() > 1 and (f in DrawGD.current_project.layers[DrawGD.current_project.current_layer - 1].linked_cels): + new_layers[DrawGD.current_project.current_layer - 1].linked_cels.erase(f) + new_cels[DrawGD.current_project.current_layer - 1].image = new_layer + else: + DrawGD.current_project.undo_redo.add_do_property(f.cels[DrawGD.current_project.current_layer - 1].image, "data", new_layer.data) + DrawGD.current_project.undo_redo.add_undo_property(f.cels[DrawGD.current_project.current_layer - 1].image, "data", f.cels[DrawGD.current_project.current_layer - 1].image.data) - DrawGD.current_project.undo_redo.add_do_property(f, "cels", new_cels) - DrawGD.current_project.undo_redo.add_undo_property(f, "cels", f.cels) + DrawGD.current_project.undo_redo.add_do_property(f, "cels", new_cels) + DrawGD.current_project.undo_redo.add_undo_property(f, "cels", f.cels) new_layers.remove(DrawGD.current_project.current_layer) DrawGD.current_project.undo_redo.add_do_property(DrawGD.current_project, "current_layer", DrawGD.current_project.current_layer - 1)