1
0
Fork 0
mirror of https://github.com/Orama-Interactive/Pixelorama.git synced 2025-01-19 09:39:48 +00:00
Pixelorama/Scripts/Dialogs/CreateNewImage.gd
Marco Galli 1efec81a6b
Improved CreateNewImage dialog #178 (#181)
* Sync fork

* Added 'Lock aspect ratio' when creating a new image

* Added common templates in 'CreateNewImage' dialog

* Last fix

* Added translation strings
2020-04-03 03:12:42 +03:00

97 lines
3.5 KiB
GDScript

extends ConfirmationDialog
onready var templates_options = $VBoxContainer/OptionsContainer/TemplatesOptions
onready var ratio_box = $VBoxContainer/OptionsContainer/RatioCheckBox
onready var width_value = $VBoxContainer/OptionsContainer/WidthValue
onready var height_value = $VBoxContainer/OptionsContainer/HeightValue
onready var fill_color_node = $VBoxContainer/OptionsContainer/FillColor
#Template Id identifier
enum Templates {
TDefault = 0,
T16 = 1,
T32 = 2,
T64 = 3,
T128 = 4,
}
#Template actual value, without Default because we get it from Global
enum TValues {
T16 = 16,
T32 = 32,
T64 = 64,
T128 = 128,
}
func _ready() -> void:
ratio_box.connect("pressed", self, "_on_RatioCheckBox_toggled", [ratio_box.pressed])
templates_options.connect("item_selected", self, "_on_TemplatesOptions_item_selected")
func _on_CreateNewImage_confirmed() -> void:
var width : int = width_value.value
var height : int = height_value.value
var fill_color : Color = fill_color_node.color
Global.control.clear_canvases()
Global.layers.clear()
# Store [Layer name (0), Layer visibility boolean (1), Layer lock boolean (2), Frame container (3),
# will new frames be linked boolean (4), Array of linked frames (5)]
Global.layers.append([tr("Layer") + " 0", true, false, HBoxContainer.new(), false, []])
Global.current_layer = 0
Global.canvas = load("res://Prefabs/Canvas.tscn").instance()
Global.canvas.size = Vector2(width, height).floor()
Global.canvases.append(Global.canvas)
Global.canvas_parent.add_child(Global.canvas)
Global.canvases = Global.canvases # To trigger Global.canvases_changed()
Global.current_frame = 0
Global.layers = Global.layers # To trigger Global.layers_changed()
Global.saved = true
if fill_color.a > 0:
Global.canvas.layers[0][0].fill(fill_color)
Global.canvas.layers[0][0].lock()
Global.canvas.update_texture(0)
func _on_CreateNewImage_about_to_show() -> void:
width_value.value = Global.default_image_width
height_value.value = Global.default_image_height
fill_color_node.color = Global.default_fill_color
templates_options.selected = Templates.TDefault
ratio_box.pressed = false
for spin_box in [width_value, height_value]:
if spin_box.is_connected("value_changed", self, "_on_SizeValue_value_changed"):
spin_box.disconnect("value_changed", self, "_on_SizeValue_value_changed")
var aspect_ratio: float
# warning-ignore:unused_argument
func _on_RatioCheckBox_toggled(button_pressed: bool) -> void:
aspect_ratio = width_value.value / height_value.value
for spin_box in [width_value, height_value]:
if spin_box.is_connected("value_changed", self, "_on_SizeValue_value_changed"):
spin_box.disconnect("value_changed", self, "_on_SizeValue_value_changed")
else:
spin_box.connect("value_changed", self, "_on_SizeValue_value_changed")
func _on_SizeValue_value_changed(value: float) -> void:
if width_value.value == value:
height_value.value = width_value.value / aspect_ratio
if height_value.value == value:
width_value.value = height_value.value * aspect_ratio
func _on_TemplatesOptions_item_selected(id: int) -> void:
match id:
Templates.TDefault:
width_value.value = Global.default_image_width
height_value.value = Global.default_image_height
Templates.T16:
width_value.value = TValues.T16
height_value.value = TValues.T16
Templates.T32:
width_value.value = TValues.T32
height_value.value = TValues.T32
Templates.T64:
width_value.value = TValues.T64
height_value.value = TValues.T64
Templates.T128:
width_value.value = TValues.T128
height_value.value = TValues.T128