fix(ui): port retail window control feedback
Map synthetic move and resize affordances to the exact DAT cursors, make chat top chrome movable, and replace stale primary-panel height caps with a dynamic screen-edge constraint. This keeps the retained wrapper adaptation aligned with retail Dragbar/Resizebar behavior.
This commit is contained in:
parent
3f3cfdac30
commit
06016014bc
16 changed files with 578 additions and 27 deletions
|
|
@ -44,6 +44,81 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #223 — Primary panel resize stopped before the screen edge
|
||||
|
||||
**Status:** DONE — 2026-07-17 (connected visual gate accepted)
|
||||
**Severity:** MEDIUM
|
||||
**Filed:** 2026-07-17
|
||||
**Component:** retained UI / shared main panel / resize constraints
|
||||
|
||||
**Description:** The Inventory, Character/Skills, and Spellbook/Components
|
||||
panel could not be extended vertically to the bottom of the screen. Magic was
|
||||
not resizable at all, Character carried a fixed 760-pixel maximum, and
|
||||
Inventory calculated one maximum from its startup position that became stale
|
||||
after the shared panel moved.
|
||||
|
||||
**Root cause / status:** Retail LayoutDesc `0x2100006E` owns one 310x372
|
||||
`gmPanelUI` host. Its primary children are all authored into the same 300x362
|
||||
content region with bottom anchoring, while the host exposes a bottom Type-9
|
||||
vertical Resizebar. acdream imports those children as separate wrappers, so
|
||||
their mount policies must preserve that one host contract. All three primary
|
||||
wrappers now expose bottom-only vertical resizing and have no ad-hoc maximum.
|
||||
The shared mount seam carries a dynamic parent-extent constraint, so pointer
|
||||
and restored/programmatic sizes use the panel's current position and stop at
|
||||
the current screen edge.
|
||||
|
||||
**Files:** `src/AcDream.App/UI/RetailUiRuntime.cs`;
|
||||
`src/AcDream.App/UI/Layout/RetailWindowFrame.cs`;
|
||||
`src/AcDream.App/UI/UiElement.cs`; `src/AcDream.App/UI/UiRoot.cs`;
|
||||
`src/AcDream.App/UI/RetailWindowManager.cs`.
|
||||
|
||||
**Research:**
|
||||
`docs/research/2026-07-17-retail-shared-main-panel-pseudocode.md`.
|
||||
|
||||
**Acceptance:** Move the shared primary panel to more than one vertical
|
||||
position. In Inventory, Character/Skills, and Spellbook/Components, drag the
|
||||
bottom resize edge to the bottom of the client. Every panel must reach that
|
||||
edge without crossing it, and its anchored content must use the added height.
|
||||
|
||||
---
|
||||
|
||||
## #222 — Window move and resize cursors were missing
|
||||
|
||||
**Status:** DONE — 2026-07-17 (connected visual gate accepted)
|
||||
**Severity:** MEDIUM
|
||||
**Filed:** 2026-07-17
|
||||
**Component:** retained UI / cursor feedback / window controls
|
||||
|
||||
**Description:** Hovering or operating the retained-window move and resize
|
||||
regions left the ordinary retail pointer visible. Retail shows a four-way move
|
||||
cursor and direction-specific horizontal, vertical, and diagonal resize
|
||||
cursors.
|
||||
|
||||
**Root cause / status:** `UiRoot` and `CursorFeedbackController` already
|
||||
identified the exact active/hovered window-control intent, but
|
||||
`RetailCursorManager` consumes cursor media rather than the semantic kind. No
|
||||
media was attached to the semantic result for synthetic wrapper edges or the
|
||||
IA-12 whole-window drag region. `RetailCursorCatalog` now maps those five
|
||||
intents to the exact direct DAT cursor surfaces and `(16,16)` hotspots authored
|
||||
on retail Type-2 Dragbar and Type-9 Resizebar controls. Authored widget media
|
||||
keeps retail captured/hovered precedence; an active synthetic control holds its
|
||||
cursor until release.
|
||||
|
||||
**Files:** `src/AcDream.App/UI/CursorFeedbackController.cs`;
|
||||
`src/AcDream.App/UI/RetailCursorCatalog.cs`;
|
||||
`tests/AcDream.App.Tests/UI/CursorFeedbackControllerTests.cs`;
|
||||
`tests/AcDream.App.Tests/UI/RetailCursorCatalogTests.cs`.
|
||||
|
||||
**Research:**
|
||||
`docs/research/2026-07-17-retail-window-control-cursor-pseudocode.md`.
|
||||
|
||||
**Acceptance:** Hover every enabled window edge/corner and an empty move
|
||||
region; the correct retail cursor must appear before pressing and remain stable
|
||||
while dragging outside the original control. Locked or non-resizable windows
|
||||
must not advertise unavailable operations.
|
||||
|
||||
---
|
||||
|
||||
## #221 — Primary UI panels retained independent window positions
|
||||
|
||||
**Status:** DONE — 2026-07-17
|
||||
|
|
@ -77,12 +152,6 @@ placement and restore-previous behavior.
|
|||
Inventory, Character/Skills, and Spellbook/Components retain one position
|
||||
across switching, dragging, closing, and reopening.
|
||||
|
||||
**Acceptance:** Open Inventory, move it, then switch directly and after closing
|
||||
to Character/Skills and Spellbook/Components. Every replacement must open at
|
||||
the most recently moved main-panel position. Move another panel and repeat in
|
||||
the opposite direction. Helpful/Harmful effects must not overwrite that
|
||||
position.
|
||||
|
||||
---
|
||||
|
||||
## #220 — Local player glides before locomotion animation starts
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue