extends SceneTree ## Gegenprobe: Explosion verhindern? (E) autowrap-Label mit custom_minimum_size.x, ## (F) vbox.custom_minimum_size.x, (G)echter Fix-Kandidat für die Dialoge. func _initialize() -> void: _run.call_deferred() func _label(t: String, wrap: bool, min_w := 0.0) -> Label: var l := Label.new() l.text = t if wrap: l.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART if min_w > 0.0: l.custom_minimum_size = Vector2(min_w, 0) return l func _run() -> void: await process_frame # E: Labels mit Mindestbreite 480 var e := ConfirmationDialog.new() e.title = "E_minwidth_labels" var ev := VBoxContainer.new() ev.set_anchors_preset(Control.PRESET_FULL_RECT) for i in 5: ev.add_child(_label("Zeile %d — etwas längerer Text, der im Editor-Dialog steht und umgebrochen werden muss, damit er passt." % i, true, 480.0)) e.add_child(ev) root.add_child(e) print("PROBE E content_min VOR popup=", e.get_contents_minimum_size()) e.popup_centered() # F: vbox Mindestbreite 520, Labels autowrap ohne eigene Mindestbreite var f := ConfirmationDialog.new() f.title = "F_minwidth_vbox" var fv := VBoxContainer.new() fv.custom_minimum_size = Vector2(520, 0) fv.set_anchors_preset(Control.PRESET_FULL_RECT) for i in 5: fv.add_child(_label("Zeile %d — etwas längerer Text, der im Editor-Dialog steht und umgebrochen werden muss, damit er passt." % i, true)) f.add_child(fv) root.add_child(f) print("PROBE F content_min VOR popup=", f.get_contents_minimum_size()) f.popup_centered() await process_frame await process_frame print("PROBE E window=", e.size, " content_min_nach=", e.get_contents_minimum_size()) print("PROBE F window=", f.size, " content_min_nach=", f.get_contents_minimum_size()) quit(0)