feat(D.2b): anchor layout — vital bars stretch with window; drop Vitals heading
Add AnchorEdges [Flags] enum and Anchors property (default Left|Top, so all existing elements are unchanged) to UiElement. ApplyAnchor() captures the design-time margins on first call then recomputes Left/Top/Width/Height each frame; DrawSelfAndChildren drives it for every child before painting. ComputeAnchoredRect is public + static so it can be unit-tested without a running frame loop. MarkupDocument.Build gains a private Anchor() CSV parser and threads it into the <meter> initializer via the anchor= attribute. vitals.xml: remove title="Vitals" (retail vitals has no heading) and add anchor="left,top,right" to all three meter bars so they stretch when the panel is dragged wider. Two new xUnit tests in UiRootInputTests: Left+Right stretches width; Left+Top only keeps fixed size. All 19 App.Tests green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
af91b8432a
commit
f911b5f0af
4 changed files with 102 additions and 4 deletions
|
|
@ -112,4 +112,25 @@ public class UiRootInputTests
|
|||
// bottom edge masked out (Y locked)
|
||||
Assert.True((UiRoot.HitEdges(panel, 200, 200, 5) & ResizeEdges.Bottom) == 0);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComputeAnchoredRect_LeftRight_StretchesWidth()
|
||||
{
|
||||
// bar at x=8,w=200 in a 220-wide parent (right margin 12). Parent grows to 300.
|
||||
var (x, _, w, _) = UiElement.ComputeAnchoredRect(
|
||||
AnchorEdges.Left | AnchorEdges.Right | AnchorEdges.Top,
|
||||
mL: 8, mT: 24, mR: 12, mB: 58, w0: 200, h0: 14, parentW: 300, parentH: 96);
|
||||
Assert.Equal(8f, x);
|
||||
Assert.Equal(280f, w); // 300 - 12 - 8
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void ComputeAnchoredRect_LeftTopOnly_KeepsFixedSizeAndOrigin()
|
||||
{
|
||||
var (x, y, w, h) = UiElement.ComputeAnchoredRect(
|
||||
AnchorEdges.Left | AnchorEdges.Top,
|
||||
mL: 8, mT: 24, mR: 12, mB: 58, w0: 200, h0: 14, parentW: 300, parentH: 96);
|
||||
Assert.Equal(8f, x); Assert.Equal(24f, y);
|
||||
Assert.Equal(200f, w); Assert.Equal(14f, h);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue