tool
extends FileDialog

var canvas

var file_path = ""


func _enter_tree():
	canvas = get_parent().find_node("Canvas")


func _ready():
	# warning-ignore:return_value_discarded
	get_line_edit().connect("text_entered", self, "_on_LineEdit_text_entered")
	invalidate()
	clear_filters()
	add_filter("*.png ; PNG Images")


func _on_SaveFileDialog_file_selected(path):
	#print("selected file: ", path)
	file_path = path
	save_file()


# warning-ignore:unused_argument
func _on_LineEdit_text_entered(text):
	return
#	print("text entered: ", text)


func _on_SaveFileDialog_confirmed():
	return
#	print("confirmed: ", current_path)


func save_file():
	var image = Image.new()
	image.create(canvas.canvas_width, canvas.canvas_height, true, Image.FORMAT_RGBA8)
	image.lock()
	
	for layer in canvas.layers:
		var idx = 0
		if not layer.visible:
			continue
		for x in range(layer.layer_width):
			for y in range(layer.layer_height):
				var color = layer.get_pixel(x, y)
				var image_color = image.get_pixel(x, y)
				
				if color.a != 0:
					image.set_pixel(x, y, image_color.blend(color))
				else:
					image.set_pixel(x, y, color)
	image.unlock()
	
	var dir = Directory.new()
	if dir.file_exists(file_path):
		dir.remove(file_path)
	
	image.save_png(file_path)


func _on_SaveFileDialog_about_to_show():
	invalidate()


func _on_SaveFileDialog_visibility_changed():
	invalidate()