diff --git a/src/UI/Dialogs/CreateNewImage.gd b/src/UI/Dialogs/CreateNewImage.gd index a20bb0967cc..32ea84657c4 100644 --- a/src/UI/Dialogs/CreateNewImage.gd +++ b/src/UI/Dialogs/CreateNewImage.gd @@ -1,6 +1,7 @@ extends ConfirmationDialog var aspect_ratio := 1.0 +var recent_sizes := [] var templates := [ # Basic Template.new(Vector2(16, 16)), @@ -45,6 +46,7 @@ var templates := [ Template.new(Vector2(256, 192), "ZX Spectrum"), ] +onready var recent_templates_list = find_node("RecentTemplates") onready var templates_options = find_node("TemplatesOptions") onready var ratio_box = find_node("AspectRatioButton") onready var width_value = find_node("WidthValue") @@ -73,6 +75,11 @@ func _ready() -> void: _create_option_list() +func _on_CreateNewImage_about_to_show(): + recent_sizes = Global.config_cache.get_value("templates", "recent_sizes", []) + _create_recent_list() + + func _create_option_list() -> void: var i := 1 for template in templates: @@ -98,9 +105,24 @@ func _create_option_list() -> void: i += 1 +func _create_recent_list() -> void: + recent_templates_list.clear() + for size in recent_sizes: + recent_templates_list.add_item( + "{width}x{height}".format({"width": size.x, "height": size.y}) + ) + + func _on_CreateNewImage_confirmed() -> void: var width: int = width_value.value var height: int = height_value.value + var size = Vector2(width, height) + if size in recent_sizes: + recent_sizes.erase(size) + recent_sizes.insert(0, size) + if recent_sizes.size() > 10: + recent_sizes.resize(10) + Global.config_cache.set_value("templates", "recent_sizes", recent_sizes) var fill_color: Color = fill_color_node.color var proj_name: String = $VBoxContainer/ProjectName/NameInput.text @@ -158,6 +180,20 @@ func _on_TemplatesOptions_item_selected(id: int) -> void: ratio_box.pressed = true +func _on_RecentTemplates_item_selected(id): + #if a template is chosen while "ratio button" is pressed then temporarily release it + var temporary_release = false + if ratio_box.pressed: + ratio_box.pressed = false + temporary_release = true + + width_value.value = recent_sizes[id].x + height_value.value = recent_sizes[id].y + + if temporary_release: + ratio_box.pressed = true + + func _on_PortraitButton_toggled(button_pressed: bool) -> void: if !button_pressed or height_value.value > width_value.value: toggle_size_buttons() diff --git a/src/UI/Dialogs/CreateNewImage.tscn b/src/UI/Dialogs/CreateNewImage.tscn index 1bc927ba8a6..1277136c54b 100644 --- a/src/UI/Dialogs/CreateNewImage.tscn +++ b/src/UI/Dialogs/CreateNewImage.tscn @@ -8,28 +8,24 @@ [ext_resource path="res://assets/graphics/misc/lock_aspect_guides.png" type="Texture" id=6] [node name="CreateNewImage" type="ConfirmationDialog"] -margin_right = 375.0 -margin_bottom = 222.0 +margin_right = 471.0 +margin_bottom = 284.0 rect_min_size = Vector2( 375, 222 ) window_title = "New..." resizable = true script = ExtResource( 1 ) -__meta__ = { -"_edit_use_anchors_": false -} [node name="VBoxContainer" type="VBoxContainer" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 margin_left = 8.0 margin_top = 8.0 -margin_right = 367.0 -margin_bottom = 186.0 +margin_right = -8.0 +margin_bottom = -36.0 size_flags_horizontal = 0 -__meta__ = { -"_edit_use_anchors_": false -} [node name="ProjectName" type="HBoxContainer" parent="VBoxContainer"] -margin_right = 359.0 +margin_right = 455.0 margin_bottom = 24.0 [node name="NameLabel" type="Label" parent="VBoxContainer/ProjectName"] @@ -41,37 +37,47 @@ text = "Project Name:" [node name="NameInput" type="LineEdit" parent="VBoxContainer/ProjectName"] margin_left = 104.0 -margin_right = 359.0 +margin_right = 455.0 margin_bottom = 24.0 size_flags_horizontal = 3 placeholder_text = "Enter name... (Default \"untitled\")" [node name="ImageSize" type="Label" parent="VBoxContainer"] margin_top = 28.0 -margin_right = 359.0 +margin_right = 455.0 margin_bottom = 42.0 text = "Image Size" [node name="HSeparator" type="HSeparator" parent="VBoxContainer"] margin_top = 46.0 -margin_right = 359.0 +margin_right = 455.0 margin_bottom = 50.0 -[node name="TemplatesContainer" type="HBoxContainer" parent="VBoxContainer"] +[node name="VBoxContainer" type="HBoxContainer" parent="VBoxContainer"] margin_top = 54.0 -margin_right = 359.0 -margin_bottom = 74.0 +margin_right = 455.0 +margin_bottom = 192.0 +size_flags_vertical = 3 + +[node name="Templates" type="VBoxContainer" parent="VBoxContainer/VBoxContainer"] +margin_right = 293.0 +margin_bottom = 138.0 +size_flags_horizontal = 3 -[node name="TemplatesLabel" type="Label" parent="VBoxContainer/TemplatesContainer"] +[node name="TemplatesContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates"] +margin_right = 293.0 +margin_bottom = 20.0 + +[node name="TemplatesLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/TemplatesContainer"] margin_top = 3.0 margin_right = 100.0 margin_bottom = 17.0 rect_min_size = Vector2( 100, 0 ) text = "Templates:" -[node name="TemplatesOptions" type="OptionButton" parent="VBoxContainer/TemplatesContainer"] +[node name="TemplatesOptions" type="OptionButton" parent="VBoxContainer/VBoxContainer/Templates/TemplatesContainer"] margin_left = 104.0 -margin_right = 359.0 +margin_right = 293.0 margin_bottom = 20.0 mouse_default_cursor_shape = 2 size_flags_horizontal = 3 @@ -80,30 +86,30 @@ text = "Default" items = [ "Default", null, false, 0, null ] selected = 0 -[node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 78.0 -margin_right = 359.0 -margin_bottom = 130.0 +[node name="SizeContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates"] +margin_top = 24.0 +margin_right = 293.0 +margin_bottom = 76.0 -[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/SizeContainer"] -margin_right = 346.0 +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer"] +margin_right = 280.0 margin_bottom = 52.0 size_flags_horizontal = 3 -[node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/SizeContainer/VBoxContainer"] -margin_right = 346.0 +[node name="WidthContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer"] +margin_right = 280.0 margin_bottom = 24.0 -[node name="WidthLabel" type="Label" parent="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer"] +[node name="WidthLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer"] margin_top = 5.0 margin_right = 100.0 margin_bottom = 19.0 rect_min_size = Vector2( 100, 0 ) text = "Width:" -[node name="WidthValue" type="SpinBox" parent="VBoxContainer/SizeContainer/VBoxContainer/WidthContainer"] +[node name="WidthValue" type="SpinBox" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer"] margin_left = 104.0 -margin_right = 346.0 +margin_right = 280.0 margin_bottom = 24.0 mouse_default_cursor_shape = 2 size_flags_horizontal = 3 @@ -112,21 +118,21 @@ max_value = 16384.0 value = 64.0 suffix = "px" -[node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/SizeContainer/VBoxContainer"] +[node name="HeightContainer" type="HBoxContainer" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer"] margin_top = 28.0 -margin_right = 346.0 +margin_right = 280.0 margin_bottom = 52.0 -[node name="HeightLabel" type="Label" parent="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer"] +[node name="HeightLabel" type="Label" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/HeightContainer"] margin_top = 5.0 margin_right = 100.0 margin_bottom = 19.0 rect_min_size = Vector2( 100, 0 ) text = "Height:" -[node name="HeightValue" type="SpinBox" parent="VBoxContainer/SizeContainer/VBoxContainer/HeightContainer"] +[node name="HeightValue" type="SpinBox" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/HeightContainer"] margin_left = 104.0 -margin_right = 346.0 +margin_right = 280.0 margin_bottom = 24.0 mouse_default_cursor_shape = 2 size_flags_horizontal = 3 @@ -135,13 +141,13 @@ max_value = 16384.0 value = 64.0 suffix = "px" -[node name="TextureRect" type="TextureRect" parent="VBoxContainer/SizeContainer" groups=["UIButtons"]] -margin_left = 350.0 -margin_right = 359.0 +[node name="TextureRect" type="TextureRect" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer" groups=["UIButtons"]] +margin_left = 284.0 +margin_right = 293.0 margin_bottom = 52.0 texture = ExtResource( 6 ) -[node name="AspectRatioButton" type="TextureButton" parent="VBoxContainer/SizeContainer/TextureRect" groups=["UIButtons"]] +[node name="AspectRatioButton" type="TextureButton" parent="VBoxContainer/VBoxContainer/Templates/SizeContainer/TextureRect" groups=["UIButtons"]] anchor_left = 0.5 anchor_top = 0.5 anchor_right = 0.5 @@ -159,10 +165,40 @@ __meta__ = { "_edit_use_anchors_": false } +[node name="VSeparator" type="VSeparator" parent="VBoxContainer/VBoxContainer"] +margin_left = 297.0 +margin_right = 301.0 +margin_bottom = 138.0 + +[node name="VBoxContainer" type="VBoxContainer" parent="VBoxContainer/VBoxContainer"] +margin_left = 305.0 +margin_right = 455.0 +margin_bottom = 138.0 +rect_min_size = Vector2( 150, 0 ) +rect_clip_content = true +focus_mode = 2 +mouse_filter = 0 +__meta__ = { +"_editor_description_": "" +} + +[node name="Label" type="Label" parent="VBoxContainer/VBoxContainer/VBoxContainer"] +margin_right = 150.0 +margin_bottom = 14.0 +text = "Recent:" + +[node name="RecentTemplates" type="ItemList" parent="VBoxContainer/VBoxContainer/VBoxContainer"] +margin_top = 18.0 +margin_right = 150.0 +margin_bottom = 138.0 +size_flags_horizontal = 3 +size_flags_vertical = 3 +allow_reselect = true + [node name="SizeButtonsContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 134.0 -margin_right = 359.0 -margin_bottom = 154.0 +margin_top = 196.0 +margin_right = 455.0 +margin_bottom = 216.0 [node name="PortraitButton" type="Button" parent="VBoxContainer/SizeButtonsContainer" groups=["UIButtons"]] margin_right = 20.0 @@ -212,9 +248,9 @@ __meta__ = { } [node name="FillColorContainer" type="HBoxContainer" parent="VBoxContainer"] -margin_top = 158.0 -margin_right = 359.0 -margin_bottom = 178.0 +margin_top = 220.0 +margin_right = 455.0 +margin_bottom = 240.0 [node name="FillColorLabel" type="Label" parent="VBoxContainer/FillColorContainer"] margin_top = 3.0 @@ -225,17 +261,19 @@ text = "Fill with color:" [node name="FillColor" type="ColorPickerButton" parent="VBoxContainer/FillColorContainer"] margin_left = 104.0 -margin_right = 359.0 +margin_right = 455.0 margin_bottom = 20.0 rect_min_size = Vector2( 64, 20 ) mouse_default_cursor_shape = 2 size_flags_horizontal = 3 color = Color( 0, 0, 0, 0 ) +[connection signal="about_to_show" from="." to="." method="_on_CreateNewImage_about_to_show"] [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="item_selected" from="VBoxContainer/VBoxContainer/Templates/TemplatesContainer/TemplatesOptions" to="." method="_on_TemplatesOptions_item_selected"] +[connection signal="value_changed" from="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/WidthContainer/WidthValue" to="." method="_on_SizeValue_value_changed"] +[connection signal="value_changed" from="VBoxContainer/VBoxContainer/Templates/SizeContainer/VBoxContainer/HeightContainer/HeightValue" to="." method="_on_SizeValue_value_changed"] +[connection signal="toggled" from="VBoxContainer/VBoxContainer/Templates/SizeContainer/TextureRect/AspectRatioButton" to="." method="_on_AspectRatioButton_toggled"] +[connection signal="item_selected" from="VBoxContainer/VBoxContainer/VBoxContainer/RecentTemplates" to="." method="_on_RecentTemplates_item_selected"] [connection signal="toggled" from="VBoxContainer/SizeButtonsContainer/PortraitButton" to="." method="_on_PortraitButton_toggled"] [connection signal="toggled" from="VBoxContainer/SizeButtonsContainer/LandscapeButton" to="." method="_on_LandscapeButton_toggled"]