From cc20682d47eaeaac1695f313ac26f96110a1757c Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Wed, 28 Aug 2019 16:38:58 +0200 Subject: [PATCH] more easily allow controls to be changed --- MLEM.Ui/Elements/Element.cs | 10 +++------- MLEM.Ui/Elements/ScrollBar.cs | 6 +++--- MLEM.Ui/UiControls.cs | 15 +++++++++++++++ MLEM.Ui/UiSystem.cs | 16 +++------------- 4 files changed, 24 insertions(+), 23 deletions(-) create mode 100644 MLEM.Ui/UiControls.cs diff --git a/MLEM.Ui/Elements/Element.cs b/MLEM.Ui/Elements/Element.cs index ada4aee..1130bc5 100644 --- a/MLEM.Ui/Elements/Element.cs +++ b/MLEM.Ui/Elements/Element.cs @@ -84,9 +84,8 @@ namespace MLEM.Ui.Elements { public GenericCallback OnSelected; public GenericCallback OnDeselected; - public MouseClickCallback OnClicked; - public MouseCallback OnMouseEnter; - public MouseCallback OnMouseExit; + public GenericCallback OnMouseEnter; + public GenericCallback OnMouseExit; public TextInputCallback OnTextInput; public GenericCallback OnAreaUpdated; @@ -100,6 +99,7 @@ namespace MLEM.Ui.Elements { } } protected InputHandler Input => this.System.InputHandler; + protected UiControls Controls => this.System.Controls; public RootElement Root { get; private set; } public float Scale => this.Root.ActualScale; public Point MousePos => this.Input.MousePosition; @@ -445,10 +445,6 @@ namespace MLEM.Ui.Elements { protected virtual void InitStyle(UiStyle style) { } - public delegate void MouseClickCallback(Element element, MouseButton button); - - public delegate void MouseCallback(Element element); - public delegate void TextInputCallback(Element element, Keys key, char character); public delegate void GenericCallback(Element element); diff --git a/MLEM.Ui/Elements/ScrollBar.cs b/MLEM.Ui/Elements/ScrollBar.cs index 0b6f6db..924a6b2 100644 --- a/MLEM.Ui/Elements/ScrollBar.cs +++ b/MLEM.Ui/Elements/ScrollBar.cs @@ -48,9 +48,9 @@ namespace MLEM.Ui.Elements { public override void Update(GameTime time) { base.Update(time); var moused = this.System.MousedElement; - if (moused == this && this.Input.IsMouseButtonPressed(MouseButton.Left)) { + if (moused == this && this.Controls.MainButton(this.Input)) { this.isMouseHeld = true; - } else if (this.isMouseHeld && this.Input.IsMouseButtonUp(MouseButton.Left)) { + } else if (this.isMouseHeld && this.Controls.MainButton(this.Input)) { this.isMouseHeld = false; } @@ -65,7 +65,7 @@ namespace MLEM.Ui.Elements { } if (!this.Horizontal && moused != null && (moused == this.Parent || moused.GetParentTree().Contains(this.Parent))) { - var scroll = this.Input.LastScrollWheel - this.Input.ScrollWheel; + var scroll = this.Controls.Scroll(this.Input); if (scroll != 0) this.CurrentValue += this.StepPerScroll * Math.Sign(scroll); } diff --git a/MLEM.Ui/UiControls.cs b/MLEM.Ui/UiControls.cs new file mode 100644 index 0000000..0f665fa --- /dev/null +++ b/MLEM.Ui/UiControls.cs @@ -0,0 +1,15 @@ +using MLEM.Input; + +namespace MLEM.Ui { + public class UiControls { + + public BoolQuery MainButton = h => h.IsMouseButtonPressed(MouseButton.Left); + public BoolQuery SecondaryButton = h => h.IsMouseButtonPressed(MouseButton.Right); + public FloatQuery Scroll = h => h.LastScrollWheel - h.ScrollWheel; + + public delegate bool BoolQuery(InputHandler handler); + + public delegate float FloatQuery(InputHandler handler); + + } +} \ No newline at end of file diff --git a/MLEM.Ui/UiSystem.cs b/MLEM.Ui/UiSystem.cs index d1b210b..3a2a4ae 100644 --- a/MLEM.Ui/UiSystem.cs +++ b/MLEM.Ui/UiSystem.cs @@ -49,9 +49,7 @@ namespace MLEM.Ui { public float DrawAlpha = 1; public BlendState BlendState; public SamplerState SamplerState = SamplerState.PointClamp; - - public MouseButton MainButton = MouseButton.Left; - public MouseButton SecondaryButton = MouseButton.Right; + public UiControls Controls = new UiControls(); public UiSystem(GameWindow window, GraphicsDevice device, UiStyle style, InputHandler inputHandler = null) { this.GraphicsDevice = device; @@ -86,7 +84,7 @@ namespace MLEM.Ui { this.MousedElement = mousedNow; } - if (this.InputHandler.IsMouseButtonPressed(this.MainButton)) { + if (this.Controls.MainButton(this.InputHandler)) { // select element if (this.SelectedElement != mousedNow) { if (this.SelectedElement != null) @@ -99,20 +97,12 @@ namespace MLEM.Ui { // first action on element if (mousedNow != null) mousedNow.OnPressed?.Invoke(mousedNow); - } else if (this.InputHandler.IsMouseButtonPressed(this.SecondaryButton)) { + } else if (this.Controls.SecondaryButton(this.InputHandler)) { // secondary action on element if (mousedNow != null) mousedNow.OnSecondaryPressed?.Invoke(mousedNow); } - // generic element click - if (mousedNow?.OnClicked != null) { - foreach (var button in InputHandler.MouseButtons) { - if (this.InputHandler.IsMouseButtonPressed(button)) - mousedNow.OnClicked(mousedNow, button); - } - } - foreach (var root in this.rootElements) root.Element.Update(time); }