From 48145b7f61e7b8251132a4bbfcc9c66b43a0dae7 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 22 Mar 2024 21:05:00 +0200 Subject: [PATCH] Use signals to move some code away from `Project.change_project()` WIP, more code can be moved --- src/Autoload/Global.gd | 3 --- src/Classes/Project.gd | 25 +-------------------- src/UI/Canvas/CanvasCamera.gd | 7 ++++++ src/UI/Canvas/Selection.gd | 8 +++++++ src/UI/ReferenceImages/ReferencesPanel.gd | 7 +++--- src/UI/Timeline/AnimationTimeline.gd | 1 + src/UI/TopMenuContainer/TopMenuContainer.gd | 8 +++++++ 7 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 206fb9d1f..8c16bdc0b 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -584,9 +584,6 @@ var cel_button_scene: PackedScene = load("res://src/UI/Timeline/CelButton.tscn") @onready var top_menu_container: Panel = control.find_child("TopMenuContainer") ## The label indicating cursor position. @onready var cursor_position_label: Label = top_menu_container.find_child("CursorPosition") -## The label indicating current frame number. -@onready var current_frame_mark_label: Label = top_menu_container.find_child("CurrentFrameMark") - ## The animation timeline. It has the [param AnimationTimeline.gd] script attached. @onready var animation_timeline: Panel = control.find_child("Animation Timeline") ## The timer used by the animation timeline. diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index 431bdfc26..cfbf992de 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -190,10 +190,7 @@ func selection_map_changed() -> void: func change_project() -> void: Global.animation_timeline.project_changed() - - Global.current_frame_mark_label.text = "%s/%s" % [str(current_frame + 1), frames.size()] animation_tags = animation_tags - # Change the guides for guide in Global.canvas.get_children(): if guide is Guide: @@ -206,14 +203,12 @@ func change_project() -> void: guide.visible = Global.show_y_symmetry_axis and Global.show_guides else: guide.visible = false - # Change the project brushes Brushes.clear_project_brush() for brush in brushes: Brushes.add_project_brush(brush) Global.transparent_checker.update_rect() - Global.animation_timeline.fps_spinbox.value = fps Global.perspective_editor.update_points() Global.cursor_position_label.text = "[%s×%s]" % [size.x, size.y] @@ -230,7 +225,7 @@ func change_project() -> void: else: Global.top_menu_container.file_menu.set_item_text(Global.FileMenu.SAVE, tr("Save")) - if !was_exported: + if not was_exported: Global.top_menu_container.file_menu.set_item_text(Global.FileMenu.EXPORT, tr("Export")) else: if export_overwrite: @@ -247,12 +242,7 @@ func change_project() -> void: for j in Tiles.MODE.values(): Global.top_menu_container.tile_mode_submenu.set_item_checked(j, j == tiles.mode) - # Change selection effect & bounding rectangle - Global.canvas.selection.marching_ants_outline.offset = selection_offset selection_map_changed() - Global.canvas.selection.big_bounding_rectangle = selection_map.get_used_rect() - Global.canvas.selection.big_bounding_rectangle.position += selection_offset - Global.canvas.selection.queue_redraw() var edit_menu_popup: PopupMenu = Global.top_menu_container.edit_menu edit_menu_popup.set_item_disabled(Global.EditMenu.NEW_BRUSH, !has_selection) @@ -268,18 +258,6 @@ func change_project() -> void: if !canvas_references.has(ri) and !ri.is_inside_tree(): Global.canvas.reference_image_container.add_child(ri) - # Tell the reference images that the project changed - Global.reference_panel.project_changed() - - var i := 0 - for camera in Global.cameras: - camera.rotation = cameras_rotation[i] - camera.zoom = cameras_zoom[i] - camera.offset = cameras_offset[i] - camera.rotation_changed.emit() - camera.zoom_changed.emit() - i += 1 - func serialize() -> Dictionary: var layer_data := [] @@ -548,7 +526,6 @@ func change_cel(new_frame: int, new_layer := -1) -> void: if new_frame != current_frame: # If the frame has changed current_frame = new_frame - Global.current_frame_mark_label.text = "%s/%s" % [str(current_frame + 1), frames.size()] if new_layer != current_layer: # If the layer has changed current_layer = new_layer diff --git a/src/UI/Canvas/CanvasCamera.gd b/src/UI/Canvas/CanvasCamera.gd index c74c2f174..a51ca883f 100644 --- a/src/UI/Canvas/CanvasCamera.gd +++ b/src/UI/Canvas/CanvasCamera.gd @@ -43,6 +43,7 @@ var should_tween := true func _ready() -> void: + Global.project_switched.connect(_project_switched) if not DisplayServer.is_touchscreen_available(): set_process_input(false) if index == Cameras.MAIN: @@ -249,6 +250,12 @@ func _has_selection_tool() -> bool: return false +func _project_switched() -> void: + camera_angle = Global.current_project.cameras_rotation[index] + zoom = Global.current_project.cameras_zoom[index] + offset = Global.current_project.cameras_offset[index] + + func _rotate_camera_around_point(degrees: float, point: Vector2) -> void: var angle := deg_to_rad(degrees) offset = (offset - point).rotated(angle) + point diff --git a/src/UI/Canvas/Selection.gd b/src/UI/Canvas/Selection.gd index 4e86d3a77..ce030a65c 100644 --- a/src/UI/Canvas/Selection.gd +++ b/src/UI/Canvas/Selection.gd @@ -80,6 +80,7 @@ class Gizmo: func _ready() -> void: + Global.project_switched.connect(_project_switched) # It's being set to true only when the big_bounding_rectangle has a size larger than 0 set_process_input(false) Global.camera.zoom_changed.connect(_update_on_zoom) @@ -852,6 +853,13 @@ func clear_selection(use_undo := false) -> void: commit_undo("Clear Selection", undo_data_tmp) +func _project_switched() -> void: + marching_ants_outline.offset = Global.current_project.selection_offset + big_bounding_rectangle = Global.current_project.selection_map.get_used_rect() + big_bounding_rectangle.position += Global.current_project.selection_offset + queue_redraw() + + func _get_preview_image() -> void: var project := Global.current_project var blended_image := Image.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) diff --git a/src/UI/ReferenceImages/ReferencesPanel.gd b/src/UI/ReferenceImages/ReferencesPanel.gd index 91e8a23be..6c5bfbca4 100644 --- a/src/UI/ReferenceImages/ReferencesPanel.gd +++ b/src/UI/ReferenceImages/ReferencesPanel.gd @@ -20,13 +20,14 @@ var transform_button_group: ButtonGroup func _ready() -> void: + Global.project_switched.connect(project_changed) + OpenSave.reference_image_imported.connect(_on_references_changed) transform_button_group = transform_tools_btns.get_child(0).button_group transform_button_group.pressed.connect(_on_transform_tool_button_group_pressed) list_btn_group.pressed.connect(_on_reference_image_button_pressed) Global.canvas.reference_image_container.reference_image_changed.connect( _on_reference_image_changed ) - OpenSave.reference_image_imported.connect(_on_references_changed) # We call this function to update the buttons _on_references_changed() _update_ui() @@ -57,7 +58,7 @@ func reorder_reference_image(from: int, to: int, update_reference_index := true) var project := Global.current_project project.undo_redo.create_action("Reorder Reference Image") project.undo_redo.add_do_method(project.reorder_reference_image.bind(from, to)) - project.undo_redo.add_do_method(Global.reference_panel._on_references_changed) + project.undo_redo.add_do_method(_on_references_changed) if update_reference_index: project.undo_redo.add_do_method(project.set_reference_image_index.bind(to)) else: @@ -67,7 +68,7 @@ func reorder_reference_image(from: int, to: int, update_reference_index := true) project.undo_redo.add_do_method(_update_ui) project.undo_redo.add_undo_method(project.reorder_reference_image.bind(to, from)) - project.undo_redo.add_undo_method(Global.reference_panel._on_references_changed) + project.undo_redo.add_undo_method(_on_references_changed) if update_reference_index: project.undo_redo.add_undo_method(project.set_reference_image_index.bind(from)) else: diff --git a/src/UI/Timeline/AnimationTimeline.gd b/src/UI/Timeline/AnimationTimeline.gd index 0d763a9ca..2198ee75b 100644 --- a/src/UI/Timeline/AnimationTimeline.gd +++ b/src/UI/Timeline/AnimationTimeline.gd @@ -1060,6 +1060,7 @@ func _toggle_layer_buttons() -> void: func project_changed() -> void: var project := Global.current_project + fps_spinbox.value = project.fps _toggle_frame_buttons() _toggle_layer_buttons() # These must be removed from tree immediately to not mess up the indices of diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index bb5f22e51..9fc85113a 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -49,6 +49,7 @@ var about_dialog := Dialog.new("res://src/UI/Dialogs/AboutDialog.tscn") @onready var panels_submenu := PopupMenu.new() @onready var layouts_submenu := PopupMenu.new() @onready var recent_projects_submenu := PopupMenu.new() +@onready var current_frame_mark := $HBoxContainer/CurrentFrameMark as Label class Dialog: @@ -76,6 +77,8 @@ class Dialog: func _ready() -> void: + Global.project_switched.connect(_update_current_frame_mark) + Global.cel_switched.connect(_update_current_frame_mark) _setup_file_menu() _setup_edit_menu() _setup_view_menu() @@ -85,6 +88,11 @@ func _ready() -> void: _setup_help_menu() +func _update_current_frame_mark() -> void: + var project := Global.current_project + current_frame_mark.text = "%s/%s" % [str(project.current_frame + 1), project.frames.size()] + + func _setup_file_menu() -> void: # Order as in FileMenu enum var file_menu_items := {