acdream/tests/AcDream.App.Tests/UI/Layout
Erik 6e6339b026 feat(D.2b): importer renders Type-12-with-sprites + carries DefaultState
Task G1: two gaps blocked chat window static sprite elements from rendering.

Change 1 — DatWidgetFactory: only skip Type-12 elements that have no own
state media (pure style prototypes). A Type-12 element that carries sprites
(e.g. a chat Send button whose derived Type-0 element inherited Type 12 from
its base prototype) now renders as a UiDatElement.

Change 2 — ElementInfo: add DefaultStateName field (string, default "").

Change 3 — LayoutImporter.ToInfo: read ElementDesc.DefaultState.ToString()
into DefaultStateName; normalize Undef/Undefined/0 sentinels to "".

Change 4 — ElementReader.Merge: inherit DefaultStateName (derived wins if
non-empty, else base).

Change 5 — UiDatElement ctor: initialize ActiveState to DefaultStateName
when set; else "Normal" when a Normal-state sprite is present (retail's
implicit default for buttons/tabs); else "" (DirectState). This makes the
Send button, max/min button, and numbered tabs render their default sprite
without requiring explicit state assignment at runtime.

Vitals neutrality: all vitals chrome/grip elements carry DirectState-only
sprites with no "Normal" named state and DefaultStateName="" (Undef in dat),
so their ActiveState stays "" and their existing conformance tests are
unaffected. Vitals text labels (Type 0→12 via Merge, no StateMedia) are
still skipped by the refined Type-12 guard (StateMedia.Count==0).

Tests: 4 new tests (2 in DatWidgetFactoryTests, 3 in UiDatElementTests).
All 386 pass; 387 total (1 pre-existing skip).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 22:54:37 +02:00
..
fixtures test(D.2b): vitals importer conformance — golden fixture + tree/slice/chrome checks 2026-06-15 14:29:30 +02:00
DatWidgetFactoryTests.cs feat(D.2b): importer renders Type-12-with-sprites + carries DefaultState 2026-06-15 22:54:37 +02:00
ElementReaderTests.cs fix(D.2b): correct edge-anchor mapping (RightEdge==1=stretch) + enable vitals horizontal resize 2026-06-15 17:05:04 +02:00
FixtureLoader.cs docs(D.2b): register AP-32 + IA-15 amend for importer; doc/test review fixes (N1/N4) 2026-06-15 14:55:01 +02:00
LayoutConformanceTests.cs fix(D.2b): correct edge-anchor mapping (RightEdge==1=stretch) + enable vitals horizontal resize 2026-06-15 17:05:04 +02:00
LayoutImporterTests.cs feat(D.2b): LayoutImporter — read layout + resolve inheritance + build tree 2026-06-15 13:52:50 +02:00
UiDatElementTests.cs feat(D.2b): importer renders Type-12-with-sprites + carries DefaultState 2026-06-15 22:54:37 +02:00
VitalsBindingTests.cs refactor(D.2b): VitalsController review fixes — cite format doc + use consts in test 2026-06-15 14:10:17 +02:00