Introduces UiButton: a dedicated dat-widget button that ports UIElement_Button (RegisterElementClass(1,...) @ acclient_2013_pseudo_c.txt:125828). State selection, tiled DrawSprite, and label rendering mirror UiDatElement exactly so the chat Send and Max/Min buttons have zero behavioral change. DatWidgetFactory now maps Type 1 → UiButton (beside Type 7 → UiMeter, Type 11 → UiScrollbar). ChatWindowController's Send and Max/Min bind blocks updated from UiDatElement casts to UiButton casts; ClickThrough=false lines dropped (UiButton is interactive by construction). The old UiPanel.cs UiButton (a plain dev-scaffold rect+text button with no dat sprites) is renamed UiSimpleButton to free the name — no production code instantiated it. Full suite: 402 passed, 2 skipped, 0 failed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
25 lines
678 B
C#
25 lines
678 B
C#
using AcDream.App.UI;
|
|
using AcDream.App.UI.Layout;
|
|
namespace AcDream.App.Tests.UI;
|
|
|
|
public class UiButtonTests
|
|
{
|
|
private static (uint, int, int) NoTex(uint _) => (0, 0, 0);
|
|
private bool _clicked;
|
|
|
|
[Fact]
|
|
public void Click_InvokesOnClick()
|
|
{
|
|
var b = new UiButton(new ElementInfo { Type = 1, Width = 46, Height = 18 }, NoTex)
|
|
{ OnClick = () => _clicked = true };
|
|
b.OnEvent(new UiEvent(0, null, UiEventType.Click));
|
|
Assert.True(_clicked);
|
|
}
|
|
|
|
[Fact]
|
|
public void NotClickThrough_SoItReceivesClicks()
|
|
{
|
|
var b = new UiButton(new ElementInfo { Type = 1 }, NoTex);
|
|
Assert.False(b.ClickThrough);
|
|
}
|
|
}
|