-
-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
c5cb60b
commit f430d9c
Showing
3 changed files
with
175 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,160 @@ | ||
extends Node | ||
|
||
|
||
var global_rid: RID | ||
|
||
var file_rid: RID | ||
var file_clear_svg_index: int | ||
var file_optimize_index: int | ||
var file_clear_assoc_index: int | ||
var file_reset_svg_index: int | ||
|
||
var view_rid: RID | ||
var view_show_grid_index: int | ||
var view_show_handles_index: int | ||
var view_rasterized_svg_index: int | ||
|
||
var snap_rid: RID | ||
var snap_enable_index: int | ||
var snap_0125_index: int | ||
var snap_025_index: int | ||
var snap_05_index: int | ||
var snap_1_index: int | ||
var snap_2_index: int | ||
var snap_4_index: int | ||
|
||
|
||
func _enter_tree() -> void: | ||
if not DisplayServer.has_feature(DisplayServer.FEATURE_GLOBAL_MENU): | ||
queue_free() | ||
return | ||
# Create new menu and add items: | ||
global_rid = NativeMenu.get_system_menu(NativeMenu.MAIN_MENU_ID) | ||
|
||
var app_rid: RID = NativeMenu.get_system_menu(NativeMenu.APPLICATION_MENU_ID) | ||
NativeMenu.add_item(app_rid, "GodSVG Settings...", _action, _action, "open_settings") | ||
|
||
file_rid = NativeMenu.create_menu() | ||
NativeMenu.add_item(file_rid, "Import SVG", _action, _action, "import", KEY_MASK_META + KEY_I) | ||
NativeMenu.add_item(file_rid, "Export Image", _action, _action, "export", KEY_MASK_META + KEY_E) | ||
NativeMenu.add_item(file_rid, "Export SVG", _action, _action, "save", KEY_MASK_META + KEY_S) | ||
NativeMenu.add_separator(file_rid) | ||
NativeMenu.add_item(file_rid, "Copy SVG Text", _action, _action, "copy_svg_text") | ||
file_clear_svg_index = NativeMenu.add_item(file_rid, "Clear SVG", _action, _action, "clear_svg") | ||
file_optimize_index = NativeMenu.add_item(file_rid, "Optimize SVG", _action, _action, "optimize_svg") | ||
NativeMenu.add_separator(file_rid) | ||
file_clear_assoc_index = NativeMenu.add_item(file_rid, "Clear Association", _action, _action, "clear_file_path") | ||
file_reset_svg_index = NativeMenu.add_item(file_rid, "Reset SVG", _action, _action, "reset_svg") | ||
NativeMenu.add_submenu_item(global_rid, "File", file_rid) | ||
SVG.svg_text_changed.connect(_on_svg_text_changed) | ||
_on_svg_text_changed() | ||
|
||
var edit_rid: RID = NativeMenu.create_menu() | ||
NativeMenu.add_item(edit_rid, "Undo", _action, _action, "undo", KEY_MASK_META + KEY_Z) | ||
NativeMenu.add_item(edit_rid, "Redo", _action, _action, "redo", KEY_MASK_META + KEY_Y) | ||
NativeMenu.add_item(edit_rid, "Duplicate", _action, _action, "duplicate", KEY_MASK_META + KEY_D) | ||
NativeMenu.add_item(edit_rid, "Select All", _action, _action, "select_all", KEY_MASK_META + KEY_A) | ||
NativeMenu.add_item(edit_rid, "Delete", _action, _action, "delete", KEY_DELETE) | ||
NativeMenu.add_item(edit_rid, "Move Up", _action, _action, "move_up", KEY_MASK_META + KEY_UP) | ||
NativeMenu.add_item(edit_rid, "Move Down", _action, _action, "move_down", KEY_MASK_META + KEY_DOWN) | ||
NativeMenu.add_submenu_item(global_rid, "Edit", edit_rid) | ||
|
||
var tool_rid: RID = NativeMenu.create_menu() | ||
NativeMenu.add_item(tool_rid, "Move Relative", _action, _action, "move_relative", KEY_M) | ||
NativeMenu.add_item(tool_rid, "Move Absolute", _action, _action, "move_absolute", KEY_MASK_SHIFT + KEY_M) | ||
NativeMenu.add_item(tool_rid, "Line Relative", _action, _action, "line_relative", KEY_L) | ||
NativeMenu.add_item(tool_rid, "Line Absolute", _action, _action, "line_absolute", KEY_MASK_SHIFT + KEY_L) | ||
NativeMenu.add_item(tool_rid, "Horizontal Line Relative", _action, _action, "horizontal_line_relative", KEY_H) | ||
NativeMenu.add_item(tool_rid, "Horizontal Line Absolute", _action, _action, "horizontal_line_absolute", KEY_MASK_SHIFT + KEY_H) | ||
NativeMenu.add_item(tool_rid, "Vertical Line Relative", _action, _action, "vertical_line_relative", KEY_V) | ||
NativeMenu.add_item(tool_rid, "Vertical Line Absolute", _action, _action, "vertical_line_absolute", KEY_MASK_SHIFT + KEY_V) | ||
NativeMenu.add_item(tool_rid, "Close Path Relative", _action, _action, "close_path_relative", KEY_Z) | ||
NativeMenu.add_item(tool_rid, "Close Path Absolute", _action, _action, "close_path_absolute", KEY_MASK_SHIFT + KEY_Z) | ||
NativeMenu.add_item(tool_rid, "Elliptical Arc Relative", _action, _action, "elliptical_arc_relative", KEY_A) | ||
NativeMenu.add_item(tool_rid, "Elliptical Arc Absolute", _action, _action, "elliptical_arc_absolute", KEY_MASK_SHIFT + KEY_A) | ||
NativeMenu.add_item(tool_rid, "Quadratic Bezier Relative", _action, _action, "quadratic_bezier_relative", KEY_Q) | ||
NativeMenu.add_item(tool_rid, "Quadratic Bezier Absolute", _action, _action, "quadratic_bezier_absolute", KEY_MASK_SHIFT + KEY_Q) | ||
NativeMenu.add_item(tool_rid, "Shorthand Quadratic Bezier Relative", _action, _action, "shorthand_quadratic_bezier_relative", KEY_T) | ||
NativeMenu.add_item(tool_rid, "Shorthand Quadratic Bezier Absolute", _action, _action, "shorthand_quadratic_bezier_absolute", KEY_MASK_SHIFT + KEY_T) | ||
NativeMenu.add_item(tool_rid, "Cubic Bezier Relative", _action, _action, "cubic_bezier_relative", KEY_C) | ||
NativeMenu.add_item(tool_rid, "Cubic Bezier Absolute", _action, _action, "cubic_bezier_absolute", KEY_MASK_SHIFT + KEY_C) | ||
NativeMenu.add_item(tool_rid, "Shorthand Cubic Bezier Relative", _action, _action, "shorthand_cubic_bezier_relative", KEY_S) | ||
NativeMenu.add_item(tool_rid, "Shorthand Cubic Bezier Absolute", _action, _action, "shorthand_cubic_bezier_absolute", KEY_MASK_SHIFT + KEY_S) | ||
NativeMenu.add_submenu_item(global_rid, "Tool", tool_rid) | ||
|
||
view_rid = NativeMenu.create_menu() | ||
view_show_grid_index = NativeMenu.add_check_item(view_rid, "Show Grid", _action, _action, "view_show_grid") | ||
view_show_handles_index = NativeMenu.add_check_item(view_rid, "Show Handles", _action, _action, "view_show_handles") | ||
view_rasterized_svg_index = NativeMenu.add_check_item(view_rid, "Rasterized SVG", _action, _action, "view_rasterized_svg") | ||
_on_display_view_settings_updated(true, true, false) | ||
NativeMenu.add_separator(view_rid) | ||
NativeMenu.add_item(view_rid, "Zoom In", _action, _action, "zoom_in", KEY_MASK_META + KEY_EQUAL) | ||
NativeMenu.add_item(view_rid, "Zoom Out", _action, _action, "zoom_out", KEY_MASK_META + KEY_MINUS) | ||
NativeMenu.add_item(view_rid, "Zoom Reset", _action, _action, "zoom_reset", KEY_MASK_META + KEY_0) | ||
NativeMenu.add_submenu_item(global_rid, "View", view_rid) | ||
|
||
snap_rid = NativeMenu.create_menu() | ||
snap_enable_index = NativeMenu.add_check_item(snap_rid, "Enable Snap", _action, _action, "snap_toggle") | ||
NativeMenu.add_separator(snap_rid) | ||
snap_0125_index = NativeMenu.add_radio_check_item(snap_rid, "0.125", _set_snap, _set_snap, 0.125) | ||
snap_025_index = NativeMenu.add_radio_check_item(snap_rid, "0.25", _set_snap, _set_snap, 0.25) | ||
snap_05_index = NativeMenu.add_radio_check_item(snap_rid, "0.5", _set_snap, _set_snap, 0.5) | ||
snap_1_index = NativeMenu.add_radio_check_item(snap_rid, "1", _set_snap, _set_snap, 1) | ||
snap_2_index = NativeMenu.add_radio_check_item(snap_rid, "2", _set_snap, _set_snap, 2) | ||
snap_4_index = NativeMenu.add_radio_check_item(snap_rid, "4", _set_snap, _set_snap, 4) | ||
NativeMenu.add_submenu_item(global_rid, "Snap", snap_rid) | ||
|
||
var help_rid: RID = NativeMenu.get_system_menu(NativeMenu.HELP_MENU_ID) | ||
NativeMenu.add_icon_item(help_rid, load("res://visual/icons/Link.svg"), "GodSVG Repository", _action, _action, "about_repo") | ||
NativeMenu.add_icon_item(help_rid, load("res://visual/icon.svg"), "About GodSVG", _action, _action, "about_info") | ||
NativeMenu.add_icon_item(help_rid, load("res://visual/icons/Heart.svg"), "Donate to GodSVG", _action, _action, "about_donate") | ||
|
||
|
||
func _on_svg_text_changed() -> void: | ||
NativeMenu.set_item_disabled(file_rid, file_clear_svg_index, SVG.text == SVG.DEFAULT) | ||
var empty_path: bool = GlobalSettings.save_data.current_file_path.is_empty() | ||
NativeMenu.set_item_disabled(file_rid, file_clear_assoc_index, empty_path) | ||
NativeMenu.set_item_disabled(file_rid, file_reset_svg_index, empty_path or SVG.does_svg_data_match_disk_contents()) | ||
|
||
|
||
func _on_code_editor_optimize_button_enable_updated(is_optimize_enabled: bool) -> void: | ||
NativeMenu.set_item_disabled(file_rid, file_optimize_index, not is_optimize_enabled) | ||
|
||
|
||
func _on_display_view_settings_updated(show_grid: bool, show_handles: bool, rasterized_svg: bool) -> void: | ||
NativeMenu.set_item_checked(view_rid, view_show_grid_index, show_grid) | ||
NativeMenu.set_item_checked(view_rid, view_show_handles_index, show_handles) | ||
NativeMenu.set_item_checked(view_rid, view_rasterized_svg_index, rasterized_svg) | ||
|
||
|
||
func _on_display_snap_settings_updated(snap_enabled: bool, snap_amount: float) -> void: | ||
NativeMenu.set_item_checked(snap_rid, snap_enable_index, snap_enabled) | ||
NativeMenu.set_item_checked(snap_rid, snap_0125_index, false) | ||
NativeMenu.set_item_checked(snap_rid, snap_025_index, false) | ||
NativeMenu.set_item_checked(snap_rid, snap_05_index, false) | ||
NativeMenu.set_item_checked(snap_rid, snap_1_index, false) | ||
NativeMenu.set_item_checked(snap_rid, snap_2_index, false) | ||
NativeMenu.set_item_checked(snap_rid, snap_4_index, false) | ||
if is_equal_approx(snap_amount, 0.125): | ||
NativeMenu.set_item_checked(snap_rid, snap_0125_index, true) | ||
elif is_equal_approx(snap_amount, 0.25): | ||
NativeMenu.set_item_checked(snap_rid, snap_025_index, true) | ||
elif is_equal_approx(snap_amount, 0.5): | ||
NativeMenu.set_item_checked(snap_rid, snap_05_index, true) | ||
elif is_equal_approx(snap_amount, 1): | ||
NativeMenu.set_item_checked(snap_rid, snap_1_index, true) | ||
elif is_equal_approx(snap_amount, 2): | ||
NativeMenu.set_item_checked(snap_rid, snap_2_index, true) | ||
elif is_equal_approx(snap_amount, 4): | ||
NativeMenu.set_item_checked(snap_rid, snap_4_index, true) | ||
|
||
|
||
func _set_snap(tag: float) -> void: | ||
%Display.set_snap_amount(tag) | ||
|
||
|
||
func _action(tag: StringName) -> void: | ||
var a = InputEventAction.new() | ||
a.action = tag | ||
a.pressed = true | ||
Input.parse_input_event(a) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters