From 6d87901056bfa27f6a80b152cdd8ca96e5fec675 Mon Sep 17 00:00:00 2001 From: OverloadedOrama <35376950+OverloadedOrama@users.noreply.github.com> Date: Fri, 5 Jun 2020 19:51:06 +0300 Subject: [PATCH] Imported image files now open in an new tab Keep in mind that opening an image file as a new frame might not work properly yet, if the target image has a different size. --- src/Autoload/OpenSave.gd | 4 +- src/Classes/Project.gd | 3 +- src/Main.gd | 3 +- src/UI/Dialogs/ImportSprites.gd | 112 ++++++++++++++---------------- src/UI/Dialogs/ImportSprites.tscn | 1 - 5 files changed, 59 insertions(+), 64 deletions(-) diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd index 631643640..c26bd8bce 100644 --- a/src/Autoload/OpenSave.gd +++ b/src/Autoload/OpenSave.gd @@ -20,14 +20,14 @@ func open_pxo_file(path : String, untitled_backup : bool = false) -> void: var file := File.new() var err := file.open_compressed(path, File.READ, File.COMPRESSION_ZSTD) if err == ERR_FILE_UNRECOGNIZED: - err = file.open(path, File.READ) # If the file is not compressed open it raw (pre-v0.7) + err = file.open(path, File.READ) # If the file is not compressed open it raw (pre-v0.7) if err != OK: Global.notification_label("File failed to open") file.close() return - var new_project := Project.new() + var new_project := Project.new([], path.get_file()) var file_version := file.get_line() # Example, "v0.7.10-beta" var file_ver_splitted := file_version.split("-") diff --git a/src/Classes/Project.gd b/src/Classes/Project.gd index 82849b50e..8fbdb07ac 100644 --- a/src/Classes/Project.gd +++ b/src/Classes/Project.gd @@ -206,7 +206,8 @@ func frame_changed(value : int) -> void: layer.frame_container.get_child(i).pressed = false # Select the new frame - Global.frame_ids.get_child(current_frame).add_color_override("font_color", Global.control.theme.get_color("Selected Color", "Label")) + if current_frame < Global.frame_ids.get_child_count(): + Global.frame_ids.get_child(current_frame).add_color_override("font_color", Global.control.theme.get_color("Selected Color", "Label")) if current_frame < layers[current_layer].frame_container.get_child_count(): layers[current_layer].frame_container.get_child(current_frame).pressed = true diff --git a/src/Main.gd b/src/Main.gd index 100c0d269..bbfef559c 100644 --- a/src/Main.gd +++ b/src/Main.gd @@ -225,8 +225,7 @@ func handle_loading_files(files : PoolStringArray) -> void: if file.get_extension().to_lower() == "pxo": _on_OpenSprite_file_selected(file) else: - if file == files[0]: - $ImportSprites.new_frame = false + $ImportSprites.new_frame = false $ImportSprites._on_ImportSprites_files_selected([file]) $ImportSprites.new_frame = true diff --git a/src/UI/Dialogs/ImportSprites.gd b/src/UI/Dialogs/ImportSprites.gd index 642bedd69..f9b423d63 100644 --- a/src/UI/Dialogs/ImportSprites.gd +++ b/src/UI/Dialogs/ImportSprites.gd @@ -1,6 +1,6 @@ extends FileDialog -var new_frame := true +var new_frame := false var import_spritesheet := false var spritesheet_horizontal := 1 var spritesheet_vertical := 1 @@ -36,86 +36,82 @@ func _on_VerticalFrames_value_changed(value) -> void: func _on_ImportSprites_files_selected(paths : PoolStringArray) -> void: Global.control.opensprite_file_selected = true - if !new_frame: # If we're not adding a new frame, delete the previous - Global.clear_frames() - Global.current_project.layers.clear() - Global.current_project.layers.append(Layer.new()) - Global.current_project.current_layer = 0 - + var project := Global.current_project var first_path : String = paths[0] - var i : int = Global.current_project.frames.size() - if !import_spritesheet: - for path in paths: - var image := Image.new() - var err := image.load(path) - if err != OK: # An error occured - var file_name : String = path.get_file() - Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)]) - Global.error_dialog.popup_centered() - Global.dialog_open(true) - continue + var i := 0 + if new_frame: + i = project.frames.size() - Global.current_project.size = image.get_size() + for path in paths: + var image := Image.new() + var err := image.load(path) + if err != OK: # An error occured + var file_name : String = path.get_file() + Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)]) + Global.error_dialog.popup_centered() + Global.dialog_open(true) + continue + + if !new_frame: # If we're not adding a new frame, delete the previous + project = Project.new([], path.get_file()) + project.layers.append(Layer.new()) + Global.projects.append(project) + + if !import_spritesheet: + if !new_frame: + project.size = image.get_size() var frame := Frame.new() image.convert(Image.FORMAT_RGBA8) image.lock() frame.cels.append(Cel.new(image, 1)) - for _i in range(1, Global.current_project.layers.size()): + for _i in range(1, project.layers.size()): var empty_sprite := Image.new() - empty_sprite.create(Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8) + empty_sprite.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) empty_sprite.fill(Color(0, 0, 0, 0)) empty_sprite.lock() frame.cels.append(Cel.new(empty_sprite, 1)) - Global.current_project.frames.append(frame) + project.frames.append(frame) i += 1 - else: - var image := Image.new() - var err := image.load(first_path) - if err != OK: # An error occured - var file_name : String = first_path.get_file() - Global.error_dialog.set_text(tr("Can't load file '%s'.\nError code: %s") % [file_name, str(err)]) - Global.error_dialog.popup_centered() - Global.dialog_open(true) - return + else: + spritesheet_horizontal = min(spritesheet_horizontal, image.get_size().x) + spritesheet_vertical = min(spritesheet_vertical, image.get_size().y) + var frame_width := image.get_size().x / spritesheet_horizontal + var frame_height := image.get_size().y / spritesheet_vertical + for yy in range(spritesheet_vertical): + for xx in range(spritesheet_horizontal): + var frame := Frame.new() + var cropped_image := Image.new() + cropped_image = image.get_rect(Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height)) + if !new_frame: + project.size = cropped_image.get_size() + cropped_image.convert(Image.FORMAT_RGBA8) + cropped_image.lock() + frame.cels.append(Cel.new(cropped_image, 1)) - spritesheet_horizontal = min(spritesheet_horizontal, image.get_size().x) - spritesheet_vertical = min(spritesheet_vertical, image.get_size().y) - var frame_width := image.get_size().x / spritesheet_horizontal - var frame_height := image.get_size().y / spritesheet_vertical - for yy in range(spritesheet_vertical): - for xx in range(spritesheet_horizontal): - var frame := Frame.new() - var cropped_image := Image.new() - cropped_image = image.get_rect(Rect2(frame_width * xx, frame_height * yy, frame_width, frame_height)) - Global.current_project.size = cropped_image.get_size() - cropped_image.convert(Image.FORMAT_RGBA8) - cropped_image.lock() - frame.cels.append(Cel.new(cropped_image, 1)) + for _i in range(1, project.layers.size()): + var empty_sprite := Image.new() + empty_sprite.create(project.size.x, project.size.y, false, Image.FORMAT_RGBA8) + empty_sprite.fill(Color(0, 0, 0, 0)) + empty_sprite.lock() + frame.cels.append(Cel.new(empty_sprite, 1)) - for _i in range(1, Global.current_project.layers.size()): - var empty_sprite := Image.new() - empty_sprite.create(Global.current_project.size.x, Global.current_project.size.y, false, Image.FORMAT_RGBA8) - empty_sprite.fill(Color(0, 0, 0, 0)) - empty_sprite.lock() - frame.cels.append(Cel.new(empty_sprite, 1)) + project.frames.append(frame) - Global.current_project.frames.append(frame) - - i += 1 + i += 1 + Global.tabs.current_tab = Global.tabs.get_tab_count() - 1 Global.canvas.camera_zoom() - Global.current_project.frames = Global.current_project.frames # Just to call Global.frames_changed - Global.current_project.current_frame = i - 1 - if !new_frame: - Global.current_project.layers = Global.current_project.layers # Just to call Global.layers_changed + if new_frame: + project.frames = project.frames # Just to call Global.frames_changed + project.current_frame = i - 1 Global.window_title = first_path.get_file() + " (" + tr("imported") + ") - Pixelorama " + Global.current_version - if Global.current_project.has_changed: + if project.has_changed: Global.window_title = Global.window_title + "(*)" var file_name := first_path.get_basename().get_file() var directory_path := first_path.get_basename().replace(file_name, "") diff --git a/src/UI/Dialogs/ImportSprites.tscn b/src/UI/Dialogs/ImportSprites.tscn index 29cf6ddce..034532a08 100644 --- a/src/UI/Dialogs/ImportSprites.tscn +++ b/src/UI/Dialogs/ImportSprites.tscn @@ -24,7 +24,6 @@ margin_bottom = 312.0 margin_right = 161.0 margin_bottom = 304.0 mouse_default_cursor_shape = 2 -pressed = true text = "Import as new frame" [node name="ImportSpritesheet" type="CheckBox" parent="HBoxContainer2"]