1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-02-13 01:03:07 +00:00
Pixelorama/src/UI/Dialogs/ShaderEffect.gd

57 lines
1.7 KiB
GDScript3
Raw Normal View History

extends ConfirmationDialog
var current_cel : Image
onready var viewport : Viewport = $VBoxContainer/ViewportContainer/Viewport
onready var preview : TextureRect = viewport.get_node("Preview")
onready var shader_loaded_label : Label = $VBoxContainer/ShaderLoadedLabel
func _on_ShaderEffect_about_to_show() -> void:
current_cel = Global.current_project.frames[Global.current_project.current_frame].cels[Global.current_project.current_layer].image
current_cel.unlock()
viewport.size = current_cel.get_size()
var viewport_texture = viewport.get_texture().get_data()
viewport_texture.convert(Image.FORMAT_RGBA8)
var preview_image := Image.new()
preview_image.copy_from(current_cel)
var preview_texture = ImageTexture.new()
preview_texture.create_from_image(preview_image, 0)
preview.texture = preview_texture
func _on_ShaderEffect_confirmed() -> void:
var viewport_texture = viewport.get_texture().get_data()
viewport_texture.flip_y()
viewport_texture.convert(Image.FORMAT_RGBA8)
print(viewport_texture.get_size())
Global.canvas.handle_undo("Draw")
current_cel.copy_from(viewport_texture)
Global.canvas.handle_redo("Draw")
func _on_ShaderEffect_popup_hide() -> void:
current_cel.lock()
Global.dialog_open(false)
yield(get_tree().create_timer(0.2), "timeout")
preview.texture = null
viewport.size = Vector2.ONE
rect_size = Vector2.ONE
func _on_ChooseShader_pressed() -> void:
if OS.get_name() == "HTML5":
Html5FileExchange.load_shader()
else:
$FileDialog.popup_centered(Vector2(200, 340))
func _on_FileDialog_file_selected(path : String) -> void:
var shader = load(path)
if !shader is Shader:
return
preview.material.shader = shader
shader_loaded_label.text = tr("Shader loaded:") + " " + path.get_file().get_basename()