diff --git a/src/AcDream.App/UI/Layout/CharacterStatController.cs b/src/AcDream.App/UI/Layout/CharacterStatController.cs index ad3e0538..fd8cc029 100644 --- a/src/AcDream.App/UI/Layout/CharacterStatController.cs +++ b/src/AcDream.App/UI/Layout/CharacterStatController.cs @@ -138,7 +138,6 @@ public static class CharacterStatController /// Row highlight color — semi-translucent gold, matches retail /// UIStateId.Highlight (0x06) sprite 0x06001397 visual intent. private static readonly Vector4 HighlightBg = new(1f, 0.75f, 0.2f, 0.25f); - private static readonly Vector4 SkillRowBackground = new(0f, 0f, 0f, 1f); private static readonly Vector4 BuffedSkillGreen = new(0.55f, 1f, 0.55f, 1f); // ── Row layout constants ───────────────────────────────────────────────── @@ -608,9 +607,7 @@ public static class CharacterStatController nameText: skill.Name, valueProvider: () => skill.CurrentLevel.ToString(), valueColorProvider: () => SkillValueColor(skill), - nameColor: Vector4.One, - backgroundColor: SkillRowBackground, - useSelectionBars: false); + nameColor: Vector4.One); row.OnClick = () => HandleSkillRowClick(rowIndex, sel, bindings, spriteResolve, data, allRaise1, allRaise10); bindings.Add(new SkillRowBinding(row, skill)); entries.Add(row); @@ -784,7 +781,7 @@ public static class CharacterStatController { if (spriteResolve is not null) { - row.BackgroundColor = SkillRowBackground; + row.BackgroundColor = Vector4.Zero; row.BackgroundSprite = RowHighlightSprite; row.SpriteResolve = id => { var (h, w, ht) = spriteResolve(id); return (h, w, ht); }; row.UseSelectionBars = true; @@ -799,10 +796,10 @@ public static class CharacterStatController } else { - row.BackgroundColor = SkillRowBackground; + row.BackgroundColor = Vector4.Zero; row.BackgroundSprite = 0u; row.SpriteResolve = null; - row.UseSelectionBars = false; + row.UseSelectionBars = true; } } @@ -933,7 +930,6 @@ public static class CharacterStatController Func valueProvider, Func? valueColorProvider = null, Vector4? nameColor = null, - Vector4? backgroundColor = null, uint backgroundSprite = 0u, bool useSelectionBars = true) { @@ -943,7 +939,7 @@ public static class CharacterStatController Top = top, Width = width, Height = height, - BackgroundColor = backgroundColor ?? Vector4.Zero, + BackgroundColor = Vector4.Zero, // transparent until selected BackgroundSprite = spriteResolve is not null ? backgroundSprite : 0u, SpriteResolve = spriteResolve is not null && backgroundSprite != 0u ? id => { var (h, w, ht) = spriteResolve(id); return (h, w, ht); } diff --git a/src/AcDream.App/UI/UiPanel.cs b/src/AcDream.App/UI/UiPanel.cs index b16a5466..de31ecda 100644 --- a/src/AcDream.App/UI/UiPanel.cs +++ b/src/AcDream.App/UI/UiPanel.cs @@ -175,9 +175,6 @@ public class UiClickablePanel : UiPanel { if (UseSelectionBars && BackgroundSprite != 0 && SpriteResolve is { } sr) { - if (BackgroundColor.W > 0f) - ctx.DrawRect(0, 0, Width, Height, BackgroundColor); - // Draw the selection highlight as a thin bar at the TOP and BOTTOM of the row. // The sprite (0x06001397) is 300×32 px — we draw it as horizontal strips at // native height (SelectionBarHeight), stretched to full panel width (UV tile diff --git a/tests/AcDream.App.Tests/UI/Layout/CharacterStatControllerTests.cs b/tests/AcDream.App.Tests/UI/Layout/CharacterStatControllerTests.cs index f58c7c49..309abb56 100644 --- a/tests/AcDream.App.Tests/UI/Layout/CharacterStatControllerTests.cs +++ b/tests/AcDream.App.Tests/UI/Layout/CharacterStatControllerTests.cs @@ -658,8 +658,9 @@ public class CharacterStatControllerTests Assert.Equal(12, rows.Count); Assert.All(rows, row => { - Assert.Equal(new Vector4(0f, 0f, 0f, 1f), row.BackgroundColor); + Assert.Equal(Vector4.Zero, row.BackgroundColor); Assert.Equal(0u, row.BackgroundSprite); + Assert.True(row.UseSelectionBars); }); var rowNames = rows .Select(r => r.Children.OfType().ToList()[1].LinesProvider()[0].Text) @@ -760,13 +761,20 @@ public class CharacterStatControllerTests spriteResolve: id => (id, 16, 16)); ClickTab(layout, left: 92f); - list.Children.OfType().ToList()[1].OnClick!(); + var rows = list.Children.OfType().ToList(); + rows[1].OnClick!(); Assert.Equal("War Magic: 285", title.LinesProvider()[0].Text); Assert.Equal("Experience To Raise:", l1Label.LinesProvider()[0].Text); Assert.Equal((11_100_000L).ToString("N0"), l1Value.LinesProvider()[0].Text); Assert.Equal("Unassigned Experience:", l2Label.LinesProvider()[0].Text); Assert.Equal((87_757_321_741L).ToString("N0"), l2Value.LinesProvider()[0].Text); + Assert.Equal(0x06001397u, rows[1].BackgroundSprite); + Assert.True(rows[1].UseSelectionBars); + Assert.Equal(Vector4.Zero, rows[1].BackgroundColor); + Assert.Equal(0u, rows[0].BackgroundSprite); + Assert.True(rows[0].UseSelectionBars); + Assert.Equal(Vector4.Zero, rows[0].BackgroundColor); } [Fact]