mirror of
https://github.com/Relintai/draw_gd.git
synced 2025-02-08 15:30:05 +01:00
The frames variable in Project is not an array anymore.
This commit is contained in:
parent
ee640b65a1
commit
548c78d023
@ -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()
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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()):
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user