diff --git a/src/Autoload/HTML5FileExchange.gd b/src/Autoload/HTML5FileExchange.gd index 0328ed4..8576178 100644 --- a/src/Autoload/HTML5FileExchange.gd +++ b/src/Autoload/HTML5FileExchange.gd @@ -53,7 +53,7 @@ func _define_js() -> void: """, true) -func load_image() -> Image: +func load_image() -> void: if OS.get_name() != "HTML5" or !OS.has_feature('JavaScript'): return @@ -62,7 +62,7 @@ func load_image() -> Image: yield(self, "InFocus") # wait until js prompt is closed - yield(get_tree().create_timer(0.1), "timeout") #give some time for async js data load + yield(get_tree().create_timer(0.5), "timeout") #give some time for async js data load if JavaScript.eval("canceled;", true): # if File Dialog closed w/o file return @@ -75,12 +75,12 @@ func load_image() -> Image: break yield(get_tree().create_timer(1.0), "timeout") # need more time to load data - var imageType = JavaScript.eval("fileType;", true) - var imageName = JavaScript.eval("fileName;", true) + var image_type = JavaScript.eval("fileType;", true) + var image_name = JavaScript.eval("fileName;", true) var image = Image.new() var image_error - match imageType: + match image_type: "image/png": image_error = image.load_png_from_buffer(imageData) "image/jpeg": @@ -94,7 +94,7 @@ func load_image() -> Image: print("An error occurred while trying to display the image.") return else: - return image + OpenSave.handle_loading_image(image_name, image) func save_image(image : Image, file_name : String = "export") -> void: diff --git a/src/Autoload/Import.gd b/src/Autoload/Import.gd index 88cdd1e..1fd42c1 100644 --- a/src/Autoload/Import.gd +++ b/src/Autoload/Import.gd @@ -313,14 +313,9 @@ func import_gpl(path : String) -> Palette: return result -func import_png_palette(path: String) -> Palette: +func import_png_palette(path: String, image : Image) -> Palette: var result: Palette = null - var image := Image.new() - var err := image.load(path) - if err != OK: # An error occured - return null - var height: int = image.get_height() var width: int = image.get_width() @@ -335,9 +330,6 @@ func import_png_palette(path: String) -> Palette: result.add_color(color, "#" + color.to_html()) image.unlock() - var name_start = path.find_last('/') + 1 - var name_end = path.find_last('.') - if name_end > name_start: - result.name = path.substr(name_start, name_end - name_start) + result.name = path.get_basename().get_file() return result diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd index d902e5a..6117c9e 100644 --- a/src/Autoload/OpenSave.gd +++ b/src/Autoload/OpenSave.gd @@ -34,13 +34,16 @@ func handle_loading_files(files : PoolStringArray) -> void: Global.error_dialog.popup_centered() Global.dialog_open(true) continue + handle_loading_image(file, image) - var preview_dialog : ConfirmationDialog = preload("res://src/UI/Dialogs/PreviewDialog.tscn").instance() - preview_dialog.path = file - preview_dialog.image = image - Global.control.add_child(preview_dialog) - preview_dialog.popup_centered() - Global.dialog_open(true) + +func handle_loading_image(file : String, image : Image) -> void: + var preview_dialog : ConfirmationDialog = preload("res://src/UI/Dialogs/PreviewDialog.tscn").instance() + preview_dialog.path = file + preview_dialog.image = image + Global.control.add_child(preview_dialog) + preview_dialog.popup_centered() + Global.dialog_open(true) func open_pxo_file(path : String, untitled_backup : bool = false) -> void: diff --git a/src/Palette/PaletteContainer.gd b/src/Palette/PaletteContainer.gd index 9f10dad..ee99532 100644 --- a/src/Palette/PaletteContainer.gd +++ b/src/Palette/PaletteContainer.gd @@ -51,8 +51,22 @@ func on_palette_import_file_selected(path : String) -> void: elif path.to_lower().ends_with("gpl"): palette = Import.import_gpl(path) elif path.to_lower().ends_with("png") or path.to_lower().ends_with("bmp") or path.to_lower().ends_with("hdr") or path.to_lower().ends_with("jpg") or path.to_lower().ends_with("svg") or path.to_lower().ends_with("tga") or path.to_lower().ends_with("webp"): - palette = Import.import_png_palette(path) + var image := Image.new() + var err := image.load(path) + if !err: + import_image_palette(path, image) + return + attempt_to_import_palette(palette) + + +func import_image_palette(path : String, image : Image) -> void: + var palette : Palette = null + palette = Import.import_png_palette(path, image) + attempt_to_import_palette(palette) + + +func attempt_to_import_palette(palette : Palette) -> void: if palette: palette.name = palette_name_replace(palette.name) Global.palettes[palette.name] = palette diff --git a/src/UI/Dialogs/PreviewDialog.gd b/src/UI/Dialogs/PreviewDialog.gd index 01444a5..7730646 100644 --- a/src/UI/Dialogs/PreviewDialog.gd +++ b/src/UI/Dialogs/PreviewDialog.gd @@ -52,7 +52,7 @@ func _on_PreviewDialog_confirmed() -> void: OpenSave.open_image_as_new_layer(image, path.get_basename().get_file(), frame_index) elif current_import_option == ImageImportOptions.PALETTE: - Global.palette_container.on_palette_import_file_selected(path) + Global.palette_container.import_image_palette(path, image) elif current_import_option == ImageImportOptions.BRUSH: var file_name : String = path.get_basename().get_file() diff --git a/src/UI/Dialogs/SaveSpriteHTML5.tscn b/src/UI/Dialogs/SaveSpriteHTML5.tscn index 4491d26..1b762ef 100644 --- a/src/UI/Dialogs/SaveSpriteHTML5.tscn +++ b/src/UI/Dialogs/SaveSpriteHTML5.tscn @@ -1,7 +1,6 @@ [gd_scene format=2] [node name="SaveSpriteHTML5" type="ConfirmationDialog"] -visible = true margin_right = 200.0 margin_bottom = 70.0 diff --git a/src/UI/TopMenuContainer.gd b/src/UI/TopMenuContainer.gd index 15120b0..7a4f8cc 100644 --- a/src/UI/TopMenuContainer.gd +++ b/src/UI/TopMenuContainer.gd @@ -145,9 +145,12 @@ func on_new_project_file_menu_option_pressed() -> void: func open_project_file() -> void: - Global.open_sprites_dialog.popup_centered() - Global.dialog_open(true) - Global.control.opensprite_file_selected = false + if OS.get_name() == "HTML5": + Html5FileExchange.load_image() + else: + Global.open_sprites_dialog.popup_centered() + Global.dialog_open(true) + Global.control.opensprite_file_selected = false func on_open_last_project_file_menu_option_pressed() -> void: