@@ -726,6 +726,79 @@ void testMain() {
726726 },
727727 );
728728
729+ _testEach <_ButtonedEventMixin >(
730+ < _ButtonedEventMixin > [
731+ if (! isIosSafari) _PointerEventContext (),
732+ if (! isIosSafari) _MouseEventContext (),
733+ ],
734+ 'does set pointer device kind based on delta precision' ,
735+ (_ButtonedEventMixin context) {
736+ PointerBinding .instance! .debugOverrideDetector (context);
737+ final List <ui.PointerDataPacket > packets = < ui.PointerDataPacket > [];
738+ ui.window.onPointerDataPacket = (ui.PointerDataPacket packet) {
739+ packets.add (packet);
740+ };
741+
742+ glassPane.dispatchEvent (context.wheel (
743+ buttons: 0 ,
744+ clientX: 10 ,
745+ clientY: 10 ,
746+ deltaX: 10 ,
747+ deltaY: 10 ,
748+ ));
749+
750+ glassPane.dispatchEvent (context.wheel (
751+ buttons: 0 ,
752+ clientX: 10 ,
753+ clientY: 10 ,
754+ deltaX: 0 ,
755+ deltaY: 120 ,
756+ ));
757+
758+ expect (packets, hasLength (2 ));
759+
760+ // An add will be synthesized.
761+ expect (packets[0 ].data, hasLength (2 ));
762+ expect (packets[0 ].data[0 ].change, equals (ui.PointerChange .add));
763+ expect (packets[0 ].data[0 ].pointerIdentifier, equals (0 ));
764+ expect (packets[0 ].data[0 ].synthesized, isTrue);
765+ expect (packets[0 ].data[0 ].physicalX, equals (10.0 * dpi));
766+ expect (packets[0 ].data[0 ].physicalY, equals (10.0 * dpi));
767+ expect (packets[0 ].data[0 ].physicalDeltaX, equals (0.0 ));
768+ expect (packets[0 ].data[0 ].physicalDeltaY, equals (0.0 ));
769+ // Because the delta is not in increments of 120, it will be a trackpad event.
770+ expect (packets[0 ].data[1 ].change, equals (ui.PointerChange .hover));
771+ expect (
772+ packets[0 ].data[1 ].signalKind, equals (ui.PointerSignalKind .scroll));
773+ expect (
774+ packets[0 ].data[1 ].kind, equals (ui.PointerDeviceKind .trackpad));
775+ expect (packets[0 ].data[1 ].pointerIdentifier, equals (0 ));
776+ expect (packets[0 ].data[1 ].synthesized, isFalse);
777+ expect (packets[0 ].data[1 ].physicalX, equals (10.0 * dpi));
778+ expect (packets[0 ].data[1 ].physicalY, equals (10.0 * dpi));
779+ expect (packets[0 ].data[1 ].physicalDeltaX, equals (0.0 ));
780+ expect (packets[0 ].data[1 ].physicalDeltaY, equals (0.0 ));
781+ expect (packets[0 ].data[1 ].scrollDeltaX, equals (10.0 ));
782+ expect (packets[0 ].data[1 ].scrollDeltaY, equals (10.0 ));
783+
784+ // Because the delta is in increments of 120, it will be a mouse event.
785+ expect (packets[1 ].data, hasLength (1 ));
786+ expect (packets[1 ].data[0 ].change, equals (ui.PointerChange .hover));
787+ expect (
788+ packets[1 ].data[0 ].signalKind, equals (ui.PointerSignalKind .scroll));
789+ expect (
790+ packets[1 ].data[0 ].kind, equals (ui.PointerDeviceKind .mouse));
791+ expect (packets[1 ].data[0 ].pointerIdentifier, equals (0 ));
792+ expect (packets[1 ].data[0 ].synthesized, isFalse);
793+ expect (packets[1 ].data[0 ].physicalX, equals (10.0 * dpi));
794+ expect (packets[1 ].data[0 ].physicalY, equals (10.0 * dpi));
795+ expect (packets[1 ].data[0 ].physicalDeltaX, equals (0.0 ));
796+ expect (packets[1 ].data[0 ].physicalDeltaY, equals (0.0 ));
797+ expect (packets[1 ].data[0 ].scrollDeltaX, equals (0.0 ));
798+ expect (packets[1 ].data[0 ].scrollDeltaY, equals (120.0 ));
799+ },
800+ );
801+
729802 _testEach <_ButtonedEventMixin >(
730803 < _ButtonedEventMixin > [
731804 if (! isIosSafari) _PointerEventContext (),
0 commit comments