diff --git a/src/Autoload/DrawingAlgos.gd b/src/Autoload/DrawingAlgos.gd index 74d04a1f2..a6ddb25e9 100644 --- a/src/Autoload/DrawingAlgos.gd +++ b/src/Autoload/DrawingAlgos.gd @@ -450,8 +450,8 @@ func general_undo_scale() -> void: project.undo_redo.add_undo_property( project.y_symmetry_axis, "points", project.y_symmetry_axis.points ) - project.undo_redo.add_undo_method(Global, "undo") - project.undo_redo.add_do_method(Global, "redo") + 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() @@ -463,8 +463,8 @@ func general_do_centralize() -> void: func general_undo_centralize() -> void: var project: Project = Global.current_project - project.undo_redo.add_undo_method(Global, "undo") - project.undo_redo.add_do_method(Global, "redo") + 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() diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 56fb2eee4..286a38b9c 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -220,22 +220,30 @@ func general_redo(project: Project = current_project) -> void: notification_label("Redo: %s" % action_name) -func undo(_frame_index := -1, _layer_index := -1, project: Project = current_project) -> void: - general_undo(project) +func undo_or_redo( + undo: bool, frame_index := -1, layer_index := -1, project: Project = current_project +) -> void: + if undo: + general_undo(project) + else: + general_redo(project) var action_name: String = project.undo_redo.get_current_action_name() if ( - action_name == "Draw" - or action_name == "Draw Shape" - or action_name == "Rectangle Select" - or action_name == "Move Selection" - or action_name == "Scale" - or action_name == "Centralize" - or action_name == "Merge Layer" - or action_name == "Link Cel" - or action_name == "Unlink Cel" + action_name + in [ + "Draw", + "Draw Shape", + "Rectangle Select", + "Move Selection", + "Scale", + "Centralize", + "Merge Layer", + "Link Cel", + "Unlink Cel" + ] ): - if _layer_index > -1 and _frame_index > -1: - canvas.update_texture(_layer_index, _frame_index, project) + 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(): @@ -250,51 +258,7 @@ func undo(_frame_index := -1, _layer_index := -1, project: Project = current_pro elif "Frame" in action_name: # This actually means that frames.size is one, but it hasn't been updated yet - if project.frames.size() == 2: # Stop animating - play_forward.pressed = false - play_backwards.pressed = false - animation_timer.stop() - - elif "Move Cels" == action_name: - project.frames = project.frames # to call frames_changed - - canvas.update() - if !project.has_changed: - project.has_changed = true - if project == current_project: - self.window_title = window_title + "(*)" - - -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 == "Draw Shape" - or action_name == "Rectangle Select" - or action_name == "Move Selection" - or action_name == "Scale" - or action_name == "Centralize" - 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) - - canvas.selection.update() - if action_name == "Scale": - canvas.camera_zoom() - canvas.grid.update() - canvas.pixel_grid.update() - cursor_position_label.text = "[%s×%s]" % [project.size.x, project.size.y] - - elif "Frame" in action_name: - if project.frames.size() == 1: # Stop animating + if (undo and project.frames.size() == 2) or project.frames.size() == 1: # Stop animating play_forward.pressed = false play_backwards.pressed = false animation_timer.stop() diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd index 6715e12bd..1e2a294e9 100644 --- a/src/Autoload/OpenSave.gd +++ b/src/Autoload/OpenSave.gd @@ -476,8 +476,8 @@ func open_image_at_frame(image: Image, layer_index := 0, frame_index := 0) -> vo project.undo_redo.add_undo_property(project, "frames", project.frames) project.undo_redo.add_undo_property(project, "current_frame", project.current_frame) - project.undo_redo.add_do_method(Global, "redo") - project.undo_redo.add_undo_method(Global, "undo") + 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() @@ -500,8 +500,8 @@ func open_image_as_new_frame(image: Image, layer_index := 0) -> void: project.undos += 1 project.undo_redo.create_action("Add Frame") - project.undo_redo.add_do_method(Global, "redo") - project.undo_redo.add_undo_method(Global, "undo") + project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_undo_method(Global, "undo_or_redo", true) project.undo_redo.add_do_property(project, "frames", new_frames) project.undo_redo.add_do_property(project, "current_frame", new_frames.size() - 1) @@ -544,8 +544,8 @@ func open_image_as_new_layer(image: Image, file_name: String, frame_index := 0) project.undo_redo.add_undo_property(project, "layers", project.layers) project.undo_redo.add_undo_property(project, "current_frame", project.current_frame) - project.undo_redo.add_undo_method(Global, "undo") - project.undo_redo.add_do_method(Global, "redo") + 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() diff --git a/src/Classes/ImageEffect.gd b/src/Classes/ImageEffect.gd index 939d1567f..4635faf49 100644 --- a/src/Classes/ImageEffect.gd +++ b/src/Classes/ImageEffect.gd @@ -100,8 +100,8 @@ func _commit_undo(action: String, undo_data: Dictionary, project: Project) -> vo 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(Global, "redo", -1, -1, project) - project.undo_redo.add_undo_method(Global, "undo", -1, -1, project) + project.undo_redo.add_do_method(Global, "undo_or_redo", false, -1, -1, project) + project.undo_redo.add_undo_method(Global, "undo_or_redo", true, -1, -1, project) project.undo_redo.commit_action() diff --git a/src/Tools/Bucket.gd b/src/Tools/Bucket.gd index a3617663e..c15dc8aec 100644 --- a/src/Tools/Bucket.gd +++ b/src/Tools/Bucket.gd @@ -257,8 +257,8 @@ func commit_undo(action: String, undo_data: Dictionary) -> void: image.unlock() for image in undo_data: project.undo_redo.add_undo_property(image, "data", undo_data[image]) - project.undo_redo.add_do_method(Global, "redo", frame, layer) - project.undo_redo.add_undo_method(Global, "undo", frame, layer) + project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer) + project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer) project.undo_redo.commit_action() diff --git a/src/Tools/Draw.gd b/src/Tools/Draw.gd index b6b495339..cb96f6a55 100644 --- a/src/Tools/Draw.gd +++ b/src/Tools/Draw.gd @@ -166,8 +166,8 @@ func commit_undo(action: String) -> void: image.unlock() for image in _undo_data: project.undo_redo.add_undo_property(image, "data", _undo_data[image]) - project.undo_redo.add_do_method(Global, "redo", frame, layer) - project.undo_redo.add_undo_method(Global, "undo", frame, layer) + project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer) + project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer) project.undo_redo.commit_action() _undo_data.clear() diff --git a/src/Tools/Move.gd b/src/Tools/Move.gd index 4a09bc65d..b7ec99345 100644 --- a/src/Tools/Move.gd +++ b/src/Tools/Move.gd @@ -118,8 +118,8 @@ func commit_undo(action: String) -> void: image.unlock() for image in _undo_data: project.undo_redo.add_undo_property(image, "data", _undo_data[image]) - project.undo_redo.add_do_method(Global, "redo", frame, layer) - project.undo_redo.add_undo_method(Global, "undo", frame, layer) + project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer) + project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer) project.undo_redo.commit_action() _undo_data.clear() diff --git a/src/UI/Canvas/Selection.gd b/src/UI/Canvas/Selection.gd index 2ecfa52a4..4488eab13 100644 --- a/src/UI/Canvas/Selection.gd +++ b/src/UI/Canvas/Selection.gd @@ -600,9 +600,9 @@ func commit_undo(action: String, undo_data_tmp: Dictionary) -> void: if not image is Image: continue project.undo_redo.add_undo_property(image, "data", undo_data_tmp[image]) - project.undo_redo.add_do_method(Global, "redo") + project.undo_redo.add_do_method(Global, "undo_or_redo", false) project.undo_redo.add_do_method(project, "selection_bitmap_changed") - project.undo_redo.add_undo_method(Global, "undo") + project.undo_redo.add_undo_method(Global, "undo_or_redo", true) project.undo_redo.add_undo_method(project, "selection_bitmap_changed") project.undo_redo.commit_action() diff --git a/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd b/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd index 417f87d0b..8cbce5f79 100644 --- a/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd +++ b/src/UI/Dialogs/ImageEffects/FlipImageDialog.gd @@ -75,9 +75,9 @@ func _commit_undo(action: String, undo_data: Dictionary, project: Project) -> vo if not image is Image: continue project.undo_redo.add_undo_property(image, "data", undo_data[image]) - project.undo_redo.add_do_method(Global, "redo", -1, -1, project) + project.undo_redo.add_do_method(Global, "undo_or_redo", false, -1, -1, project) project.undo_redo.add_do_method(project, "selection_bitmap_changed") - project.undo_redo.add_undo_method(Global, "undo", -1, -1, project) + project.undo_redo.add_undo_method(Global, "undo_or_redo", true, -1, -1, project) project.undo_redo.add_undo_method(project, "selection_bitmap_changed") project.undo_redo.commit_action() diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index 0fdbcd063..9afb78f31 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -106,8 +106,8 @@ func add_frame() -> void: project.undos += 1 project.undo_redo.create_action("Add Frame") - project.undo_redo.add_do_method(Global, "redo") - project.undo_redo.add_undo_method(Global, "undo") + project.undo_redo.add_do_method(Global, "undo_or_redo", false) + project.undo_redo.add_undo_method(Global, "undo_or_redo", true) project.undo_redo.add_do_property(project, "frames", new_frames) project.undo_redo.add_do_property(project, "current_frame", project.current_frame + 1) @@ -205,8 +205,8 @@ func delete_frame(frame := -1) -> void: Global.current_project, "layers", Global.current_project.layers ) - Global.current_project.undo_redo.add_do_method(Global, "redo") - Global.current_project.undo_redo.add_undo_method(Global, "undo") + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) Global.current_project.undo_redo.commit_action() @@ -268,8 +268,8 @@ func copy_frame(frame := -1) -> void: Global.current_project.undos += 1 Global.current_project.undo_redo.create_action("Add Frame") - Global.current_project.undo_redo.add_do_method(Global, "redo") - Global.current_project.undo_redo.add_undo_method(Global, "undo") + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) Global.current_project.undo_redo.add_do_property(Global.current_project, "frames", new_frames) Global.current_project.undo_redo.add_do_property( @@ -579,8 +579,8 @@ func add_layer(is_new := true) -> void: Global.current_project, "layers", Global.current_project.layers ) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action() @@ -613,8 +613,8 @@ func _on_RemoveLayer_pressed() -> void: Global.current_project.undo_redo.add_undo_property( Global.current_project, "layers", Global.current_project.layers ) - Global.current_project.undo_redo.add_do_method(Global, "redo") - Global.current_project.undo_redo.add_undo_method(Global, "undo") + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) Global.current_project.undo_redo.commit_action() @@ -645,8 +645,8 @@ func change_layer_order(rate: int) -> void: Global.current_project, "current_layer", Global.current_project.current_layer ) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action() @@ -735,8 +735,8 @@ func _on_MergeDownLayer_pressed() -> void: Global.current_project, "current_layer", Global.current_project.current_layer ) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action() diff --git a/src/UI/Timeline/CelButton.gd b/src/UI/Timeline/CelButton.gd index 50ad556b7..878c5603a 100644 --- a/src/UI/Timeline/CelButton.gd +++ b/src/UI/Timeline/CelButton.gd @@ -143,8 +143,8 @@ func _on_PopupMenu_id_pressed(id: int) -> void: ) Global.current_project.undo_redo.add_undo_property(f, "cels", f.cels) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action() elif popup_menu.get_item_metadata(MenuOptions.LINK) == "Link Cel": @@ -164,8 +164,8 @@ func _on_PopupMenu_id_pressed(id: int) -> void: Global.current_project.undo_redo.add_undo_property( Global.current_project, "layers", Global.current_project.layers ) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action() @@ -178,10 +178,10 @@ func delete_cel_contents() -> void: project.undos += 1 project.undo_redo.create_action("Draw") project.undo_redo.add_undo_property(image, "data", data) - project.undo_redo.add_undo_method(Global, "undo", frame, layer, project) + project.undo_redo.add_undo_method(Global, "undo_or_redo", true, frame, layer, project) image.fill(0) project.undo_redo.add_do_property(image, "data", image.data) - project.undo_redo.add_do_method(Global, "redo", frame, layer, project) + project.undo_redo.add_do_method(Global, "undo_or_redo", false, frame, layer, project) project.undo_redo.commit_action() @@ -267,6 +267,6 @@ func drop_data(_pos, data) -> void: Global.current_project.frames[frame], "cels", Global.current_project.frames[frame].cels ) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action() diff --git a/src/UI/Timeline/FrameButton.gd b/src/UI/Timeline/FrameButton.gd index 8a978b28d..f4f6c7f1d 100644 --- a/src/UI/Timeline/FrameButton.gd +++ b/src/UI/Timeline/FrameButton.gd @@ -99,8 +99,8 @@ func change_frame_order(rate: int) -> void: Global.current_project, "current_frame", Global.current_project.current_frame ) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action() @@ -150,6 +150,6 @@ func drop_data(_pos, data) -> void: Global.current_project, "current_frame", Global.current_project.current_frame ) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action() diff --git a/src/UI/Timeline/FrameProperties.gd b/src/UI/Timeline/FrameProperties.gd index 225dfae50..e2cfc67af 100644 --- a/src/UI/Timeline/FrameProperties.gd +++ b/src/UI/Timeline/FrameProperties.gd @@ -34,6 +34,6 @@ func _on_FrameProperties_confirmed(): Global.current_project.frames[frame].duration ) - Global.current_project.undo_redo.add_do_method(Global, "redo") - Global.current_project.undo_redo.add_undo_method(Global, "undo") + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) Global.current_project.undo_redo.commit_action() diff --git a/src/UI/Timeline/LayerButton.gd b/src/UI/Timeline/LayerButton.gd index d6db2cf0f..3295db21c 100644 --- a/src/UI/Timeline/LayerButton.gd +++ b/src/UI/Timeline/LayerButton.gd @@ -169,6 +169,6 @@ func drop_data(_pos, data) -> void: Global.current_project, "layers", Global.current_project.layers ) - Global.current_project.undo_redo.add_undo_method(Global, "undo") - Global.current_project.undo_redo.add_do_method(Global, "redo") + Global.current_project.undo_redo.add_undo_method(Global, "undo_or_redo", true) + Global.current_project.undo_redo.add_do_method(Global, "undo_or_redo", false) Global.current_project.undo_redo.commit_action()