From 42aa60a817ce4c963784e4fe0c4522a0f327eaf3 Mon Sep 17 00:00:00 2001 From: Emmanouil Papadeas <35376950+OverloadedOrama@users.noreply.github.com> Date: Sat, 22 Feb 2025 00:13:37 +0200 Subject: [PATCH] Control + T to quickly select the used area of a cel --- Translations/Translations.pot | 4 ++++ project.godot | 7 ++++++- src/Autoload/Global.gd | 3 ++- src/UI/Canvas/Selection.gd | 20 ++++++++++++++++++++ src/UI/TopMenuContainer/TopMenuContainer.gd | 5 ++++- 5 files changed, 36 insertions(+), 3 deletions(-) diff --git a/Translations/Translations.pot b/Translations/Translations.pot index dd412f639..284c0b779 100644 --- a/Translations/Translations.pot +++ b/Translations/Translations.pot @@ -225,6 +225,10 @@ msgstr "" msgid "Invert" msgstr "" +#. Found under the Select menu. When selected, the area of non-transparent pixels in the cel is being selected. +msgid "Select cel area" +msgstr "" + msgid "Modify" msgstr "" diff --git a/project.godot b/project.godot index 53db08602..b43e80854 100644 --- a/project.godot +++ b/project.godot @@ -180,7 +180,7 @@ paste_in_place={ } paste_from_clipboard={ "deadzone": 0.5, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":true,"ctrl_pressed":true,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":86,"key_label":0,"unicode":86,"location":0,"echo":false,"script":null) +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":true,"pressed":false,"keycode":86,"physical_keycode":0,"key_label":0,"unicode":86,"location":0,"echo":false,"script":null) ] } delete={ @@ -378,6 +378,11 @@ clear_selection={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":68,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) ] } +select_cel_area={ +"deadzone": 0.5, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"command_or_control_autoremap":true,"alt_pressed":false,"shift_pressed":false,"pressed":false,"keycode":84,"physical_keycode":0,"key_label":0,"unicode":116,"location":0,"echo":false,"script":null) +] +} left_rectangletool_tool={ "deadzone": 0.5, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":0,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":83,"physical_keycode":0,"key_label":0,"unicode":0,"location":0,"echo":false,"script":null) diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index 836f2976a..e8ad8978e 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -66,7 +66,7 @@ enum ImageMenu { CROP_TO_CONTENT, } ## Enumeration of items present in the Select Menu. -enum SelectMenu { SELECT_ALL, CLEAR_SELECTION, INVERT, WRAP_STROKES, MODIFY } +enum SelectMenu { SELECT_ALL, CLEAR_SELECTION, INVERT, SELECT_CEL_AREA, WRAP_STROKES, MODIFY } ## Enumeration of items present in the Help Menu. enum HelpMenu { VIEW_SPLASH_SCREEN, @@ -829,6 +829,7 @@ func _initialize_keychain() -> void: &"clear_selection": Keychain.InputAction.new("", "Select menu", true), &"select_all": Keychain.InputAction.new("", "Select menu", true), &"invert_selection": Keychain.InputAction.new("", "Select menu", true), + &"select_cel_area": Keychain.InputAction.new("", "Select menu", true), &"view_splash_screen": Keychain.InputAction.new("", "Help menu", true), &"open_docs": Keychain.InputAction.new("", "Help menu", true), &"issue_tracker": Keychain.InputAction.new("", "Help menu", true), diff --git a/src/UI/Canvas/Selection.gd b/src/UI/Canvas/Selection.gd index 30688dfa6..3c3f56f09 100644 --- a/src/UI/Canvas/Selection.gd +++ b/src/UI/Canvas/Selection.gd @@ -1022,6 +1022,26 @@ func clear_selection(use_undo := false) -> void: commit_undo("Clear Selection", undo_data_tmp) +func select_cel_rect() -> void: + transform_content_confirm() + var project := Global.current_project + var undo_data_tmp := get_undo_data(false) + project.selection_map.crop(project.size.x, project.size.y) + project.selection_map.clear() + var current_cel := project.get_current_cel() + var cel_image: Image + if current_cel is GroupCel: + var group_layer := project.layers[project.current_layer] as GroupLayer + cel_image = group_layer.blend_children(project.frames[project.current_frame]) + else: + cel_image = current_cel.get_image() + project.selection_map.select_rect(cel_image.get_used_rect()) + project.selection_map_changed() + big_bounding_rectangle = project.selection_map.get_used_rect() + project.selection_offset = Vector2.ZERO + commit_undo("Select", 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() diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index 58944b0a8..8e9354955 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -6,7 +6,7 @@ const DOCS_URL := "https://www.oramainteractive.com/Pixelorama-Docs/" const ISSUES_URL := "https://github.com/Orama-Interactive/Pixelorama/issues" const SUPPORT_URL := "https://www.patreon.com/OramaInteractive" # gdlint: ignore=max-line-length -const CHANGELOG_URL := "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v105---2024-11-18" +const CHANGELOG_URL := "https://github.com/Orama-Interactive/Pixelorama/blob/master/CHANGELOG.md#v11---unreleased" const EXTERNAL_LINK_ICON := preload("res://assets/graphics/misc/external_link.svg") const PIXELORAMA_ICON := preload("res://assets/graphics/icons/icon_16x16.png") const HEART_ICON := preload("res://assets/graphics/misc/heart.svg") @@ -530,6 +530,7 @@ func _setup_select_menu() -> void: "All": "select_all", "Clear": "clear_selection", "Invert": "invert_selection", + "Select cel area": "select_cel_area", "Wrap Strokes": "", "Modify": "" } @@ -1117,6 +1118,8 @@ func select_menu_id_pressed(id: int) -> void: Global.canvas.selection.clear_selection(true) Global.SelectMenu.INVERT: Global.canvas.selection.invert() + Global.SelectMenu.SELECT_CEL_AREA: + Global.canvas.selection.select_cel_rect() Global.SelectMenu.WRAP_STROKES: var state = select_menu.is_item_checked(id) Global.canvas.selection.flag_tilemode = !state