8fc9d378e4
Reported directly by the user after seeding a test world through the browse-worlds screen: "screen is blank now". Two compounding layout bugs, both real: 1. world_list.tscn's root VBoxContainer had no anchors at all, only size_flags -- but its parent (the scene's root node) is a plain Control, not a Container, so size_flags on a Control's direct child are meaningless there. Without anchors it never actually filled the screen, so it (and everything under it) collapsed toward zero size. 2. size_flags_horizontal/vertical used the raw integer 4 everywhere expand-fill was clearly intended (ScrollContainer, its WorldList child, HeaderHBox, TitleLabel) -- but 4 is Control.SIZE_SHRINK_CENTER in Godot 4, not SIZE_EXPAND_FILL (which is 3). ScrollContainer with SHRINK_CENTER takes only its own minimum size instead of expanding, cascading a ~1px width down through every card and every label. Confirmed the actual enum values by asking Godot directly rather than assuming. Both are exactly the kind of bug a headless smoke test checking only "did cards get added to the tree" can't catch -- child_count was correctly non-zero, nothing crashed, the content was just rendered invisibly thin. Verified the fix is real by deliberately reintroducing bug #2 and confirming the test now correctly fails (card width 25px, below the 200px sanity threshold) before restoring it. Also replaced the card background: it was a ColorRect manually moved to child index 0 of a VBoxContainer, which doesn't work as an overlay -- a VBoxContainer lays out ALL its children in sequence, so the "moved to front" ColorRect rendered as an empty dark bar ABOVE the text, not behind it. Now a proper PanelContainer with a StyleBoxFlat background, the idiomatic way to get a colored panel behind auto-laid-out content in Godot. smoke_test_world_list.gd strengthened to actually catch this class of bug going forward: seeds a real world via POST /api/worlds/ first (the checkpoint runner's fresh DB meant the populated-card path never ran in CI at all before this, only empty-list did), and asserts each card's real computed width, not just that cards exist. Full checkpoint suite re-verified clean on this branch: migrations, 68/68 pytest, all 6 Godot smoke tests, both platform exports. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
79 lines
2.2 KiB
Plaintext
79 lines
2.2 KiB
Plaintext
[gd_scene load_steps=2 format=3]
|
|
|
|
[ext_resource type="Script" path="res://scripts/world_list.gd" id="1_wl"]
|
|
|
|
[node name="WorldList" type="Control"]
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
script = ExtResource("1_wl")
|
|
|
|
[node name="VBoxContainer" type="VBoxContainer" parent="."]
|
|
layout_mode = 1
|
|
anchors_preset = 15
|
|
anchor_right = 1.0
|
|
anchor_bottom = 1.0
|
|
grow_horizontal = 2
|
|
grow_vertical = 2
|
|
theme_override_constants/separation = 8
|
|
|
|
[node name="HeaderHBox" type="HBoxContainer" parent="VBoxContainer"]
|
|
layout_mode = 3
|
|
size_flags_horizontal = 3
|
|
theme_override_constants/separation = 16
|
|
|
|
[node name="BackButton" type="Button" parent="VBoxContainer/HeaderHBox"]
|
|
layout_mode = 3
|
|
text = "< Back"
|
|
size_flags_horizontal = 0
|
|
|
|
[node name="TitleLabel" type="Label" parent="VBoxContainer/HeaderHBox"]
|
|
layout_mode = 3
|
|
text = "Browse Worlds"
|
|
horizontal_alignment = 1
|
|
size_flags_horizontal = 3
|
|
theme_override_font_sizes/font_size = 28
|
|
|
|
[node name="RefreshButton" type="Button" parent="VBoxContainer/HeaderHBox"]
|
|
layout_mode = 3
|
|
text = "Refresh"
|
|
size_flags_horizontal = 0
|
|
|
|
[node name="ScrollContainer" type="ScrollContainer" parent="VBoxContainer"]
|
|
layout_mode = 3
|
|
size_flags_horizontal = 3
|
|
size_flags_vertical = 3
|
|
horizontal_mode = 2
|
|
vertical_mode = 2
|
|
|
|
[node name="WorldList" type="VBoxContainer" parent="VBoxContainer/ScrollContainer"]
|
|
layout_mode = 3
|
|
size_flags_horizontal = 3
|
|
theme_override_constants/separation = 8
|
|
|
|
[node name="LoadingLabel" type="Label" parent="VBoxContainer"]
|
|
layout_mode = 3
|
|
text = "Loading worlds..."
|
|
visible = false
|
|
horizontal_alignment = 1
|
|
theme_override_font_sizes/font_size = 18
|
|
|
|
[node name="ErrorLabel" type="Label" parent="VBoxContainer"]
|
|
layout_mode = 3
|
|
text = ""
|
|
visible = false
|
|
horizontal_alignment = 1
|
|
theme_override_font_sizes/font_size = 18
|
|
|
|
[node name="EmptyLabel" type="Label" parent="VBoxContainer"]
|
|
layout_mode = 3
|
|
text = ""
|
|
visible = false
|
|
horizontal_alignment = 1
|
|
theme_override_font_sizes/font_size = 18
|
|
|
|
[connection signal="pressed" from="VBoxContainer/HeaderHBox/BackButton" to="." method="_on_back_button_pressed"]
|
|
[connection signal="pressed" from="VBoxContainer/HeaderHBox/RefreshButton" to="." method="_on_refresh_button_pressed"]
|