diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index c6f1e8468..6a4987c26 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -119,7 +119,7 @@ onready var small_preview_viewport: ViewportContainer = canvas_preview_container onready var camera: Camera2D = main_viewport.find_node("Camera2D") onready var camera2: Camera2D = control.find_node("Camera2D2") onready var camera_preview: Camera2D = control.find_node("CameraPreview") -onready var cameras = [Global.camera, Global.camera2, Global.camera_preview] +onready var cameras = [camera, camera2, camera_preview] onready var horizontal_ruler: BaseButton = control.find_node("HorizontalRuler") onready var vertical_ruler: BaseButton = control.find_node("VerticalRuler") onready var transparent_checker: ColorRect = control.find_node("TransparentChecker") @@ -179,8 +179,19 @@ func _ready() -> void: panel_layout = config_cache.get_value("window", "panel_layout", PanelLayout.AUTO) - projects.append(Project.new()) + default_image_width = config_cache.get_value( + "preferences", "default_image_width", default_image_width + ) + default_image_height = config_cache.get_value( + "preferences", "default_image_height", default_image_height + ) + default_fill_color = config_cache.get_value( + "preferences", "default_fill_color", default_fill_color + ) + var proj_size := Vector2(default_image_width, default_image_height) + projects.append(Project.new([], tr("untitled"), proj_size)) projects[0].layers.append(Layer.new()) + projects[0].fill_color = default_fill_color current_project = projects[0] for node in get_tree().get_nodes_in_group("UIButtons"): var tooltip: String = node.hint_tooltip diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index dc62fd034..47c678cef 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -4,10 +4,11 @@ extends Reference var name := "" setget _name_changed var size: Vector2 setget _size_changed -var undo_redo: UndoRedo +var undo_redo := UndoRedo.new() var tile_mode: int = Global.TileMode.NONE var tile_mode_rects := [] # Cached to avoid recalculation var undos := 0 # The number of times we added undo properties +var fill_color := Color(0) var has_changed := false setget _has_changed_changed var frames := [] setget _frames_changed # Array of Frames (that contain Cels) var layers := [] setget _layers_changed # Array of Layers @@ -56,8 +57,6 @@ func _init(_frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) -> selection_bitmap.create(size) _update_tile_mode_rects() - undo_redo = UndoRedo.new() - Global.tabs.add_tab(name) OpenSave.current_save_paths.append("") OpenSave.backup_save_paths.append("") diff --git a/src/UI/Canvas/Canvas.gd b/src/UI/Canvas/Canvas.gd index 81b4f8bff..99b5004ca 100644 --- a/src/UI/Canvas/Canvas.gd +++ b/src/UI/Canvas/Canvas.gd @@ -1,7 +1,6 @@ class_name Canvas extends Node2D -var fill_color := Color(0, 0, 0, 0) var current_pixel := Vector2.ZERO var sprite_changed_this_frame := false # For optimization purposes var move_preview_location := Vector2.ZERO @@ -21,8 +20,9 @@ func _ready() -> void: $OnionPast.blue_red_color = Color.blue $OnionFuture.type = $OnionFuture.FUTURE $OnionFuture.blue_red_color = Color.red - var frame: Frame = new_empty_frame(true) - Global.current_project.frames.append(frame) + var project: Project = Global.current_project + var frame: Frame = new_empty_frame(project.fill_color, project.size) + project.frames.append(frame) yield(get_tree(), "idle_frame") camera_zoom() @@ -106,24 +106,11 @@ func camera_zoom() -> void: Global.transparent_checker.update_rect() -func new_empty_frame( - first_time := false, single_layer := false, size := Global.current_project.size -) -> Frame: +func new_empty_frame(fill_color: Color, size: Vector2, single_layer := false) -> Frame: var frame := Frame.new() for l in Global.current_project.layers: # Create as many cels as there are layers # The sprite itself var sprite := Image.new() - if first_time: - if Global.config_cache.has_section_key("preferences", "default_image_width"): - Global.current_project.size.x = Global.config_cache.get_value( - "preferences", "default_image_width" - ) - if Global.config_cache.has_section_key("preferences", "default_image_height"): - Global.current_project.size.y = Global.config_cache.get_value( - "preferences", "default_image_height" - ) - if Global.config_cache.has_section_key("preferences", "default_fill_color"): - fill_color = Global.config_cache.get_value("preferences", "default_fill_color") sprite.create(size.x, size.y, false, Image.FORMAT_RGBA8) sprite.fill(fill_color) frame.cels.append(Cel.new(sprite, 1)) diff --git a/src/UI/Dialogs/CreateNewImage.gd b/src/UI/Dialogs/CreateNewImage.gd index e825048ec..4afdf46e8 100644 --- a/src/UI/Dialogs/CreateNewImage.gd +++ b/src/UI/Dialogs/CreateNewImage.gd @@ -102,9 +102,8 @@ func _on_CreateNewImage_confirmed() -> void: var width: int = width_value.value var height: int = height_value.value var fill_color: Color = fill_color_node.color - Global.canvas.fill_color = fill_color - var frame: Frame = Global.canvas.new_empty_frame(false, true, Vector2(width, height)) + var frame: Frame = Global.canvas.new_empty_frame(fill_color, Vector2(width, height), true) var new_project: Project var proj_name: String = $VBoxContainer/ProjectName/NameInput.text if proj_name.is_valid_filename(): @@ -113,6 +112,7 @@ func _on_CreateNewImage_confirmed() -> void: # an empty field or non valid name... new_project = Project.new([frame], tr("untitled"), Vector2(width, height).floor()) new_project.layers.append(Layer.new()) + new_project.fill_color = fill_color Global.projects.append(new_project) Global.tabs.current_tab = Global.tabs.get_tab_count() - 1 Global.canvas.camera_zoom() diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index f2b480686..4e89dd4f4 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -80,10 +80,11 @@ func cel_size_changed(value: int) -> void: func add_frame() -> void: - var frame: Frame = Global.canvas.new_empty_frame() - var new_frames: Array = Global.current_project.frames.duplicate() - var new_layers: Array = Global.current_project.layers.duplicate() - new_frames.insert(Global.current_project.current_frame + 1, frame) + var project: Project = Global.current_project + var frame: Frame = Global.canvas.new_empty_frame(project.fill_color, project.size) + var new_frames: Array = project.frames.duplicate() + var new_layers: Array = project.layers.duplicate() + new_frames.insert(project.current_frame + 1, frame) # Loop through the array to create new classes for each element, so that they # won't be the same as the original array's classes. Needed for undo/redo to work properly. for i in new_layers.size(): @@ -103,27 +104,19 @@ func add_frame() -> void: frame.cels[l_i].image = new_layers[l_i].linked_cels[0].cels[l_i].image frame.cels[l_i].image_texture = new_layers[l_i].linked_cels[0].cels[l_i].image_texture - 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") + 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") - Global.current_project.undo_redo.add_do_property(Global.current_project, "frames", new_frames) - Global.current_project.undo_redo.add_do_property( - Global.current_project, "current_frame", Global.current_project.current_frame + 1 - ) - Global.current_project.undo_redo.add_do_property(Global.current_project, "layers", new_layers) + project.undo_redo.add_do_property(project, "frames", new_frames) + project.undo_redo.add_do_property(project, "current_frame", project.current_frame + 1) + project.undo_redo.add_do_property(project, "layers", new_layers) - Global.current_project.undo_redo.add_undo_property( - Global.current_project, "frames", Global.current_project.frames - ) - Global.current_project.undo_redo.add_undo_property( - Global.current_project, "current_frame", Global.current_project.current_frame - ) - Global.current_project.undo_redo.add_undo_property( - Global.current_project, "layers", Global.current_project.layers - ) - Global.current_project.undo_redo.commit_action() + 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_undo_property(project, "layers", project.layers) + project.undo_redo.commit_action() func _on_DeleteFrame_pressed(frame := -1) -> void: