1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-03-12 22:35:18 +00:00

Fixed project not having the correct size if the default image size has been changed in the Preferences

Ideally, the new_empty_frame() method should be removed from Canvas and should probably go to Frame or Project.
This commit is contained in:
Manolis Papadeas 2021-12-01 20:02:39 +02:00
parent f7ef4a4283
commit 4c60ef144f
5 changed files with 37 additions and 47 deletions

View file

@ -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

View file

@ -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("")

View file

@ -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))

View file

@ -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()

View file

@ -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: