diff --git a/Ooui/Element.cs b/Ooui/Element.cs index 0813387..253f57d 100644 --- a/Ooui/Element.cs +++ b/Ooui/Element.cs @@ -25,67 +25,67 @@ namespace Ooui set => SetProperty (ref hidden, value, "hidden"); } - public event EventHandler Clicked { + public event TargetEventHandler Clicked { add => AddEventListener ("click", value); remove => RemoveEventListener ("click", value); } - public event EventHandler DoubleClicked { + public event TargetEventHandler DoubleClicked { add => AddEventListener ("dblclick", value); remove => RemoveEventListener ("dblclick", value); } - public event EventHandler KeyDown { + public event TargetEventHandler KeyDown { add => AddEventListener ("keydown", value); remove => RemoveEventListener ("keydown", value); } - public event EventHandler KeyPressed { + public event TargetEventHandler KeyPressed { add => AddEventListener ("keypress", value); remove => RemoveEventListener ("keypress", value); } - public event EventHandler KeyUp { + public event TargetEventHandler KeyUp { add => AddEventListener ("keyup", value); remove => RemoveEventListener ("keyup", value); } - public event EventHandler MouseDown { + public event TargetEventHandler MouseDown { add => AddEventListener ("mousedown", value); remove => RemoveEventListener ("mousedown", value); } - public event EventHandler MouseEntered { + public event TargetEventHandler MouseEntered { add => AddEventListener ("mouseenter", value); remove => RemoveEventListener ("mouseenter", value); } - public event EventHandler MouseLeft { + public event TargetEventHandler MouseLeft { add => AddEventListener ("mouseleave", value); remove => RemoveEventListener ("mouseleave", value); } - public event EventHandler MouseMoved { + public event TargetEventHandler MouseMoved { add => AddEventListener ("mousemove", value); remove => RemoveEventListener ("mousemove", value); } - public event EventHandler MouseOut { + public event TargetEventHandler MouseOut { add => AddEventListener ("mouseout", value); remove => RemoveEventListener ("mouseout", value); } - public event EventHandler MouseOver { + public event TargetEventHandler MouseOver { add => AddEventListener ("mouseover", value); remove => RemoveEventListener ("mouseover", value); } - public event EventHandler MouseUp { + public event TargetEventHandler MouseUp { add => AddEventListener ("mouseup", value); remove => RemoveEventListener ("mouseup", value); } - public event EventHandler Wheeled { + public event TargetEventHandler Wheeled { add => AddEventListener ("wheel", value); remove => RemoveEventListener ("wheel", value); } diff --git a/Ooui/EventTarget.cs b/Ooui/EventTarget.cs index 27db0e4..2f66139 100644 --- a/Ooui/EventTarget.cs +++ b/Ooui/EventTarget.cs @@ -9,8 +9,8 @@ namespace Ooui { readonly List stateMessages = new List (); - readonly Dictionary> eventListeners = - new Dictionary> (); + readonly Dictionary> eventListeners = + new Dictionary> (); public string Id { get; private set; } = GenerateId (); @@ -45,17 +45,17 @@ namespace Ooui return null; } - public void AddEventListener (string eventType, EventHandler handler) + public void AddEventListener (string eventType, TargetEventHandler handler) { if (eventType == null) return; if (handler == null) return; var sendListen = false; - List handlers; + List handlers; lock (eventListeners) { if (!eventListeners.TryGetValue (eventType, out handlers)) { - handlers = new List (); + handlers = new List (); eventListeners[eventType] = handlers; sendListen = true; } @@ -70,12 +70,12 @@ namespace Ooui }); } - public void RemoveEventListener (string eventType, EventHandler handler) + public void RemoveEventListener (string eventType, TargetEventHandler handler) { if (eventType == null) return; if (handler == null) return; - List handlers; + List handlers; lock (eventListeners) { if (eventListeners.TryGetValue (eventType, out handlers)) { handlers.Remove (handler); @@ -176,15 +176,19 @@ namespace Ooui if (message.TargetId != Id) return false; - List handlers = null; + List handlers = null; lock (eventListeners) { - List hs; + List hs; if (eventListeners.TryGetValue (message.Key, out hs)) { - handlers = new List (hs); + handlers = new List (hs); } } if (handlers != null) { - var args = EventArgs.Empty; + var args = new TargetEventArgs (); + if (message.Value is Newtonsoft.Json.Linq.JObject o) { + args.OffsetX = (double)o["offsetX"]; + args.OffsetY = (double)o["offsetY"]; + } foreach (var h in handlers) { h.Invoke (this, args); } @@ -212,4 +216,12 @@ namespace Ooui return typeof (EventTarget).IsAssignableFrom (objectType); } } + + public delegate void TargetEventHandler (object sender, TargetEventArgs e); + + public class TargetEventArgs : EventArgs + { + public double OffsetX { get; set; } + public double OffsetY { get; set; } + } } diff --git a/Ooui/Form.cs b/Ooui/Form.cs index dc1eee6..557a72b 100644 --- a/Ooui/Form.cs +++ b/Ooui/Form.cs @@ -10,12 +10,12 @@ namespace Ooui set => SetProperty (ref action, value ?? "", "action"); } - public event EventHandler Submitted { + public event TargetEventHandler Submitted { add => AddEventListener ("submit", value); remove => RemoveEventListener ("submit", value); } - public event EventHandler Reset { + public event TargetEventHandler Reset { add => AddEventListener ("reset", value); remove => RemoveEventListener ("reset", value); } diff --git a/Ooui/Input.cs b/Ooui/Input.cs index 3c592cc..e24abe9 100644 --- a/Ooui/Input.cs +++ b/Ooui/Input.cs @@ -30,12 +30,12 @@ namespace Ooui } } - public event EventHandler Changed { + public event TargetEventHandler Changed { add => AddEventListener ("change", value); remove => RemoveEventListener ("change", value); } - public event EventHandler Inputted { + public event TargetEventHandler Inputted { add => AddEventListener ("input", value); remove => RemoveEventListener ("input", value); } diff --git a/Ooui/Select.cs b/Ooui/Select.cs index 1cc4318..7f53175 100644 --- a/Ooui/Select.cs +++ b/Ooui/Select.cs @@ -10,7 +10,7 @@ namespace Ooui set => SetProperty (ref val, value ?? "", "value"); } - public event EventHandler Changed { + public event TargetEventHandler Changed { add => AddEventListener ("change", value); remove => RemoveEventListener ("change", value); } diff --git a/Ooui/TextArea.cs b/Ooui/TextArea.cs index b9a60f5..94ca6fe 100644 --- a/Ooui/TextArea.cs +++ b/Ooui/TextArea.cs @@ -4,12 +4,12 @@ namespace Ooui { public class TextArea : FormControl { - public event EventHandler Changed { + public event TargetEventHandler Changed { add => AddEventListener ("change", value); remove => RemoveEventListener ("change", value); } - public event EventHandler Inputted { + public event TargetEventHandler Inputted { add => AddEventListener ("input", value); remove => RemoveEventListener ("input", value); }