acdream/src/AcDream.App/UI/Layout
Erik 4b5961ec04 fix(studio): Character window polish — XP-label left-align, smaller icons/tighter rows, selection bar full-width + top/bottom
Item 1 — XP-next label left-alignment: the "XP for next level:" label (child of the
XP meter) was not left-aligned with the "Total Experience (XP):" caption above it.
Fixed by computing the meter's x-offset at bind time and setting xpLabel.Left =
TotalXpLabel.Left - meter.Left, plus Centered=false/RightAligned=false.

Item 2 — icon size / row height: attribute-row icons reduced from 24px → 16px,
row height from 30px → 22px. The 9 rows are now compact and tightly packed matching
the retail reference (2026-06-26). Row font (18px dat) still fits the 22px row.

Item 3 — selection bar: UiClickablePanel gains UseSelectionBars (default false) and
SelectionBarHeight (default 3px). When UseSelectionBars=true and BackgroundSprite is
set, OnDraw draws the sprite as a thin horizontal bar at the TOP edge (y=0) and BOTTOM
edge (y=H-barH) of the row — full panel width, no left/right end-caps, UV-tiled
horizontally (u1=Width/nativeW). Falls back to the base UiPanel fill (BackgroundColor
or full-stretch sprite) when UseSelectionBars=false. AddRow sets UseSelectionBars=true
on all attribute/vital rows so the selection highlight shows as retail-style bars.
Sprite 0x06001397 is 300×32 px; at 3px bar height the UV crop shows the sprite's
top 3px (top bar) and bottom 3px (bottom bar). Temp pre-select for screenshot
verification was added then removed before this commit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-26 12:01:42 +02:00
..
CharacterController.cs fix(studio): Character pilot — CREATE m_pMainText (it's a runtime element, not static) 2026-06-25 19:01:09 +02:00
CharacterSheet.cs feat(studio): Attributes tab Pass 2 — click-to-select (highlight + footer B + raise triangles) + tab states 2026-06-25 21:48:16 +02:00
CharacterStatController.cs fix(studio): Character window polish — XP-label left-align, smaller icons/tighter rows, selection bar full-width + top/bottom 2026-06-26 12:01:42 +02:00
ChatWindowController.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
DatWidgetFactory.cs feat(ui): importer Fix C — per-element dat FontDid resolver (studio path); character level uses its retail font 2026-06-26 10:30:13 +02:00
ElementReader.cs feat(ui): importer carries dat FontColor (0x1B) onto text widgets; character colors from dat where present 2026-06-26 10:15:55 +02:00
InventoryController.cs fix(D.2b): gapless insert on optimistic move — stop the inventory reshuffle 2026-06-22 20:29:22 +02:00
ItemListCellTemplate.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
LayoutImporter.cs feat(ui): importer Fix 5 — build meter text children; drop character XP injection hacks 2026-06-26 11:35:19 +02:00
PaperdollController.cs fix(D.2b): Slice 2 — retail-exact doll pose, camera + heading (visual gate) 2026-06-25 13:16:27 +02:00
SelectedObjectController.cs fix(D.5.3a): selected-object meter visual-gate fixes (name, gate, flash, magenta) 2026-06-20 09:37:15 +02:00
ToolbarController.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
UiDatElement.cs fix(D.2b): Character window — tab bar sprites on root + footer State-A all 3 lines 2026-06-25 22:59:44 +02:00
VitalsController.cs feat(D.2b): vitals numbers as UiText (widget-generalization Task 8) 2026-06-16 18:52:42 +02:00