mirror of
https://github.com/tonytins/CozyPixelStudio.git
synced 2025-06-25 09:14:42 -04:00
Refactored CreateNewImage dialog and added portrait & landscape buttons from #402
The lock aspect ratio button has been changed from a checkbox to a texture button and the template code has been refactored to use a Template class instead of enums. Only dark icons have been added for now.
This commit is contained in:
parent
6cb525ad92
commit
93bbfabb99
15 changed files with 411 additions and 133 deletions
|
@ -1,76 +1,58 @@
|
|||
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
|
||||
|
||||
onready var size_value = Vector2()
|
||||
class Template:
|
||||
var resolution : Vector2
|
||||
var name : String
|
||||
|
||||
# Template Id identifier
|
||||
enum Templates {
|
||||
TDefault = 0,
|
||||
T16 = 1,
|
||||
T32 = 2,
|
||||
T64 = 3,
|
||||
T128 = 4,
|
||||
GB = 5,
|
||||
GBA = 6,
|
||||
NES_NTSC = 7,
|
||||
NES_PAL = 8,
|
||||
SNES_NTSC = 9,
|
||||
SNES_PAL = 10
|
||||
}
|
||||
# Template actual value, without Default because we get it from Global
|
||||
var TResolutions = {
|
||||
Templates.T16: Vector2(16,16),
|
||||
Templates.T32: Vector2(32,32),
|
||||
Templates.T64: Vector2(64,64),
|
||||
Templates.T128: Vector2(128,128),
|
||||
|
||||
Templates.GB: Vector2(160,144),
|
||||
Templates.GBA: Vector2(240,160),
|
||||
Templates.NES_NTSC: Vector2(256,224),
|
||||
Templates.NES_PAL: Vector2(256,240),
|
||||
Templates.SNES_NTSC: Vector2(512,448),
|
||||
Templates.SNES_PAL: Vector2(512,480),
|
||||
}
|
||||
func _init(_resolution : Vector2, _name := "") -> void:
|
||||
resolution = _resolution
|
||||
name = _name
|
||||
|
||||
var TStrings ={
|
||||
Templates.T16: "",
|
||||
Templates.T32: "",
|
||||
Templates.T64: "",
|
||||
Templates.T128: "",
|
||||
|
||||
Templates.GB: "GB",
|
||||
Templates.GBA: "GBA",
|
||||
Templates.NES_NTSC: "NES (NTSC)",
|
||||
Templates.NES_PAL: "NES (PAL)",
|
||||
Templates.SNES_NTSC: "SNES (NTSC)",
|
||||
Templates.SNES_PAL: "SNES (PAL)"
|
||||
}
|
||||
var aspect_ratio := 1.0
|
||||
var templates := [
|
||||
Template.new(Vector2(16, 16)),
|
||||
Template.new(Vector2(32, 32)),
|
||||
Template.new(Vector2(64, 64)),
|
||||
Template.new(Vector2(128, 128)),
|
||||
Template.new(Vector2(160, 144), "GB"),
|
||||
Template.new(Vector2(240, 160), "GBA"),
|
||||
Template.new(Vector2(256, 224), "NES (NTSC)"),
|
||||
Template.new(Vector2(256, 240), "NES (PAL)"),
|
||||
Template.new(Vector2(512, 448), "SNES (NTSC)"),
|
||||
Template.new(Vector2(512, 480), "SNES (PAL)"),
|
||||
]
|
||||
|
||||
onready var templates_options = find_node("TemplatesOptions")
|
||||
onready var ratio_box = find_node("AspectRatioButton")
|
||||
onready var width_value = find_node("WidthValue")
|
||||
onready var height_value = find_node("HeightValue")
|
||||
onready var portrait_button = find_node("PortraitButton")
|
||||
onready var landscape_button = find_node("LandscapeButton")
|
||||
onready var fill_color_node = find_node("FillColor")
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
width_value.value = Global.default_image_width
|
||||
height_value.value = Global.default_image_height
|
||||
aspect_ratio = width_value.value / height_value.value
|
||||
fill_color_node.color = Global.default_fill_color
|
||||
fill_color_node.get_picker().presets_visible = false
|
||||
|
||||
ratio_box.connect("pressed", self, "_on_RatioCheckBox_toggled", [ratio_box.pressed])
|
||||
templates_options.connect("item_selected", self, "_on_TemplatesOptions_item_selected")
|
||||
|
||||
_CreateOptionList()
|
||||
_create_option_list()
|
||||
|
||||
|
||||
func _CreateOptionList() -> void:
|
||||
for i in Templates.values():
|
||||
if i > 0:
|
||||
if TStrings[i] != "":
|
||||
templates_options.add_item("{width}x{height} - {name}".format({"width":TResolutions[i].x, "height":TResolutions[i].y, "name":TStrings[i]}), i)
|
||||
else:
|
||||
templates_options.add_item("{width}x{height}".format({"width":TResolutions[i].x, "height":TResolutions[i].y}), i)
|
||||
func _create_option_list() -> void:
|
||||
var i := 1
|
||||
for template in templates:
|
||||
if template.name != "":
|
||||
templates_options.add_item("{width}x{height} - {name}".format({"width":template.resolution.x, "height":template.resolution.y, "name":template.name}), i)
|
||||
else:
|
||||
templates_options.add_item("{width}x{height}".format({"width":template.resolution.x, "height":template.resolution.y}), i)
|
||||
|
||||
i += 1
|
||||
|
||||
|
||||
func _on_CreateNewImage_confirmed() -> void:
|
||||
|
@ -87,30 +69,61 @@ func _on_CreateNewImage_confirmed() -> void:
|
|||
Global.canvas.camera_zoom()
|
||||
|
||||
|
||||
var aspect_ratio: float
|
||||
|
||||
func _on_RatioCheckBox_toggled(_button_pressed: bool) -> void:
|
||||
func _on_AspectRatioButton_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
|
||||
if ratio_box.pressed:
|
||||
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
|
||||
|
||||
toggle_size_buttons()
|
||||
|
||||
|
||||
func _on_TemplatesOptions_item_selected(id: int) -> void:
|
||||
if id != Templates.TDefault:
|
||||
size_value = TResolutions[id]
|
||||
func toggle_size_buttons() -> void:
|
||||
portrait_button.disconnect("toggled", self, "_on_PortraitButton_toggled")
|
||||
landscape_button.disconnect("toggled", self, "_on_LandscapeButton_toggled")
|
||||
portrait_button.pressed = width_value.value < height_value.value
|
||||
landscape_button.pressed = width_value.value > height_value.value
|
||||
|
||||
portrait_button.connect("toggled", self, "_on_PortraitButton_toggled")
|
||||
landscape_button.connect("toggled", self, "_on_LandscapeButton_toggled")
|
||||
|
||||
|
||||
func _on_TemplatesOptions_item_selected(id : int) -> void:
|
||||
if id > 0:
|
||||
width_value.value = templates[id - 1].resolution.x
|
||||
height_value.value = templates[id - 1].resolution.y
|
||||
else:
|
||||
width_value.value = Global.default_image_width
|
||||
height_value.value = Global.default_image_height
|
||||
|
||||
width_value.value = size_value.x
|
||||
height_value.value = size_value.y
|
||||
|
||||
func _on_PortraitButton_toggled(button_pressed : bool) -> void:
|
||||
if !button_pressed or height_value.value > width_value.value:
|
||||
toggle_size_buttons()
|
||||
return
|
||||
switch_width_height()
|
||||
|
||||
|
||||
func _on_LandscapeButton_toggled(button_pressed : bool) -> void:
|
||||
if !button_pressed or width_value.value > height_value.value:
|
||||
toggle_size_buttons()
|
||||
return
|
||||
switch_width_height()
|
||||
|
||||
|
||||
func switch_width_height() -> void:
|
||||
width_value.disconnect("value_changed", self, "_on_SizeValue_value_changed")
|
||||
height_value.disconnect("value_changed", self, "_on_SizeValue_value_changed")
|
||||
|
||||
var height = height_value.value
|
||||
height_value.value = width_value.value
|
||||
width_value.value = height
|
||||
toggle_size_buttons()
|
||||
|
||||
width_value.connect("value_changed", self, "_on_SizeValue_value_changed")
|
||||
height_value.connect("value_changed", self, "_on_SizeValue_value_changed")
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
[gd_scene load_steps=2 format=2]
|
||||
[gd_scene load_steps=7 format=2]
|
||||
|
||||
[ext_resource path="res://src/UI/Dialogs/CreateNewImage.gd" type="Script" id=1]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/misc/portrait.png" type="Texture" id=2]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/misc/landscape.png" type="Texture" id=3]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/misc/lock_aspect_2.png" type="Texture" id=4]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/misc/lock_aspect.png" type="Texture" id=5]
|
||||
[ext_resource path="res://assets/graphics/dark_themes/misc/lock_aspect_guides.png" type="Texture" id=6]
|
||||
|
||||
[node name="CreateNewImage" type="ConfirmationDialog"]
|
||||
margin_right = 300.0
|
||||
|
@ -31,23 +36,20 @@ margin_top = 18.0
|
|||
margin_right = 359.0
|
||||
margin_bottom = 22.0
|
||||
|
||||
[node name="OptionsContainer" type="GridContainer" parent="VBoxContainer"]
|
||||
[node name="TemplatesContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 26.0
|
||||
margin_right = 359.0
|
||||
margin_bottom = 154.0
|
||||
custom_constants/vseparation = 4
|
||||
custom_constants/hseparation = 2
|
||||
columns = 2
|
||||
margin_bottom = 46.0
|
||||
|
||||
[node name="TemplatesLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
|
||||
[node name="TemplatesLabel" type="Label" parent="VBoxContainer/TemplatesContainer"]
|
||||
margin_top = 3.0
|
||||
margin_right = 112.0
|
||||
margin_right = 71.0
|
||||
margin_bottom = 17.0
|
||||
text = "Templates:"
|
||||
|
||||
[node name="TemplatesOptions" type="OptionButton" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_left = 114.0
|
||||
margin_right = 189.0
|
||||
[node name="TemplatesOptions" type="OptionButton" parent="VBoxContainer/TemplatesContainer"]
|
||||
margin_left = 75.0
|
||||
margin_right = 150.0
|
||||
margin_bottom = 20.0
|
||||
mouse_default_cursor_shape = 2
|
||||
toggle_mode = false
|
||||
|
@ -55,68 +57,153 @@ text = "Default"
|
|||
items = [ "Default", null, false, 0, null ]
|
||||
selected = 0
|
||||
|
||||
[node name="RatioLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_top = 29.0
|
||||
margin_right = 112.0
|
||||
margin_bottom = 43.0
|
||||
text = "Lock aspect ratio:"
|
||||
[node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 50.0
|
||||
margin_right = 359.0
|
||||
margin_bottom = 102.0
|
||||
|
||||
[node name="RatioCheckBox" type="CheckBox" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_left = 114.0
|
||||
margin_top = 24.0
|
||||
margin_right = 189.0
|
||||
margin_bottom = 48.0
|
||||
[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/SizeContainer"]
|
||||
margin_right = 124.0
|
||||
margin_bottom = 52.0
|
||||
|
||||
[node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/SizeContainer/VBoxContainer"]
|
||||
margin_right = 124.0
|
||||
margin_bottom = 24.0
|
||||
|
||||
[node name="WidthLabel" type="Label" parent="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer"]
|
||||
margin_top = 5.0
|
||||
margin_right = 46.0
|
||||
margin_bottom = 19.0
|
||||
rect_min_size = Vector2( 46, 0 )
|
||||
text = "Width:"
|
||||
|
||||
[node name="WidthValue" type="SpinBox" parent="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer"]
|
||||
margin_left = 50.0
|
||||
margin_right = 124.0
|
||||
margin_bottom = 24.0
|
||||
mouse_default_cursor_shape = 2
|
||||
min_value = 1.0
|
||||
max_value = 16384.0
|
||||
value = 64.0
|
||||
suffix = "px"
|
||||
|
||||
[node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/SizeContainer/VBoxContainer"]
|
||||
margin_top = 28.0
|
||||
margin_right = 124.0
|
||||
margin_bottom = 52.0
|
||||
|
||||
[node name="Height" type="Label" parent="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer"]
|
||||
margin_top = 5.0
|
||||
margin_right = 46.0
|
||||
margin_bottom = 19.0
|
||||
text = "Height:"
|
||||
|
||||
[node name="HeightValue" type="SpinBox" parent="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer"]
|
||||
margin_left = 50.0
|
||||
margin_right = 124.0
|
||||
margin_bottom = 24.0
|
||||
mouse_default_cursor_shape = 2
|
||||
min_value = 1.0
|
||||
max_value = 16384.0
|
||||
value = 64.0
|
||||
suffix = "px"
|
||||
|
||||
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeContainer"]
|
||||
margin_left = 128.0
|
||||
margin_right = 148.0
|
||||
margin_bottom = 52.0
|
||||
texture = ExtResource( 6 )
|
||||
|
||||
[node name="AspectRatioButton" type="TextureButton" parent="VBoxContainer/SizeContainer/TextureRect"]
|
||||
margin_left = 2.0
|
||||
margin_top = 14.0
|
||||
margin_right = 18.0
|
||||
margin_bottom = 30.0
|
||||
hint_tooltip = "Lock aspect ratio"
|
||||
mouse_default_cursor_shape = 2
|
||||
toggle_mode = true
|
||||
texture_normal = ExtResource( 4 )
|
||||
texture_pressed = ExtResource( 5 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="WidthLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_top = 57.0
|
||||
margin_right = 112.0
|
||||
margin_bottom = 71.0
|
||||
text = "Width:"
|
||||
[node name="SizeButtonsContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 106.0
|
||||
margin_right = 359.0
|
||||
margin_bottom = 126.0
|
||||
|
||||
[node name="WidthValue" type="SpinBox" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_left = 114.0
|
||||
margin_top = 52.0
|
||||
margin_right = 189.0
|
||||
margin_bottom = 76.0
|
||||
[node name="PortraitButton" type="Button" parent="VBoxContainer/SizeButtonsContainer"]
|
||||
margin_right = 20.0
|
||||
margin_bottom = 20.0
|
||||
rect_min_size = Vector2( 20, 0 )
|
||||
hint_tooltip = "Portrait"
|
||||
focus_mode = 0
|
||||
mouse_default_cursor_shape = 2
|
||||
min_value = 1.0
|
||||
max_value = 16384.0
|
||||
value = 64.0
|
||||
suffix = "px"
|
||||
toggle_mode = true
|
||||
enabled_focus_mode = 0
|
||||
|
||||
[node name="Height" type="Label" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_top = 85.0
|
||||
margin_right = 112.0
|
||||
margin_bottom = 99.0
|
||||
text = "Height:"
|
||||
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeButtonsContainer/PortraitButton"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -8.0
|
||||
margin_top = -8.0
|
||||
margin_right = 8.0
|
||||
margin_bottom = 8.0
|
||||
texture = ExtResource( 2 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="HeightValue" type="SpinBox" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_left = 114.0
|
||||
margin_top = 80.0
|
||||
margin_right = 189.0
|
||||
margin_bottom = 104.0
|
||||
[node name="LandscapeButton" type="Button" parent="VBoxContainer/SizeButtonsContainer"]
|
||||
margin_left = 24.0
|
||||
margin_right = 44.0
|
||||
margin_bottom = 20.0
|
||||
rect_min_size = Vector2( 20, 0 )
|
||||
hint_tooltip = "Landscape"
|
||||
focus_mode = 0
|
||||
mouse_default_cursor_shape = 2
|
||||
min_value = 1.0
|
||||
max_value = 16384.0
|
||||
value = 64.0
|
||||
suffix = "px"
|
||||
toggle_mode = true
|
||||
enabled_focus_mode = 0
|
||||
|
||||
[node name="FillColorLabel" type="Label" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_top = 111.0
|
||||
margin_right = 112.0
|
||||
margin_bottom = 125.0
|
||||
[node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeButtonsContainer/LandscapeButton"]
|
||||
anchor_left = 0.5
|
||||
anchor_top = 0.5
|
||||
anchor_right = 0.5
|
||||
anchor_bottom = 0.5
|
||||
margin_left = -8.0
|
||||
margin_top = -8.0
|
||||
margin_right = 8.0
|
||||
margin_bottom = 8.0
|
||||
texture = ExtResource( 3 )
|
||||
__meta__ = {
|
||||
"_edit_use_anchors_": false
|
||||
}
|
||||
|
||||
[node name="FillColorContainer" type="HBoxContainer" parent="VBoxContainer"]
|
||||
margin_top = 130.0
|
||||
margin_right = 359.0
|
||||
margin_bottom = 150.0
|
||||
|
||||
[node name="FillColorLabel" type="Label" parent="VBoxContainer/FillColorContainer"]
|
||||
margin_top = 3.0
|
||||
margin_right = 90.0
|
||||
margin_bottom = 17.0
|
||||
text = "Fill with color:"
|
||||
|
||||
[node name="FillColor" type="ColorPickerButton" parent="VBoxContainer/OptionsContainer"]
|
||||
margin_left = 114.0
|
||||
margin_top = 108.0
|
||||
margin_right = 189.0
|
||||
margin_bottom = 128.0
|
||||
[node name="FillColor" type="ColorPickerButton" parent="VBoxContainer/FillColorContainer"]
|
||||
margin_left = 94.0
|
||||
margin_right = 158.0
|
||||
margin_bottom = 20.0
|
||||
rect_min_size = Vector2( 64, 20 )
|
||||
mouse_default_cursor_shape = 2
|
||||
color = Color( 0, 0, 0, 0 )
|
||||
[connection signal="confirmed" from="." to="." method="_on_CreateNewImage_confirmed"]
|
||||
[connection signal="item_selected" from="VBoxContainer/TemplatesContainer/TemplatesOptions" to="." method="_on_TemplatesOptions_item_selected"]
|
||||
[connection signal="value_changed" from="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer/WidthValue" to="." method="_on_SizeValue_value_changed"]
|
||||
[connection signal="value_changed" from="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer/HeightValue" to="." method="_on_SizeValue_value_changed"]
|
||||
[connection signal="toggled" from="VBoxContainer/SizeContainer/TextureRect/AspectRatioButton" to="." method="_on_AspectRatioButton_toggled"]
|
||||
[connection signal="toggled" from="VBoxContainer/SizeButtonsContainer/PortraitButton" to="." method="_on_PortraitButton_toggled"]
|
||||
[connection signal="toggled" from="VBoxContainer/SizeButtonsContainer/LandscapeButton" to="." method="_on_LandscapeButton_toggled"]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue