diff --git a/src/Autoload/OpenSave.gd b/src/Autoload/OpenSave.gd index 071dcb0a7..6c7c0428f 100644 --- a/src/Autoload/OpenSave.gd +++ b/src/Autoload/OpenSave.gd @@ -596,7 +596,7 @@ func open_image_as_new_layer(image: Image, file_name: String, frame_index := 0) project.undo_redo.commit_action() -func import_reference_image_from_path(path: String): +func import_reference_image_from_path(path: String) -> void: var project: Project = Global.current_project var ri := ReferenceImage.new() ri.project = project @@ -605,6 +605,16 @@ func import_reference_image_from_path(path: String): project.change_project() +# Useful for HTML5 +func import_reference_image_from_image(image: Image) -> void: + var project: Project = Global.current_project + var ri := ReferenceImage.new() + ri.project = project + ri.create_from_image(image) + Global.canvas.add_child(ri) + project.change_project() + + func set_new_imported_tab(project: Project, path: String) -> void: var prev_project_empty: bool = Global.current_project.is_empty() var prev_project_pos: int = Global.current_project_index diff --git a/src/UI/Canvas/ReferenceImage.gd b/src/UI/Canvas/ReferenceImage.gd index e8854e15b..810d887a7 100644 --- a/src/UI/Canvas/ReferenceImage.gd +++ b/src/UI/Canvas/ReferenceImage.gd @@ -13,12 +13,12 @@ func _ready() -> void: project.reference_images.append(self) -func change_properties(): +func change_properties() -> void: emit_signal("properties_changed") # Resets the position and scale of the reference image. -func position_reset(): +func position_reset() -> void: position = project.size / 2.0 if texture != null: scale = ( @@ -30,7 +30,7 @@ func position_reset(): # Serialize details of the reference image. -func serialize(): +func serialize() -> Dictionary: return { "x": position.x, "y": position.y, @@ -47,16 +47,16 @@ func serialize(): # Load details of the reference image from a dictionary. # Be aware that new ReferenceImages are created via deserialization. # This is because deserialization sets up some nice defaults. -func deserialize(d: Dictionary): +func deserialize(d: Dictionary) -> void: modulate = Color(1, 1, 1, 0.5) if d.has("image_path"): # Note that reference images are referred to by path. # These images may be rather big. # Also image_path = d["image_path"] - var img = Image.new() + var img := Image.new() if img.load(image_path) == OK: - var itex = ImageTexture.new() + var itex := ImageTexture.new() # don't do FLAG_REPEAT - it could cause visual issues itex.create_from_image(img, Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER) texture = itex @@ -79,3 +79,12 @@ func deserialize(d: Dictionary): if d.has("modulate_a"): modulate.a = d["modulate_a"] change_properties() + + +# Useful for HTML5 +func create_from_image(image: Image) -> void: + var itex := ImageTexture.new() + # don't do FLAG_REPEAT - it could cause visual issues + itex.create_from_image(image, Texture.FLAG_MIPMAPS | Texture.FLAG_FILTER) + texture = itex + position_reset() diff --git a/src/UI/Dialogs/PreviewDialog.gd b/src/UI/Dialogs/PreviewDialog.gd index 06d8614d6..021c84f4b 100644 --- a/src/UI/Dialogs/PreviewDialog.gd +++ b/src/UI/Dialogs/PreviewDialog.gd @@ -144,7 +144,10 @@ func _on_PreviewDialog_confirmed() -> void: OpenSave.open_image_as_new_layer(image, path.get_basename().get_file(), frame_index) elif current_import_option == ImageImportOptions.NEW_REFERENCE_IMAGE: - OpenSave.import_reference_image_from_path(path) + if OS.get_name() == "HTML5": + OpenSave.import_reference_image_from_image(image) + else: + OpenSave.import_reference_image_from_path(path) elif current_import_option == ImageImportOptions.PALETTE: Palettes.import_palette_from_path(path)