using System; using Unity.UIWidgets.foundation; using Unity.UIWidgets.ui; using UnityEngine; using Object = UnityEngine.Object; namespace Unity.UIWidgets.gestures { public abstract class PointerEvent : Diagnosticable { public PointerEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, Offset delta = null, Offset localDelta = null, int buttons = 0, bool down = false, bool obscured = false, float pressure = 1.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float size = 0.0f, float radiusMajor = 0.0f, float radiusMinor = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, int platformData = 0, bool synthesized = false, Matrix4 transform = null, PointerEvent original = null ) { this.timeStamp = timeStamp; this.pointer = pointer; this.kind = kind; this.device = device; this.position = position ?? Offset.zero; this.localPosition = localPosition ?? this.position; this.delta = delta ?? Offset.zero; this.localDelta = delta ?? this.delta; this.buttons = buttons; this.down = down; this.obscured = obscured; this.pressure = pressure; this.pressureMin = pressureMin; this.pressureMax = pressureMax; this.distance = distance; this.distanceMax = distanceMax; this.size = size; this.radiusMajor = radiusMajor; this.radiusMinor = radiusMinor; this.radiusMin = radiusMin; this.radiusMax = radiusMax; this.orientation = orientation; this.tilt = tilt; this.platformData = platformData; this.synthesized = synthesized; this.transform = transform; this.original = original; } public readonly TimeSpan timeStamp; public readonly int pointer; public PointerDeviceKind kind; public int device; public readonly Offset position; public readonly Offset localPosition; public readonly Offset delta; public readonly Offset localDelta; public readonly int buttons; public readonly bool down; public readonly bool obscured; public readonly float pressure; public readonly float pressureMin; public readonly float pressureMax; public readonly float distance; public float distanceMin { get { return 0.0f; } } public readonly float distanceMax; public readonly float size; public readonly float radiusMajor; public readonly float radiusMinor; public readonly float radiusMin; public readonly float radiusMax; public readonly float orientation; public readonly float tilt; public readonly int platformData; public readonly bool synthesized; public readonly Matrix4 transform; public readonly PointerEvent original; public abstract PointerEvent transformed(Matrix4 transform); public override void debugFillProperties(DiagnosticPropertiesBuilder properties) { base.debugFillProperties(properties); properties.add(new DiagnosticsProperty("position", this.position)); properties.add(new DiagnosticsProperty("localPosition", this.localPosition)); properties.add(new DiagnosticsProperty("delta", this.delta, defaultValue: Offset.zero, level: DiagnosticLevel.debug)); properties.add(new DiagnosticsProperty("localDelta", this.localDelta, defaultValue: Offset.zero, level: DiagnosticLevel.debug)); properties.add(new DiagnosticsProperty("timeStamp", this.timeStamp, defaultValue: TimeSpan.Zero, level: DiagnosticLevel.debug)); properties.add(new IntProperty("pointer", this.pointer, level: DiagnosticLevel.debug)); properties.add(new EnumProperty("kind", this.kind, level: DiagnosticLevel.debug)); properties.add(new IntProperty("device", this.device, defaultValue: 0, level: DiagnosticLevel.debug)); properties.add(new IntProperty("buttons", this.buttons, defaultValue: 0, level: DiagnosticLevel.debug)); properties.add(new DiagnosticsProperty("down", this.down, level: DiagnosticLevel.debug)); properties.add( new FloatProperty("pressure", this.pressure, defaultValue: 1.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("pressureMin", this.pressureMin, defaultValue: 1.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("pressureMax", this.pressureMax, defaultValue: 1.0, level: DiagnosticLevel.debug)); properties.add( new FloatProperty("distance", this.distance, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("distanceMin", this.distanceMin, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("distanceMax", this.distanceMax, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("size", this.size, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("radiusMajor", this.radiusMajor, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("radiusMinor", this.radiusMinor, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("radiusMin", this.radiusMin, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("radiusMax", this.radiusMax, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("orientation", this.orientation, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new FloatProperty("tilt", this.tilt, defaultValue: 0.0, level: DiagnosticLevel.debug)); properties.add(new IntProperty("platformData", this.platformData, defaultValue: 0, level: DiagnosticLevel.debug)); properties.add(new FlagProperty("obscured", value: this.obscured, ifTrue: "obscured", level: DiagnosticLevel.debug)); properties.add(new FlagProperty("synthesized", value: this.synthesized, ifTrue: "synthesized", level: DiagnosticLevel.debug)); } public static Offset transformPosition(Matrix4 transform, Offset position) { if (transform == null) { return position; } Vector3 position3 = new Vector3(position.dx, position.dy, 0.0f); Vector3 transformed3 = transform.perspectiveTransform(position3); return new Offset(transformed3.x, transformed3.y); } public static Offset transformDeltaViaPositions( Offset untransformedEndPosition, Offset untransformedDelta, Matrix4 transform, Offset transformedEndPosition = null ) { if (transform == null) { return untransformedDelta; } transformedEndPosition = transformedEndPosition ?? transformPosition(transform, untransformedEndPosition); Offset transformedStartPosition = transformPosition(transform, untransformedEndPosition - untransformedDelta); return transformedEndPosition - transformedStartPosition; } public static Matrix4 removePerspectiveTransform(Matrix4 transform) { Vector4 vector = new Vector4(0, 0, 1, 0); var result = transform.clone(); result.setColumn(2, vector); result.setRow(2, vector); return result; } } public class PointerAddedEvent : PointerEvent { public PointerAddedEvent( TimeSpan timeStamp, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, Matrix4 transform = null, PointerAddedEvent original = null ) : base( timeStamp: timeStamp, kind: kind, device: device, position: position, localPosition: localPosition, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, distance: distance, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, orientation: orientation, tilt: tilt, transform: transform, original: original ) { } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerAddedEvent( timeStamp: this.timeStamp, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), obscured: this.obscured, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distance: this.distance, distanceMax: this.distanceMax, radiusMin: this.radiusMin, radiusMax: this.radiusMax, orientation: this.orientation, tilt: this.tilt, transform: this.transform, original: this.original as PointerAddedEvent ?? this ); } } public class PointerRemovedEvent : PointerEvent { public PointerRemovedEvent( TimeSpan timeStamp, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distanceMax = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, Matrix4 transform = null, PointerRemovedEvent original = null ) : base( timeStamp: timeStamp, kind: kind, position: position, localPosition: localPosition, device: device, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, transform: transform, original: original ) { } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerRemovedEvent( timeStamp: this.timeStamp, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), obscured: this.obscured, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distanceMax: this.distanceMax, radiusMin: this.radiusMin, radiusMax: this.radiusMax, transform: transform, original: this.original as PointerRemovedEvent ?? this ); } } public class PointerHoverEvent : PointerEvent { public PointerHoverEvent( TimeSpan timeStamp, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, Offset delta = null, Offset localDelta = null, int buttons = 0, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float size = 0.0f, float radiusMajor = 0.0f, float radiusMinor = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, bool synthesized = false, Matrix4 transform = null, PointerHoverEvent original = null) : base( timeStamp: timeStamp, kind: kind, device: device, position: position, localPosition: localDelta, delta: delta, localDelta: localDelta, buttons: buttons, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, distance: distance, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, orientation: orientation, tilt: tilt, synthesized: synthesized, transform: transform, original: original) { } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } Offset transformedPosition = PointerEvent.transformPosition(transform, this.position); return new PointerHoverEvent( timeStamp: this.timeStamp, kind: this.kind, device: this.device, position: this.position, localPosition: transformedPosition, delta: this.delta, localDelta: PointerEvent.transformDeltaViaPositions( transform: transform, untransformedDelta: this.delta, untransformedEndPosition: this.position, transformedEndPosition: transformedPosition ), buttons: this.buttons, obscured: this.obscured, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distance: this.distance, distanceMax: this.distanceMax, size: this.size, radiusMajor: this.radiusMajor, radiusMinor: this.radiusMinor, radiusMin: this.radiusMin, radiusMax: this.radiusMax, orientation: this.orientation, tilt: this.tilt, synthesized: this.synthesized, transform: transform, original: this.original as PointerHoverEvent ?? this); } } public class PointerEnterEvent : PointerEvent { public PointerEnterEvent( TimeSpan timeStamp, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, Offset delta = null, Offset localDelta = null, int buttons = 0, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float size = 0.0f, float radiusMajor = 0.0f, float radiusMinor = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, bool synthesized = false, bool down = false, Matrix4 transform = null, PointerEnterEvent original = null) : base( timeStamp: timeStamp, kind: kind, device: device, position: position, localPosition: localPosition, delta: delta, localDelta: localDelta, buttons: buttons, down: down, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, distance: distance, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, orientation: orientation, tilt: tilt, synthesized: synthesized, transform: transform, original: original) { } public static PointerEnterEvent fromHoverEvent(PointerHoverEvent e) { return fromMouseEvent(e); } public static PointerEnterEvent fromMouseEvent(PointerEvent hover) { return new PointerEnterEvent( timeStamp: hover?.timeStamp ?? TimeSpan.Zero, kind: hover?.kind ?? PointerDeviceKind.touch, device: hover?.device ?? 0, position: hover?.position, localPosition: hover?.localPosition, delta: hover?.delta, localDelta: hover?.localDelta, buttons: hover?.buttons ?? 0, down: hover?.down ?? false, obscured: hover?.obscured ?? false, pressure: hover?.pressure ?? 0.0f, pressureMin: hover?.pressureMin ?? 1.0f, pressureMax: hover?.pressureMax ?? 1.0f, distance: hover?.distance ?? 0.0f, distanceMax: hover?.distanceMax ?? 0.0f, size: hover?.size ?? 0.0f, radiusMajor: hover?.radiusMajor ?? 0.0f, radiusMinor: hover?.radiusMinor ?? 0.0f, radiusMin: hover?.radiusMin ?? 0.0f, radiusMax: hover?.radiusMax ?? 0.0f, orientation: hover?.orientation ?? 0.0f, tilt: hover?.tilt ?? 0.0f, synthesized: hover?.synthesized ?? false, transform: hover?.transform, original: hover?.original as PointerEnterEvent ); } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } Offset transformedPosition = PointerEvent.transformPosition(transform, this.position); return new PointerEnterEvent( timeStamp: this.timeStamp, kind: this.kind, device: this.device, position: this.position, localPosition: transformedPosition, delta: this.delta, localDelta: PointerEvent.transformDeltaViaPositions( transform: transform, untransformedDelta: this.delta, untransformedEndPosition: this.position, transformedEndPosition: transformedPosition ), buttons: this.buttons, obscured: this.obscured, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distance: this.distance, distanceMax: this.distanceMax, size: this.size, radiusMajor: this.radiusMajor, radiusMinor: this.radiusMinor, radiusMin: this.radiusMin, radiusMax: this.radiusMax, orientation: this.orientation, tilt: this.tilt, down: this.down, synthesized: this.synthesized, transform: transform, original: this.original as PointerEnterEvent ?? this ); } } public class PointerExitEvent : PointerEvent { public PointerExitEvent( TimeSpan timeStamp, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, Offset delta = null, Offset localDelta = null, int buttons = 0, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float size = 0.0f, float radiusMajor = 0.0f, float radiusMinor = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, bool synthesized = false, bool down = false, Matrix4 transform = null, PointerExitEvent original = null) : base( timeStamp: timeStamp, kind: kind, device: device, position: position, localPosition: localPosition, delta: delta, localDelta: localDelta, buttons: buttons, down: down, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, distance: distance, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, orientation: orientation, tilt: tilt, synthesized: synthesized, transform: transform, original: original) { } public static PointerExitEvent fromHoverEvent(PointerHoverEvent e) { return fromMouseEvent(e); } public static PointerExitEvent fromMouseEvent(PointerEvent hover) { return new PointerExitEvent( timeStamp: hover?.timeStamp ?? TimeSpan.Zero, kind: hover?.kind ?? PointerDeviceKind.touch, device: hover?.device ?? 0, position: hover?.position, localPosition: hover?.localPosition, delta: hover?.delta, localDelta: hover?.localDelta, buttons: hover?.buttons ?? 0, down: hover?.down ?? false, obscured: hover?.obscured ?? false, pressure: hover?.pressure ?? 0.0f, pressureMin: hover?.pressureMin ?? 1.0f, pressureMax: hover?.pressureMax ?? 1.0f, distance: hover?.distance ?? 0.0f, distanceMax: hover?.distanceMax ?? 0.0f, size: hover?.size ?? 0.0f, radiusMajor: hover?.radiusMajor ?? 0.0f, radiusMinor: hover?.radiusMinor ?? 0.0f, radiusMin: hover?.radiusMin ?? 0.0f, radiusMax: hover?.radiusMax ?? 0.0f, orientation: hover?.orientation ?? 0.0f, tilt: hover?.tilt ?? 0.0f, synthesized: hover?.synthesized ?? false, transform: hover?.transform, original: hover?.original as PointerExitEvent ); } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } Offset transformedPosition = PointerEvent.transformPosition(transform, this.position); return new PointerExitEvent( timeStamp: this.timeStamp, kind: this.kind, device: this.device, position: this.position, localPosition: transformedPosition, delta: this.delta, localDelta: PointerEvent.transformDeltaViaPositions( transform: transform, untransformedDelta: this.delta, untransformedEndPosition: this.position, transformedEndPosition: transformedPosition ), buttons: this.buttons, obscured: this.obscured, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distance: this.distance, distanceMax: this.distanceMax, size: this.size, radiusMajor: this.radiusMajor, radiusMinor: this.radiusMinor, radiusMin: this.radiusMin, radiusMax: this.radiusMax, orientation: this.orientation, tilt: this.tilt, down: this.down, synthesized: this.synthesized, transform: transform, original: this.original as PointerExitEvent ?? this ); } } public class PointerDownEvent : PointerEvent { public PointerDownEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, int buttons = 0, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float size = 0.0f, float radiusMajor = 0.0f, float radiusMinor = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, Matrix4 transform = null, PointerDownEvent original = null ) : base( timeStamp: timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, buttons: buttons, down: true, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, distance: distance, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, orientation: orientation, tilt: tilt, transform: transform, original: original) { } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerDownEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), buttons: this.buttons, obscured: this.obscured, pressure: this.pressure, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distanceMax: this.distanceMax, size: this.size, radiusMajor: this.radiusMajor, radiusMinor: this.radiusMinor, radiusMin: this.radiusMin, radiusMax: this.radiusMax, orientation: this.orientation, tilt: this.tilt, transform: transform, original: this.original as PointerDownEvent ?? this ); } } public class PointerMoveEvent : PointerEvent { public PointerMoveEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, Offset delta = null, Offset localDelta = null, int buttons = 0, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float size = 0.0f, float radiusMajor = 0.0f, float radiusMinor = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, int platformdData = 0, bool synthesized = false, Matrix4 transform = null, PointerMoveEvent original = null ) : base( timeStamp: timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, delta: delta, localDelta: localDelta, buttons: buttons, down: true, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, distance: distance, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, orientation: orientation, tilt: tilt, platformData: platformdData, synthesized: synthesized, transform: transform, original: original) { } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } Offset transformedPosition = PointerEvent.transformPosition(transform, this.position); return new PointerMoveEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: transformedPosition, delta: this.delta, localDelta: PointerEvent.transformDeltaViaPositions( transform: transform, untransformedDelta: this.delta, untransformedEndPosition: this.position, transformedEndPosition: transformedPosition ), buttons: this.buttons, obscured: this.obscured, pressure: this.pressure, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distanceMax: this.distanceMax, size: this.size, radiusMajor: this.radiusMajor, radiusMinor: this.radiusMinor, radiusMin: this.radiusMin, radiusMax: this.radiusMax, orientation: this.orientation, tilt: this.tilt, // platformData: platformData, synthesized: this.synthesized, transform: transform, original: this.original as PointerMoveEvent ?? this ); } } public class PointerUpEvent : PointerEvent { public PointerUpEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, int buttons = 0, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float size = 0.0f, float radiusMajor = 0.0f, float radiusMinor = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, Matrix4 transform = null, PointerUpEvent original = null ) : base( timeStamp: timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, buttons: buttons, down: false, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, distance: distance, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, orientation: orientation, tilt: tilt, transform: transform, original: original) { } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerUpEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), buttons: this.buttons, obscured: this.obscured, pressure: this.pressure, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distance: this.distance, distanceMax: this.distanceMax, size: this.size, radiusMajor: this.radiusMajor, radiusMinor: this.radiusMinor, radiusMin: this.radiusMin, radiusMax: this.radiusMax, orientation: this.orientation, tilt: this.tilt, transform: transform, original: this.original as PointerUpEvent ?? this ); } } public abstract class PointerSignalEvent : PointerEvent { public PointerSignalEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.mouse, int device = 0, Offset position = null, Offset localPosition = null, Matrix4 transform = null, PointerSignalEvent original = null ) : base( timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, transform: transform, original: original ) { } } public class PointerScrollEvent : PointerSignalEvent { public PointerScrollEvent( TimeSpan timeStamp, int pointer, PointerDeviceKind kind = PointerDeviceKind.mouse, int device = 0, Offset position = null, Offset localPosition = null, Offset scrollDelta = null, Matrix4 transform = null, PointerScrollEvent original = null) : base( timeStamp, kind: kind, pointer: pointer, device: device, position: position, localPosition: localPosition, transform: transform, original: original) { D.assert(position != null); D.assert(scrollDelta != null); this.scrollDelta = scrollDelta; } public readonly Offset scrollDelta; public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerScrollEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), scrollDelta: this.scrollDelta, transform: transform, original: this.original as PointerScrollEvent ?? this ); } public override void debugFillProperties(DiagnosticPropertiesBuilder properties) { base.debugFillProperties(properties); properties.add(new DiagnosticsProperty("scrollDelta", this.scrollDelta)); } } public class PointerCancelEvent : PointerEvent { public PointerCancelEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.touch, int device = 0, Offset position = null, Offset localPosition = null, int buttons = 0, bool obscured = false, float pressure = 0.0f, float pressureMin = 1.0f, float pressureMax = 1.0f, float distance = 0.0f, float distanceMax = 0.0f, float size = 0.0f, float radiusMajor = 0.0f, float radiusMinor = 0.0f, float radiusMin = 0.0f, float radiusMax = 0.0f, float orientation = 0.0f, float tilt = 0.0f, Matrix4 transform = null, PointerCancelEvent original = null ) : base( timeStamp: timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, buttons: buttons, down: false, obscured: obscured, pressure: pressure, pressureMin: pressureMin, pressureMax: pressureMax, size: size, radiusMajor: radiusMajor, radiusMinor: radiusMinor, distance: distance, distanceMax: distanceMax, radiusMin: radiusMin, radiusMax: radiusMax, orientation: orientation, tilt: tilt, transform: transform, original: original) { } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerCancelEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), buttons: this.buttons, obscured: this.obscured, pressureMin: this.pressureMin, pressureMax: this.pressureMax, distance: this.distance, distanceMax: this.distanceMax, size: this.size, radiusMajor: this.radiusMajor, radiusMinor: this.radiusMinor, radiusMin: this.radiusMin, radiusMax: this.radiusMax, orientation: this.orientation, tilt: this.tilt, transform: transform, original: this.original as PointerCancelEvent ?? this ); } } public class PointerDragFromEditorEnterEvent : PointerEvent { public PointerDragFromEditorEnterEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.mouse, int device = 0, Offset position = null, Offset localPosition = null, Matrix4 transform = null, PointerDragFromEditorEnterEvent original = null ) : base( timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, transform: transform, original: original ) { } public static PointerDragFromEditorEnterEvent fromDragFromEditorEvent(PointerEvent evt) { return new PointerDragFromEditorEnterEvent( timeStamp: evt.timeStamp, pointer: evt.pointer, kind: evt.kind, device: evt.device, position: evt.position, localPosition: evt.localPosition, transform: evt.transform, original: evt.original as PointerDragFromEditorEnterEvent ); } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerDragFromEditorEnterEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), transform: transform, original: this.original as PointerDragFromEditorEnterEvent ?? this ); } } public class PointerDragFromEditorExitEvent : PointerEvent { public PointerDragFromEditorExitEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.mouse, int device = 0, Offset position = null, Offset localPosition = null, Matrix4 transform = null, PointerDragFromEditorExitEvent original = null ) : base( timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, transform: transform, original: original ) { } public static PointerDragFromEditorExitEvent fromDragFromEditorEvent(PointerEvent evt) { return new PointerDragFromEditorExitEvent( timeStamp: evt.timeStamp, pointer: evt.pointer, kind: evt.kind, device: evt.device, position: evt.position, localPosition: evt.localPosition, transform: evt.transform, original: evt.original as PointerDragFromEditorExitEvent ); } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerDragFromEditorExitEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), transform: transform, original: this.original as PointerDragFromEditorExitEvent ?? this ); } } public class PointerDragFromEditorHoverEvent : PointerEvent { public PointerDragFromEditorHoverEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.mouse, int device = 0, Offset position = null, Offset localPosition = null, Matrix4 transform = null, PointerDragFromEditorHoverEvent original = null ) : base( timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, transform: transform, original: original ) { } public static PointerDragFromEditorHoverEvent fromDragFromEditorEvent(PointerEvent evt) { return new PointerDragFromEditorHoverEvent( timeStamp: evt.timeStamp, pointer: evt.pointer, kind: evt.kind, device: evt.device, position: evt.position, localPosition: evt.localPosition, transform: evt.transform, original: evt.original as PointerDragFromEditorHoverEvent ); } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerDragFromEditorHoverEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), transform: this.transform, original: this.original as PointerDragFromEditorHoverEvent ?? this ); } } public class PointerDragFromEditorReleaseEvent : PointerEvent { public PointerDragFromEditorReleaseEvent( TimeSpan timeStamp, int pointer = 0, PointerDeviceKind kind = PointerDeviceKind.mouse, int device = 0, Offset position = null, Offset localPosition = null, Object[] objectReferences = null, Matrix4 transform = null, PointerDragFromEditorReleaseEvent original = null ) : base( timeStamp, pointer: pointer, kind: kind, device: device, position: position, localPosition: localPosition, transform: transform, original: original ) { this.objectReferences = objectReferences; } public Object[] objectReferences; public static PointerDragFromEditorReleaseEvent fromDragFromEditorEvent(PointerEvent evt, Object[] objectReferences) { return new PointerDragFromEditorReleaseEvent( timeStamp: evt.timeStamp, pointer: evt.pointer, kind: evt.kind, device: evt.device, position: evt.position, localPosition: evt.localPosition, objectReferences: objectReferences, transform: evt.transform, original: evt.original as PointerDragFromEditorReleaseEvent ); } public override PointerEvent transformed(Matrix4 transform) { if (transform == null || transform == this.transform) { return this; } return new PointerDragFromEditorReleaseEvent( timeStamp: this.timeStamp, pointer: this.pointer, kind: this.kind, device: this.device, position: this.position, localPosition: PointerEvent.transformPosition(transform, this.position), objectReferences: this.objectReferences, transform: this.transform, original: this.original as PointerDragFromEditorReleaseEvent ?? this ); } } }