public void Read_Works() { // Arrange var args = new MouseEventArgs { AltKey = false, Button = 72, Buttons = 61, ClientX = 3.1, ClientY = 4.2, CtrlKey = true, Detail = 7, MetaKey = true, OffsetX = 8.2, OffsetY = 7.1, PageX = 5.6, PageY = 7.8, ScreenX = 0.1, ScreenY = 4.4, MovementX = 0.1, MovementY = 4.4, ShiftKey = false, Type = "type", }; var jsonElement = GetJsonElement(args); // Act var result = MouseEventArgsReader.Read(jsonElement); // Assert AssertEqual(args, result); }
internal static WheelEventArgs Read(JsonElement jsonElement) { var eventArgs = new WheelEventArgs(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(DeltaX.EncodedUtf8Bytes)) { eventArgs.DeltaX = property.Value.GetDouble(); } else if (property.NameEquals(DeltaY.EncodedUtf8Bytes)) { eventArgs.DeltaY = property.Value.GetDouble(); } else if (property.NameEquals(DeltaZ.EncodedUtf8Bytes)) { eventArgs.DeltaZ = property.Value.GetDouble(); } else if (property.NameEquals(DeltaMode.EncodedUtf8Bytes)) { eventArgs.DeltaMode = property.Value.GetInt64(); } else { MouseEventArgsReader.ReadProperty(eventArgs, property); } } return(eventArgs); }
internal static PointerEventArgs Read(JsonElement jsonElement) { var eventArgs = new PointerEventArgs(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(PointerId.EncodedUtf8Bytes)) { eventArgs.PointerId = property.Value.GetInt64(); } else if (property.NameEquals(Width.EncodedUtf8Bytes)) { eventArgs.Width = property.Value.GetSingle(); } else if (property.NameEquals(Height.EncodedUtf8Bytes)) { eventArgs.Height = property.Value.GetSingle(); } else if (property.NameEquals(Pressure.EncodedUtf8Bytes)) { eventArgs.Pressure = property.Value.GetSingle(); } else if (property.NameEquals(TiltX.EncodedUtf8Bytes)) { eventArgs.TiltX = property.Value.GetSingle(); } else if (property.NameEquals(TiltY.EncodedUtf8Bytes)) { eventArgs.TiltY = property.Value.GetSingle(); } else if (property.NameEquals(PointerType.EncodedUtf8Bytes)) { eventArgs.PointerType = property.Value.GetString() !; } else if (property.NameEquals(IsPrimary.EncodedUtf8Bytes)) { eventArgs.IsPrimary = property.Value.GetBoolean(); } else { MouseEventArgsReader.ReadProperty(eventArgs, property); } } return(eventArgs); }
internal static DragEventArgs Read(JsonElement jsonElement) { var eventArgs = new DragEventArgs(); foreach (var property in jsonElement.EnumerateObject()) { if (property.NameEquals(DataTransfer.EncodedUtf8Bytes)) { eventArgs.DataTransfer = ReadDataTransfer(property.Value); } else { MouseEventArgsReader.ReadProperty(eventArgs, property); } } return(eventArgs); }
private static bool TryDeserializeStandardWebEventArgs( string eventName, JsonElement eventArgsJson, [NotNullWhen(true)] out EventArgs?eventArgs) { // For back-compatibility, we recognize the built-in list of web event names and hard-code // rules about the deserialization type for their eventargs. This makes it possible to declare // an event handler as receiving EventArgs, and have it actually receive a subclass at runtime // depending on the event that was raised. // // The following list should remain in sync with EventArgsFactory.ts. switch (eventName) { case "input": case "change": // Special case for ChangeEventArgs because its value type can be one of // several types, and System.Text.Json doesn't pick types dynamically eventArgs = ChangeEventArgsReader.Read(eventArgsJson); return(true); case "copy": case "cut": case "paste": eventArgs = ClipboardEventArgsReader.Read(eventArgsJson); return(true); case "drag": case "dragend": case "dragenter": case "dragleave": case "dragover": case "dragstart": case "drop": eventArgs = DragEventArgsReader.Read(eventArgsJson); return(true); case "focus": case "blur": case "focusin": case "focusout": eventArgs = FocusEventArgsReader.Read(eventArgsJson); return(true); case "keydown": case "keyup": case "keypress": eventArgs = KeyboardEventArgsReader.Read(eventArgsJson); return(true); case "contextmenu": case "click": case "mouseover": case "mouseout": case "mousemove": case "mousedown": case "mouseup": case "dblclick": eventArgs = MouseEventArgsReader.Read(eventArgsJson); return(true); case "error": eventArgs = ErrorEventArgsReader.Read(eventArgsJson); return(true); case "loadstart": case "timeout": case "abort": case "load": case "loadend": case "progress": eventArgs = ProgressEventArgsReader.Read(eventArgsJson); return(true); case "touchcancel": case "touchend": case "touchmove": case "touchenter": case "touchleave": case "touchstart": eventArgs = TouchEventArgsReader.Read(eventArgsJson); return(true); case "gotpointercapture": case "lostpointercapture": case "pointercancel": case "pointerdown": case "pointerenter": case "pointerleave": case "pointermove": case "pointerout": case "pointerover": case "pointerup": eventArgs = PointerEventArgsReader.Read(eventArgsJson); return(true); case "wheel": case "mousewheel": eventArgs = WheelEventArgsReader.Read(eventArgsJson); return(true); case "toggle": eventArgs = EventArgs.Empty; return(true); default: // For custom event types, there are no built-in rules, so the deserialization type is // determined by the parameter declared on the delegate. eventArgs = null; return(false); } }