diff --git a/src/CameraMovement.gd b/src/CameraMovement.gd index 6140e92e3..318f50fbc 100644 --- a/src/CameraMovement.gd +++ b/src/CameraMovement.gd @@ -124,6 +124,7 @@ func _input(event : InputEvent) -> void: Global.horizontal_ruler.update() Global.vertical_ruler.update() + save_values_to_project() # Zoom Camera @@ -185,3 +186,15 @@ func fit_to_frame(size : Vector2) -> void: Global.zoom_level_label.text = str(round(100 / Global.camera.zoom.x)) + " %" Global.horizontal_ruler.update() Global.vertical_ruler.update() + + +func save_values_to_project() -> void: + if name == "Camera2D": + Global.current_project.cameras_zoom[0] = zoom + Global.current_project.cameras_offset[0] = offset + if name == "Camera2D2": + Global.current_project.cameras_zoom[1] = zoom + Global.current_project.cameras_offset[1] = offset + if name == "CameraPreview": + Global.current_project.cameras_zoom[2] = zoom + Global.current_project.cameras_offset[2] = offset diff --git a/src/Canvas.gd b/src/Canvas.gd index 27458bd07..466289d8f 100644 --- a/src/Canvas.gd +++ b/src/Canvas.gd @@ -230,18 +230,15 @@ func camera_zoom() -> void: # Set camera zoom based on the sprite size var bigger_canvas_axis = max(Global.current_project.size.x, Global.current_project.size.y) var zoom_max := Vector2(bigger_canvas_axis, bigger_canvas_axis) * 0.01 - if zoom_max > Vector2.ONE: - Global.camera.zoom_max = zoom_max - Global.camera2.zoom_max = zoom_max - Global.camera_preview.zoom_max = zoom_max - else: - Global.camera.zoom_max = Vector2.ONE - Global.camera2.zoom_max = Vector2.ONE - Global.camera_preview.zoom_max = Vector2.ONE + var cameras = [Global.camera, Global.camera2, Global.camera_preview] + for camera in cameras: + if zoom_max > Vector2.ONE: + camera.zoom_max = zoom_max + else: + camera.zoom_max = Vector2.ONE - Global.camera.fit_to_frame(Global.current_project.size) - Global.camera2.fit_to_frame(Global.current_project.size) - Global.camera_preview.fit_to_frame(Global.current_project.size) + camera.fit_to_frame(Global.current_project.size) + camera.save_values_to_project() Global.transparent_checker._ready() # To update the rect size diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index 62bc8a044..e40d29fce 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -22,6 +22,10 @@ var x_max := 64 var y_min := 0 var y_max := 64 +# For every camera (currently there are 3) +var cameras_zoom := [Vector2(0.15, 0.15), Vector2(0.15, 0.15), Vector2(0.15, 0.15)] # Array of Vector2 +var cameras_offset := [Vector2.ZERO, Vector2.ZERO, Vector2.ZERO] # Array of Vector2 + func _init(_frames := [], _name := tr("untitled"), _size := Vector2(64, 64)) -> void: frames = _frames @@ -115,6 +119,13 @@ func change_project() -> void: for brush in brushes: Global.create_brush_button(brush) + var cameras = [Global.camera, Global.camera2, Global.camera_preview] + var i := 0 + for camera in cameras: + camera.zoom = cameras_zoom[i] + camera.offset = cameras_offset[i] + i += 1 + Global.zoom_level_label.text = str(round(100 / Global.camera.zoom.x)) + " %" Global.canvas.update() Global.transparent_checker._ready() Global.window_title = "%s - Pixelorama %s" % [name, Global.current_version] diff --git a/src/UI/Tabs.gd b/src/UI/Tabs.gd index f6421a456..7bdb13092 100644 --- a/src/UI/Tabs.gd +++ b/src/UI/Tabs.gd @@ -6,7 +6,7 @@ func _on_Tabs_tab_changed(tab : int) -> void: func _on_Tabs_tab_close(tab : int) -> void: - if Global.projects.size() == 1: + if Global.projects.size() == 1 or Global.current_project_index != tab: return if Global.current_project.has_changed: @@ -26,7 +26,7 @@ func _on_Tabs_reposition_active_tab_request(idx_to : int) -> void: func delete_tab(tab : int) -> void: remove_tab(tab) - Global.current_project.undo_redo.free() + Global.projects[tab].undo_redo.free() Global.projects.remove(tab) if tab > 0: Global.current_project_index -= 1