feat(D.2b): per-window resize-axis lock; vitals window is X-only (retail)
Add ResizeX/ResizeY bool properties to UiElement (both true by default). HitEdges() in UiRoot masks out locked axes after edge detection, so a locked edge falls through to window-move behaviour — matching retail, where the vitals bar height is fixed and only widens. MarkupDocument.Build() parses an optional resize="x|y|both|none" attribute on <panel>; vitals.xml gets resize="x" to enforce the horizontal-only constraint in all instances of the panel. Two new tests: HitEdges_RespectsResizeAxisLock (UiRootInputTests) and Build_ResizeAttrX_SetsHorizontalOnly (MarkupDocumentTests). 11/11 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
0500646f08
commit
af91b8432a
6 changed files with 35 additions and 1 deletions
|
|
@ -47,4 +47,13 @@ public class MarkupDocumentTests
|
|||
Assert.Null(meter.Fill());
|
||||
Assert.Null(meter.Label());
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void Build_ResizeAttrX_SetsHorizontalOnly()
|
||||
{
|
||||
const string xml = "<panel id=\"v\" x=\"0\" y=\"0\" w=\"100\" h=\"50\" title=\"V\" resize=\"x\"></panel>";
|
||||
var panel = MarkupDocument.Build(xml, new object(), _ => ((uint)1, 32, 32));
|
||||
Assert.True(panel.ResizeX);
|
||||
Assert.False(panel.ResizeY);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -102,4 +102,14 @@ public class UiRootInputTests
|
|||
Assert.Equal(120f, panel.Top);
|
||||
root.OnMouseUp(UiMouseButton.Left, 220, 170);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void HitEdges_RespectsResizeAxisLock()
|
||||
{
|
||||
var panel = new UiPanel { Left = 100, Top = 100, Width = 200, Height = 100, ResizeY = false };
|
||||
// right edge still detected (X allowed)
|
||||
Assert.True((UiRoot.HitEdges(panel, 300, 150, 5) & ResizeEdges.Right) != 0);
|
||||
// bottom edge masked out (Y locked)
|
||||
Assert.True((UiRoot.HitEdges(panel, 200, 200, 5) & ResizeEdges.Bottom) == 0);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue