Fix CCS popup lifecycle and contrast

This commit is contained in:
hz
2026-08-04 07:10:36 -05:00
parent 690c4a8903
commit c140b9a96c
2 changed files with 75 additions and 0 deletions
+66
View File
@@ -435,6 +435,26 @@ func on_show(payload: Variant = null) -> void:
func on_hide() -> void:
timer.stop()
_dismiss_dialogs()
func _dismiss_dialogs() -> void:
# Dialogs are Window nodes, so hiding their parent Control does not dismiss
# them. Always close every CCS overlay when navigation or logout hides the
# player to prevent case content from appearing over another screen.
for dialog in _ccs_dialogs():
if dialog != null:
dialog.hide()
if report_dialog != null and report_dialog.has_method("hide_dialog"):
report_dialog.hide_dialog()
func _ccs_dialogs() -> Array[Window]:
var dialogs: Array[Window] = []
for dialog in [intro_dialog, exam_dialog, exam_summary_dialog, findings_dialog, time_dialog, location_dialog, end_dialog, final_instructions, abandon_dialog]:
if dialog is Window:
dialogs.append(dialog)
return dialogs
func _render() -> void:
@@ -1084,6 +1104,52 @@ func _apply_theme() -> void:
button.add_theme_stylebox_override("hover", Brand.content_card_box(dark, true))
for label in clinical_labels:
label.add_theme_color_override("default_color", Brand.text_color(dark))
_apply_dialog_theme(dark)
Brand.set_theme_toggle_icon(theme_button, dark)
theme_button.tooltip_text = "Switch to light mode" if dark else "Switch to dark mode"
_apply_text_scale()
func _apply_dialog_theme(dark: bool) -> void:
var popup_theme := Theme.new()
var text := Brand.text_color(dark)
var muted := Brand.muted_color(dark)
var panel := Brand.content_card_box(dark, false)
panel.content_margin_left = 18
panel.content_margin_right = 18
panel.content_margin_top = 16
panel.content_margin_bottom = 16
for type_name in ["Label", "Button", "CheckBox", "OptionButton", "LineEdit", "PopupMenu"]:
popup_theme.set_font("font", type_name, Brand.font)
popup_theme.set_color("font_color", type_name, text)
popup_theme.set_font("normal_font", "RichTextLabel", Brand.font)
popup_theme.set_font("bold_font", "RichTextLabel", Brand.font)
popup_theme.set_color("default_color", "RichTextLabel", text)
popup_theme.set_color("font_selected_color", "RichTextLabel", text)
popup_theme.set_color("font_hover_color", "Button", text)
popup_theme.set_color("font_pressed_color", "Button", text)
popup_theme.set_color("font_disabled_color", "Button", muted)
popup_theme.set_color("font_hover_color", "OptionButton", text)
popup_theme.set_color("font_pressed_color", "OptionButton", text)
popup_theme.set_color("font_hover_color", "CheckBox", text)
popup_theme.set_color("font_pressed_color", "CheckBox", text)
popup_theme.set_color("font_hover_color", "PopupMenu", text)
popup_theme.set_color("font_accelerator_color", "PopupMenu", muted)
popup_theme.set_color("font_placeholder_color", "LineEdit", muted)
popup_theme.set_color("title_color", "Window", text)
popup_theme.set_font("title_font", "Window", Brand.font)
for type_name in ["Button", "OptionButton"]:
popup_theme.set_stylebox("normal", type_name, Brand.secondary_button_box(dark))
popup_theme.set_stylebox("hover", type_name, Brand.secondary_button_box(dark, true))
popup_theme.set_stylebox("pressed", type_name, Brand.secondary_button_box(dark, true))
popup_theme.set_stylebox("normal", "LineEdit", Brand.field_box(dark))
popup_theme.set_stylebox("focus", "LineEdit", Brand.field_box(dark, true))
for type_name in ["Window", "AcceptDialog", "ConfirmationDialog"]:
popup_theme.set_stylebox("panel", type_name, panel)
popup_theme.set_stylebox("panel", "PopupMenu", panel)
popup_theme.set_stylebox("hover", "PopupMenu", Brand.secondary_button_box(dark, true))
for dialog in _ccs_dialogs():
dialog.theme = popup_theme