acdream/src/AcDream.UI.Abstractions
Erik cc58289967 fix(chat): CH6c review fixes — opaque default, opacity-transition register clauses
BLOCKER: ChatSettings.DefaultOpacity shipped retail's base ChatInterface
value (0.5) as ONE shared global default applied to every
RetailWindowManager-registered window, not just the four floating chat
windows retail itself fades. That faded the whole out-of-box registered
UI (radar, vitals, toolbar, main chat, ...) to 50% opacity, including
several windows that can never take keyboard focus and so were stuck at
0.5 permanently. Fixed to gmMainChatUI's 1.0/1.0 override
(0x004CD0F0) instead — retail-identical opaque presentation for the 11
non-chat windows and the main chat window; only the four floating chat
windows now diverge from retail's 0.5-while-idle default, and the
Settings -> Chat transparency slider remains fully user-settable.

AP-190 reworded and gains two new decomp-verified clauses: (3) retail
eases opacity toward its target by 5% of the delta per tick
(ChatInterface::ListenToGlobalMessage @0x004F3840, armed from the focus
element-messages at @0x004F5275) where acdream snaps -- deferred, needs
a UI frame-tick hook the opacity controller doesn't have; (4) retail's
focus predicate is the chat ENTRY FIELD specifically
(ChatInterface::IsTextEntryFocused @0x004F30A0) where acdream uses
any-focusable-descendant. Both findings + the pre-existing UiMenu.cs
PushAlphaAbsolute(1f) popup bypass are folded into the window-shell
research doc's opacity section.

NITs: fixed the stale "text bypasses the alpha" comment in
UiElement.DrawSelfAndChildren (CH6c already routed DrawStringDat/
DrawString through the same ApplyAlpha chokepoint as sprites/rects);
added RetailWindowManager.WindowUnregistered + wired
RetailWindowOpacityController to detach and forget a window unregistered
while it held focus (previously only Dispose detached, leaking any
window unregistered mid-focus for the rest of the session); added
post-Dispose no-op guards to the three Set* opacity mutators; added a
DrawString (BitmapFont path) alpha regression test and a DrawStringDat
outline/background-pass alpha test (the existing tests only ever
exercised the foreground/fill pass).

Also fixes RuntimeSettingsControllerTests.SettingsViewModelSavePreserves
SectionAndTargetOrder's now-stale "target-chat-opacity:0.5:1" expectation
(caught by the full-suite run this fix requires) to match the new 1.0
default.

Campaign ledger CH6c row updated to APPROVE-WITH-FIXES.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 14:48:39 +02:00
..
Input feat(audio): Ctrl+M instant mute + inn-chatter investigation closed as server content 2026-08-09 14:09:24 +02:00
Panels fix(chat): CH6c review fixes — opaque default, opacity-transition register clauses 2026-08-10 14:48:39 +02:00
Settings feat(A.5 T22.5): QualityPreset schema + tests (commit 1/2) 2026-05-10 08:37:17 +02:00
AcDream.UI.Abstractions.csproj feat(input): #21 Phase K.1a - input architecture skeleton (parallel to existing handlers) 2026-04-25 23:17:41 +02:00
ChannelResolver.cs feat(chat): Campaign CH slice CH3 — side-channel membership, wire, and echo parity 2026-08-09 19:39:44 +02:00
ChatChannelKind.cs feat(chat): Campaign CH slice CH3 — side-channel membership, wire, and echo parity 2026-08-09 19:39:44 +02:00
ClientCommandId.cs fix(chat): CH4 review fixes — allegiance ownership guard, house-abandon confirmation 2026-08-09 21:59:35 +02:00
ExecuteClientCommandCmd.cs feat(chat): route retail lifestone commands 2026-07-13 11:43:19 +02:00
ICommandBus.cs feat(ui): AcDream.UI.Abstractions layer — IPanel / IPanelRenderer / VitalsVM 2026-04-25 00:24:11 +02:00
IPanel.cs feat(ui): AcDream.UI.Abstractions layer — IPanel / IPanelRenderer / VitalsVM 2026-04-25 00:24:11 +02:00
IPanelHost.cs feat(ui): AcDream.UI.Abstractions layer — IPanel / IPanelRenderer / VitalsVM 2026-04-25 00:24:11 +02:00
IPanelRenderer.cs feat(ui): chat Copy mode — select + Ctrl+C any text in the chat tail 2026-04-26 21:45:39 +02:00
LiveCommandBus.cs refactor(net): own live session routing 2026-07-21 11:17:09 +02:00
NullCommandBus.cs feat(ui): AcDream.UI.Abstractions layer — IPanel / IPanelRenderer / VitalsVM 2026-04-25 00:24:11 +02:00
PanelContext.cs feat(ui): AcDream.UI.Abstractions layer — IPanel / IPanelRenderer / VitalsVM 2026-04-25 00:24:11 +02:00
SendChatCmd.cs feat(ui+net): #16 LiveCommandBus + WorldSession.Send{Talk,Tell,Channel} + SendChatCmd wiring 2026-04-25 19:27:22 +02:00
SendRawChannelCmd.cs feat(chat): Campaign CH slice CH4 — command registry completion 2026-08-09 21:10:17 +02:00
SendServerCommandCmd.cs feat(chat): route retail lifestone commands 2026-07-13 11:43:19 +02:00