Add button click and checkbox toggle handlers for UI controls

This commit is contained in:
Stone_Red
2026-06-13 15:06:29 +02:00
parent 0bc9ca6cf2
commit decd79e6d3
5 changed files with 36 additions and 14 deletions
+16 -5
View File
@@ -1,5 +1,6 @@
using RemSox.Processing;
using RemSox.UI.GUI.Rendering;
using RemSox.UI.GUI.UIEelements.Controls;
using RemSox.UI.GUI.Windows;
namespace RemSox.Processes;
@@ -21,8 +22,9 @@ internal class DesktopProcess() : Process("Desktop Manager")
// Create a test window for new UI controls
Window testWindow = WindowManager.CreateWindow(this, "UI Controls Test", new System.Drawing.Size(200, 180));
testWindow.AutoFlush = true;
_ = testWindow.CreateUIElement<UI.GUI.UIEelements.Controls.Button>(b =>
Button button = testWindow.CreateUIElement<UI.GUI.UIEelements.Controls.Button>(b =>
{
b.Position = new System.Drawing.Point(20, 30);
b.Size = new System.Drawing.Size(100, 30);
@@ -30,22 +32,31 @@ internal class DesktopProcess() : Process("Desktop Manager")
b.BackgroundColor = System.Drawing.Color.LightBlue;
});
_ = testWindow.CreateUIElement<UI.GUI.UIEelements.Controls.CheckBox>(c =>
button.OnClick += (s, e) =>
{
button.Text = "Clicked!";
button.BackgroundColor = System.Drawing.Color.LightGreen;
};
CheckBox check = testWindow.CreateUIElement<UI.GUI.UIEelements.Controls.CheckBox>(c =>
{
c.Position = new System.Drawing.Point(20, 80);
c.Size = new System.Drawing.Size(100, 30);
c.Text = "Check Me";
c.IsChecked = true;
});
check.OnCheckedChanged += (s, e) =>
{
check.Text = check.IsChecked ? "Checked!" : "Unchecked!";
};
_ = testWindow.CreateUIElement<UI.GUI.UIEelements.Shapes.Line>(l =>
{
l.Position = new System.Drawing.Point(20, 130);
l.EndPosition = new System.Drawing.Point(180, 130);
l.Color = System.Drawing.Color.Red;
});
testWindow.AutoFlush = true;
testWindow.Flush();
}
internal override void Tick()
+5 -2
View File
@@ -18,8 +18,11 @@ public class Button() : Control("Button")
set => SetProperty(nameof(TextColor), ref field, value);
} = Color.Black;
public void Click()
public override void HandleMouseEvent(MouseEvent mouseEvent)
{
OnClick?.Invoke(this, EventArgs.Empty);
if (mouseEvent.Type == MouseEventType.ButtonDown && mouseEvent.Button == MouseButton.Left)
{
OnClick?.Invoke(this, EventArgs.Empty);
}
}
}
+8
View File
@@ -27,4 +27,12 @@ public class CheckBox() : Control("CheckBox")
get;
set => SetProperty(nameof(TextColor), ref field, value);
} = Color.White;
public override void HandleMouseEvent(MouseEvent mouseEvent)
{
if (mouseEvent.Type == MouseEventType.ButtonDown && mouseEvent.Button == MouseButton.Left)
{
IsChecked = !IsChecked;
}
}
}
+2 -2
View File
@@ -107,9 +107,9 @@ public sealed class Window(string title, int processId, int id, IRenderSource re
uiElements.Add(uiElementId, uiElement);
}
lock (controlsLock)
if (uiElement is Control control)
{
if (uiElement is Control control)
lock (controlsLock)
{
controls.Add(uiElementId, control);
}
+5 -5
View File
@@ -57,20 +57,20 @@ public static class WindowManager
activeInteractWindow = null;
}
wasLeftButtonDown = leftButtonDown;
wasRightButtonDown = rightButtonDown;
wasMiddleButtonDown = middleButtonDown;
while (KeyboardManager.TryReadKey(out KeyEvent? keyEvent) && keyEvent is not null)
{
focusedWindow?.HandleKeyEvent(keyEvent);
}
if (focusedWindow is not null && activeInteractWindow is null)
if (focusedWindow is not null)
{
DispatchMouseEvents(focusedWindow, pointerPosition);
}
wasLeftButtonDown = leftButtonDown;
wasRightButtonDown = rightButtonDown;
wasMiddleButtonDown = middleButtonDown;
CanvasRenderSource.CompositeAndDisplay(canvas, pointerPosition);
lastPointerPosition = pointerPosition;