Add visual harmonization tests for editor UI components and ground finish chooser

- Implemented `test_editor_visual_harmonization.gd` to validate the Stickman editor and prop editor UI layouts, ensuring proper functionality and visual consistency.
- Created `test_editor_visual_theme.gd` to verify the loading and application of visual themes in the editor, including semantic overrides and default values.
- Introduced `test_phase19_ground_finish_chooser.gd` to test the ground finish chooser's functionality, including layout responsiveness, selection behavior, and interaction with the stage.
- Added new scripts for ground finish preview and chooser UI components to enhance the editor's visual representation of ground finishes.
This commit is contained in:
2026-10-23 15:20:12 -04:00
parent 0a5ef0a61e
commit ddb298f631
40 changed files with 3442 additions and 434 deletions
+3 -17
View File
@@ -1,19 +1,7 @@
[gd_scene load_steps=4 format=3]
[gd_scene load_steps=3 format=3]
[ext_resource type="Script" path="res://scripts/editors/stickman/body_part_panel.gd" id="1_panel_script"]
[sub_resource type="StyleBoxFlat" id="StyleBox_panel"]
bg_color = Color(0.15, 0.15, 0.15, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
border_color = Color(0.3, 0.3, 0.3, 1)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
[sub_resource type="StyleBoxFlat" id="StyleBox_drawing"]
bg_color = Color(0.12, 0.12, 0.12, 1)
border_width_left = 1
@@ -27,7 +15,6 @@ custom_minimum_size = Vector2(230, 160)
offset_right = 230.0
offset_bottom = 160.0
size_flags_vertical = 3
theme_override_styles/panel = SubResource("StyleBox_panel")
script = ExtResource("1_panel_script")
[node name="VBoxContainer" type="VBoxContainer" parent="."]
@@ -42,8 +29,6 @@ unique_name_in_owner = true
layout_mode = 2
text = "Body Part"
horizontal_alignment = 1
theme_override_colors/font_color = Color(0.85, 0.85, 0.85, 1)
theme_override_font_sizes/font_size = 13
[node name="DrawingArea" type="Control" parent="VBoxContainer"]
unique_name_in_owner = true
@@ -70,6 +55,7 @@ layout_mode = 2
custom_minimum_size = Vector2(300, 300)
[node name="ButtonRow" type="HBoxContainer" parent="ColorPickerPopup/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
alignment = 2
@@ -81,4 +67,4 @@ text = "Cancel"
[node name="OKButton" type="Button" parent="ColorPickerPopup/VBoxContainer/ButtonRow"]
unique_name_in_owner = true
layout_mode = 2
text = "OK"
text = "Use Color"
+167 -89
View File
@@ -1,20 +1,8 @@
[gd_scene load_steps=4 format=3 uid="uid://6wqo0sp4eij6"]
[gd_scene load_steps=3 format=3 uid="uid://6wqo0sp4eij6"]
[ext_resource type="Script" uid="uid://dlacmxk257ro" path="res://scripts/editors/stickman/stickman_editor.gd" id="1_editor_script"]
[ext_resource type="Script" uid="uid://codv3g6qw1tef" path="res://scripts/editors/stickman/whole_stickman_preview.gd" id="2_preview_script"]
[sub_resource type="StyleBoxFlat" id="StyleBox_preview"]
bg_color = Color(0.12, 0.12, 0.12, 1)
border_width_left = 1
border_width_top = 1
border_width_right = 1
border_width_bottom = 1
border_color = Color(0.3, 0.3, 0.3, 1)
corner_radius_top_left = 4
corner_radius_top_right = 4
corner_radius_bottom_right = 4
corner_radius_bottom_left = 4
[node name="StickmanEditor" type="Control"]
layout_mode = 3
anchors_preset = 15
@@ -24,85 +12,195 @@ grow_horizontal = 2
grow_vertical = 2
script = ExtResource("1_editor_script")
[node name="MenuBar" type="MenuBar" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 0
anchor_right = 1.0
offset_bottom = 32.0
grow_horizontal = 2
[node name="TopBar" type="HBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 0
anchor_right = 1.0
offset_top = 32.0
offset_bottom = 64.0
grow_horizontal = 2
[node name="NameLabel" type="Label" parent="TopBar"]
layout_mode = 2
theme_override_colors/font_color = Color(0.85, 0.85, 0.85, 1)
text = "Stickman Name:"
vertical_alignment = 1
[node name="StickmanNameEdit" type="LineEdit" parent="TopBar"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
placeholder_text = "Unnamed Stickman"
[node name="MainLayout" type="HBoxContainer" parent="."]
[node name="ChromeRoot" type="VBoxContainer" parent="."]
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = 68.0
offset_bottom = -28.0
grow_horizontal = 2
grow_vertical = 2
theme_override_constants/separation = 6
[node name="LeftColumn" type="VBoxContainer" parent="MainLayout"]
[node name="MenuBar" type="MenuBar" parent="ChromeRoot"]
unique_name_in_owner = true
layout_mode = 2
custom_minimum_size = Vector2(0, 44)
[node name="TopBar" type="HBoxContainer" parent="ChromeRoot"]
layout_mode = 2
theme_override_constants/separation = 8
[node name="NameLabel" type="Label" parent="ChromeRoot/TopBar"]
layout_mode = 2
text = "Stickman Name:"
vertical_alignment = 1
[node name="StickmanNameEdit" type="LineEdit" parent="ChromeRoot/TopBar"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
custom_minimum_size = Vector2(180, 44)
placeholder_text = "Unnamed Stickman"
[node name="WorkspaceToolbar" type="FlowContainer" parent="ChromeRoot"]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/h_separation = 8
theme_override_constants/v_separation = 4
[node name="OverviewButton" type="Button" parent="ChromeRoot/WorkspaceToolbar"]
unique_name_in_owner = true
layout_mode = 2
text = "Overview"
toggle_mode = true
[node name="FocusButton" type="Button" parent="ChromeRoot/WorkspaceToolbar"]
unique_name_in_owner = true
layout_mode = 2
text = "Focus on Part"
toggle_mode = true
[node name="PartPicker" type="OptionButton" parent="ChromeRoot/WorkspaceToolbar"]
unique_name_in_owner = true
layout_mode = 2
[node name="AddShapeButton" type="Button" parent="ChromeRoot/WorkspaceToolbar"]
unique_name_in_owner = true
layout_mode = 2
text = "Add Shape"
[node name="ColorButton" type="Button" parent="ChromeRoot/WorkspaceToolbar"]
unique_name_in_owner = true
layout_mode = 2
text = "Color"
disabled = true
[node name="WholeStickmanButton" type="Button" parent="ChromeRoot/WorkspaceToolbar"]
unique_name_in_owner = true
layout_mode = 2
text = "Whole Stickman"
visible = false
[node name="BackToPartButton" type="Button" parent="ChromeRoot/WorkspaceToolbar"]
unique_name_in_owner = true
layout_mode = 2
text = "Back to Part"
visible = false
[node name="WorkspaceRow" type="HSplitContainer" parent="ChromeRoot"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/separation = 8
[node name="BodyPartWorkspace" type="Control" parent="ChromeRoot/WorkspaceRow"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
custom_minimum_size = Vector2(350, 260)
[node name="OverviewScroll" type="ScrollContainer" parent="ChromeRoot/WorkspaceRow/BodyPartWorkspace"]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
horizontal_scroll_mode = 1
vertical_scroll_mode = 1
[node name="OverviewColumns" type="HBoxContainer" parent="ChromeRoot/WorkspaceRow/BodyPartWorkspace/OverviewScroll"]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 8
[node name="LeftColumn" type="VBoxContainer" parent="ChromeRoot/WorkspaceRow/BodyPartWorkspace/OverviewScroll/OverviewColumns"]
unique_name_in_owner = true
layout_mode = 2
theme_override_constants/separation = 6
[node name="CenterColumn" type="VBoxContainer" parent="MainLayout"]
[node name="CenterColumn" type="VBoxContainer" parent="ChromeRoot/WorkspaceRow/BodyPartWorkspace/OverviewScroll/OverviewColumns"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
theme_override_constants/separation = 6
[node name="WholeStickmanPreview" type="PanelContainer" parent="MainLayout"]
[node name="FocusHost" type="VBoxContainer" parent="ChromeRoot/WorkspaceRow/BodyPartWorkspace"]
unique_name_in_owner = true
layout_mode = 1
anchors_preset = 15
anchor_right = 1.0
anchor_bottom = 1.0
grow_horizontal = 2
grow_vertical = 2
visible = false
theme_override_constants/separation = 8
[node name="FocusPartLabel" type="Label" parent="ChromeRoot/WorkspaceRow/BodyPartWorkspace/FocusHost"]
unique_name_in_owner = true
layout_mode = 2
text = "Head"
horizontal_alignment = 1
[node name="FocusPanelHost" type="Control" parent="ChromeRoot/WorkspaceRow/BodyPartWorkspace/FocusHost"]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
clip_contents = true
[node name="WholeStickmanPreview" type="PanelContainer" parent="ChromeRoot/WorkspaceRow"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
size_flags_vertical = 3
size_flags_stretch_ratio = 2.0
theme_override_styles/panel = SubResource("StyleBox_preview")
custom_minimum_size = Vector2(320, 260)
script = ExtResource("2_preview_script")
[node name="VBoxContainer" type="VBoxContainer" parent="MainLayout/WholeStickmanPreview"]
[node name="PreviewColumn" type="VBoxContainer" parent="ChromeRoot/WorkspaceRow/WholeStickmanPreview"]
layout_mode = 2
[node name="PreviewTitle" type="Label" parent="MainLayout/WholeStickmanPreview/VBoxContainer"]
[node name="PreviewTitle" type="Label" parent="ChromeRoot/WorkspaceRow/WholeStickmanPreview/PreviewColumn"]
layout_mode = 2
theme_override_colors/font_color = Color(0.85, 0.85, 0.85, 1)
theme_override_font_sizes/font_size = 14
text = "Whole Stickman"
horizontal_alignment = 1
[node name="PreviewArea" type="Control" parent="MainLayout/WholeStickmanPreview/VBoxContainer"]
[node name="PreviewArea" type="Control" parent="ChromeRoot/WorkspaceRow/WholeStickmanPreview/PreviewColumn"]
unique_name_in_owner = true
layout_mode = 2
size_flags_vertical = 3
mouse_filter = 1
clip_contents = true
[node name="StatusBar" type="HBoxContainer" parent="ChromeRoot"]
unique_name_in_owner = true
layout_mode = 2
custom_minimum_size = Vector2(0, 32)
theme_override_constants/separation = 12
[node name="CursorCoords" type="Label" parent="ChromeRoot/StatusBar"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = ""
horizontal_alignment = 0
vertical_alignment = 1
[node name="SaveStatus" type="Label" parent="ChromeRoot/StatusBar"]
unique_name_in_owner = true
layout_mode = 2
text = "New stickman"
horizontal_alignment = 1
vertical_alignment = 1
[node name="SnapStatus" type="Label" parent="ChromeRoot/StatusBar"]
unique_name_in_owner = true
layout_mode = 2
text = "SNAP: OFF"
horizontal_alignment = 2
vertical_alignment = 1
[node name="SaveDialog" type="FileDialog" parent="."]
unique_name_in_owner = true
title = "Save Stickman"
@@ -112,7 +210,7 @@ filters = PackedStringArray("*.stk ; Stickman Files")
[node name="LoadDialog" type="FileDialog" parent="."]
unique_name_in_owner = true
title = "Open a File"
title = "Open a Stickman"
size = Vector2i(600, 450)
ok_button_text = "Open"
file_mode = 0
@@ -121,19 +219,24 @@ filters = PackedStringArray("*.stk ; Stickman Files")
[node name="ClearConfirmDialog" type="ConfirmationDialog" parent="."]
unique_name_in_owner = true
title = "Clear Stickman"
ok_button_text = "Clear"
dialog_text = "Are you sure you want to clear the current stickman?
This action cannot be undone."
title = "Start Over"
ok_button_text = "Start Over"
dialog_text = "Start over with a blank stickman?"
[node name="UnsavedChangesDialog" type="ConfirmationDialog" parent="."]
unique_name_in_owner = true
title = "Unsaved Changes"
ok_button_text = "Save"
dialog_text = "Save changes before continuing?"
[node name="ErrorDialog" type="AcceptDialog" parent="."]
unique_name_in_owner = true
title = "Error"
title = "Could Not Complete"
[node name="GridConfigDialog" type="ConfirmationDialog" parent="."]
unique_name_in_owner = true
title = "Configure Grid"
ok_button_text = "OK"
ok_button_text = "Done"
[node name="VBoxContainer" type="VBoxContainer" parent="GridConfigDialog"]
layout_mode = 2
@@ -145,34 +248,9 @@ text = "Grid Size (pixels):"
[node name="GridSizeSpinBox" type="SpinBox" parent="GridConfigDialog/VBoxContainer"]
unique_name_in_owner = true
layout_mode = 2
custom_minimum_size = Vector2(0, 44)
min_value = 1.0
max_value = 100.0
value = 15.0
step = 1.0
rounded = true
[node name="StatusBar" type="HBoxContainer" parent="."]
unique_name_in_owner = true
layout_mode = 1
anchor_left = 0.0
anchor_top = 1.0
anchor_right = 1.0
anchor_bottom = 1.0
offset_top = -28.0
grow_horizontal = 2
grow_vertical = 0
[node name="CursorCoords" type="Label" parent="StatusBar"]
unique_name_in_owner = true
layout_mode = 2
size_flags_horizontal = 3
text = ""
horizontal_alignment = 0
vertical_alignment = 1
[node name="SnapStatus" type="Label" parent="StatusBar"]
unique_name_in_owner = true
layout_mode = 2
text = "SNAP: OFF"
horizontal_alignment = 2
vertical_alignment = 1