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);
    }
Beispiel #3
0
    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);
    }
Beispiel #4
0
    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);
    }
Beispiel #5
0
    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);
        }
    }