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:
parent
f7ef4a4283
commit
4c60ef144f
5 changed files with 37 additions and 47 deletions
|
@ -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
|
||||
|
|
|
@ -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("")
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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:
|
||||
|
|
Loading…
Add table
Reference in a new issue