fix #381: Options-panel footer needs an opaque backing field

Root cause: a live-DAT probe found retail authors NO backing element
behind the Character/Chat/Config tabs' Apply/Reset/Defaults footer —
each page root has exactly five children (the row ListBox, its
scrollbar, and the three buttons) with zero direct-state media on the
root itself. Scrolled row content therefore bled through visibly
between/behind the three buttons; the bleed-through is a rendering gap
in our own composition, not a missing import.

Fix: new minimal widget UiSolidSpriteFill tiles
RetailChromeSprites.CenterFill (the SAME panel-background sprite the
Options window's own chrome already draws behind everything, not an
invented color) across the footer strip's rect, derived from the three
buttons' own resolved Top/Height and z-ordered strictly behind every
other child so it can never intercept input or occlude the buttons.
Register row AP-205 records the synthesis. Regressed by
OptionsPanelControllerTests.
Bind_SynthesizesOneOpaqueFooterBacking_PerPageWithApplyResetDefaults,
which pins exactly one backing field per page, sized from the live
button rects, z-ordered behind every sibling.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-08-11 23:01:43 +02:00
parent 2a248c0d48
commit a31fd631ad
7 changed files with 234 additions and 17 deletions

View file

@ -205,7 +205,12 @@ TrySetOption` seam every other Options-panel consumer already uses.
FAILURE shape, not a crash, but still worth flagging which row).
2. **Scroll the list** via the scrollbar. All 50+6 rows are reachable;
the list does not clip or overlap the Apply/Reset/Defaults buttons at
the bottom.
the bottom. **Gate-4 re-test note (#381):** the footer strip behind the
three buttons previously had NO backing — scrolled row text/content was
visible bleeding through between and behind Apply/Reset/Defaults. The
footer now has an opaque backing field; report if any content is still
visible through or around the three buttons (this applies identically
on the Chat and Config tabs' own footer strips, OP5/OP6 below).
3. **Confirm the checkboxes reflect your character's actual state**
e.g. if you have `IgnoreAllegianceRequests` on from a prior session,
its row should show checked on open (seeded from the live server bit
@ -411,7 +416,9 @@ chat windows already read when deciding which lines to show.
cleanly at the panel's bottom edge — scrolling reveals the rest
smoothly. A block that disappears ENTIRELY while its header stays (the
pre-fix void your gate-3 screenshot review caught) is a regression —
report it.
report it. **Gate-4 re-test note (#381):** see the Character-tab (OP4)
step 2 note — the SAME opaque-footer-backing fix applies to this tab's
own Apply/Reset/Defaults strip.
3. **Look closely at a row whose mask covers MULTIPLE underlying message
types** (Gameplay, Combat, Allegiance, or Fellowship — the composite-mask
rows per the research doc) versus a single-bit row (e.g. "Error" or
@ -590,7 +597,8 @@ should show no caption.
invented English when a string fails to resolve).
2. **Scroll the list** via the scrollbar. All 27 rows are reachable; the
list does not clip or overlap the Apply/Reset/Defaults buttons at the
bottom.
bottom. **Gate-4 re-test note (#381):** see the Character-tab (OP4)
step 2 note above — the SAME opaque-footer-backing fix applies here.
### Live rows — audio