mirror of
https://github.com/Relintai/GraphicsEditor.git
synced 2024-11-12 08:15:17 +01:00
84 lines
2.1 KiB
GDScript3
84 lines
2.1 KiB
GDScript3
|
tool
|
||
|
extends FileDialog
|
||
|
|
||
|
var canvas
|
||
|
|
||
|
var file_path = ""
|
||
|
|
||
|
|
||
|
func _enter_tree():
|
||
|
canvas = get_parent().find_node("PaintCanvas")
|
||
|
|
||
|
|
||
|
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):
|
||
|
file_path = path
|
||
|
|
||
|
# warning-ignore:unused_argument
|
||
|
func _on_LineEdit_text_entered(text):
|
||
|
save_file()
|
||
|
|
||
|
func _on_SaveFileDialog_confirmed():
|
||
|
save_file()
|
||
|
|
||
|
|
||
|
func save_file():
|
||
|
var image = Image.new()
|
||
|
image.create(canvas.canvas_size.x, canvas.canvas_size.y, true, Image.FORMAT_RGBA8)
|
||
|
image.lock()
|
||
|
|
||
|
var preview_layer_chunk_node = canvas.get_preview_layer().chunks
|
||
|
|
||
|
for chunks_node in canvas.get_node("ChunkNodes").get_children():
|
||
|
|
||
|
if chunks_node.name == preview_layer_chunk_node.name:
|
||
|
continue
|
||
|
|
||
|
if not chunks_node.visible:
|
||
|
continue
|
||
|
|
||
|
for chunk in chunks_node.get_children():
|
||
|
var chunk_name = chunk.name
|
||
|
var chunk_name_split = chunk_name.split("-")
|
||
|
var chunk_x = int(chunk_name_split[1])
|
||
|
var chunk_y = int(chunk_name_split[2])
|
||
|
var chunk_image = chunk.image.duplicate()
|
||
|
chunk_image.lock()
|
||
|
var chunk_image_size = chunk_image.get_size()
|
||
|
for x in chunk_image_size.x:
|
||
|
for y in chunk_image_size.y:
|
||
|
var pixel_color = chunk_image.get_pixel(x, y)
|
||
|
var global_cell_x = (chunk_x * canvas.region_size) + x
|
||
|
var global_cell_y = (chunk_y * canvas.region_size) + y
|
||
|
|
||
|
if image.get_height() <= global_cell_y:
|
||
|
continue
|
||
|
if image.get_width() <= global_cell_x:
|
||
|
continue
|
||
|
if global_cell_x > canvas.canvas_size.x:
|
||
|
continue
|
||
|
if global_cell_y > canvas.canvas_size.y:
|
||
|
continue
|
||
|
|
||
|
image.lock()
|
||
|
var current_color = image.get_pixel(global_cell_x, global_cell_y)
|
||
|
if current_color.a != 0:
|
||
|
image.set_pixel(global_cell_x, global_cell_y, current_color.blend(pixel_color))
|
||
|
else:
|
||
|
image.set_pixel(global_cell_x, global_cell_y, pixel_color)
|
||
|
image.unlock()
|
||
|
image.save_png(file_path)
|
||
|
|
||
|
func _on_SaveFileDialog_about_to_show():
|
||
|
invalidate()
|
||
|
|
||
|
func _on_SaveFileDialog_visibility_changed():
|
||
|
invalidate()
|