Add visual harmonization tests for editor UI components and ground finish chooser

- Implemented `test_editor_visual_harmonization.gd` to validate the Stickman editor and prop editor UI layouts, ensuring proper functionality and visual consistency.
- Created `test_editor_visual_theme.gd` to verify the loading and application of visual themes in the editor, including semantic overrides and default values.
- Introduced `test_phase19_ground_finish_chooser.gd` to test the ground finish chooser's functionality, including layout responsiveness, selection behavior, and interaction with the stage.
- Added new scripts for ground finish preview and chooser UI components to enhance the editor's visual representation of ground finishes.
This commit is contained in:
2026-10-23 15:20:12 -04:00
parent 0a5ef0a61e
commit ddb298f631
40 changed files with 3442 additions and 434 deletions
+20 -22
View File
@@ -10,6 +10,7 @@ extends RefCounted
## truth.
const PropBlockScript := preload("res://scripts/props/prop_block.gd")
const EditorVisualThemeScript := preload("res://scripts/shared/editor_ui/editor_visual_theme.gd")
const SCHEMA_VERSION: String = "1.0"
const DEFAULT_PATH: String = "res://prop_theme.json"
@@ -39,19 +40,16 @@ const DEFAULT_CONFIG: Dictionary = {
"background_color": "#1F1F1F",
"grid_color": "#FFFFFF26",
},
"ui": {
"fonts": {"body": 18, "header": 24, "menu": 22, "menu_bar": 22, "mode": 26, "status": 18, "prop_name": 20, "context_menu": 22},
"hit_targets": {"button_min_height": 36, "row_min_height": 36, "mode_button_min_height": 56},
"colors": {"text": "#F2F2F2", "text_muted": "#9A9A9A", "border": "#FFFFFF33", "accent": "#4FA3FF", "inspector_background": "#262C39"},
},
}
var _config: Dictionary = DEFAULT_CONFIG.duplicate(true)
var _warned: Dictionary = {}
var _editor_visual_theme: EditorVisualTheme = EditorVisualThemeScript.new()
func load_from(path: String = DEFAULT_PATH) -> bool:
invalidate_caches()
_editor_visual_theme.load_from(EditorVisualTheme.DEFAULT_PATH)
_config = DEFAULT_CONFIG.duplicate(true)
if not FileAccess.file_exists(path):
_warn_once(path, "PropTheme: '%s' was not found; using defaults." % path)
@@ -155,71 +153,71 @@ func canvas_grid_color() -> Color:
# ---------------------------------------------------------------------------
# Kid-friendly UI tokens (Round 2)
# Compatibility accessors: editor chrome is owned by EditorVisualTheme.
# ---------------------------------------------------------------------------
func font_body() -> int:
return integer("ui.fonts.body", 18, 8, 72)
return _editor_visual_theme.chrome_px(&"body", &"prop")
func font_header() -> int:
return integer("ui.fonts.header", 24, 8, 96)
return _editor_visual_theme.chrome_px(&"section", &"prop")
func font_menu() -> int:
return integer("ui.fonts.menu", 22, 8, 72)
return _editor_visual_theme.chrome_px(&"menu", &"prop")
func font_status() -> int:
return integer("ui.fonts.status", 18, 8, 72)
return _editor_visual_theme.chrome_px(&"status", &"prop")
func font_mode() -> int:
return integer("ui.fonts.mode", 26, 8, 96)
return _editor_visual_theme.chrome_px(&"mode", &"prop")
func font_menu_bar() -> int:
return integer("ui.fonts.menu_bar", 22, 8, 72)
return _editor_visual_theme.chrome_px(&"menu", &"prop")
func font_prop_name() -> int:
return integer("ui.fonts.prop_name", 20, 8, 96)
return _editor_visual_theme.chrome_px(&"prop_name", &"prop")
func font_context_menu() -> int:
return integer("ui.fonts.context_menu", 22, 8, 96)
return _editor_visual_theme.chrome_px(&"context_menu", &"prop")
func button_min_height() -> int:
return integer("ui.hit_targets.button_min_height", 36, 16, 200)
return _editor_visual_theme.chrome_px(&"button_min_height", &"prop")
func row_min_height() -> int:
return integer("ui.hit_targets.row_min_height", 36, 16, 200)
return _editor_visual_theme.chrome_px(&"row_min_height", &"prop")
func mode_button_min_height() -> int:
return integer("ui.hit_targets.mode_button_min_height", 56, 16, 200)
return _editor_visual_theme.chrome_px(&"mode_button_min_height", &"prop")
func text_color() -> Color:
return color("ui.colors.text", Color("#F2F2F2"))
return _editor_visual_theme.chrome_color(&"text", &"prop")
func text_muted_color() -> Color:
return color("ui.colors.text_muted", Color("#9A9A9A"))
return _editor_visual_theme.chrome_color(&"text_muted", &"prop")
func border_color() -> Color:
return color("ui.colors.border", Color(1.0, 1.0, 1.0, 0.2))
return _editor_visual_theme.chrome_color(&"border", &"prop")
func accent_color() -> Color:
return color("ui.colors.accent", Color("#4FA3FF"))
return _editor_visual_theme.chrome_color(&"edit", &"prop")
func inspector_background_color() -> Color:
return color("ui.colors.inspector_background", Color("#262C39"))
return _editor_visual_theme.chrome_color(&"surface", &"prop")
func invalidate_caches() -> void: