mirror of
https://github.com/Orama-Interactive/Pixelorama.git
synced 2025-01-18 17:19:50 +00:00
UndoRedo vol 9 - Add/Remove/Clone/Move/Merge Layers now have UndoRedo
This commit is contained in:
parent
c535ec801a
commit
ec7b2129ff
|
@ -283,7 +283,6 @@ func handle_redo(action : String) -> void:
|
||||||
Global.undo_redo.add_do_property(Global, "selected_pixels", Global.selected_pixels)
|
Global.undo_redo.add_do_property(Global, "selected_pixels", Global.selected_pixels)
|
||||||
Global.undo_redo.add_do_method(Global, "redo", canvases, layer_index)
|
Global.undo_redo.add_do_method(Global, "redo", canvases, layer_index)
|
||||||
Global.undo_redo.commit_action()
|
Global.undo_redo.commit_action()
|
||||||
print("Do: ", Global.undo_redo.get_current_action_name())
|
|
||||||
|
|
||||||
func update_texture(layer_index : int) -> void:
|
func update_texture(layer_index : int) -> void:
|
||||||
layers[layer_index][1].create_from_image(layers[layer_index][0], 0)
|
layers[layer_index][1].create_from_image(layers[layer_index][0], 0)
|
||||||
|
|
|
@ -165,7 +165,7 @@ func find_node_by_name(root, node_name) -> Node:
|
||||||
func undo(canvases : Array, layer_index : int = -1) -> void:
|
func undo(canvases : Array, layer_index : int = -1) -> void:
|
||||||
undos -= 1
|
undos -= 1
|
||||||
var action_name : String = undo_redo.get_current_action_name()
|
var action_name : String = undo_redo.get_current_action_name()
|
||||||
if action_name == "Draw" || action_name == "Rectangle Select" || action_name == "Scale":
|
if action_name == "Draw" || action_name == "Rectangle Select" || action_name == "Scale" || action_name == "Merge Layer":
|
||||||
for c in canvases:
|
for c in canvases:
|
||||||
if layer_index > -1:
|
if layer_index > -1:
|
||||||
c.update_texture(layer_index)
|
c.update_texture(layer_index)
|
||||||
|
@ -175,13 +175,19 @@ func undo(canvases : Array, layer_index : int = -1) -> void:
|
||||||
|
|
||||||
if action_name == "Scale":
|
if action_name == "Scale":
|
||||||
c.camera_zoom()
|
c.camera_zoom()
|
||||||
|
if "Layer" in action_name:
|
||||||
|
var current_layer_index := canvas.current_layer_index
|
||||||
|
canvas.generate_layer_panels()
|
||||||
|
if action_name == "Change Layer Order":
|
||||||
|
canvas.current_layer_index = current_layer_index
|
||||||
|
canvas.get_layer_container(current_layer_index).changed_selection()
|
||||||
print("Undo: ", action_name)
|
print("Undo: ", action_name)
|
||||||
|
|
||||||
func redo(canvases : Array, layer_index : int = -1) -> void:
|
func redo(canvases : Array, layer_index : int = -1) -> void:
|
||||||
if undos < undo_redo.get_version(): #If we did undo and then redo
|
if undos < undo_redo.get_version(): #If we did undo and then redo
|
||||||
undos = undo_redo.get_version()
|
undos = undo_redo.get_version()
|
||||||
var action_name : String = undo_redo.get_current_action_name()
|
var action_name : String = undo_redo.get_current_action_name()
|
||||||
if action_name == "Draw" || action_name == "Rectangle Select" || action_name == "Scale":
|
if action_name == "Draw" || action_name == "Rectangle Select" || action_name == "Scale" || action_name == "Merge Layer":
|
||||||
for c in canvases:
|
for c in canvases:
|
||||||
if layer_index > -1:
|
if layer_index > -1:
|
||||||
c.update_texture(layer_index)
|
c.update_texture(layer_index)
|
||||||
|
@ -191,6 +197,12 @@ func redo(canvases : Array, layer_index : int = -1) -> void:
|
||||||
|
|
||||||
if action_name == "Scale":
|
if action_name == "Scale":
|
||||||
c.camera_zoom()
|
c.camera_zoom()
|
||||||
|
if "Layer" in action_name:
|
||||||
|
var current_layer_index := canvas.current_layer_index
|
||||||
|
canvas.generate_layer_panels()
|
||||||
|
if action_name == "Change Layer Order":
|
||||||
|
canvas.current_layer_index = current_layer_index
|
||||||
|
canvas.get_layer_container(current_layer_index).changed_selection()
|
||||||
print("Redo: ", action_name)
|
print("Redo: ", action_name)
|
||||||
|
|
||||||
func change_frame() -> void:
|
func change_frame() -> void:
|
||||||
|
|
|
@ -528,15 +528,30 @@ func add_layer(is_new := true) -> void:
|
||||||
new_layer.lock()
|
new_layer.lock()
|
||||||
var new_layer_tex := ImageTexture.new()
|
var new_layer_tex := ImageTexture.new()
|
||||||
new_layer_tex.create_from_image(new_layer, 0)
|
new_layer_tex.create_from_image(new_layer, 0)
|
||||||
Global.canvas.layers.append([new_layer, new_layer_tex, null, true])
|
|
||||||
Global.canvas.generate_layer_panels()
|
var new_layers := Global.canvas.layers.duplicate()
|
||||||
|
new_layers.append([new_layer, new_layer_tex, null, true])
|
||||||
|
Global.undos += 1
|
||||||
|
Global.undo_redo.create_action("Add Layer")
|
||||||
|
Global.undo_redo.add_do_property(Global.canvas, "layers", new_layers)
|
||||||
|
Global.undo_redo.add_undo_property(Global.canvas, "layers", Global.canvas.layers)
|
||||||
|
Global.undo_redo.add_undo_method(Global, "undo", [Global.canvas])
|
||||||
|
Global.undo_redo.add_do_method(Global, "redo", [Global.canvas])
|
||||||
|
Global.undo_redo.commit_action()
|
||||||
|
|
||||||
func _on_AddLayerButton_pressed() -> void:
|
func _on_AddLayerButton_pressed() -> void:
|
||||||
add_layer()
|
add_layer()
|
||||||
|
|
||||||
func _on_RemoveLayerButton_pressed() -> void:
|
func _on_RemoveLayerButton_pressed() -> void:
|
||||||
Global.canvas.layers.remove(Global.canvas.current_layer_index)
|
var new_layers := Global.canvas.layers.duplicate()
|
||||||
Global.canvas.generate_layer_panels()
|
new_layers.remove(Global.canvas.current_layer_index)
|
||||||
|
Global.undos += 1
|
||||||
|
Global.undo_redo.create_action("Remove Layer")
|
||||||
|
Global.undo_redo.add_do_property(Global.canvas, "layers", new_layers)
|
||||||
|
Global.undo_redo.add_undo_property(Global.canvas, "layers", Global.canvas.layers)
|
||||||
|
Global.undo_redo.add_undo_method(Global, "undo", [Global.canvas])
|
||||||
|
Global.undo_redo.add_do_method(Global, "redo", [Global.canvas])
|
||||||
|
Global.undo_redo.commit_action()
|
||||||
|
|
||||||
func _on_MoveUpLayer_pressed() -> void:
|
func _on_MoveUpLayer_pressed() -> void:
|
||||||
change_layer_order(1)
|
change_layer_order(1)
|
||||||
|
@ -547,23 +562,41 @@ func _on_MoveDownLayer_pressed() -> void:
|
||||||
func change_layer_order(rate : int) -> void:
|
func change_layer_order(rate : int) -> void:
|
||||||
var change = Global.canvas.current_layer_index + rate
|
var change = Global.canvas.current_layer_index + rate
|
||||||
|
|
||||||
var temp = Global.canvas.layers[Global.canvas.current_layer_index]
|
var new_layers := Global.canvas.layers.duplicate()
|
||||||
Global.canvas.layers[Global.canvas.current_layer_index] = Global.canvas.layers[change]
|
var temp = new_layers[Global.canvas.current_layer_index]
|
||||||
Global.canvas.layers[change] = temp
|
new_layers[Global.canvas.current_layer_index] = new_layers[change]
|
||||||
|
new_layers[change] = temp
|
||||||
Global.canvas.generate_layer_panels()
|
Global.undo_redo.create_action("Change Layer Order")
|
||||||
Global.canvas.current_layer_index = change
|
Global.undo_redo.add_do_property(Global.canvas, "layers", new_layers)
|
||||||
Global.canvas.get_layer_container(Global.canvas.current_layer_index).changed_selection()
|
Global.undo_redo.add_do_property(Global.canvas, "current_layer_index", change)
|
||||||
|
Global.undo_redo.add_undo_property(Global.canvas, "layers", Global.canvas.layers)
|
||||||
|
Global.undo_redo.add_undo_property(Global.canvas, "current_layer_index", Global.canvas.current_layer_index)
|
||||||
|
Global.undo_redo.add_undo_method(Global, "undo", [Global.canvas])
|
||||||
|
Global.undo_redo.add_do_method(Global, "redo", [Global.canvas])
|
||||||
|
Global.undo_redo.commit_action()
|
||||||
|
|
||||||
func _on_CloneLayer_pressed() -> void:
|
func _on_CloneLayer_pressed() -> void:
|
||||||
add_layer(false)
|
add_layer(false)
|
||||||
|
|
||||||
func _on_MergeLayer_pressed() -> void:
|
func _on_MergeLayer_pressed() -> void:
|
||||||
|
var new_layers := Global.canvas.layers.duplicate()
|
||||||
|
new_layers.remove(Global.canvas.current_layer_index)
|
||||||
var selected_layer = Global.canvas.layers[Global.canvas.current_layer_index][0]
|
var selected_layer = Global.canvas.layers[Global.canvas.current_layer_index][0]
|
||||||
Global.canvas.layers[Global.canvas.current_layer_index - 1][0].blend_rect(selected_layer, Rect2(Global.canvas.position, Global.canvas.size), Vector2.ZERO)
|
|
||||||
Global.canvas.layers[Global.canvas.current_layer_index - 1][0].lock()
|
var new_layer := Image.new()
|
||||||
Global.canvas.update_texture(Global.canvas.current_layer_index - 1)
|
new_layer.copy_from(Global.canvas.layers[Global.canvas.current_layer_index - 1][0])
|
||||||
_on_RemoveLayerButton_pressed()
|
new_layer.blend_rect(selected_layer, Rect2(Global.canvas.position, Global.canvas.size), Vector2.ZERO)
|
||||||
|
|
||||||
|
Global.undos += 1
|
||||||
|
Global.undo_redo.create_action("Merge Layer")
|
||||||
|
Global.undo_redo.add_do_property(Global.canvas, "layers", new_layers)
|
||||||
|
Global.undo_redo.add_do_property(Global.canvas.layers[Global.canvas.current_layer_index - 1][0], "data", new_layer.data)
|
||||||
|
Global.undo_redo.add_undo_property(Global.canvas, "layers", Global.canvas.layers)
|
||||||
|
Global.undo_redo.add_undo_property(Global.canvas.layers[Global.canvas.current_layer_index - 1][0], "data", Global.canvas.layers[Global.canvas.current_layer_index - 1][0].data)
|
||||||
|
|
||||||
|
Global.undo_redo.add_undo_method(Global, "undo", [Global.canvas])
|
||||||
|
Global.undo_redo.add_do_method(Global, "redo", [Global.canvas])
|
||||||
|
Global.undo_redo.commit_action()
|
||||||
|
|
||||||
func _on_LeftIndicatorCheckbox_toggled(button_pressed) -> void:
|
func _on_LeftIndicatorCheckbox_toggled(button_pressed) -> void:
|
||||||
Global.left_square_indicator_visible = button_pressed
|
Global.left_square_indicator_visible = button_pressed
|
||||||
|
|
Loading…
Reference in a new issue