1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-18 17:19:50 +00:00

Refactoring Main.gd. Mostly cutting big methods into smaller ones. (#244)

* Refactoring Main.gd. Mostly cutting big methods into smaller one.

- Reduced size of _ready method in Main.gd
- Moved code from certain parts of old _ready method into seperate methods
- Fixed the translation bug related to CurrentFrame node in TopMenuContainer scene. The CurrentFrame node wasn't updating the language when I was changing language. I've also changed the translation file for this.
- Fixed Global.palette_option_button.selected related warning. Because of some unknown reasons, git didn't push completed line there.
- Moved code from file_menu_id_pressed and view_menu_id_pressed method in Main.gd to separate methods to make it more readable.

* Removed window_title changes from Main.tscn

Co-authored-by: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com>
This commit is contained in:
Igor Santarek 2020-05-23 23:22:06 +02:00 committed by GitHub
parent 852e249143
commit aae3ae0cf4
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 282 additions and 183 deletions

View file

@ -732,9 +732,6 @@ msgstr ""
msgid "Current frame:"
msgstr ""
msgid "Current frame: 1/1"
msgstr ""
msgid "Jump to the first frame\n"
"(%s)"
msgstr ""

View file

@ -234,7 +234,7 @@ var animation_timeline : Panel
var animation_timer : Timer
var frame_ids : HBoxContainer
var current_frame_label : Label
var current_frame_mark_label : Label
var onion_skinning_button : BaseButton
var loop_animation_button : BaseButton
var play_forward : BaseButton
@ -372,7 +372,7 @@ func _ready() -> void:
frames_container = find_node_by_name(animation_timeline, "FramesContainer")
animation_timer = find_node_by_name(animation_timeline, "AnimationTimer")
frame_ids = find_node_by_name(animation_timeline, "FrameIDs")
current_frame_label = find_node_by_name(control, "CurrentFrame")
current_frame_mark_label = find_node_by_name(control, "CurrentFrameMark")
onion_skinning_button = find_node_by_name(animation_timeline, "OnionSkinning")
loop_animation_button = find_node_by_name(animation_timeline, "LoopAnim")
play_forward = find_node_by_name(animation_timeline, "PlayForward")
@ -625,7 +625,7 @@ func layers_changed(value : Array) -> void:
func frame_changed(value : int) -> void:
current_frame = value
current_frame_label.text = tr("Current frame:") + " %s/%s" % [str(current_frame + 1), canvases.size()]
current_frame_mark_label.text = "%s/%s" % [str(current_frame + 1), canvases.size()]
var i := 0
for c in canvases: # De-select all the other canvases/frames

View file

@ -11,13 +11,63 @@ var is_quitting_on_save := false
# Called when the node enters the scene tree for the first time.
func _ready() -> void:
get_tree().set_auto_accept_quit(false)
setup_application_window_size()
setup_translation_settings()
setup_file_menu()
setup_edit_menu()
setup_view_menu()
setup_image_menu()
setup_help_menu()
Global.window_title = "(" + tr("untitled") + ") - Pixelorama " + Global.current_version
Global.layers[0][0] = tr("Layer") + " 0"
Global.layers_container.get_child(0).label.text = Global.layers[0][0]
Global.layers_container.get_child(0).line_edit.text = Global.layers[0][0]
Import.import_brushes(Global.directory_module.get_brushes_search_path_in_order())
Import.import_patterns(Global.directory_module.get_patterns_search_path_in_order())
Global.left_color_picker.get_picker().presets_visible = false
Global.right_color_picker.get_picker().presets_visible = false
$QuitAndSaveDialog.add_button("Save & Exit", false, "Save")
$QuitAndSaveDialog.get_ok().text = "Exit without saving"
if not Global.config_cache.has_section_key("preferences", "startup"):
Global.config_cache.set_value("preferences", "startup", true)
show_splash_screen()
handle_backup()
handle_running_pixelorama_with_arguments()
func _input(event : InputEvent) -> void:
Global.left_cursor.position = get_global_mouse_position() + Vector2(-32, 32)
Global.left_cursor.texture = Global.left_cursor_tool_texture
Global.right_cursor.position = get_global_mouse_position() + Vector2(32, 32)
Global.right_cursor.texture = Global.right_cursor_tool_texture
if event is InputEventKey and (event.scancode == KEY_ENTER or event.scancode == KEY_KP_ENTER):
if get_focus_owner() is LineEdit:
get_focus_owner().release_focus()
if event.is_action_pressed("toggle_fullscreen"):
OS.window_fullscreen = !OS.window_fullscreen
if event.is_action_pressed("redo_secondary"): # Shift + Ctrl + Z
redone = true
Global.undo_redo.redo()
redone = false
func setup_application_window_size() -> void:
# Set a minimum window size to prevent UI elements from collapsing on each other.
# This property is only available in 3.2alpha or later, so use `set()` to fail gracefully if it doesn't exist.
OS.set("min_window_size", Vector2(1024, 576))
Global.loaded_locales = TranslationServer.get_loaded_locales()
# Make sure locales are always sorted, in the same order
Global.loaded_locales.sort()
# Restore the window position/size if values are present in the configuration cache
if Global.config_cache.has_section_key("window", "screen"):
@ -31,48 +81,12 @@ func _ready() -> void:
if Global.config_cache.has_section_key("window", "size"):
OS.window_size = Global.config_cache.get_value("window", "size")
var file_menu_items := {
"New..." : InputMap.get_action_list("new_file")[0].get_scancode_with_modifiers(),
"Open..." : InputMap.get_action_list("open_file")[0].get_scancode_with_modifiers(),
'Open last project...' : 0,
"Save..." : InputMap.get_action_list("save_file")[0].get_scancode_with_modifiers(),
"Save as..." : InputMap.get_action_list("save_file_as")[0].get_scancode_with_modifiers(),
"Import..." : InputMap.get_action_list("import_file")[0].get_scancode_with_modifiers(),
"Export..." : InputMap.get_action_list("export_file")[0].get_scancode_with_modifiers(),
"Export as..." : InputMap.get_action_list("export_file_as")[0].get_scancode_with_modifiers(),
"Quit" : InputMap.get_action_list("quit")[0].get_scancode_with_modifiers(),
}
var edit_menu_items := {
"Undo" : InputMap.get_action_list("undo")[0].get_scancode_with_modifiers(),
"Redo" : InputMap.get_action_list("redo")[0].get_scancode_with_modifiers(),
"Clear Selection" : 0,
"Preferences" : 0
}
var view_menu_items := {
"Tile Mode" : InputMap.get_action_list("tile_mode")[0].get_scancode_with_modifiers(),
"Show Grid" : InputMap.get_action_list("show_grid")[0].get_scancode_with_modifiers(),
"Show Rulers" : InputMap.get_action_list("show_rulers")[0].get_scancode_with_modifiers(),
"Show Guides" : InputMap.get_action_list("show_guides")[0].get_scancode_with_modifiers(),
"Show Animation Timeline" : 0
}
var image_menu_items := {
"Scale Image" : 0,
"Crop Image" : 0,
"Flip Horizontal" : InputMap.get_action_list("image_flip_horizontal")[0].get_scancode_with_modifiers(),
"Flip Vertical" : InputMap.get_action_list("image_flip_vertical")[0].get_scancode_with_modifiers(),
"Rotate Image" : 0,
"Invert colors" : 0,
"Desaturation" : 0,
"Outline" : 0,
"Adjust Hue/Saturation/Value" : 0
}
var help_menu_items := {
"View Splash Screen" : 0,
"Online Docs" : 0,
"Issue Tracker" : 0,
"Changelog" : 0,
"About Pixelorama" : 0
}
func setup_translation_settings() -> void:
Global.loaded_locales = TranslationServer.get_loaded_locales()
# Make sure locales are always sorted, in the same order
Global.loaded_locales.sort()
# Load language
if Global.config_cache.has_section_key("preferences", "locale"):
@ -92,67 +106,110 @@ func _ready() -> void:
theme.default_font = preload("res://assets/fonts/Roboto-Regular.tres")
func setup_file_menu() -> void:
var file_menu_items := {
"New..." : InputMap.get_action_list("new_file")[0].get_scancode_with_modifiers(),
"Open..." : InputMap.get_action_list("open_file")[0].get_scancode_with_modifiers(),
'Open last project...' : 0,
"Save..." : InputMap.get_action_list("save_file")[0].get_scancode_with_modifiers(),
"Save as..." : InputMap.get_action_list("save_file_as")[0].get_scancode_with_modifiers(),
"Import..." : InputMap.get_action_list("import_file")[0].get_scancode_with_modifiers(),
"Export..." : InputMap.get_action_list("export_file")[0].get_scancode_with_modifiers(),
"Export as..." : InputMap.get_action_list("export_file_as")[0].get_scancode_with_modifiers(),
"Quit" : InputMap.get_action_list("quit")[0].get_scancode_with_modifiers(),
}
file_menu = Global.file_menu.get_popup()
var edit_menu : PopupMenu = Global.edit_menu.get_popup()
view_menu = Global.view_menu.get_popup()
var image_menu : PopupMenu = Global.image_menu.get_popup()
var help_menu : PopupMenu = Global.help_menu.get_popup()
var i := 0
var i = 0
for item in file_menu_items.keys():
file_menu.add_item(item, i, file_menu_items[item])
i += 1
i = 0
file_menu.connect("id_pressed", self, "file_menu_id_pressed")
func setup_edit_menu() -> void:
var edit_menu_items := {
"Undo" : InputMap.get_action_list("undo")[0].get_scancode_with_modifiers(),
"Redo" : InputMap.get_action_list("redo")[0].get_scancode_with_modifiers(),
"Clear Selection" : 0,
"Preferences" : 0
}
var edit_menu : PopupMenu = Global.edit_menu.get_popup()
var i := 0
for item in edit_menu_items.keys():
edit_menu.add_item(item, i, edit_menu_items[item])
i += 1
i = 0
edit_menu.connect("id_pressed", self, "edit_menu_id_pressed")
func setup_view_menu() -> void:
var view_menu_items := {
"Tile Mode" : InputMap.get_action_list("tile_mode")[0].get_scancode_with_modifiers(),
"Show Grid" : InputMap.get_action_list("show_grid")[0].get_scancode_with_modifiers(),
"Show Rulers" : InputMap.get_action_list("show_rulers")[0].get_scancode_with_modifiers(),
"Show Guides" : InputMap.get_action_list("show_guides")[0].get_scancode_with_modifiers(),
"Show Animation Timeline" : 0
}
view_menu = Global.view_menu.get_popup()
var i := 0
for item in view_menu_items.keys():
view_menu.add_check_item(item, i, view_menu_items[item])
i += 1
view_menu.set_item_checked(2, true) # Show Rulers
view_menu.set_item_checked(3, true) # Show Guides
view_menu.set_item_checked(4, true) # Show Animation Timeline
view_menu.hide_on_checkable_item_selection = false
i = 0
view_menu.connect("id_pressed", self, "view_menu_id_pressed")
func setup_image_menu() -> void:
var image_menu_items := {
"Scale Image" : 0,
"Crop Image" : 0,
"Flip Horizontal" : InputMap.get_action_list("image_flip_horizontal")[0].get_scancode_with_modifiers(),
"Flip Vertical" : InputMap.get_action_list("image_flip_vertical")[0].get_scancode_with_modifiers(),
"Rotate Image" : 0,
"Invert colors" : 0,
"Desaturation" : 0,
"Outline" : 0,
"Adjust Hue/Saturation/Value" : 0
}
var image_menu : PopupMenu = Global.image_menu.get_popup()
var i := 0
for item in image_menu_items.keys():
image_menu.add_item(item, i, image_menu_items[item])
if i == 4:
image_menu.add_separator()
i += 1
i = 0
image_menu.connect("id_pressed", self, "image_menu_id_pressed")
func setup_help_menu() -> void:
var help_menu_items := {
"View Splash Screen" : 0,
"Online Docs" : 0,
"Issue Tracker" : 0,
"Changelog" : 0,
"About Pixelorama" : 0
}
var help_menu : PopupMenu = Global.help_menu.get_popup()
var i := 0
for item in help_menu_items.keys():
help_menu.add_item(item, i, help_menu_items[item])
i += 1
file_menu.connect("id_pressed", self, "file_menu_id_pressed")
edit_menu.connect("id_pressed", self, "edit_menu_id_pressed")
view_menu.connect("id_pressed", self, "view_menu_id_pressed")
image_menu.connect("id_pressed", self, "image_menu_id_pressed")
help_menu.connect("id_pressed", self, "help_menu_id_pressed")
# Checks to see if it's 3.1.x
if Engine.get_version_info().major == 3 and Engine.get_version_info().minor < 2:
Global.left_color_picker.get_picker().move_child(Global.left_color_picker.get_picker().get_child(0), 1)
Global.right_color_picker.get_picker().move_child(Global.right_color_picker.get_picker().get_child(0), 1)
Global.window_title = "(" + tr("untitled") + ") - Pixelorama " + Global.current_version
Global.layers[0][0] = tr("Layer") + " 0"
Global.layers_container.get_child(0).label.text = Global.layers[0][0]
Global.layers_container.get_child(0).line_edit.text = Global.layers[0][0]
Import.import_brushes(Global.directory_module.get_brushes_search_path_in_order())
Import.import_patterns(Global.directory_module.get_patterns_search_path_in_order())
Global.left_color_picker.get_picker().presets_visible = false
Global.right_color_picker.get_picker().presets_visible = false
$QuitAndSaveDialog.add_button("Save & Exit", false, "Save")
$QuitAndSaveDialog.get_ok().text = "Exit without saving"
if not Global.config_cache.has_section_key("preferences", "startup"):
Global.config_cache.set_value("preferences", "startup", true)
func show_splash_screen() -> void:
# Wait for the window to adjust itself, so the popup is correctly centered
yield(get_tree().create_timer(0.01), "timeout")
if Global.config_cache.get_value("preferences", "startup"):
@ -161,6 +218,8 @@ func _ready() -> void:
else:
Global.can_draw = true
func handle_backup() -> void:
# If backup file exists then Pixelorama was not closed properly (probably crashed) - reopen backup
$BackupConfirmation.get_cancel().text = tr("Delete")
if Global.config_cache.has_section("backups"):
@ -184,6 +243,9 @@ func _ready() -> void:
if Global.open_last_project:
load_last_project()
func handle_running_pixelorama_with_arguments() -> void:
# If user want to run Pixelorama with arguments in terminal mode then handle that
if OS.get_cmdline_args():
for arg in OS.get_cmdline_args():
if arg.get_extension().to_lower() == "pxo":
@ -195,77 +257,86 @@ func _ready() -> void:
$ImportSprites.new_frame = true
func _input(event : InputEvent) -> void:
Global.left_cursor.position = get_global_mouse_position() + Vector2(-32, 32)
Global.left_cursor.texture = Global.left_cursor_tool_texture
Global.right_cursor.position = get_global_mouse_position() + Vector2(32, 32)
Global.right_cursor.texture = Global.right_cursor_tool_texture
if event is InputEventKey and (event.scancode == KEY_ENTER or event.scancode == KEY_KP_ENTER):
if get_focus_owner() is LineEdit:
get_focus_owner().release_focus()
if event.is_action_pressed("toggle_fullscreen"):
OS.window_fullscreen = !OS.window_fullscreen
if event.is_action_pressed("redo_secondary"): # Shift + Ctrl + Z
redone = true
Global.undo_redo.redo()
redone = false
func _notification(what : int) -> void:
if what == MainLoop.NOTIFICATION_WM_QUIT_REQUEST: # Handle exit
show_quit_dialog()
func on_new_project_file_menu_option_pressed(id : int) -> void:
if Global.project_has_changed:
unsaved_canvas_state = id
$UnsavedCanvasDialog.popup_centered()
else:
$CreateNewImage.popup_centered()
Global.dialog_open(true)
func open_project_file() -> void:
$OpenSprite.popup_centered()
Global.dialog_open(true)
opensprite_file_selected = false
func on_open_last_project_file_menu_option_pressed(id : int) -> void:
# Check if last project path is set and if yes then open
if Global.config_cache.has_section_key("preferences", "last_project_path"):
if Global.project_has_changed:
unsaved_canvas_state = id
$UnsavedCanvasDialog.popup_centered()
Global.dialog_open(true)
else:
load_last_project()
else: # if not then warn user that he didn't edit any project yet
Global.error_dialog.set_text("You haven't saved or opened any project in Pixelorama yet!")
Global.error_dialog.popup_centered()
Global.dialog_open(true)
func save_project_file() -> void:
is_quitting_on_save = false
if OpenSave.current_save_path == "":
$SaveSprite.popup_centered()
Global.dialog_open(true)
else:
_on_SaveSprite_file_selected(OpenSave.current_save_path)
func save_project_file_as() -> void:
is_quitting_on_save = false
$SaveSprite.popup_centered()
Global.dialog_open(true)
func import_file() -> void:
$ImportSprites.popup_centered()
Global.dialog_open(true)
opensprite_file_selected = false
func export_file() -> void:
if $ExportDialog.was_exported == false:
$ExportDialog.popup_centered()
Global.dialog_open(true)
else:
$ExportDialog.external_export()
func file_menu_id_pressed(id : int) -> void:
match id:
0: # New
if Global.project_has_changed:
unsaved_canvas_state = id
$UnsavedCanvasDialog.popup_centered()
else:
$CreateNewImage.popup_centered()
Global.dialog_open(true)
on_new_project_file_menu_option_pressed(id)
1: # Open
$OpenSprite.popup_centered()
Global.dialog_open(true)
opensprite_file_selected = false
open_project_file()
2: # Open last project
# Check if last project path is set and if yes then open
if Global.config_cache.has_section_key("preferences", "last_project_path"):
if Global.project_has_changed:
unsaved_canvas_state = id
$UnsavedCanvasDialog.popup_centered()
Global.dialog_open(true)
else:
load_last_project()
else: # if not then warn user that he didn't edit any project yet
Global.error_dialog.set_text("You haven't saved or opened any project in Pixelorama yet!")
Global.error_dialog.popup_centered()
Global.dialog_open(true)
on_open_last_project_file_menu_option_pressed(id)
3: # Save
is_quitting_on_save = false
if OpenSave.current_save_path == "":
$SaveSprite.popup_centered()
Global.dialog_open(true)
else:
_on_SaveSprite_file_selected(OpenSave.current_save_path)
save_project_file()
4: # Save as
is_quitting_on_save = false
$SaveSprite.popup_centered()
Global.dialog_open(true)
save_project_file_as()
5: # Import
$ImportSprites.popup_centered()
Global.dialog_open(true)
opensprite_file_selected = false
import_file()
6: # Export
if $ExportDialog.was_exported == false:
$ExportDialog.popup_centered()
Global.dialog_open(true)
else:
$ExportDialog.external_export()
export_file()
7: # Export as
$ExportDialog.popup_centered()
Global.dialog_open(true)
@ -294,30 +365,50 @@ func edit_menu_id_pressed(id : int) -> void:
Global.dialog_open(true)
func toggle_tile_mode() -> void:
Global.tile_mode = !Global.tile_mode
view_menu.set_item_checked(0, Global.tile_mode)
func toggle_show_grid() -> void:
Global.draw_grid = !Global.draw_grid
view_menu.set_item_checked(1, Global.draw_grid)
func toggle_show_rulers() -> void:
Global.show_rulers = !Global.show_rulers
view_menu.set_item_checked(2, Global.show_rulers)
Global.horizontal_ruler.visible = Global.show_rulers
Global.vertical_ruler.visible = Global.show_rulers
func toggle_show_guides() -> void:
Global.show_guides = !Global.show_guides
view_menu.set_item_checked(3, Global.show_guides)
for canvas in Global.canvases:
for guide in canvas.get_children():
if guide is Guide:
guide.visible = Global.show_guides
func toggle_show_anim_timeline() -> void:
Global.show_animation_timeline = !Global.show_animation_timeline
view_menu.set_item_checked(4, Global.show_animation_timeline)
Global.animation_timeline.visible = Global.show_animation_timeline
func view_menu_id_pressed(id : int) -> void:
match id:
0: # Tile mode
Global.tile_mode = !Global.tile_mode
view_menu.set_item_checked(0, Global.tile_mode)
toggle_tile_mode()
1: # Show grid
Global.draw_grid = !Global.draw_grid
view_menu.set_item_checked(1, Global.draw_grid)
toggle_show_grid()
2: # Show rulers
Global.show_rulers = !Global.show_rulers
view_menu.set_item_checked(2, Global.show_rulers)
Global.horizontal_ruler.visible = Global.show_rulers
Global.vertical_ruler.visible = Global.show_rulers
toggle_show_rulers()
3: # Show guides
Global.show_guides = !Global.show_guides
view_menu.set_item_checked(3, Global.show_guides)
for canvas in Global.canvases:
for guide in canvas.get_children():
if guide is Guide:
guide.visible = Global.show_guides
toggle_show_guides()
4: # Show animation timeline
Global.show_animation_timeline = !Global.show_animation_timeline
view_menu.set_item_checked(4, Global.show_animation_timeline)
Global.animation_timeline.visible = Global.show_animation_timeline
toggle_show_anim_timeline()
Global.canvas.update()

View file

@ -195,7 +195,7 @@ func _load_palettes() -> void:
# You need these two lines because when you remove a palette
# Then this just won't work and _on_PaletteOptionButton_item_selected
# method won't fire.
Global.palette_option_button.selected
Global.palette_option_button.selected = index
on_palette_select("Default")
Global.palette_option_button.select(index)

View file

@ -7,6 +7,9 @@ margin_right = 1280.0
margin_bottom = 28.0
rect_min_size = Vector2( 0, 28 )
custom_styles/panel = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="MenuItems" type="HBoxContainer" parent="."]
margin_left = 2.0
@ -17,40 +20,40 @@ __meta__ = {
}
[node name="FileMenu" type="MenuButton" parent="MenuItems"]
margin_right = 29.0
margin_bottom = 21.0
margin_right = 35.0
margin_bottom = 20.0
mouse_default_cursor_shape = 2
text = "File"
switch_on_hover = true
[node name="EditMenu" type="MenuButton" parent="MenuItems"]
margin_left = 33.0
margin_right = 64.0
margin_bottom = 21.0
margin_left = 39.0
margin_right = 75.0
margin_bottom = 20.0
mouse_default_cursor_shape = 2
text = "Edit"
switch_on_hover = true
[node name="ViewMenu" type="MenuButton" parent="MenuItems"]
margin_left = 68.0
margin_right = 104.0
margin_bottom = 21.0
margin_left = 79.0
margin_right = 121.0
margin_bottom = 20.0
mouse_default_cursor_shape = 2
text = "View"
switch_on_hover = true
[node name="ImageMenu" type="MenuButton" parent="MenuItems"]
margin_left = 108.0
margin_right = 152.0
margin_bottom = 21.0
margin_left = 125.0
margin_right = 177.0
margin_bottom = 20.0
mouse_default_cursor_shape = 2
text = "Image"
switch_on_hover = true
[node name="HelpMenu" type="MenuButton" parent="MenuItems"]
margin_left = 156.0
margin_right = 191.0
margin_bottom = 21.0
margin_left = 181.0
margin_right = 223.0
margin_bottom = 20.0
mouse_default_cursor_shape = 2
text = "Help"
switch_on_hover = true
@ -67,7 +70,7 @@ __meta__ = {
}
[node name="ZoomLevel" type="Label" parent="TopLabels"]
margin_top = 6.0
margin_top = 7.0
margin_right = 60.0
margin_bottom = 21.0
rect_min_size = Vector2( 60, 0 )
@ -76,8 +79,8 @@ align = 2
[node name="CursorPosition" type="Label" parent="TopLabels"]
margin_left = 80.0
margin_top = 6.0
margin_right = 120.0
margin_top = 7.0
margin_right = 128.0
margin_bottom = 21.0
text = "[64×64]"
align = 2
@ -98,12 +101,20 @@ __meta__ = {
}
[node name="CurrentFrame" type="Label" parent="HBoxContainer"]
margin_left = 113.0
margin_top = 6.0
margin_right = 216.0
margin_bottom = 21.0
text = "Current Frame: 1/1"
margin_left = 106.0
margin_right = 198.0
margin_bottom = 28.0
size_flags_vertical = 1
text = "Current frame:"
valign = 1
__meta__ = {
"_edit_use_anchors_": false
}
[node name="CurrentFrameMark" type="Label" parent="HBoxContainer"]
margin_left = 202.0
margin_right = 223.0
margin_bottom = 28.0
size_flags_vertical = 1
text = "1/2"
valign = 1