mirror of
https://github.com/Relintai/GraphicsEditor.git
synced 2025-05-04 03:07:56 +02:00
fixed layer redo/undo, added redo, fixed duplicate layer
This commit is contained in:
parent
fee893e07d
commit
fd5907a8b4
@ -191,15 +191,11 @@ func duplicate_layer(layer_name: String, new_layer_name: String):
|
|||||||
if layer.name == new_layer_name:
|
if layer.name == new_layer_name:
|
||||||
return
|
return
|
||||||
|
|
||||||
var dup_layer
|
var dup_layer :GELayer = find_layer_by_name(layer_name)
|
||||||
for layer in layers:
|
|
||||||
if layer.name == layer_name:
|
|
||||||
dup_layer = layer
|
|
||||||
break
|
|
||||||
|
|
||||||
var layer :GELayer = add_new_layer(new_layer_name)
|
var layer :GELayer = add_new_layer(new_layer_name)
|
||||||
layer.pixels = dup_layer.pixels.duplicate()
|
for idx in range(dup_layer.pixels.size()):
|
||||||
layer.name = new_layer_name
|
var pos = GEUtils.to_2D(idx, layer.layer_width)
|
||||||
|
layer.set_pixel(pos.x, pos.y, dup_layer.pixels[idx])
|
||||||
return layer
|
return layer
|
||||||
|
|
||||||
|
|
||||||
@ -281,6 +277,10 @@ func set_pixel(x: int, y: int, color: Color):
|
|||||||
_set_pixel(active_layer, x, y, color)
|
_set_pixel(active_layer, x, y, color)
|
||||||
|
|
||||||
|
|
||||||
|
func _set_pixel_v(layer: GELayer, v: Vector2, color: Color):
|
||||||
|
_set_pixel(layer, v.x, v.y, color)
|
||||||
|
|
||||||
|
|
||||||
func _set_pixel(layer: GELayer, x: int, y: int, color: Color):
|
func _set_pixel(layer: GELayer, x: int, y: int, color: Color):
|
||||||
if not is_inside_canvas(x, y):
|
if not is_inside_canvas(x, y):
|
||||||
return
|
return
|
||||||
|
@ -12,6 +12,7 @@ enum Tools {
|
|||||||
BRIGHTEN
|
BRIGHTEN
|
||||||
COLORPICKER,
|
COLORPICKER,
|
||||||
CUT,
|
CUT,
|
||||||
|
PASTECUT,
|
||||||
}
|
}
|
||||||
|
|
||||||
var layer_buttons: Control
|
var layer_buttons: Control
|
||||||
@ -115,7 +116,7 @@ func _input(event):
|
|||||||
if event.scancode == KEY_Z and event.is_pressed() and not event.is_echo():
|
if event.scancode == KEY_Z and event.is_pressed() and not event.is_echo():
|
||||||
undo_action()
|
undo_action()
|
||||||
elif event.scancode == KEY_Y and event.is_pressed() and not event.is_echo():
|
elif event.scancode == KEY_Y and event.is_pressed() and not event.is_echo():
|
||||||
pass
|
redo_action()
|
||||||
|
|
||||||
_handle_zoom(event)
|
_handle_zoom(event)
|
||||||
|
|
||||||
@ -295,6 +296,10 @@ func brush_process():
|
|||||||
find_node("ColorPicker").color = selected_color
|
find_node("ColorPicker").color = selected_color
|
||||||
Tools.CUT:
|
Tools.CUT:
|
||||||
do_action([cell_mouse_position, last_cell_mouse_position, selected_color])
|
do_action([cell_mouse_position, last_cell_mouse_position, selected_color])
|
||||||
|
Tools.PASTECUT:
|
||||||
|
do_action([cell_mouse_position, last_cell_mouse_position,
|
||||||
|
_selection_cells, _selection_colors,
|
||||||
|
_cut_pos, _cut_size])
|
||||||
Tools.RAINBOW:
|
Tools.RAINBOW:
|
||||||
do_action([cell_mouse_position, last_cell_mouse_position])
|
do_action([cell_mouse_position, last_cell_mouse_position])
|
||||||
update()
|
update()
|
||||||
@ -354,6 +359,7 @@ func _on_Save_pressed():
|
|||||||
|
|
||||||
func do_action(data: Array):
|
func do_action(data: Array):
|
||||||
if _current_action == null:
|
if _current_action == null:
|
||||||
|
print("clear redo")
|
||||||
_redo_history.clear()
|
_redo_history.clear()
|
||||||
_current_action.do_action(paint_canvas, data)
|
_current_action.do_action(paint_canvas, data)
|
||||||
|
|
||||||
@ -366,8 +372,8 @@ func commit_action():
|
|||||||
var commit_data = _current_action.commit_action(paint_canvas)
|
var commit_data = _current_action.commit_action(paint_canvas)
|
||||||
var action = get_action()
|
var action = get_action()
|
||||||
action.action_data = _current_action.action_data.duplicate(true)
|
action.action_data = _current_action.action_data.duplicate(true)
|
||||||
|
|
||||||
_actions_history.push_back(action)
|
_actions_history.push_back(action)
|
||||||
|
_redo_history.clear()
|
||||||
|
|
||||||
match brush_mode:
|
match brush_mode:
|
||||||
Tools.CUT:
|
Tools.CUT:
|
||||||
@ -375,8 +381,8 @@ func commit_action():
|
|||||||
continue
|
continue
|
||||||
_cut_pos = _current_action.mouse_start_pos
|
_cut_pos = _current_action.mouse_start_pos
|
||||||
_cut_size = _current_action.mouse_end_pos - _current_action.mouse_start_pos
|
_cut_size = _current_action.mouse_end_pos - _current_action.mouse_start_pos
|
||||||
_selection_cells = _current_action.action_data.do.cells.duplicate()
|
_selection_cells = _current_action.action_data.redo.cells.duplicate()
|
||||||
_selection_colors = _current_action.action_data.do.colors.duplicate()
|
_selection_colors = _current_action.action_data.redo.colors.duplicate()
|
||||||
_just_cut = true
|
_just_cut = true
|
||||||
|
|
||||||
_current_action = null
|
_current_action = null
|
||||||
@ -389,13 +395,23 @@ func commit_action():
|
|||||||
|
|
||||||
|
|
||||||
func redo_action():
|
func redo_action():
|
||||||
pass
|
if _redo_history.empty():
|
||||||
|
print("nothing to redo")
|
||||||
|
return
|
||||||
|
var action = _redo_history.pop_back()
|
||||||
|
if not action:
|
||||||
|
return
|
||||||
|
_actions_history.append(action)
|
||||||
|
action.redo_action(paint_canvas)
|
||||||
|
paint_canvas.update()
|
||||||
|
print("redo action")
|
||||||
|
|
||||||
|
|
||||||
func undo_action():
|
func undo_action():
|
||||||
var action = _actions_history.pop_back()
|
var action = _actions_history.pop_back()
|
||||||
if not action:
|
if not action:
|
||||||
return
|
return
|
||||||
|
_redo_history.append(action)
|
||||||
action.undo_action(paint_canvas)
|
action.undo_action(paint_canvas)
|
||||||
update()
|
update()
|
||||||
paint_canvas.update()
|
paint_canvas.update()
|
||||||
@ -554,12 +570,9 @@ func remove_active_layer():
|
|||||||
layer_buttons.remove_child(_layer_button_ref[layer_name])
|
layer_buttons.remove_child(_layer_button_ref[layer_name])
|
||||||
_layer_button_ref[layer_name].queue_free()
|
_layer_button_ref[layer_name].queue_free()
|
||||||
_layer_button_ref.erase(layer_name)
|
_layer_button_ref.erase(layer_name)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
func duplicate_active_layer():
|
func duplicate_active_layer():
|
||||||
# copy the last layer button (or the initial one)
|
|
||||||
|
|
||||||
var new_layer_button = layer_buttons.get_child(0).duplicate()
|
var new_layer_button = layer_buttons.get_child(0).duplicate()
|
||||||
layer_buttons.add_child_below_node(
|
layer_buttons.add_child_below_node(
|
||||||
layer_buttons.get_child(layer_buttons.get_child_count() - 1), new_layer_button, true)
|
layer_buttons.get_child(layer_buttons.get_child_count() - 1), new_layer_button, true)
|
||||||
@ -568,15 +581,9 @@ func duplicate_active_layer():
|
|||||||
new_layer_button.find_node("Select").text = "Layer " + str(_total_added_layers)
|
new_layer_button.find_node("Select").text = "Layer " + str(_total_added_layers)
|
||||||
|
|
||||||
var new_layer = paint_canvas.duplicate_layer(paint_canvas.active_layer.name, new_layer_button.name)
|
var new_layer = paint_canvas.duplicate_layer(paint_canvas.active_layer.name, new_layer_button.name)
|
||||||
|
new_layer.update_texture()
|
||||||
_layer_button_ref[new_layer.name] = new_layer_button
|
_layer_button_ref[new_layer.name] = new_layer_button
|
||||||
|
|
||||||
new_layer_button.find_node("Select").disconnect("pressed", self, "select_layer")
|
|
||||||
new_layer_button.find_node("Visible").disconnect("pressed", self, "toggle_layer_visibility")
|
|
||||||
new_layer_button.find_node("Up").disconnect("pressed", self, "move_down")
|
|
||||||
new_layer_button.find_node("Down").disconnect("pressed", self, "move_up")
|
|
||||||
new_layer_button.find_node("Lock").disconnect("pressed", self, "lock_layer")
|
|
||||||
|
|
||||||
new_layer_button.find_node("Select").connect("pressed", self, "select_layer", [new_layer_button.name])
|
new_layer_button.find_node("Select").connect("pressed", self, "select_layer", [new_layer_button.name])
|
||||||
new_layer_button.find_node("Visible").connect("pressed", self, "toggle_layer_visibility",
|
new_layer_button.find_node("Visible").connect("pressed", self, "toggle_layer_visibility",
|
||||||
[new_layer_button.find_node("Visible"), new_layer_button.name])
|
[new_layer_button.find_node("Visible"), new_layer_button.name])
|
||||||
@ -584,7 +591,7 @@ func duplicate_active_layer():
|
|||||||
new_layer_button.find_node("Down").connect("pressed", self, "move_up", [new_layer_button])
|
new_layer_button.find_node("Down").connect("pressed", self, "move_up", [new_layer_button])
|
||||||
new_layer_button.find_node("Lock").connect("pressed", self, "lock_layer", [new_layer_button, new_layer_button.name])
|
new_layer_button.find_node("Lock").connect("pressed", self, "lock_layer", [new_layer_button, new_layer_button.name])
|
||||||
|
|
||||||
print("added layer: ", new_layer.name, " (total:", layer_buttons.size(), ")")
|
print("added layer: ", new_layer.name, " (total:", layer_buttons.get_child_count(), ")")
|
||||||
|
|
||||||
|
|
||||||
func move_up(layer_btn):
|
func move_up(layer_btn):
|
||||||
|
@ -6,15 +6,15 @@ var action_data = {}
|
|||||||
|
|
||||||
|
|
||||||
func _init():
|
func _init():
|
||||||
action_data["do"] = {}
|
action_data["redo"] = {}
|
||||||
action_data["undo"] = {}
|
action_data["undo"] = {}
|
||||||
action_data["preview"] = {}
|
action_data["preview"] = {}
|
||||||
|
|
||||||
|
|
||||||
func do_action(canvas, data: Array):
|
func do_action(canvas, data: Array):
|
||||||
if not "cells" in action_data.do:
|
if not "cells" in action_data.redo:
|
||||||
action_data.do["cells"] = []
|
action_data.redo["cells"] = []
|
||||||
action_data.do["colors"] = []
|
action_data.redo["colors"] = []
|
||||||
|
|
||||||
if not "cells" in action_data.undo:
|
if not "cells" in action_data.undo:
|
||||||
action_data.undo["cells"] = []
|
action_data.undo["cells"] = []
|
||||||
@ -24,9 +24,8 @@ func do_action(canvas, data: Array):
|
|||||||
action_data.preview["cells"] = []
|
action_data.preview["cells"] = []
|
||||||
action_data.preview["colors"] = []
|
action_data.preview["colors"] = []
|
||||||
|
|
||||||
if "layer" in action_data.do:
|
if not "layer" in action_data:
|
||||||
action_data.do["layer"] = canvas.active_layer
|
action_data["layer"] = canvas.active_layer
|
||||||
action_data.undo["layer"] = canvas.active_layer
|
|
||||||
|
|
||||||
|
|
||||||
func commit_action(canvas):
|
func commit_action(canvas):
|
||||||
@ -38,7 +37,11 @@ func undo_action(canvas):
|
|||||||
print("NO IMPL undo_action ")
|
print("NO IMPL undo_action ")
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
print("NO IMPL redo_action ")
|
||||||
|
|
||||||
|
|
||||||
func can_commit() -> bool:
|
func can_commit() -> bool:
|
||||||
return not action_data.do.empty()
|
return not action_data.redo.empty()
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,8 +14,8 @@ func do_action(canvas, data: Array):
|
|||||||
var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1)
|
var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1)
|
||||||
canvas.set_pixel_v(pixel, brightened_color)
|
canvas.set_pixel_v(pixel, brightened_color)
|
||||||
|
|
||||||
action_data.do.cells.append(pixel)
|
action_data.redo.cells.append(pixel)
|
||||||
action_data.do.colors.append(brightened_color)
|
action_data.redo.colors.append(brightened_color)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
||||||
@ -23,21 +23,26 @@ func do_action(canvas, data: Array):
|
|||||||
var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1)
|
var brightened_color = canvas.get_pixel_v(pixel).lightened(0.1)
|
||||||
canvas.set_pixel_v(pixel, brightened_color)
|
canvas.set_pixel_v(pixel, brightened_color)
|
||||||
|
|
||||||
action_data.do.cells.append(pixel)
|
action_data.redo.cells.append(pixel)
|
||||||
action_data.do.colors.append(brightened_color)
|
action_data.redo.colors.append(brightened_color)
|
||||||
|
|
||||||
|
|
||||||
func commit_action(canvas):
|
func commit_action(canvas):
|
||||||
var cells = action_data.do.cells
|
var cells = action_data.redo.cells
|
||||||
var colors = action_data.do.colors
|
var colors = action_data.redo.colors
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
@ -17,21 +17,29 @@ func do_action(canvas: GECanvas, data: Array):
|
|||||||
|
|
||||||
canvas.set_pixel_v(p, data[2])
|
canvas.set_pixel_v(p, data[2])
|
||||||
|
|
||||||
action_data.do.cells.append(p)
|
action_data.redo.cells.append(p)
|
||||||
action_data.do.colors.append(data[2])
|
action_data.redo.colors.append(data[2])
|
||||||
|
|
||||||
|
|
||||||
func commit_action(canvas):
|
func commit_action(canvas):
|
||||||
var cells = action_data.do.cells
|
var cells = action_data.redo.cells
|
||||||
var colors = action_data.do.colors
|
var colors = action_data.redo.colors
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,8 +19,8 @@ func do_action(canvas, data: Array):
|
|||||||
|
|
||||||
canvas.set_pixel_v(pixel, data[2])
|
canvas.set_pixel_v(pixel, data[2])
|
||||||
|
|
||||||
action_data.do.cells.append(pixel)
|
action_data.redo.cells.append(pixel)
|
||||||
action_data.do.colors.append(data[2])
|
action_data.redo.colors.append(data[2])
|
||||||
|
|
||||||
|
|
||||||
func commit_action(canvas):
|
func commit_action(canvas):
|
||||||
@ -32,8 +32,16 @@ func commit_action(canvas):
|
|||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -50,8 +50,8 @@ func commit_action(canvas):
|
|||||||
if color == Color.transparent:
|
if color == Color.transparent:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
action_data.do.cells.append(pos)
|
action_data.redo.cells.append(pos)
|
||||||
action_data.do.colors.append(canvas.get_pixel_v(pos))
|
action_data.redo.colors.append(canvas.get_pixel_v(pos))
|
||||||
|
|
||||||
canvas.set_pixel_v(pos, Color.transparent)
|
canvas.set_pixel_v(pos, Color.transparent)
|
||||||
|
|
||||||
@ -63,8 +63,16 @@ func commit_action(canvas):
|
|||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -13,8 +13,8 @@ func do_action(canvas, data: Array):
|
|||||||
var darkened_color = canvas.get_pixel_v(pixel).darkened(dark_factor)
|
var darkened_color = canvas.get_pixel_v(pixel).darkened(dark_factor)
|
||||||
canvas.set_pixel_v(pixel, darkened_color)
|
canvas.set_pixel_v(pixel, darkened_color)
|
||||||
|
|
||||||
action_data.do.cells.append(pixel)
|
action_data.redo.cells.append(pixel)
|
||||||
action_data.do.colors.append(darkened_color)
|
action_data.redo.colors.append(darkened_color)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
||||||
@ -22,21 +22,29 @@ func do_action(canvas, data: Array):
|
|||||||
var darkened_color = canvas.get_pixel_v(pixel).darkened(dark_factor)
|
var darkened_color = canvas.get_pixel_v(pixel).darkened(dark_factor)
|
||||||
canvas.set_pixel_v(pixel, darkened_color)
|
canvas.set_pixel_v(pixel, darkened_color)
|
||||||
|
|
||||||
action_data.do.cells.append(pixel)
|
action_data.redo.cells.append(pixel)
|
||||||
action_data.do.colors.append(darkened_color)
|
action_data.redo.colors.append(darkened_color)
|
||||||
|
|
||||||
|
|
||||||
func commit_action(canvas):
|
func commit_action(canvas):
|
||||||
var cells = action_data.do.cells
|
var cells = action_data.redo.cells
|
||||||
var colors = action_data.do.colors
|
var colors = action_data.redo.colors
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -31,8 +31,8 @@ func commit_action(canvas):
|
|||||||
|
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas.set_pixel_v(cells[idx], colors[idx])
|
||||||
|
|
||||||
action_data.do.cells.append(cells[idx])
|
action_data.redo.cells.append(cells[idx])
|
||||||
action_data.do.colors.append(colors[idx])
|
action_data.redo.colors.append(colors[idx])
|
||||||
mouse_start_pos = null
|
mouse_start_pos = null
|
||||||
return []
|
return []
|
||||||
|
|
||||||
@ -40,8 +40,16 @@ func commit_action(canvas):
|
|||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,27 +9,33 @@ func do_action(canvas, data: Array):
|
|||||||
for pixel in pixels:
|
for pixel in pixels:
|
||||||
if pixel in action_data.undo.cells or canvas.get_pixel_v(pixel) == null:
|
if pixel in action_data.undo.cells or canvas.get_pixel_v(pixel) == null:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
||||||
action_data.undo.cells.append(pixel)
|
action_data.undo.cells.append(pixel)
|
||||||
|
|
||||||
canvas.set_pixel_v(pixel, data[2])
|
canvas.set_pixel_v(pixel, data[2])
|
||||||
|
|
||||||
action_data.do.cells.append(pixel)
|
action_data.redo.cells.append(pixel)
|
||||||
action_data.do.colors.append(data[2])
|
action_data.redo.colors.append(data[2])
|
||||||
|
|
||||||
|
|
||||||
func commit_action(canvas):
|
func commit_action(canvas):
|
||||||
var cells = action_data.do.cells
|
var cells = action_data.redo.cells
|
||||||
var colors = action_data.do.colors
|
var colors = action_data.redo.colors
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,12 +11,12 @@ func do_action(canvas, data: Array):
|
|||||||
var color = GEUtils.random_color()
|
var color = GEUtils.random_color()
|
||||||
canvas.set_pixel_v(pixel, color)
|
canvas.set_pixel_v(pixel, color)
|
||||||
|
|
||||||
var idx = action_data.do.cells.find(pixel)
|
var idx = action_data.redo.cells.find(pixel)
|
||||||
action_data.do.cells.remove(idx)
|
action_data.redo.cells.remove(idx)
|
||||||
action_data.do.colors.remove(idx)
|
action_data.redo.colors.remove(idx)
|
||||||
|
|
||||||
action_data.do.cells.append(pixel)
|
action_data.redo.cells.append(pixel)
|
||||||
action_data.do.colors.append(color)
|
action_data.redo.colors.append(color)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
action_data.undo.colors.append(canvas.get_pixel_v(pixel))
|
||||||
@ -25,21 +25,29 @@ func do_action(canvas, data: Array):
|
|||||||
var color = GEUtils.random_color()
|
var color = GEUtils.random_color()
|
||||||
canvas.set_pixel_v(pixel, color)
|
canvas.set_pixel_v(pixel, color)
|
||||||
|
|
||||||
action_data.do.cells.append(pixel)
|
action_data.redo.cells.append(pixel)
|
||||||
action_data.do.colors.append(color)
|
action_data.redo.colors.append(color)
|
||||||
|
|
||||||
|
|
||||||
func commit_action(canvas):
|
func commit_action(canvas):
|
||||||
var cells = action_data.do.cells
|
var cells = action_data.redo.cells
|
||||||
var colors = action_data.do.colors
|
var colors = action_data.redo.colors
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -38,11 +38,10 @@ func commit_action(canvas):
|
|||||||
var cells = action_data.preview.cells
|
var cells = action_data.preview.cells
|
||||||
var colors = action_data.preview.colors
|
var colors = action_data.preview.colors
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
|
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas.set_pixel_v(cells[idx], colors[idx])
|
||||||
|
|
||||||
action_data.do.cells.append(cells[idx])
|
action_data.redo.cells.append(cells[idx])
|
||||||
action_data.do.colors.append(colors[idx])
|
action_data.redo.colors.append(colors[idx])
|
||||||
mouse_start_pos = null
|
mouse_start_pos = null
|
||||||
return []
|
return []
|
||||||
|
|
||||||
@ -50,8 +49,16 @@ func commit_action(canvas):
|
|||||||
func undo_action(canvas):
|
func undo_action(canvas):
|
||||||
var cells = action_data.undo.cells
|
var cells = action_data.undo.cells
|
||||||
var colors = action_data.undo.colors
|
var colors = action_data.undo.colors
|
||||||
|
print(action_data.keys())
|
||||||
for idx in range(cells.size()):
|
for idx in range(cells.size()):
|
||||||
canvas.set_pixel_v(cells[idx], colors[idx])
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
func redo_action(canvas):
|
||||||
|
var cells = action_data.redo.cells
|
||||||
|
var colors = action_data.redo.colors
|
||||||
|
for idx in range(cells.size()):
|
||||||
|
canvas._set_pixel_v(action_data.layer, cells[idx], colors[idx])
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -42,7 +42,7 @@ _global_script_classes=[ {
|
|||||||
"base": "GEAction",
|
"base": "GEAction",
|
||||||
"class": "GECut",
|
"class": "GECut",
|
||||||
"language": "GDScript",
|
"language": "GDScript",
|
||||||
"path": "res://addons/graphics_editor/actions/Cut.gd"
|
"path": "res://addons/graphics_editor/actions/PasteCut.gd"
|
||||||
}, {
|
}, {
|
||||||
"base": "GEAction",
|
"base": "GEAction",
|
||||||
"class": "GEDarken",
|
"class": "GEDarken",
|
||||||
|
Loading…
Reference in New Issue
Block a user