acdream/tests/AcDream.App.Tests/UI/Layout
Erik 41430420b3 feat(ui): importer carries dat justification (0x14/0x15) onto text widgets; drop character footer-title height hack
LayoutImporter.ReadState now reads Properties[0x14] (HorizontalJustification,
EnumBaseProperty: 0=Left, 1=Center, 3/5=Right) and Properties[0x15]
(VerticalJustification: 2=Top, 4=Bottom; else Center) into two new ElementInfo
fields HJustify/VJustify. Merge propagates them with the same non-default-wins
rule used for FontDid.

DatWidgetFactory.BuildText applies the resolved justify at build time:
HJustify=Center sets Centered=true, HJustify=Right sets RightAligned=true,
VJustify=Top/Bottom sets VerticalJustify. Controllers that FindElement and set
those properties afterward continue to override - backward-compat preserved.

UiText gains VerticalJustify (Top/Center/Bottom, default Center). The Centered
and RightAligned single-line paths call UiText.VOffset() for the Y coordinate,
so VJustify.Top renders text at y=Padding rather than the fixed (H-lh)/2 center.

CharacterStatController: footer title (0x1000024E, H=55 dat box) previously
used Height=18 + Anchors=None to prevent center-vertical overlap with line-1/2.
Diagnostic confirmed dat says HJustify=Center, VJustify=Center. The hack is
replaced with one minimal explicit override: VerticalJustify=Top on the
already-Centered element. Text now renders at top of the 55px box natively.
Centered=false and RightAligned=false hand-sets removed where dat supplies them.

Dat justify values (studio diagnostic, 2026-06-26):
  0x1000024E footer title: HJustify=Center, VJustify=Center
  0x10000235/0x10000243/0x10000245 value fields: HJustify=Right
  header name/heritage/pk/level: HJustify=Center

+13 tests: ElementReader Merge propagation; DatWidgetFactory BuildText
justify application + controller-override backward-compat; UiText VOffset.
696 passed, 0 failed.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 10:05:36 +02:00
..
fixtures test(D.2b): chat golden fixture + resolved-Type conformance (widget-generalization Task 1) 2026-06-16 16:55:51 +02:00
CharacterControllerTests.cs fix(studio): Character pilot — CREATE m_pMainText (it's a runtime element, not static) 2026-06-25 19:01:09 +02:00
CharacterStatControllerTests.cs fix(studio): Character window — selected-row highlight uses retail bar sprite 2026-06-26 02:26:46 +02:00
ChatLayoutConformanceTests.cs test(D.2b): chat golden fixture + resolved-Type conformance (widget-generalization Task 1) 2026-06-16 16:55:51 +02:00
ChatLayoutFixtureGenerator.cs test(D.2b): chat golden fixture + resolved-Type conformance (widget-generalization Task 1) 2026-06-16 16:55:51 +02:00
ChatWindowControllerTests.cs feat(D.2b): UiField (Type 3) — editable input as a generic field; remove the stray Type-12 input placeholder (widget-generalization Task 6) 2026-06-16 17:48:51 +02:00
DatWidgetFactoryTests.cs feat(ui): importer carries dat justification (0x14/0x15) onto text widgets; drop character footer-title height hack 2026-06-26 10:05:36 +02:00
ElementReaderTests.cs feat(ui): importer carries dat justification (0x14/0x15) onto text widgets; drop character footer-title height hack 2026-06-26 10:05:36 +02:00
FixtureLoader.cs test(D.2b): chat golden fixture + resolved-Type conformance (widget-generalization Task 1) 2026-06-16 16:55:51 +02:00
InventoryControllerTests.cs test(D.2b): close drag-drop spec-review coverage gaps 2026-06-22 20:03:24 +02:00
InventoryFrameImportProbe.cs test(D.2b): probe — paperdoll equip slots resolve to UiItemList 2026-06-22 21:52:54 +02:00
ItemListCellTemplateTests.cs fix(ui): D.2b empty-slot art — container cells use inner slot bg, not the selected-container triangle 2026-06-22 12:45:36 +02:00
LayoutConformanceTests.cs fix(D.2b): do NOT register Type 3 -> UiField (review fix for Task 6) 2026-06-16 17:53:56 +02:00
LayoutImporterTests.cs fix(D.5.1): toolbar movable + chrome-grab + peace-only indicator + no prototype square 2026-06-17 13:03:07 +02:00
PaperdollControllerTests.cs fix(D.2b): paperdoll empty slots show a visible frame (not transparent) 2026-06-23 00:02:11 +02:00
PaperdollToggleTests.cs feat(D.2b): Slice 2 — paperdoll armor/non-armor partition + Slots toggle state 2026-06-23 08:57:50 +02:00
SelectedObjectControllerTests.cs fix(D.5.3a): selected-object meter visual-gate fixes (name, gate, flash, magenta) 2026-06-20 09:37:15 +02:00
ToolbarControllerTests.cs refactor(core): D.5.3/B.2 — move ShortcutStore to Core.Items (decouple Load from the wire type) 2026-06-20 15:50:33 +02:00
UiDatElementTests.cs feat(D.2b): importer renders Type-12-with-sprites + carries DefaultState 2026-06-15 22:54:37 +02:00
UiViewportFactoryTests.cs feat(D.2b): Slice 2 — UiViewport widget (dat Type 0xD) + IUiViewportRenderer seam 2026-06-23 09:03:42 +02:00
VitalsBindingTests.cs feat(D.2b): vitals numbers as UiText (widget-generalization Task 8) 2026-06-16 18:52:42 +02:00