diff --git a/src/editor/library_browser.gd b/src/editor/library_browser.gd index 1589cc1..ff1387b 100644 --- a/src/editor/library_browser.gd +++ b/src/editor/library_browser.gd @@ -119,8 +119,8 @@ const KAT_GROUPS := { } ## Anzeige-Größe der Vorschaubilder im Browser (Karte t_59fc0f21): vorher 40 px, -## jetzt Kacheln mit 96 px (128-px-PNGs werden auf die Anzeige-Größe skaliert). -const THUMB_DISPLAY_PX := 96 +## jetzt Kacheln mit 128 px (25.10.: größer, deutlicher) (128-px-PNGs werden auf die Anzeige-Größe skaliert). +const THUMB_DISPLAY_PX := 128 static func object_label(oid: String) -> String: diff --git a/src/ui/panels/assets_panel.gd b/src/ui/panels/assets_panel.gd index afb3e03..ed4cfe5 100644 --- a/src/ui/panels/assets_panel.gd +++ b/src/ui/panels/assets_panel.gd @@ -59,7 +59,6 @@ func panel_title() -> String: ## Klapp-Gruppen-Körper („Alle") + Zuletzt-benutzt-Ansicht. func build() -> void: add_child(_header_label("Objekt-Bibliothek")) - add_child(_muted_label("Klick = auswählen, Doppelklick = Werkzeug starten. Ohne GLB wird der Platzhalter gesetzt und die Kachel markiert (Rechte Maustaste = Flug).")) # Suche (t_59fc0f21): tippen filtert live nach Name/ID — Gruppen mit # Treffern klappen auf, leere Gruppen verschwinden. Größe ist von @@ -102,7 +101,7 @@ func build() -> void: var scroll := ScrollContainer.new() scroll.size_flags_vertical = Control.SIZE_EXPAND_FILL - scroll.custom_minimum_size = UIScale.v2(0, 280) + scroll.custom_minimum_size = UIScale.v2(0, 320) scroll.horizontal_scroll_mode = ScrollContainer.SCROLL_MODE_DISABLED add_child(scroll) library_box = VBoxContainer.new() @@ -270,7 +269,7 @@ func _on_panel_resized() -> void: func _apply_grid_columns(width: float) -> void: - var cols := clampi(int(width / float(UIScale.px(180))), 1, 12) + var cols := clampi(int(width / float(UIScale.px(200))), 1, 12) for row in _library_group_rows: ((row["grid"] as GridContainer)).columns = cols if _recent_grid != null: @@ -471,7 +470,7 @@ func _build_tile(oid: String) -> Button: btn.toggle_mode = true btn.button_pressed = false btn.size_flags_horizontal = Control.SIZE_EXPAND_FILL - btn.custom_minimum_size = UIScale.v2(0, 126) + btn.custom_minimum_size = UIScale.v2(0, 188) btn.tooltip_text = "%s · %d Polys · %s" % [name_txt, poly, oid] if missing: btn.tooltip_text += " · MODELL FEHLT (Platzhalter-Kiste)" @@ -523,7 +522,6 @@ func _build_tile(oid: String) -> Button: tile.add_child(id_lbl) var lbl := Label.new() lbl.text = name_txt - lbl.add_theme_font_size_override("font_size", UIScale.small_font_size()) lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER lbl.clip_text = true lbl.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS diff --git a/src/ui/panels/check_panel.gd b/src/ui/panels/check_panel.gd index 027d77c..3a62f83 100644 --- a/src/ui/panels/check_panel.gd +++ b/src/ui/panels/check_panel.gd @@ -33,7 +33,6 @@ func build() -> void: spawn_status.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART spawn_status.custom_minimum_size = UIScale.v2(0, 44) add_child(spawn_status) - add_child(_muted_label("Der Check sagt VOR dem Export, was der Server-Loader verlangen wird (mindestens 4 Zonen pro Team, bekannte Objekt-IDs).")) # --- Spawn-Zonen-Werkzeug: großer Button + Bedien-Panel --- spawn_edit_btn = Button.new() @@ -82,9 +81,6 @@ func build() -> void: spawn_delete_btn.pressed.connect(_on_spawn_delete_pressed) spawn_panel.add_child(spawn_delete_btn) - spawn_panel.add_child(_muted_label( - "Klick setzt eine Zone, Klick+Ziehen verschiebt sie. Jede Zone ist " - + "EIN Rückgängig-Schritt (Strg+Z). ESC beendet das Spawn-Werkzeug.")) func _spawn_team_button(text: String, group: ButtonGroup, team: int) -> Button: diff --git a/src/ui/panels/editor_panel.gd b/src/ui/panels/editor_panel.gd index 5301ae5..501a8f8 100644 --- a/src/ui/panels/editor_panel.gd +++ b/src/ui/panels/editor_panel.gd @@ -31,6 +31,11 @@ func panel_title() -> String: ## sich vom angeschlossenen Theme-Baum (main hängt theme auf das Fenster). func theme_color(cname: String) -> Color: + # Befund 25.10. („Texte kaum lesbar“): Panels werden gebaut, BEVOR sie im + # Baum hängen — get_theme_color liefert dort Schwarz statt der Theme-Farbe. + # Darum direkt aus dem Theme des Hauptfensters lesen. + if main != null and main.theme != null and main.theme.has_color(cname, "Editor"): + return main.theme.get_color(cname, "Editor") return get_theme_color(cname, "Editor") diff --git a/src/ui/panels/map_panel.gd b/src/ui/panels/map_panel.gd index 97a8adb..f47f4f7 100644 --- a/src/ui/panels/map_panel.gd +++ b/src/ui/panels/map_panel.gd @@ -86,8 +86,6 @@ func build() -> void: prop_water.tooltip_text = "Wasser: ganz links = kein Wasser, sonst Höhe der Wasseroberfläche über dem Terrain. Senken unter dieser Höhe füllen sich mit Wasser." prop_water.set_meta("kein_wasser_value", KEIN_WASSER_WERT) add_child(prop_water) - var wasser_hinweis := _muted_label("Senken unter der Wasserhöhe füllen sich automatisch. Wasser betreten = knietief, träge (kein Schwimmen).") - add_child(wasser_hinweis) add_child(_separator()) add_child(_header_label("Terrain")) diff --git a/src/ui/panels/object_tools_panel.gd b/src/ui/panels/object_tools_panel.gd index bf9fc33..12bd66e 100644 --- a/src/ui/panels/object_tools_panel.gd +++ b/src/ui/panels/object_tools_panel.gd @@ -31,4 +31,3 @@ func build() -> void: grid_check.tooltip_text = "Neue und verschobene Objekte rasten auf ein 1-Meter-Raster ein" grid_check.toggled.connect(func(pressed: bool) -> void: main.call("_on_grid_snap_changed", pressed)) add_child(grid_check) - add_child(_muted_label("Raster-Snap rastet Platzieren und Ziehen auf ganze Meter.")) \ No newline at end of file diff --git a/src/ui/panels/scene_tree_panel.gd b/src/ui/panels/scene_tree_panel.gd index caca64c..a8b778b 100644 --- a/src/ui/panels/scene_tree_panel.gd +++ b/src/ui/panels/scene_tree_panel.gd @@ -58,7 +58,6 @@ func build() -> void: _confirm_delete.cancel_button_text = "Abbrechen" _confirm_delete.confirmed.connect(_on_delete_confirmed) add_child(_confirm_delete) - add_child(_muted_label("Rechtsklick: Gruppieren / Auflösen / Umbenennen / Löschen. Objektzeile in eine Gruppe ziehen = aufnehmen, auf „Objekte“ zurückziehen = herauslösen.")) add_child(_separator()) diff --git a/src/ui/panels/selection_panel.gd b/src/ui/panels/selection_panel.gd index 7658bfe..1621cda 100644 --- a/src/ui/panels/selection_panel.gd +++ b/src/ui/panels/selection_panel.gd @@ -100,7 +100,6 @@ func build() -> void: sel_ungroup_btn.tooltip_text = "Die Gruppe der Auswahl wieder auflösen (Strg+Umschalt+G) — Objekte bleiben, nur die Bindung löst sich" sel_ungroup_btn.pressed.connect(func() -> void: main.interaction.ungroup_selection()) group_btns.add_child(sel_ungroup_btn) - add_child(_muted_label("Mehrfachauswahl: Umschalt+Klick oder Rahmen aufziehen. Eine Gruppe wandert und dreht gemeinsam — auch nach Speichern/Laden.")) # --- Gizmo-Einstellungen (Karte t_e0120dc2): Schrittweite der Achsen- # Züge. Das Mausrad WÄHREND eines Gizmo-Zugs blättert durch die diff --git a/src/ui/panels/settings_panel.gd b/src/ui/panels/settings_panel.gd index 4595107..db51fae 100644 --- a/src/ui/panels/settings_panel.gd +++ b/src/ui/panels/settings_panel.gd @@ -46,7 +46,6 @@ func build() -> void: add_child(perspektive_box) add_child(_separator()) - add_child(_muted_label("Gilt im Lauf-Modus („▶ Karte testen“). Standard 1,0 — jede PC-/Maus-Kombination ist anders. Wird automatisch gespeichert.")) func _on_sens_changed(value: float) -> void: diff --git a/src/ui/panels/status_bar.gd b/src/ui/panels/status_bar.gd index 0501b6d..191f60c 100644 --- a/src/ui/panels/status_bar.gd +++ b/src/ui/panels/status_bar.gd @@ -26,7 +26,7 @@ func build() -> void: tool_label = Label.new() # U7: Werkzeug-Farbe über Theme (Editor/colors/accent). tool_label.add_theme_color_override("font_color", - get_theme_color("accent", "Editor")) + theme_color("accent")) # Karte t_297221b5: Statuszeilen-Labels egalisiert (min-size-Druck bei 1.5×) tool_label.clip_text = true tool_label.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS @@ -37,7 +37,7 @@ func build() -> void: sym_label = Label.new() # U7: Symmetrie-Farbe über Theme (Editor/colors/accent). sym_label.add_theme_color_override("font_color", - get_theme_color("accent", "Editor")) + theme_color("accent")) sym_label.clip_text = true sym_label.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS add_child(sym_label) @@ -45,7 +45,7 @@ func build() -> void: stats_objects = Label.new() # U7: Nebentext-Farbe über Theme (Editor/colors/field). stats_objects.add_theme_color_override("font_color", - get_theme_color("field", "Editor")) + theme_color("field")) stats_objects.clip_text = true stats_objects.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS add_child(stats_objects) @@ -54,7 +54,7 @@ func build() -> void: stats_terrain = Label.new() # U7: Nebentext-Farbe über Theme (Editor/colors/field). stats_terrain.add_theme_color_override("font_color", - get_theme_color("field", "Editor")) + theme_color("field")) stats_terrain.clip_text = true stats_terrain.text_overrun_behavior = TextServer.OVERRUN_TRIM_ELLIPSIS add_child(stats_terrain) diff --git a/src/ui/panels/symmetry_panel.gd b/src/ui/panels/symmetry_panel.gd index 1a00c2a..018f034 100644 --- a/src/ui/panels/symmetry_panel.gd +++ b/src/ui/panels/symmetry_panel.gd @@ -38,11 +38,7 @@ func panel_title() -> String: func build() -> void: add_child(_header_label("Symmetrie")) - add_child(_muted_label( - "Macht die GANZE Karte mit einem Klick symmetrisch: Objekte, " - + "Bau-Teile, Spawn-Punkte und Boden (Höhen + Material) werden " - + "von der Quell-Hälfte auf die andere Seite ERGÄNZT. Es wird " - + "nichts gelöscht — Widersprüche werden vorher gemeldet.")) + add_child(_muted_label("Macht die ganze Karte symmetrisch: ergänzt die andere Seite, löscht nichts.")) mode_label = _field_label(_mode_text()) add_child(mode_label) @@ -75,10 +71,6 @@ func build() -> void: report_label.custom_minimum_size = UIScale.v2(0, 96) add_child(report_label) - add_child(_muted_label( - "Der Modus steht oben in der Leiste (Punkt/Achse X/Achse Z). " - + "Paare, die schon passen, werden mit Spiegel-Kennungen " - + "verkoppelt — auch bei alten Karten ohne diese Kennungen.")) conflict_dialog = ConfirmationDialog.new() conflict_dialog.title = "Widersprüche — welche Seite gewinnt?" diff --git a/src/ui/panels/test_start_panel.gd b/src/ui/panels/test_start_panel.gd index 00fe3ff..987d7fa 100644 --- a/src/ui/panels/test_start_panel.gd +++ b/src/ui/panels/test_start_panel.gd @@ -39,7 +39,7 @@ func build() -> void: add_child(_separator()) info_hint = Label.new() info_hint.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART - info_hint.text = "In der Leiste „🎯 Test-Start“ drücken (oder Taste T), dann in die Karte klicken. Die Höhe kommt automatisch vom Terrain. Der Punkt liegt in einer Nebendatei zur .svmap — die Kartendatei selbst bleibt unverändert." + info_hint.text = "Leiste „🎯 Test-Start“ oder Taste T, dann in die Karte klicken." add_child(info_hint) # main holt sich das Modul hier ab (main._refresh_test_start_panel) — die diff --git a/src/ui/panels/toolbar.gd b/src/ui/panels/toolbar.gd index 941ab78..5529a50 100644 --- a/src/ui/panels/toolbar.gd +++ b/src/ui/panels/toolbar.gd @@ -193,7 +193,7 @@ func build() -> void: file_label.text = "" # U7: Farbe über Theme (Editor/colors/title) statt modulate-Wert im Code. file_label.add_theme_color_override("font_color", - get_theme_color("title", "Editor")) + main.theme.get_color("title", "Editor")) # Karte t_297221b5: Map-Pfad darf bei großer Stufe egalisiert werden # (Voller Name im Tooltip, sonst drückt die Zeile die Top-Bar aus dem Fenster). # Expand: bekommt zusammen mit dem Spacer seinen Anteil, egalisiert mit "…". diff --git a/tests/test_library_browser_ui.gd b/tests/test_library_browser_ui.gd index be95e00..96650db 100644 --- a/tests/test_library_browser_ui.gd +++ b/tests/test_library_browser_ui.gd @@ -141,8 +141,8 @@ func _test_tiles() -> void: _check(tr.custom_minimum_size.x >= 64, "Thumbnail-Zielgröße ≥ 64 px (ist %d)" % int(tr.custom_minimum_size.x)) _check(tr.size.x >= 64, "Thumbnail rendert ≥ 64 px breit (ist %.0f)" % tr.size.x) - _check(tr.texture != null and tr.texture.get_width() == 96, - "Textur auf 96 px skaliert") + _check(tr.texture != null and tr.texture.get_width() == 128, + "Textur auf 128 px skaliert") if lbl != null: _check(lbl.text == "Wachturm", "deutscher Name unter dem Bild (%s)" % lbl.text) _check(tile_btn.size.y >= 100, "Kachel hoch genug (%.0f px)" % tile_btn.size.y) diff --git a/tests/test_ui_scale.gd b/tests/test_ui_scale.gd index c8b8349..dd0ca14 100644 --- a/tests/test_ui_scale.gd +++ b/tests/test_ui_scale.gd @@ -93,7 +93,7 @@ func _test_math() -> void: _check(v.x == 175 and v.y == 50, "Mittel: v2(140,40) → (175,50)") UIScale.set_step_index(2) _check(UIScale.px(40) == 60 and UIScale.font_size() == 24, "Groß: 40 px → 60 px, Schrift 24") - _check(UIScale.px(96) == 144, "Groß: Thumbnail 96 → 144") + _check(UIScale.px(96) == 144, "Groß: Thumbnail 96 → 144 (px-Rechnung)") func _test_cfg_roundtrip() -> void: @@ -142,10 +142,10 @@ func _test_real_ui_scaling() -> void: _check(int(main.theme.default_font_size) == 20, "Mittel: Theme-Schrift 20 (sofort wirksam)") _check(main.undo_btn.custom_minimum_size == Vector2(175, 50), "Mittel: Undo-Knopf 175×50") _check(main.library_search.custom_minimum_size.y == 45, "Mittel: Suchfeld 36 → 45") - var tile := _find_tile_button(158) - _check(tile != null and tile.custom_minimum_size.y == 158, "Mittel: Bibliotheks-Kachel 126 → 158") - var thumb := _find_thumb_rect(120) - _check(thumb != null and thumb.custom_minimum_size.x == 120, "Mittel: Thumbnail 96 → 120") + var tile := _find_tile_button(235) + _check(tile != null and tile.custom_minimum_size.y == 235, "Mittel: Bibliotheks-Kachel 188 → 235") + var thumb := _find_thumb_rect(160) + _check(thumb != null and thumb.custom_minimum_size.x == 160, "Mittel: Thumbnail 128 → 160") _check(main.size_menu.get_popup().is_item_checked(1), "Menü-Häkchen wandert auf Mittel (neues Popup)") # Groß: diff --git a/theme/editor_theme.tres b/theme/editor_theme.tres index 47190e8..569c234 100644 --- a/theme/editor_theme.tres +++ b/theme/editor_theme.tres @@ -222,9 +222,9 @@ default_font_size = 16 Editor/colors/accent = Color(0.55, 0.8, 1, 1) Editor/colors/status_ok = Color(0.75, 0.95, 0.75, 1) Editor/colors/status_error = Color(1, 0.6, 0.5, 1) -Editor/colors/muted = Color(1, 1, 1, 0.55) -Editor/colors/field = Color(1, 1, 1, 0.7) -Editor/colors/title = Color(1, 1, 1, 0.6) +Editor/colors/muted = Color(1, 1, 1, 0.74) +Editor/colors/field = Color(1, 1, 1, 0.9) +Editor/colors/title = Color(1, 1, 1, 0.82) Editor/colors/warning = Color(1, 0.62, 0.3, 1) Editor/colors/badge_outline = Color(0, 0, 0, 1) Editor/colors/help_bg = Color(0.09, 0.11, 0.13, 0.97) @@ -246,7 +246,7 @@ TabContainer/styles/tab_hovered = SubResource("tab_hover") TabContainer/styles/tab_unselected = SubResource("tab_unsel") TabContainer/styles/tabbar_background = SubResource("tabbar") TabContainer/colors/font_selected_color = Color(1, 1, 1, 1) -TabContainer/colors/font_unselected_color = Color(1, 1, 1, 0.7) +TabContainer/colors/font_unselected_color = Color(1, 1, 1, 0.88) Button/styles/normal = SubResource("btn_normal") Button/styles/hover = SubResource("btn_hover") Button/styles/pressed = SubResource("btn_pressed") @@ -254,11 +254,11 @@ Button/styles/disabled = SubResource("btn_disabled") Button/styles/focus = SubResource("btn_focus") Button/colors/font_hover_color = Color(1, 1, 1, 1) Button/colors/font_pressed_color = Color(0.8, 0.9, 1, 1) -Button/colors/font_disabled_color = Color(1, 1, 1, 0.35) +Button/colors/font_disabled_color = Color(1, 1, 1, 0.5) LineEdit/styles/normal = SubResource("line_normal") LineEdit/styles/focus = SubResource("line_focus") LineEdit/colors/font_color = Color(1, 1, 1, 1) -LineEdit/colors/font_placeholder_color = Color(1, 1, 1, 0.4) +LineEdit/colors/font_placeholder_color = Color(1, 1, 1, 0.58) HSplitContainer/styles/grabber_area = SubResource("split_grab") HSplitContainer/styles/grabber_area_highlight = SubResource("split_grab_hover") VSplitContainer/styles/grabber_area = SubResource("split_grab")