From 5f3289bb8e1811b1b90a47d0dd4d5e30fd5c222b Mon Sep 17 00:00:00 2001 From: hz Date: Thu, 23 Jul 2026 00:33:52 -0500 Subject: [PATCH] Vertically center the question+choices block before an answer is submitted Fixes the large empty gap below the answer choices reported after the answer-row redesign - the stem+choices VBox was pinned to the top of an expand-filled scroll panel with all the leftover height sitting unused below choice E. Now centers that block when unanswered and reverts to top alignment once the explanation/review content grows underneath it. --- scripts/ui/question_player.gd | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/scripts/ui/question_player.gd b/scripts/ui/question_player.gd index 96eeecc..68da0eb 100644 --- a/scripts/ui/question_player.gd +++ b/scripts/ui/question_player.gd @@ -386,12 +386,14 @@ func _ready() -> void: var content_margin := MarginContainer.new() content_margin.size_flags_horizontal = Control.SIZE_EXPAND_FILL + content_margin.size_flags_vertical = Control.SIZE_EXPAND_FILL content_margin.add_theme_constant_override("margin_left", 4) content_margin.add_theme_constant_override("margin_right", 12) question_scroll.add_child(content_margin) question_content = VBoxContainer.new() question_content.size_flags_horizontal = Control.SIZE_EXPAND_FILL + question_content.size_flags_vertical = Control.SIZE_EXPAND_FILL question_content.add_theme_constant_override("separation", 12) content_margin.add_child(question_content) @@ -1498,6 +1500,7 @@ func _show_explanation() -> void: correct_answer_heading.text = "Correct Answer: %s" % _display_label_for_choice_id(correct_id) _update_question_elo_label(true) _refresh_nav_palette() + _update_content_vertical_alignment() func _render_answer_review_sections() -> void: @@ -1520,6 +1523,19 @@ func _clear_answer_review() -> void: review_followups_section.visible = false if wrong_options_section != null: wrong_options_section.visible = false + _update_content_vertical_alignment() + + +func _update_content_vertical_alignment() -> void: + if question_content == null: + return + # Before an answer is submitted the stem+choices block is usually shorter than the + # available panel height; center it so it doesn't sit pinned to the top with a slab + # of empty space below. Once the answer review content appears, go back to top + # alignment so the growing explanation/follow-up sections read top-down and scroll + # naturally instead of being centered mid-panel. + var answered := correct_review_panel != null and correct_review_panel.visible + question_content.alignment = BoxContainer.ALIGNMENT_BEGIN if answered else BoxContainer.ALIGNMENT_CENTER func _clear_container_children(container: Control) -> void: