acdream/tests/AcDream.App.Tests/UI
Erik 761a7519f1 fix(ui): retained-UI rect outlines composite in painter order, not above every window
Owner report: with the MossTank plugin window BEHIND the inventory window,
the plugin's "Force Buff"/"Cancel Force Buff" button border outlines drew on
top of the inventory paperdoll. Only outlines leaked; fills did not.

Root cause: TextRenderer composited three buckets per layer — submission-
ordered sprite segments, then ALL untextured DrawRect quads (_rectBuf), then
debug text (Flush/DrawLayer). UiRenderContext.DrawRect forwarded into that
separate rect bucket, which always flushed AFTER every sprite segment
regardless of submission order. UiRenderContext.DrawRectOutline is four
DrawRect calls, so every BorderColor outline in the retained UI (UiPanel,
UiMarkupList) composited above every window's sprite content drawn after it,
instead of only the windows actually painted before it.

Fix: UiRenderContext.DrawRect now forwards to DrawFill — the same untextured
SPRITE-bucket segment DrawFill already used for panel backgrounds — so
DrawRectOutline inherits real painter/submission order. Audited the only
other DrawRect caller (UiMeter's bg-then-bar fill, which already relied on
same-call submission order and is unaffected) and the only other
DrawRectOutline callers (UiPanel, UiMarkupList, both routed through the same
fixed chokepoint). TextRenderer.DrawRect/DrawRectOutline and the _rectBuf
bucket are left in place (not deleted) with updated doc comments noting no
caller in src/ outside TextRenderer itself reaches them anymore; a future
non-retained-UI caller (e.g. a debug overlay) could still want that
"always on top of sprites" behavior. Added TextRenderer.DebugRectVertexCount
(test-only) and a failing-first regression test
(UiRectOutlinePainterOrderTests) that builds a real UiPanel border behind a
later-added opaque sprite and asserts submission order.

No retail-divergence register row: this is a renderer ordering bug, not a
documented retail behavior deviation.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 16:24:34 +02:00
..
Layout feat(rendering): port retail building degrade walk 2026-09-04 22:29:18 +02:00
AutoWieldGenerationTests.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
ChatMainWindowFilterSeedTests.cs fix(ui): OP5 review fixes — thumb sync, batched opacity writes, cull register row, tests 2026-08-11 07:36:54 +02:00
ChatTranscriptLogWriterTests.cs feat(chat): CT-B4 — @log, and the research block that was a wrong question 2026-08-21 11:28:20 +02:00
ClientCommandControllerTests.cs fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
ControlsIniTests.cs feat(D.2b): controls.ini stylesheet loader + apply title color 2026-06-14 17:31:55 +02:00
CursorFeedbackControllerTests.cs fix(ui): restore retail vitals and window interactions 2026-08-20 13:26:35 +02:00
DatWidgetFactoryZOrderTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
DragDropSpineTests.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
GameplayConfirmationControllerTests.cs fix: social gate round 2, part 2 - confirmation-dialog sentences + the 2026-08-13 21:10:42 +02:00
IconComposerTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
ItemInteractionControllerTests.cs feat(mosstank): add VTank-style automation PoC 2026-08-27 18:57:21 +02:00
JournalPersistenceTests.cs feat(journal): QJ3/QJ4/QJ5 — both remaining tabs are live 2026-08-21 15:42:05 +02:00
LayoutImporterMountTests.cs feat(ui): D.2b-B — sub-window mount (inheritor attaches base subtree) 2026-06-20 22:36:20 +02:00
MarkupDocumentTests.cs feat(mosstank): add VTank-style automation PoC 2026-08-27 18:57:21 +02:00
MarkupIconTests.cs fix(plugin-ui): Slice B review fixes — no magenta for bad DIDs, contract threshold, integral icon bindings, nearest did art, loud markup errors 2026-09-06 15:43:56 +02:00
MarkupPanelClickTests.cs fix(mosstank): unclickable button, empty skill list, dev font, and chat output 2026-08-20 18:27:28 +02:00
PluginSidePanelTests.cs fix(plugin-ui): Slice B review fixes — no magenta for bad DIDs, contract threshold, integral icon bindings, nearest did art, loud markup errors 2026-09-06 15:43:56 +02:00
PluginSidePanelToggleGlyphClipTests.cs fix(plugin-ui): shelf children must not anchor — the per-draw anchor pass was undoing collapse/reflow geometry 2026-09-06 16:04:04 +02:00
RetailCursorCatalogTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
RetailCursorManagerTests.cs feat(ui): complete retail cursor state machine 2026-07-11 08:31:40 +02:00
RetailItemConfirmationControllerTests.cs refactor(runtime): own interaction transactions 2026-07-26 11:13:09 +02:00
RetailMarkupIconResolverInstalledDatTests.cs fix(plugin-ui): Slice B review fixes — no magenta for bad DIDs, contract threshold, integral icon bindings, nearest did art, loud markup errors 2026-09-06 15:43:56 +02:00
RetailPanelCatalogTests.cs test(ui): FA3 -- social panel fixture dump, live-mount probe, conformance tests 2026-08-12 02:58:28 +02:00
RetailSkillTrainingConfirmationControllerTests.cs fix(ui): restore retail skill training confirmation 2026-07-13 17:57:29 +02:00
RetailUiAutomationProbeTests.cs fix(overhaul): integrate reviewed resize capture sequencing 2026-09-05 13:26:06 +02:00
RetailUiInteractionFlowTests.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
RetailUiRuntimeLeaseTests.cs refactor(lifetime): own render resource prefixes 2026-07-22 14:42:14 +02:00
RetailWindowLayoutPersistenceTests.cs fix(plugin-ui): Slice A review fixes - real grip/toggle children, dialog z-order, persisted collapse/hide intent 2026-09-06 13:51:25 +02:00
RetailWindowLockPresentationControllerTests.cs fix(ui): restore retail vitals and window interactions 2026-08-20 13:26:35 +02:00
RetailWindowManagerTests.cs fix(ui): port retail window control feedback 2026-07-17 09:40:08 +02:00
RetailWindowOpacityControllerTests.cs fix #379: chat opacity fade was scoped to every window, not just chat 2026-08-11 23:00:57 +02:00
RetainedPanelControllerGroupTests.cs refactor(ui): own retained controller lifetimes 2026-07-10 23:35:26 +02:00
RetainedUiInputBindingTests.cs refactor(input): own pointer and callback lifetime 2026-07-22 11:59:33 +02:00
SpewBoxControllerTests.cs feat(chat): retail text style — two-plane glyph outlines, authored SpewBox/chat styles 2026-08-10 19:28:34 +02:00
SpewBoxLayoutDumpDiagnostic.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
UiAncestorClipTests.cs fix(CT-GF1): UiLabel opts out of the self-clip — plugin markup text restored 2026-08-25 07:28:26 +02:00
UiButtonStateMachineTests.cs feat(ui): port retained widget foundations 2026-07-10 17:55:41 +02:00
UiButtonTests.cs fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
UiClipRectTests.cs fix(ui): complete retail inventory scroll polish 2026-07-11 10:56:33 +02:00
UiCollapsibleFrameTests.cs Revert "Campaign V slice V4a" - it lost world multisampling 2026-07-27 18:29:28 +02:00
UiCompositeShutdownTests.cs test(runtime): add unattended connected R6 soak 2026-07-20 12:12:08 +02:00
UiDatFontBorderPixelTests.cs fix(plugin-ui): Slice A review fixes - real grip/toggle children, dialog z-order, persisted collapse/hide intent 2026-09-06 13:51:25 +02:00
UiDatFontTests.cs test(app): measure the warmed path, not the path being warmed (#250) 2026-07-29 03:42:08 +02:00
UiElementChildOrderTests.cs fix(rendering): bound portal resource lifetime 2026-07-18 21:35:16 +02:00
UiFieldTests.cs feat(chat): CT-C2 Escape leaves the entry; CT-C3 the timestamp is grey 2026-08-21 08:28:45 +02:00
UiItemListGridTests.cs feat(ui): D.2b item interaction + retail cursors + live character sheet 2026-07-03 09:18:43 +02:00
UiItemListScrollTests.cs fix(ui): complete retail inventory scroll polish 2026-07-11 10:56:33 +02:00
UiItemListTests.cs feat(items): port retail shared cooldown overlays 2026-07-23 10:41:16 +02:00
UiItemSlotTests.cs fix(vendor): Slice 6 review corrections — ownership-checked retire, live slider display, drag-proof shop rows, hardened buy reservation 2026-08-07 23:12:50 +02:00
UiLayoutPolicyTests.cs fix(ui): preserve cropped chat and button faces 2026-07-10 18:11:14 +02:00
UiMenuPopupRoutingTests.cs fix #374: open dropdown popups get first claim on pointer routing 2026-08-11 15:17:17 +02:00
UiMenuTests.cs fix: complete retail parity stability pass 2026-08-28 20:01:39 +02:00
UiMeterTests.cs feat(D.2b): UiMeter vital bar + fill-geometry tests 2026-06-14 16:38:07 +02:00
UiMeterVerticalTests.cs feat(ui): D.2b-B — UiMeter vertical fill (burden bar, retail m_eDirection 2/4) 2026-06-21 08:58:37 +02:00
UiNineSlicePanelTests.cs feat(D.2b): UiNineSlicePanel — 8-piece retail window frame + geometry test 2026-06-14 16:36:11 +02:00
UiRadarTests.cs feat(ui): port retail radar and compass 2026-07-10 16:14:37 +02:00
UiRectOutlinePainterOrderTests.cs fix(ui): retained-UI rect outlines composite in painter order, not above every window 2026-09-06 16:24:34 +02:00
UiRenderContextAlphaTests.cs test: make prerequisite lanes fail honestly 2026-08-18 12:09:41 +02:00
UiRenderContextDrawStringDatOutlineTests.cs feat(chat): retail text style — two-plane glyph outlines, authored SpewBox/chat styles 2026-08-10 19:28:34 +02:00
UiRootFixedCanvasTests.cs fix(ui,runtime): Campaign LA gate-round-2 batch-review fixes F1,F3-F8; file #401 2026-08-15 12:28:06 +02:00
UiRootInputTests.cs fix(client): restore retail interaction parity 2026-08-26 20:45:11 +02:00
UiScrollablePanelTests.cs fix #371: straddling rows clip at the viewport edge instead of vanishing whole 2026-08-11 17:08:21 +02:00
UiScrollableTests.cs feat(ui): unify retained window mounts 2026-07-10 22:22:25 +02:00
UiScrollbarTests.cs fix(ui): disabled scrollbars keep retail hover hot-tracking 2026-08-24 19:54:28 +02:00
UiTemplateListBoxFlushPreservingScrollTests.cs feat(ui): FA4 -- fellowship page fully live 2026-08-12 04:40:53 +02:00
UiTemplateListBoxViewportTests.cs feat(render): implement Campaign AR and terrain fidelity 2026-08-22 13:13:29 +02:00
UiTextDatFontTests.cs feat(D.2b): UiText (Type 12) -- generic text + Type-12 flip; transcript factory-built (widget-generalization Task 5) 2026-06-16 17:39:02 +02:00
UiTextTests.cs feat(ui): CT-A1 — multi-line text elements can carry coloured runs 2026-08-21 07:18:55 +02:00