internal PointerEventArgs ToEventArgs(InjectedInputState state) { var point = PointerInfo.ToPointerPoint(state); if (TouchParameters.HasFlag(InjectedInputTouchParameters.Pressure)) { point.Properties.Pressure = (float)Pressure; } if (TouchParameters.HasFlag(InjectedInputTouchParameters.Orientation)) { point.Properties.Orientation = Orientation; } if (TouchParameters.HasFlag(InjectedInputTouchParameters.Contact)) { point.Properties.ContactRect = new Rect(Contact.Left, Contact.Top, Contact.Right - Contact.Left, Contact.Bottom - Contact.Top); } return(new PointerEventArgs(point, VirtualKeyModifiers.None)); }
internal PointerEventArgs ToEventArgs(InjectedInputState state) { var update = default(PointerUpdateKind); var position = state.Position; var properties = new PointerPointProperties(state.Properties) { IsPrimary = false, IsInRange = true // always true for mouse }; if (MouseOptions.HasFlag(InjectedInputMouseOptions.LeftDown)) { properties.IsLeftButtonPressed = true; update |= PointerUpdateKind.LeftButtonPressed; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.LeftUp)) { properties.IsLeftButtonPressed = false; update |= PointerUpdateKind.LeftButtonReleased; } if (MouseOptions.HasFlag(InjectedInputMouseOptions.MiddleDown)) { properties.IsMiddleButtonPressed = true; update |= PointerUpdateKind.MiddleButtonPressed; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.MiddleUp)) { properties.IsMiddleButtonPressed = false; update |= PointerUpdateKind.MiddleButtonReleased; } if (MouseOptions.HasFlag(InjectedInputMouseOptions.RightDown)) { properties.IsRightButtonPressed = true; update |= PointerUpdateKind.RightButtonPressed; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.RightUp)) { properties.IsRightButtonPressed = false; update |= PointerUpdateKind.RightButtonReleased; } if (MouseOptions.HasFlag(InjectedInputMouseOptions.XDown)) { properties.IsXButton1Pressed = true; update |= PointerUpdateKind.XButton1Pressed; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.XUp)) { properties.IsXButton1Pressed = false; update |= PointerUpdateKind.XButton1Released; } if (MouseOptions.HasFlag(InjectedInputMouseOptions.Wheel)) { properties.MouseWheelDelta = DeltaY; properties.IsHorizontalMouseWheel = false; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.HWheel)) { properties.MouseWheelDelta = DeltaX; properties.IsHorizontalMouseWheel = true; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.Move) || MouseOptions.HasFlag(InjectedInputMouseOptions.MoveNoCoalesce)) { properties.MouseWheelDelta = default; properties.IsHorizontalMouseWheel = false; // Should we use MouseData ??? But How to discriminate between X and Y moves? position.X += DeltaX; position.Y += DeltaY; } else { properties.MouseWheelDelta = default; properties.IsHorizontalMouseWheel = false; } properties.PointerUpdateKind = update; var point = new PointerPoint( state.FrameId + TimeOffsetInMilliseconds, state.Timestamp + TimeOffsetInMilliseconds, PointerDevice.For(PointerDeviceType.Mouse), uint.MaxValue - 42, // Try to avoid conflict with the real mouse pointer position, position, isInContact: properties.HasPressedButton, properties); return(new PointerEventArgs(point, default)); }
internal PointerPoint ToPointerPoint(InjectedInputState state) { var isNew = PointerOptions.HasFlag(InjectedInputPointerOptions.New); var properties = isNew ? new PointerPointProperties() : new PointerPointProperties(state.Properties); properties.IsPrimary = PointerOptions.HasFlag(InjectedInputPointerOptions.Primary); properties.IsInRange = PointerOptions.HasFlag(InjectedInputPointerOptions.InRange); // IsLeftButtonPressed = // stateful, cf. below, // IsMiddleButtonPressed = // Mouse only // IsRightButtonPressed = // stateful, cf. below, // IsHorizontalMouseWheel = // Mouse only // IsXButton1Pressed = // IsXButton2Pressed = // IsBarrelButtonPressed = // Pen only // IsEraser = // Pen only // Pressure = // Touch only // Orientation = // Touch only // ContactRect = new Rect(Contact.Left, Contact.Top, Contact.Right - Contact.Left, Contact.Bottom - Contact.Top), properties.TouchConfidence = PointerOptions.HasFlag(InjectedInputPointerOptions.Confidence); properties.IsCanceled = PointerOptions.HasFlag(InjectedInputPointerOptions.Canceled); var update = default(PointerUpdateKind); if (PointerOptions.HasFlag(InjectedInputPointerOptions.FirstButton)) { if (PointerOptions.HasFlag(InjectedInputPointerOptions.PointerDown)) { properties.IsLeftButtonPressed = true; update |= PointerUpdateKind.LeftButtonPressed; } else if (PointerOptions.HasFlag(InjectedInputPointerOptions.PointerUp)) { properties.IsLeftButtonPressed = false; update |= PointerUpdateKind.LeftButtonReleased; } } if (PointerOptions.HasFlag(InjectedInputPointerOptions.SecondButton)) { if (PointerOptions.HasFlag(InjectedInputPointerOptions.PointerDown)) { properties.IsRightButtonPressed = true; update |= PointerUpdateKind.RightButtonPressed; } else if (PointerOptions.HasFlag(InjectedInputPointerOptions.PointerUp)) { properties.IsRightButtonPressed = false; update |= PointerUpdateKind.RightButtonReleased; } } properties.PointerUpdateKind = update; if (state.Type is PointerDeviceType.Pen) { properties.IsBarrelButtonPressed = properties.IsRightButtonPressed; } var location = new Point(PixelLocation.PositionX, PixelLocation.PositionY); var point = new PointerPoint( state.FrameId + TimeOffsetInMilliseconds, state.Timestamp + PerformanceCount, PointerDevice.For(state.Type), isNew ? PointerId : state.PointerId, location, location, PointerOptions.HasFlag(InjectedInputPointerOptions.InContact), properties); return(point); }
internal PointerEventArgs ToEventArgs(InjectedInputState state) { var update = default(PointerUpdateKind); var position = state.Position; var properties = new PointerPointProperties(state.Properties) { IsPrimary = false, IsInRange = true // always true for mouse }; if (MouseOptions.HasFlag(InjectedInputMouseOptions.LeftDown)) { properties.IsLeftButtonPressed = true; update |= PointerUpdateKind.LeftButtonPressed; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.LeftUp)) { properties.IsLeftButtonPressed = false; update |= PointerUpdateKind.LeftButtonReleased; } if (MouseOptions.HasFlag(InjectedInputMouseOptions.MiddleDown)) { properties.IsMiddleButtonPressed = true; update |= PointerUpdateKind.MiddleButtonPressed; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.MiddleUp)) { properties.IsMiddleButtonPressed = false; update |= PointerUpdateKind.MiddleButtonReleased; } if (MouseOptions.HasFlag(InjectedInputMouseOptions.RightDown)) { properties.IsRightButtonPressed = true; update |= PointerUpdateKind.RightButtonPressed; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.RightUp)) { properties.IsRightButtonPressed = false; update |= PointerUpdateKind.RightButtonReleased; } if (MouseOptions.HasFlag(InjectedInputMouseOptions.XDown)) { properties.IsXButton1Pressed = true; update |= PointerUpdateKind.XButton1Pressed; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.XUp)) { properties.IsXButton1Pressed = false; update |= PointerUpdateKind.XButton1Released; } if (MouseOptions.HasFlag(InjectedInputMouseOptions.Wheel)) { properties.MouseWheelDelta = DeltaY; properties.IsHorizontalMouseWheel = false; } else if (MouseOptions.HasFlag(InjectedInputMouseOptions.HWheel)) { properties.MouseWheelDelta = DeltaX; properties.IsHorizontalMouseWheel = true; } else { properties.MouseWheelDelta = default; properties.IsHorizontalMouseWheel = false; position.X += DeltaX; position.Y += DeltaY; } properties.PointerUpdateKind = update; var point = new PointerPoint( state.FrameId + TimeOffsetInMilliseconds, state.Timestamp + TimeOffsetInMilliseconds, PointerDevice.For(PointerDeviceType.Mouse), 1, position, position, isInContact: true, // Always true for mouse properties); return(new PointerEventArgs(point, default)); }