Esempio n. 1
0
        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);
        }
        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,
                ShiftKey = false,
            };
            var jsonElement = GetJsonElement(args);

            // Act
            var result = MouseEventArgsReader.Read(jsonElement);

            // Assert
            AssertEqual(args, result);
        }
        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);
        }
Esempio n. 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);
        }
Esempio n. 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);
            }
        }