diff --git a/src/Autoload/Global.gd b/src/Autoload/Global.gd index a3d52364e6c5..2bec2d55574e 100644 --- a/src/Autoload/Global.gd +++ b/src/Autoload/Global.gd @@ -276,102 +276,54 @@ func set_integer_zoom(enabled: bool): func _initialize_keychain() -> void: Keychain.config_file = config_cache Keychain.actions = { - "new_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.NEW), - "open_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.OPEN), - "open_last_project": - Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.OPEN_LAST_PROJECT), - "save_file": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.SAVE), - "save_file_as": - Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.SAVE_AS), - "export_file": - Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.EXPORT), - "export_file_as": - Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.EXPORT_AS), - "quit": Keychain.MenuInputAction.new("", "File menu", true, "FileMenu", FileMenu.QUIT), - "redo": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.REDO, true), - "undo": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.UNDO, true), - "cut": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.CUT), - "copy": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.COPY), - "paste": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PASTE), - "paste_in_place": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PASTE_IN_PLACE), - "delete": Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.DELETE), - "new_brush": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.NEW_BRUSH), - "preferences": - Keychain.MenuInputAction.new("", "Edit menu", true, "EditMenu", EditMenu.PREFERENCES), - "scale_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.SCALE_IMAGE), - "crop_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.CROP_IMAGE), - "resize_canvas": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.RESIZE_CANVAS), - "offset_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.OFFSET_IMAGE), - "mirror_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.FLIP), - "rotate_image": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.ROTATE), - "invert_colors": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.INVERT_COLORS), - "desaturation": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.DESATURATION), - "outline": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.OUTLINE), - "drop_shadow": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.DROP_SHADOW), - "adjust_hsv": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.HSV), - "gradient": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.GRADIENT), - "gradient_map": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.GRADIENT_MAP), - "posterize": - Keychain.MenuInputAction.new("", "Image menu", true, "ImageMenu", ImageMenu.POSTERIZE), - "mirror_view": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.MIRROR_VIEW), - "show_grid": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_GRID), - "show_pixel_grid": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_PIXEL_GRID), - "show_guides": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_GUIDES), - "show_rulers": - Keychain.MenuInputAction.new("", "View menu", true, "ViewMenu", ViewMenu.SHOW_RULERS), - "moveable_panels": - Keychain.MenuInputAction.new( - "", "Window menu", true, "WindowMenu", WindowMenu.MOVABLE_PANELS - ), - "zen_mode": - Keychain.MenuInputAction.new("", "Window menu", true, "WindowMenu", WindowMenu.ZEN_MODE), - "toggle_fullscreen": - Keychain.MenuInputAction.new( - "", "Window menu", true, "WindowMenu", WindowMenu.FULLSCREEN_MODE - ), - "clear_selection": - Keychain.MenuInputAction.new( - "", "Select menu", true, "SelectMenu", SelectMenu.CLEAR_SELECTION - ), - "select_all": - Keychain.MenuInputAction.new("", "Select menu", true, "SelectMenu", SelectMenu.SELECT_ALL), - "invert_selection": - Keychain.MenuInputAction.new("", "Select menu", true, "SelectMenu", SelectMenu.INVERT), - "view_splash_screen": - Keychain.MenuInputAction.new( - "", "Help menu", true, "HelpMenu", HelpMenu.VIEW_SPLASH_SCREEN - ), - "open_docs": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ONLINE_DOCS), - "issue_tracker": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ISSUE_TRACKER), - "open_logs_folder": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.OPEN_LOGS_FOLDER), - "changelog": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.CHANGELOG), - "about_pixelorama": - Keychain.MenuInputAction.new("", "Help menu", true, "HelpMenu", HelpMenu.ABOUT_PIXELORAMA), + "new_file": Keychain.InputAction.new("", "File menu", true), + "open_file": Keychain.InputAction.new("", "File menu", true), + "open_last_project": Keychain.InputAction.new("", "File menu", true), + "save_file": Keychain.InputAction.new("", "File menu", true), + "save_file_as": Keychain.InputAction.new("", "File menu", true), + "export_file": Keychain.InputAction.new("", "File menu", true), + "export_file_as": Keychain.InputAction.new("", "File menu", true), + "quit": Keychain.InputAction.new("", "File menu", true), + "redo": Keychain.InputAction.new("", "Edit menu", true), + "undo": Keychain.InputAction.new("", "Edit menu", true), + "cut": Keychain.InputAction.new("", "Edit menu", true), + "copy": Keychain.InputAction.new("", "Edit menu", true), + "paste": Keychain.InputAction.new("", "Edit menu", true), + "paste_in_place": Keychain.InputAction.new("", "Edit menu", true), + "delete": Keychain.InputAction.new("", "Edit menu", true), + "new_brush": Keychain.InputAction.new("", "Edit menu", true), + "preferences": Keychain.InputAction.new("", "Edit menu", true), + "scale_image": Keychain.InputAction.new("", "Image menu", true), + "crop_image": Keychain.InputAction.new("", "Image menu", true), + "resize_canvas": Keychain.InputAction.new("", "Image menu", true), + "offset_image": Keychain.InputAction.new("", "Image menu", true), + "mirror_image": Keychain.InputAction.new("", "Image menu", true), + "rotate_image": Keychain.InputAction.new("", "Image menu", true), + "invert_colors": Keychain.InputAction.new("", "Image menu", true), + "desaturation": Keychain.InputAction.new("", "Image menu", true), + "outline": Keychain.InputAction.new("", "Image menu", true), + "drop_shadow": Keychain.InputAction.new("", "Image menu", true), + "adjust_hsv": Keychain.InputAction.new("", "Image menu", true), + "gradient": Keychain.InputAction.new("", "Image menu", true), + "gradient_map": Keychain.InputAction.new("", "Image menu", true), + "posterize": Keychain.InputAction.new("", "Image menu", true), + "mirror_view": Keychain.InputAction.new("", "View menu", true), + "show_grid": Keychain.InputAction.new("", "View menu", true), + "show_pixel_grid": Keychain.InputAction.new("", "View menu", true), + "show_guides": Keychain.InputAction.new("", "View menu", true), + "show_rulers": Keychain.InputAction.new("", "View menu", true), + "moveable_panels": Keychain.InputAction.new("", "Window menu", true), + "zen_mode": Keychain.InputAction.new("", "Window menu", true), + "toggle_fullscreen": Keychain.InputAction.new("", "Window menu", true), + "clear_selection": Keychain.InputAction.new("", "Select menu", true), + "select_all": Keychain.InputAction.new("", "Select menu", true), + "invert_selection": 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), + "open_logs_folder": Keychain.InputAction.new("", "Help menu", true), + "changelog": Keychain.InputAction.new("", "Help menu", true), + "about_pixelorama": Keychain.InputAction.new("", "Help menu", true), "zoom_in": Keychain.InputAction.new("", "Canvas"), "zoom_out": Keychain.InputAction.new("", "Canvas"), "camera_left": Keychain.InputAction.new("", "Canvas"), @@ -396,9 +348,9 @@ func _initialize_keychain() -> void: "draw_create_line": Keychain.InputAction.new("", "Draw tools", false), "draw_snap_angle": Keychain.InputAction.new("", "Draw tools", false), "draw_color_picker": Keychain.InputAction.new("Quick color picker", "Draw tools", false), - "shape_perfect": Keychain.InputAction.new("", "Shape3D tools", false), - "shape_center": Keychain.InputAction.new("", "Shape3D tools", false), - "shape_displace": Keychain.InputAction.new("", "Shape3D tools", false), + "shape_perfect": Keychain.InputAction.new("", "Shape tools", false), + "shape_center": Keychain.InputAction.new("", "Shape tools", false), + "shape_displace": Keychain.InputAction.new("", "Shape tools", false), "selection_add": Keychain.InputAction.new("", "Selection tools", false), "selection_subtract": Keychain.InputAction.new("", "Selection tools", false), "selection_intersect": Keychain.InputAction.new("", "Selection tools", false), @@ -429,12 +381,11 @@ func _initialize_keychain() -> void: "Help menu": Keychain.InputGroup.new("Menu"), "Tool modifiers": Keychain.InputGroup.new(), "Draw tools": Keychain.InputGroup.new("Tool modifiers"), - "Shape3D tools": Keychain.InputGroup.new("Tool modifiers"), + "Shape tools": Keychain.InputGroup.new("Tool modifiers"), "Selection tools": Keychain.InputGroup.new("Tool modifiers"), "Transformation tools": Keychain.InputGroup.new("Tool modifiers"), } Keychain.ignore_actions = ["left_mouse", "right_mouse", "middle_mouse", "shift", "ctrl"] - Keychain.multiple_menu_accelerators = true func notification_label(text: String) -> void: @@ -471,7 +422,7 @@ func undo_or_redo( action_name in [ "Draw", - "Draw Shape3D", + "Draw Shape", "Select", "Move Selection", "Scale", diff --git a/src/Tools/LineTool.gd b/src/Tools/LineTool.gd index eeed3018e7b5..bdc7cdfa554a 100644 --- a/src/Tools/LineTool.gd +++ b/src/Tools/LineTool.gd @@ -171,7 +171,7 @@ func draw_preview() -> void: func _draw_shape() -> void: # var rect := _get_result_rect(origin, dest) var points := _get_points() - prepare_undo("Draw Shape3D") + prepare_undo("Draw Shape") for point in points: # Reset drawer every time because pixel perfect sometimes breaks the tool _drawer.reset() @@ -183,8 +183,8 @@ func _draw_shape() -> void: func _get_points() -> PackedVector2Array: var array := [] - var dx := int(abs(_dest.x - _start.x)) - var dy := int(-abs(_dest.y - _start.y)) + var dx := absi(_dest.x - _start.x) + var dy := -absi(_dest.y - _start.y) var err := dx + dy var e2 := err << 1 var sx = 1 if _start.x < _dest.x else -1 diff --git a/src/Tools/ShapeDrawer.gd b/src/Tools/ShapeDrawer.gd index 041caa9712d3..641ddac65614 100644 --- a/src/Tools/ShapeDrawer.gd +++ b/src/Tools/ShapeDrawer.gd @@ -171,7 +171,7 @@ func draw_preview() -> void: func _draw_shape(origin: Vector2, dest: Vector2) -> void: var rect := _get_result_rect(origin, dest) var points := _get_points(rect.size) - prepare_undo("Draw Shape3D") + prepare_undo("Draw Shape") for point in points: # Reset drawer every time because pixel perfect sometimes breaks the tool _drawer.reset() diff --git a/src/UI/TopMenuContainer/TopMenuContainer.gd b/src/UI/TopMenuContainer/TopMenuContainer.gd index 1ae85027c0e7..b947d199a595 100644 --- a/src/UI/TopMenuContainer/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer/TopMenuContainer.gd @@ -46,17 +46,17 @@ func _ready() -> void: func _setup_file_menu() -> void: # Order as in FileMenu enum - var file_menu_items := [ - "New...", - "Open...", - "Open last project...", - "Recent projects", - "Save...", - "Save as...", - "Export...", - "Export as...", - "Quit", - ] + var file_menu_items := { + "New...": "new_file", + "Open...": "open_file", + "Open last project...": "open_last_project", + "Recent projects": "", + "Save...": "save_file", + "Save as...": "save_file_as", + "Export...": "export_file", + "Export as...": "export_file_as", + "Quit": "quit", + } file_menu = file_menu_button.get_popup() var i := 0 for item in file_menu_items: @@ -64,6 +64,11 @@ func _setup_file_menu() -> void: _setup_recent_projects_submenu(item) else: file_menu.add_item(item, i) + var shortcut := Shortcut.new() + var event := InputEventAction.new() + event.action = file_menu_items[item] + shortcut.events.append(event) + file_menu.set_item_shortcut(i, shortcut) i += 1 file_menu.id_pressed.connect(file_menu_id_pressed) @@ -91,21 +96,26 @@ func update_recent_projects_submenu() -> void: func _setup_edit_menu() -> void: # Order as in Global.EditMenu enum - var edit_menu_items := [ - "Undo", - "Redo", - "Copy", - "Cut", - "Paste", - "Paste in Place", - "Delete", - "New Brush", - "Preferences" - ] + var edit_menu_items := { + "Undo": "undo", + "Redo": "redo", + "Copy": "copy", + "Cut": "cut", + "Paste": "paste", + "Paste in Place": "paste_in_place", + "Delete": "delete", + "New Brush": "new_brush", + "Preferences": "preferences" + } var edit_menu: PopupMenu = edit_menu_button.get_popup() var i := 0 for item in edit_menu_items: edit_menu.add_item(item, i) + var shortcut := Shortcut.new() + var event := InputEventAction.new() + event.action = edit_menu_items[item] + shortcut.events.append(event) + edit_menu.set_item_shortcut(i, shortcut) i += 1 edit_menu.set_item_disabled(Global.EditMenu.NEW_BRUSH, true) @@ -114,21 +124,21 @@ func _setup_edit_menu() -> void: func _setup_view_menu() -> void: # Order as in Global.ViewMenu enum - var view_menu_items := [ - "Tile Mode", - "Tile Mode Offsets", - "Grayscale View", - "Mirror View", - "Show Grid", - "Show Pixel Grid", - "Show Rulers", - "Show Guides", - "Show Mouse Guides", - "Snap To", - ] + var view_menu_items := { + "Tile Mode": "", + "Tile Mode Offsets": "", + "Grayscale View": "", + "Mirror View": "mirror_view", + "Show Grid": "show_grid", + "Show Pixel Grid": "show_pixel_grid", + "Show Rulers": "show_rulers", + "Show Guides": "show_guides", + "Show Mouse Guides": "", + "Snap To": "", + } view_menu = view_menu_button.get_popup() for i in view_menu_items.size(): - var item: String = view_menu_items[i] + var item: String = view_menu_items.keys()[i] if item == "Tile Mode": _setup_tile_mode_submenu(item) elif item == "Snap To": @@ -137,6 +147,11 @@ func _setup_view_menu() -> void: view_menu.add_item(item, i) else: view_menu.add_check_item(item, i) + var shortcut := Shortcut.new() + var event := InputEventAction.new() + event.action = view_menu_items[item] + shortcut.events.append(event) + view_menu.set_item_shortcut(i, shortcut) view_menu.set_item_checked(Global.ViewMenu.SHOW_RULERS, true) view_menu.set_item_checked(Global.ViewMenu.SHOW_GUIDES, true) view_menu.hide_on_checkable_item_selection = false @@ -196,14 +211,14 @@ func _setup_snap_to_submenu(item: String) -> void: func _setup_window_menu() -> void: # Order as in Global.WindowMenu enum - var window_menu_items := [ - "Window Opacity", - "Panels", - "Layouts", - "Moveable Panels", - "Zen Mode", - "Fullscreen Mode", - ] + var window_menu_items := { + "Window Opacity": "", + "Panels": "", + "Layouts": "", + "Moveable Panels": "moveable_panels", + "Zen Mode": "zen_mode", + "Fullscreen Mode": "toggle_fullscreen", + } window_menu = window_menu_button.get_popup() var i := 0 for item in window_menu_items: @@ -215,6 +230,11 @@ func _setup_window_menu() -> void: window_menu.add_item(item, i) else: window_menu.add_check_item(item, i) + var shortcut := Shortcut.new() + var event := InputEventAction.new() + event.action = window_menu_items[item] + shortcut.events.append(event) + window_menu.set_item_shortcut(i, shortcut) i += 1 window_menu.hide_on_checkable_item_selection = false window_menu.id_pressed.connect(window_menu_id_pressed) @@ -272,27 +292,32 @@ func populate_layouts_submenu() -> void: func _setup_image_menu() -> void: # Order as in Global.ImageMenu enum - var image_menu_items := [ - "Resize Canvas", - "Offset Image", - "Scale Image", - "Crop Image", - "Mirror Image", - "Rotate Image", - "Outline", - "Drop Shadow", - "Invert Colors", - "Desaturation", - "Adjust Hue/Saturation/Value", - "Posterize", - "Gradient", - "Gradient Map", - # "Shader" - ] + var image_menu_items := { + "Resize Canvas": "resize_canvas", + "Offset Image": "offset_image", + "Scale Image": "scale_image", + "Crop Image": "crop_image", + "Mirror Image": "mirror_image", + "Rotate Image": "rotate_image", + "Outline": "outline", + "Drop Shadow": "drop_shadow", + "Invert Colors": "invert_colors", + "Desaturation": "desaturation", + "Adjust Hue/Saturation/Value": "adjust_hsv", + "Posterize": "posterize", + "Gradient": "gradient", + "Gradient Map": "gradient_map", + # "Shader": "" + } var image_menu: PopupMenu = image_menu_button.get_popup() var i := 0 for item in image_menu_items: image_menu.add_item(item, i) + var shortcut := Shortcut.new() + var event := InputEventAction.new() + event.action = image_menu_items[item] + shortcut.events.append(event) + image_menu.set_item_shortcut(i, shortcut) i += 1 image_menu.id_pressed.connect(image_menu_id_pressed) @@ -300,31 +325,46 @@ func _setup_image_menu() -> void: func _setup_select_menu() -> void: # Order as in Global.SelectMenu enum - var select_menu_items := ["All", "Clear", "Invert", "Tile Mode"] + var select_menu_items := { + "All": "select_all", + "Clear": "clear_selection", + "Invert": "invert_selection", + "Tile Mode": "" + } var select_menu: PopupMenu = select_menu_button.get_popup() for i in select_menu_items.size(): - var item: String = select_menu_items[i] + var item: String = select_menu_items.keys()[i] if item == "Tile Mode": select_menu.add_check_item(item, i) else: select_menu.add_item(item, i) + var shortcut := Shortcut.new() + var event := InputEventAction.new() + event.action = select_menu_items[item] + shortcut.events.append(event) + select_menu.set_item_shortcut(i, shortcut) select_menu.id_pressed.connect(select_menu_id_pressed) func _setup_help_menu() -> void: # Order as in Global.HelpMenu enum - var help_menu_items := [ - "View Splash Screen", - "Online Docs", - "Issue Tracker", - "Open Logs Folder", - "Changelog", - "About Pixelorama", - ] + var help_menu_items := { + "View Splash Screen": "view_splash_screen", + "Online Docs": "open_docs", + "Issue Tracker": "issue_tracker", + "Open Logs Folder": "open_logs_folder", + "Changelog": "changelog", + "About Pixelorama": "about_pixelorama", + } var help_menu: PopupMenu = help_menu_button.get_popup() var i := 0 for item in help_menu_items: help_menu.add_item(item, i) + var shortcut := Shortcut.new() + var event := InputEventAction.new() + event.action = help_menu_items[item] + shortcut.events.append(event) + help_menu.set_item_shortcut(i, shortcut) i += 1 help_menu.id_pressed.connect(help_menu_id_pressed)