fix(ui): match retail spell bar controls
Place favorite-bar arrows by their authored sides, import rollover and pressed media through the shared scrollbar, and preserve manual offsets across passive refreshes. Carry the mixed-parent DAT anchor chain to a fixed 18-cell favorite viewport so overflow controls and the Cast button remain inside the retail-sized combat frame. Co-authored-by: Codex <codex@openai.com>
This commit is contained in:
parent
02c29e67c8
commit
0134122c28
17 changed files with 424 additions and 59 deletions
|
|
@ -764,11 +764,12 @@ public sealed class RetailUiRuntime : IDisposable
|
|||
strings.Resolve);
|
||||
labels = info is null ? null : CombatUiLabels.Resolve(info, strings);
|
||||
}
|
||||
if (layout is null || labels is null)
|
||||
if (info is null || layout is null || labels is null)
|
||||
{
|
||||
Console.WriteLine("[M2] combat: LayoutDesc 0x21000073 not found.");
|
||||
return;
|
||||
}
|
||||
float combatWidth = RetailCombatLayout.FitFavoriteSlots(layout);
|
||||
|
||||
CombatUiController? controller = Layout.CombatUiController.Bind(
|
||||
layout,
|
||||
|
|
@ -821,9 +822,13 @@ public sealed class RetailUiRuntime : IDisposable
|
|||
{
|
||||
WindowName = WindowNames.Combat,
|
||||
Chrome = RetailWindowChrome.Imported,
|
||||
Left = Math.Max(0f, (Host.Root.Width - root.Width) * 0.5f),
|
||||
Left = 0f,
|
||||
Top = Math.Max(0f, Host.Root.Height - root.Height - 10f),
|
||||
ContentWidth = combatWidth,
|
||||
DatConstraintSource = info,
|
||||
OuterAnchors = AnchorEdges.Left | AnchorEdges.Bottom,
|
||||
Visible = false,
|
||||
Draggable = false,
|
||||
Resizable = false,
|
||||
ResizeX = false,
|
||||
ResizeY = false,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue