From 32e4bb6760449d2a0a5822c7e0daf54948a3f04f Mon Sep 17 00:00:00 2001 From: ferhatb Date: Tue, 3 Nov 2020 17:13:54 -0800 Subject: [PATCH 1/4] Enable Ctrl+mousewheel zoom on Windows --- .../lib/src/engine/pointer_binding.dart | 227 ++++++++++-------- 1 file changed, 123 insertions(+), 104 deletions(-) diff --git a/lib/web_ui/lib/src/engine/pointer_binding.dart b/lib/web_ui/lib/src/engine/pointer_binding.dart index c0b1e183cffb4..b8b810bfa7527 100644 --- a/lib/web_ui/lib/src/engine/pointer_binding.dart +++ b/lib/web_ui/lib/src/engine/pointer_binding.dart @@ -23,7 +23,7 @@ const int _mouseDeviceId = -1; const int _kPrimaryMouseButton = 0x1; const int _kSecondaryMouseButton = 0x2; -const int _kMiddleMouseButton =0x4; +const int _kMiddleMouseButton = 0x4; int _nthButton(int n) => 0x1 << n; @@ -40,7 +40,7 @@ int _nthButton(int n) => 0x1 << n; @visibleForTesting int convertButtonToButtons(int button) { assert(button >= 0, 'Unexpected negative button $button.'); - switch(button) { + switch (button) { case 0: return _kPrimaryMouseButton; case 1: @@ -71,8 +71,8 @@ class PointerBinding { } PointerBinding._(this.glassPaneElement) - : _pointerDataConverter = PointerDataConverter(), - _detector = const PointerSupportDetector() { + : _pointerDataConverter = PointerDataConverter(), + _detector = const PointerSupportDetector() { _adapter = _createAdapter(); } @@ -112,19 +112,24 @@ class PointerBinding { _BaseAdapter _createAdapter() { if (_detector.hasPointerEvents) { - return _PointerAdapter(_onPointerData, glassPaneElement, _pointerDataConverter); + return _PointerAdapter( + _onPointerData, glassPaneElement, _pointerDataConverter); } if (_detector.hasTouchEvents) { - return _TouchAdapter(_onPointerData, glassPaneElement, _pointerDataConverter); + return _TouchAdapter( + _onPointerData, glassPaneElement, _pointerDataConverter); } if (_detector.hasMouseEvents) { - return _MouseAdapter(_onPointerData, glassPaneElement, _pointerDataConverter); + return _MouseAdapter( + _onPointerData, glassPaneElement, _pointerDataConverter); } - throw UnsupportedError('This browser does not support pointer, touch, or mouse events.'); + throw UnsupportedError( + 'This browser does not support pointer, touch, or mouse events.'); } void _onPointerData(Iterable data) { - final ui.PointerDataPacket packet = ui.PointerDataPacket(data: data.toList()); + final ui.PointerDataPacket packet = + ui.PointerDataPacket(data: data.toList()); EnginePlatformDispatcher.instance.invokeOnPointerDataPacket(packet); } } @@ -143,16 +148,18 @@ class PointerSupportDetector { /// Common functionality that's shared among adapters. abstract class _BaseAdapter { - _BaseAdapter(this._callback, this.glassPaneElement, this._pointerDataConverter) { + _BaseAdapter( + this._callback, this.glassPaneElement, this._pointerDataConverter) { setup(); } /// Listeners that are registered through dart to js api. static final Map _listeners = - {}; + {}; + /// Listeners that are registered through native javascript api. static final Map _nativeListeners = - {}; + {}; final html.Element glassPaneElement; _PointerDataCallback _callback; PointerDataConverter _pointerDataConverter; @@ -164,18 +171,15 @@ abstract class _BaseAdapter { /// Remove all active event listeners. void clearListeners() { _listeners.forEach((String eventName, html.EventListener listener) { - html.window.removeEventListener(eventName, listener, true); + html.window.removeEventListener(eventName, listener, true); }); // For native listener, we will need to remove it through native javascript // api. _nativeListeners.forEach((String eventName, html.EventListener listener) { - js_util.callMethod( - glassPaneElement, - 'removeEventListener', [ - 'wheel', - listener, - ] - ); + js_util.callMethod(glassPaneElement, 'removeEventListener', [ + 'wheel', + listener, + ]); }); _listeners.clear(); _nativeListeners.clear(); @@ -194,7 +198,8 @@ abstract class _BaseAdapter { bool acceptOutsideGlasspane = false, }) { final html.EventListener loggedHandler = (html.Event event) { - if (!acceptOutsideGlasspane && !glassPaneElement.contains(event.target as html.Node?)) { + if (!acceptOutsideGlasspane && + !glassPaneElement.contains(event.target as html.Node?)) { return; } @@ -221,7 +226,7 @@ abstract class _BaseAdapter { static Duration _eventTimeStampToDuration(num milliseconds) { final int ms = milliseconds.toInt(); final int micro = - ((milliseconds - ms) * Duration.microsecondsPerMillisecond).toInt(); + ((milliseconds - ms) * Duration.microsecondsPerMillisecond).toInt(); return Duration(milliseconds: ms, microseconds: micro); } } @@ -229,9 +234,7 @@ abstract class _BaseAdapter { mixin _WheelEventListenerMixin on _BaseAdapter { static double? _defaultScrollLineHeight; - List _convertWheelEventToPointerData( - html.WheelEvent event - ) { + List _convertWheelEventToPointerData(html.WheelEvent event) { const int domDeltaPixel = 0x00; const int domDeltaLine = 0x01; const int domDeltaPage = 0x02; @@ -277,17 +280,12 @@ mixin _WheelEventListenerMixin on _BaseAdapter { void _addWheelEventListener(html.EventListener handler) { final dynamic eventOptions = js_util.newObject(); - final html.EventListener jsHandler = js.allowInterop((html.Event event) => handler(event)); + final html.EventListener jsHandler = + js.allowInterop((html.Event event) => handler(event)); _BaseAdapter._nativeListeners['wheel'] = jsHandler; js_util.setProperty(eventOptions, 'passive', false); - js_util.callMethod( - glassPaneElement, - 'addEventListener', [ - 'wheel', - jsHandler, - eventOptions - ] - ); + js_util.callMethod(glassPaneElement, 'addEventListener', + ['wheel', jsHandler, eventOptions]); } /// For browsers that report delta line instead of pixels such as FireFox @@ -298,18 +296,38 @@ mixin _WheelEventListenerMixin on _BaseAdapter { const double kFallbackFontHeight = 16.0; final html.DivElement probe = html.DivElement(); probe.style - ..fontSize = 'initial' - ..display = 'none'; + ..fontSize = 'initial' + ..display = 'none'; html.document.body!.append(probe); String fontSize = probe.getComputedStyle().fontSize; double? res; if (fontSize.contains('px')) { - fontSize = fontSize.replaceAll('px', ''); - res = double.tryParse(fontSize); + fontSize = fontSize.replaceAll('px', ''); + res = double.tryParse(fontSize); } probe.remove(); return res == null ? kFallbackFontHeight : res / 4.0; } + + void _handleWheelEvent( + html.Event e, void Function(Iterable) sink) { + assert(e is html.WheelEvent); + final html.WheelEvent event = e as html.WheelEvent; + if (_debugLogPointerEvents) { + print(event.type); + } + if (operatingSystem == OperatingSystem.windows && + event.getModifierState('Control')) { + // Ignore Control+wheel events on windows since the default handler + // will change browser zoom level instead of scrolling. + return; + } + _callback(_convertWheelEventToPointerData(event)); + // Prevent default so mouse wheel event doesn't get converted to + // a scroll event that semantic nodes would process. + // + event.preventDefault(); + } } @immutable @@ -391,9 +409,8 @@ class _ButtonSanitizer { _pressedButtons = newPressedButtons; return _SanitizedDetails( - change: _pressedButtons == 0 - ? ui.PointerChange.hover - : ui.PointerChange.move, + change: + _pressedButtons == 0 ? ui.PointerChange.hover : ui.PointerChange.move, buttons: _pressedButtons, ); } @@ -426,11 +443,9 @@ typedef _PointerEventListener = dynamic Function(html.PointerEvent event); /// /// For the difference between MouseEvent and PointerEvent, see _MouseAdapter. class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { - _PointerAdapter( - _PointerDataCallback callback, - html.Element glassPaneElement, - PointerDataConverter pointerDataConverter - ) : super(callback, glassPaneElement, pointerDataConverter); + _PointerAdapter(_PointerDataCallback callback, html.Element glassPaneElement, + PointerDataConverter pointerDataConverter) + : super(callback, glassPaneElement, pointerDataConverter); final Map _sanitizers = {}; @@ -470,11 +485,12 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final int device = event.pointerId!; final List pointerData = []; final _SanitizedDetails details = - _ensureSanitizer(device).sanitizeDownEvent( - button: event.button, - buttons: event.buttons!, - ); - _convertEventsToPointerData(data: pointerData, event: event, details: details); + _ensureSanitizer(device).sanitizeDownEvent( + button: event.button, + buttons: event.buttons!, + ); + _convertEventsToPointerData( + data: pointerData, event: event, details: details); _callback(pointerData); }); @@ -483,10 +499,12 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final _ButtonSanitizer sanitizer = _ensureSanitizer(device); final List pointerData = []; final Iterable<_SanitizedDetails> detailsList = _expandEvents(event).map( - (html.PointerEvent expandedEvent) => sanitizer.sanitizeMoveEvent(buttons: expandedEvent.buttons!), + (html.PointerEvent expandedEvent) => + sanitizer.sanitizeMoveEvent(buttons: expandedEvent.buttons!), ); for (_SanitizedDetails details in detailsList) { - _convertEventsToPointerData(data: pointerData, event: event, details: details); + _convertEventsToPointerData( + data: pointerData, event: event, details: details); } _callback(pointerData); }, acceptOutsideGlasspane: true); @@ -494,10 +512,12 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { _addPointerEventListener('pointerup', (html.PointerEvent event) { final int device = event.pointerId!; final List pointerData = []; - final _SanitizedDetails? details = _getSanitizer(device).sanitizeUpEvent(); + final _SanitizedDetails? details = + _getSanitizer(device).sanitizeUpEvent(); _removePointerIfUnhoverable(event); if (details != null) { - _convertEventsToPointerData(data: pointerData, event: event, details: details); + _convertEventsToPointerData( + data: pointerData, event: event, details: details); } _callback(pointerData); }, acceptOutsideGlasspane: true); @@ -507,21 +527,16 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { _addPointerEventListener('pointercancel', (html.PointerEvent event) { final int device = event.pointerId!; final List pointerData = []; - final _SanitizedDetails details = _getSanitizer(device).sanitizeCancelEvent(); + final _SanitizedDetails details = + _getSanitizer(device).sanitizeCancelEvent(); _removePointerIfUnhoverable(event); - _convertEventsToPointerData(data: pointerData, event: event, details: details); + _convertEventsToPointerData( + data: pointerData, event: event, details: details); _callback(pointerData); }); _addWheelEventListener((html.Event event) { - assert(event is html.WheelEvent); - if (_debugLogPointerEvents) { - print(event.type); - } - _callback(_convertWheelEventToPointerData(event as html.WheelEvent)); - // Prevent default so mouse wheel event doesn't get converted to - // a scroll event that semantic nodes would process. - event.preventDefault(); + _handleWheelEvent(event, _callback); }); } @@ -535,13 +550,16 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { assert(data != null); // ignore: unnecessary_null_comparison assert(event != null); // ignore: unnecessary_null_comparison assert(details != null); // ignore: unnecessary_null_comparison - final ui.PointerDeviceKind kind = _pointerTypeToDeviceKind(event.pointerType!); + final ui.PointerDeviceKind kind = + _pointerTypeToDeviceKind(event.pointerType!); // We force `device: _mouseDeviceId` on mouse pointers because Wheel events // might come before any PointerEvents, and since wheel events don't contain // pointerId we always assign `device: _mouseDeviceId` to them. - final int device = kind == ui.PointerDeviceKind.mouse ? _mouseDeviceId : event.pointerId!; + final int device = + kind == ui.PointerDeviceKind.mouse ? _mouseDeviceId : event.pointerId!; final double tilt = _computeHighestTilt(event); - final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = + _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); _pointerDataConverter.convert( data, change: details.change, @@ -598,16 +616,19 @@ typedef _TouchEventListener = dynamic Function(html.TouchEvent event); /// Adapter to be used with browsers that support touch events. class _TouchAdapter extends _BaseAdapter { - _TouchAdapter( - _PointerDataCallback callback, - html.Element glassPaneElement, - PointerDataConverter pointerDataConverter - ) : super(callback, glassPaneElement, pointerDataConverter); + _TouchAdapter(_PointerDataCallback callback, html.Element glassPaneElement, + PointerDataConverter pointerDataConverter) + : super(callback, glassPaneElement, pointerDataConverter); final Set _pressedTouches = {}; bool _isTouchPressed(int identifier) => _pressedTouches.contains(identifier); - void _pressTouch(int identifier) { _pressedTouches.add(identifier); } - void _unpressTouch(int identifier) { _pressedTouches.remove(identifier); } + void _pressTouch(int identifier) { + _pressedTouches.add(identifier); + } + + void _unpressTouch(int identifier) { + _pressedTouches.remove(identifier); + } void _addTouchEventListener(String eventName, _TouchEventListener handler) { addEventListener(eventName, (html.Event event) { @@ -619,7 +640,8 @@ class _TouchAdapter extends _BaseAdapter { @override void setup() { _addTouchEventListener('touchstart', (html.TouchEvent event) { - final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = + _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (html.Touch touch in event.changedTouches!) { final nowPressed = _isTouchPressed(touch.identifier!); @@ -639,7 +661,8 @@ class _TouchAdapter extends _BaseAdapter { _addTouchEventListener('touchmove', (html.TouchEvent event) { event.preventDefault(); // Prevents standard overscroll on iOS/Webkit. - final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = + _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (html.Touch touch in event.changedTouches!) { final nowPressed = _isTouchPressed(touch.identifier!); @@ -660,7 +683,8 @@ class _TouchAdapter extends _BaseAdapter { // On Safari Mobile, the keyboard does not show unless this line is // added. event.preventDefault(); - final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = + _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (html.Touch touch in event.changedTouches!) { final nowPressed = _isTouchPressed(touch.identifier!); @@ -679,7 +703,8 @@ class _TouchAdapter extends _BaseAdapter { }); _addTouchEventListener('touchcancel', (html.TouchEvent event) { - final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = + _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (html.Touch touch in event.changedTouches!) { final nowPressed = _isTouchPressed(touch.identifier!); @@ -743,11 +768,9 @@ typedef _MouseEventListener = dynamic Function(html.MouseEvent event); /// * The type of events for changing buttons during a drag sequence. /// * The `button` for dragging or hovering. class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { - _MouseAdapter( - _PointerDataCallback callback, - html.Element glassPaneElement, - PointerDataConverter pointerDataConverter - ) : super(callback, glassPaneElement, pointerDataConverter); + _MouseAdapter(_PointerDataCallback callback, html.Element glassPaneElement, + PointerDataConverter pointerDataConverter) + : super(callback, glassPaneElement, pointerDataConverter); final _ButtonSanitizer _sanitizer = _ButtonSanitizer(); @@ -766,41 +789,37 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { void setup() { _addMouseEventListener('mousedown', (html.MouseEvent event) { final List pointerData = []; - final _SanitizedDetails sanitizedDetails = - _sanitizer.sanitizeDownEvent( - button: event.button, - buttons: event.buttons!, - ); - _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); + final _SanitizedDetails sanitizedDetails = _sanitizer.sanitizeDownEvent( + button: event.button, + buttons: event.buttons!, + ); + _convertEventsToPointerData( + data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); }); _addMouseEventListener('mousemove', (html.MouseEvent event) { final List pointerData = []; - final _SanitizedDetails sanitizedDetails = _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); - _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); + final _SanitizedDetails sanitizedDetails = + _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); + _convertEventsToPointerData( + data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); }, acceptOutsideGlasspane: true); _addMouseEventListener('mouseup', (html.MouseEvent event) { final List pointerData = []; final bool isEndOfDrag = event.buttons == 0; - final _SanitizedDetails sanitizedDetails = isEndOfDrag ? - _sanitizer.sanitizeUpEvent()! : - _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); - _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); + final _SanitizedDetails sanitizedDetails = isEndOfDrag + ? _sanitizer.sanitizeUpEvent()! + : _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); + _convertEventsToPointerData( + data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); }, acceptOutsideGlasspane: true); _addWheelEventListener((html.Event event) { - assert(event is html.WheelEvent); - if (_debugLogPointerEvents) { - print(event.type); - } - _callback(_convertWheelEventToPointerData(event as html.WheelEvent)); - // Prevent default so mouse wheel event doesn't get converted to - // a scroll event that semantic nodes would process. - event.preventDefault(); + _handleWheelEvent(event, _callback); }); } From 5845222591dda585db71d4bc67f863f4e00d77e5 Mon Sep 17 00:00:00 2001 From: ferhatb Date: Tue, 3 Nov 2020 17:22:33 -0800 Subject: [PATCH 2/4] Default all OSs except mac --- lib/web_ui/lib/src/engine/pointer_binding.dart | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/lib/web_ui/lib/src/engine/pointer_binding.dart b/lib/web_ui/lib/src/engine/pointer_binding.dart index b8b810bfa7527..9d16b6d1516fc 100644 --- a/lib/web_ui/lib/src/engine/pointer_binding.dart +++ b/lib/web_ui/lib/src/engine/pointer_binding.dart @@ -316,10 +316,13 @@ mixin _WheelEventListenerMixin on _BaseAdapter { if (_debugLogPointerEvents) { print(event.type); } - if (operatingSystem == OperatingSystem.windows && - event.getModifierState('Control')) { - // Ignore Control+wheel events on windows since the default handler + if (event.getModifierState('Control') && + operatingSystem != OperatingSystem.macOs && + operatingSystem != OperatingSystem.iOs) { + // Ignore Control+wheel events since the default handler // will change browser zoom level instead of scrolling. + // The exception is MacOs where Control+wheel will still scroll and zoom + // is not implemented. return; } _callback(_convertWheelEventToPointerData(event)); From 2cba4ffc08648ea7bd3b3353b89a61b4fc0989c6 Mon Sep 17 00:00:00 2001 From: ferhatb Date: Tue, 3 Nov 2020 17:31:57 -0800 Subject: [PATCH 3/4] revert dartfmt changes --- .../lib/src/engine/pointer_binding.dart | 231 +++++++++--------- 1 file changed, 109 insertions(+), 122 deletions(-) diff --git a/lib/web_ui/lib/src/engine/pointer_binding.dart b/lib/web_ui/lib/src/engine/pointer_binding.dart index 9d16b6d1516fc..3e238af36b132 100644 --- a/lib/web_ui/lib/src/engine/pointer_binding.dart +++ b/lib/web_ui/lib/src/engine/pointer_binding.dart @@ -23,7 +23,7 @@ const int _mouseDeviceId = -1; const int _kPrimaryMouseButton = 0x1; const int _kSecondaryMouseButton = 0x2; -const int _kMiddleMouseButton = 0x4; +const int _kMiddleMouseButton =0x4; int _nthButton(int n) => 0x1 << n; @@ -40,7 +40,7 @@ int _nthButton(int n) => 0x1 << n; @visibleForTesting int convertButtonToButtons(int button) { assert(button >= 0, 'Unexpected negative button $button.'); - switch (button) { + switch(button) { case 0: return _kPrimaryMouseButton; case 1: @@ -112,24 +112,19 @@ class PointerBinding { _BaseAdapter _createAdapter() { if (_detector.hasPointerEvents) { - return _PointerAdapter( - _onPointerData, glassPaneElement, _pointerDataConverter); + return _PointerAdapter(_onPointerData, glassPaneElement, _pointerDataConverter); } if (_detector.hasTouchEvents) { - return _TouchAdapter( - _onPointerData, glassPaneElement, _pointerDataConverter); + return _TouchAdapter(_onPointerData, glassPaneElement, _pointerDataConverter); } if (_detector.hasMouseEvents) { - return _MouseAdapter( - _onPointerData, glassPaneElement, _pointerDataConverter); + return _MouseAdapter(_onPointerData, glassPaneElement, _pointerDataConverter); } - throw UnsupportedError( - 'This browser does not support pointer, touch, or mouse events.'); + throw UnsupportedError('This browser does not support pointer, touch, or mouse events.'); } void _onPointerData(Iterable data) { - final ui.PointerDataPacket packet = - ui.PointerDataPacket(data: data.toList()); + final ui.PointerDataPacket packet = ui.PointerDataPacket(data: data.toList()); EnginePlatformDispatcher.instance.invokeOnPointerDataPacket(packet); } } @@ -148,18 +143,16 @@ class PointerSupportDetector { /// Common functionality that's shared among adapters. abstract class _BaseAdapter { - _BaseAdapter( - this._callback, this.glassPaneElement, this._pointerDataConverter) { + _BaseAdapter(this._callback, this.glassPaneElement, this._pointerDataConverter) { setup(); } /// Listeners that are registered through dart to js api. static final Map _listeners = - {}; - + {}; /// Listeners that are registered through native javascript api. static final Map _nativeListeners = - {}; + {}; final html.Element glassPaneElement; _PointerDataCallback _callback; PointerDataConverter _pointerDataConverter; @@ -176,10 +169,13 @@ abstract class _BaseAdapter { // For native listener, we will need to remove it through native javascript // api. _nativeListeners.forEach((String eventName, html.EventListener listener) { - js_util.callMethod(glassPaneElement, 'removeEventListener', [ + js_util.callMethod( + glassPaneElement, + 'removeEventListener', [ 'wheel', listener, - ]); + ] + ); }); _listeners.clear(); _nativeListeners.clear(); @@ -193,13 +189,12 @@ abstract class _BaseAdapter { /// If [acceptOutsideGlasspane] is set to true, events outside of the /// glasspane will also invoke the [handler]. void addEventListener( - String eventName, - html.EventListener handler, { - bool acceptOutsideGlasspane = false, - }) { + String eventName, + html.EventListener handler, { + bool acceptOutsideGlasspane = false, + }) { final html.EventListener loggedHandler = (html.Event event) { - if (!acceptOutsideGlasspane && - !glassPaneElement.contains(event.target as html.Node?)) { + if (!acceptOutsideGlasspane && !glassPaneElement.contains(event.target as html.Node?)) { return; } @@ -226,7 +221,7 @@ abstract class _BaseAdapter { static Duration _eventTimeStampToDuration(num milliseconds) { final int ms = milliseconds.toInt(); final int micro = - ((milliseconds - ms) * Duration.microsecondsPerMillisecond).toInt(); + ((milliseconds - ms) * Duration.microsecondsPerMillisecond).toInt(); return Duration(milliseconds: ms, microseconds: micro); } } @@ -234,7 +229,9 @@ abstract class _BaseAdapter { mixin _WheelEventListenerMixin on _BaseAdapter { static double? _defaultScrollLineHeight; - List _convertWheelEventToPointerData(html.WheelEvent event) { + List _convertWheelEventToPointerData( + html.WheelEvent event + ) { const int domDeltaPixel = 0x00; const int domDeltaLine = 0x01; const int domDeltaPage = 0x02; @@ -280,33 +277,17 @@ mixin _WheelEventListenerMixin on _BaseAdapter { void _addWheelEventListener(html.EventListener handler) { final dynamic eventOptions = js_util.newObject(); - final html.EventListener jsHandler = - js.allowInterop((html.Event event) => handler(event)); + final html.EventListener jsHandler = js.allowInterop((html.Event event) => handler(event)); _BaseAdapter._nativeListeners['wheel'] = jsHandler; js_util.setProperty(eventOptions, 'passive', false); - js_util.callMethod(glassPaneElement, 'addEventListener', - ['wheel', jsHandler, eventOptions]); - } - - /// For browsers that report delta line instead of pixels such as FireFox - /// compute line height using the default font size. - /// - /// Use Firefox to test this code path. - double _computeDefaultScrollLineHeight() { - const double kFallbackFontHeight = 16.0; - final html.DivElement probe = html.DivElement(); - probe.style - ..fontSize = 'initial' - ..display = 'none'; - html.document.body!.append(probe); - String fontSize = probe.getComputedStyle().fontSize; - double? res; - if (fontSize.contains('px')) { - fontSize = fontSize.replaceAll('px', ''); - res = double.tryParse(fontSize); - } - probe.remove(); - return res == null ? kFallbackFontHeight : res / 4.0; + js_util.callMethod( + glassPaneElement, + 'addEventListener', [ + 'wheel', + jsHandler, + eventOptions + ] + ); } void _handleWheelEvent( @@ -331,6 +312,27 @@ mixin _WheelEventListenerMixin on _BaseAdapter { // event.preventDefault(); } + + /// For browsers that report delta line instead of pixels such as FireFox + /// compute line height using the default font size. + /// + /// Use Firefox to test this code path. + double _computeDefaultScrollLineHeight() { + const double kFallbackFontHeight = 16.0; + final html.DivElement probe = html.DivElement(); + probe.style + ..fontSize = 'initial' + ..display = 'none'; + html.document.body!.append(probe); + String fontSize = probe.getComputedStyle().fontSize; + double? res; + if (fontSize.contains('px')) { + fontSize = fontSize.replaceAll('px', ''); + res = double.tryParse(fontSize); + } + probe.remove(); + return res == null ? kFallbackFontHeight : res / 4.0; + } } @immutable @@ -412,8 +414,9 @@ class _ButtonSanitizer { _pressedButtons = newPressedButtons; return _SanitizedDetails( - change: - _pressedButtons == 0 ? ui.PointerChange.hover : ui.PointerChange.move, + change: _pressedButtons == 0 + ? ui.PointerChange.hover + : ui.PointerChange.move, buttons: _pressedButtons, ); } @@ -446,9 +449,11 @@ typedef _PointerEventListener = dynamic Function(html.PointerEvent event); /// /// For the difference between MouseEvent and PointerEvent, see _MouseAdapter. class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { - _PointerAdapter(_PointerDataCallback callback, html.Element glassPaneElement, - PointerDataConverter pointerDataConverter) - : super(callback, glassPaneElement, pointerDataConverter); + _PointerAdapter( + _PointerDataCallback callback, + html.Element glassPaneElement, + PointerDataConverter pointerDataConverter + ) : super(callback, glassPaneElement, pointerDataConverter); final Map _sanitizers = {}; @@ -472,10 +477,10 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { } void _addPointerEventListener( - String eventName, - _PointerEventListener handler, { - bool acceptOutsideGlasspane = false, - }) { + String eventName, + _PointerEventListener handler, { + bool acceptOutsideGlasspane = false, + }) { addEventListener(eventName, (html.Event event) { final html.PointerEvent pointerEvent = event as html.PointerEvent; return handler(pointerEvent); @@ -488,12 +493,11 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final int device = event.pointerId!; final List pointerData = []; final _SanitizedDetails details = - _ensureSanitizer(device).sanitizeDownEvent( + _ensureSanitizer(device).sanitizeDownEvent( button: event.button, buttons: event.buttons!, ); - _convertEventsToPointerData( - data: pointerData, event: event, details: details); + _convertEventsToPointerData(data: pointerData, event: event, details: details); _callback(pointerData); }); @@ -502,12 +506,10 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final _ButtonSanitizer sanitizer = _ensureSanitizer(device); final List pointerData = []; final Iterable<_SanitizedDetails> detailsList = _expandEvents(event).map( - (html.PointerEvent expandedEvent) => - sanitizer.sanitizeMoveEvent(buttons: expandedEvent.buttons!), + (html.PointerEvent expandedEvent) => sanitizer.sanitizeMoveEvent(buttons: expandedEvent.buttons!), ); for (_SanitizedDetails details in detailsList) { - _convertEventsToPointerData( - data: pointerData, event: event, details: details); + _convertEventsToPointerData(data: pointerData, event: event, details: details); } _callback(pointerData); }, acceptOutsideGlasspane: true); @@ -515,12 +517,10 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { _addPointerEventListener('pointerup', (html.PointerEvent event) { final int device = event.pointerId!; final List pointerData = []; - final _SanitizedDetails? details = - _getSanitizer(device).sanitizeUpEvent(); + final _SanitizedDetails? details = _getSanitizer(device).sanitizeUpEvent(); _removePointerIfUnhoverable(event); if (details != null) { - _convertEventsToPointerData( - data: pointerData, event: event, details: details); + _convertEventsToPointerData(data: pointerData, event: event, details: details); } _callback(pointerData); }, acceptOutsideGlasspane: true); @@ -530,11 +530,9 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { _addPointerEventListener('pointercancel', (html.PointerEvent event) { final int device = event.pointerId!; final List pointerData = []; - final _SanitizedDetails details = - _getSanitizer(device).sanitizeCancelEvent(); + final _SanitizedDetails details = _getSanitizer(device).sanitizeCancelEvent(); _removePointerIfUnhoverable(event); - _convertEventsToPointerData( - data: pointerData, event: event, details: details); + _convertEventsToPointerData(data: pointerData, event: event, details: details); _callback(pointerData); }); @@ -553,16 +551,13 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { assert(data != null); // ignore: unnecessary_null_comparison assert(event != null); // ignore: unnecessary_null_comparison assert(details != null); // ignore: unnecessary_null_comparison - final ui.PointerDeviceKind kind = - _pointerTypeToDeviceKind(event.pointerType!); + final ui.PointerDeviceKind kind = _pointerTypeToDeviceKind(event.pointerType!); // We force `device: _mouseDeviceId` on mouse pointers because Wheel events // might come before any PointerEvents, and since wheel events don't contain // pointerId we always assign `device: _mouseDeviceId` to them. - final int device = - kind == ui.PointerDeviceKind.mouse ? _mouseDeviceId : event.pointerId!; + final int device = kind == ui.PointerDeviceKind.mouse ? _mouseDeviceId : event.pointerId!; final double tilt = _computeHighestTilt(event); - final Duration timeStamp = - _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); _pointerDataConverter.convert( data, change: details.change, @@ -585,7 +580,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { // using the original event. if (js_util.hasProperty(event, 'getCoalescedEvents')) { final List coalescedEvents = - event.getCoalescedEvents().cast(); + event.getCoalescedEvents().cast(); // Some events don't perform coalescing, so they return an empty list. In // that case, we also fallback to using the original event. if (coalescedEvents.isNotEmpty) { @@ -611,27 +606,24 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { /// Tilt angle is -90 to + 90. Take maximum deflection and convert to radians. double _computeHighestTilt(html.PointerEvent e) => (e.tiltX!.abs() > e.tiltY!.abs() ? e.tiltX : e.tiltY)!.toDouble() / - 180.0 * - math.pi; + 180.0 * + math.pi; } typedef _TouchEventListener = dynamic Function(html.TouchEvent event); /// Adapter to be used with browsers that support touch events. class _TouchAdapter extends _BaseAdapter { - _TouchAdapter(_PointerDataCallback callback, html.Element glassPaneElement, - PointerDataConverter pointerDataConverter) - : super(callback, glassPaneElement, pointerDataConverter); + _TouchAdapter( + _PointerDataCallback callback, + html.Element glassPaneElement, + PointerDataConverter pointerDataConverter + ) : super(callback, glassPaneElement, pointerDataConverter); final Set _pressedTouches = {}; bool _isTouchPressed(int identifier) => _pressedTouches.contains(identifier); - void _pressTouch(int identifier) { - _pressedTouches.add(identifier); - } - - void _unpressTouch(int identifier) { - _pressedTouches.remove(identifier); - } + void _pressTouch(int identifier) { _pressedTouches.add(identifier); } + void _unpressTouch(int identifier) { _pressedTouches.remove(identifier); } void _addTouchEventListener(String eventName, _TouchEventListener handler) { addEventListener(eventName, (html.Event event) { @@ -643,8 +635,7 @@ class _TouchAdapter extends _BaseAdapter { @override void setup() { _addTouchEventListener('touchstart', (html.TouchEvent event) { - final Duration timeStamp = - _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (html.Touch touch in event.changedTouches!) { final nowPressed = _isTouchPressed(touch.identifier!); @@ -664,8 +655,7 @@ class _TouchAdapter extends _BaseAdapter { _addTouchEventListener('touchmove', (html.TouchEvent event) { event.preventDefault(); // Prevents standard overscroll on iOS/Webkit. - final Duration timeStamp = - _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (html.Touch touch in event.changedTouches!) { final nowPressed = _isTouchPressed(touch.identifier!); @@ -686,8 +676,7 @@ class _TouchAdapter extends _BaseAdapter { // On Safari Mobile, the keyboard does not show unless this line is // added. event.preventDefault(); - final Duration timeStamp = - _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (html.Touch touch in event.changedTouches!) { final nowPressed = _isTouchPressed(touch.identifier!); @@ -706,8 +695,7 @@ class _TouchAdapter extends _BaseAdapter { }); _addTouchEventListener('touchcancel', (html.TouchEvent event) { - final Duration timeStamp = - _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); + final Duration timeStamp = _BaseAdapter._eventTimeStampToDuration(event.timeStamp!); final List pointerData = []; for (html.Touch touch in event.changedTouches!) { final nowPressed = _isTouchPressed(touch.identifier!); @@ -771,17 +759,19 @@ typedef _MouseEventListener = dynamic Function(html.MouseEvent event); /// * The type of events for changing buttons during a drag sequence. /// * The `button` for dragging or hovering. class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { - _MouseAdapter(_PointerDataCallback callback, html.Element glassPaneElement, - PointerDataConverter pointerDataConverter) - : super(callback, glassPaneElement, pointerDataConverter); + _MouseAdapter( + _PointerDataCallback callback, + html.Element glassPaneElement, + PointerDataConverter pointerDataConverter + ) : super(callback, glassPaneElement, pointerDataConverter); final _ButtonSanitizer _sanitizer = _ButtonSanitizer(); void _addMouseEventListener( - String eventName, - _MouseEventListener handler, { - bool acceptOutsideGlasspane = false, - }) { + String eventName, + _MouseEventListener handler, { + bool acceptOutsideGlasspane = false, + }) { addEventListener(eventName, (html.Event event) { final html.MouseEvent mouseEvent = event as html.MouseEvent; return handler(mouseEvent); @@ -792,32 +782,29 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { void setup() { _addMouseEventListener('mousedown', (html.MouseEvent event) { final List pointerData = []; - final _SanitizedDetails sanitizedDetails = _sanitizer.sanitizeDownEvent( + final _SanitizedDetails sanitizedDetails = + _sanitizer.sanitizeDownEvent( button: event.button, buttons: event.buttons!, ); - _convertEventsToPointerData( - data: pointerData, event: event, details: sanitizedDetails); + _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); }); _addMouseEventListener('mousemove', (html.MouseEvent event) { final List pointerData = []; - final _SanitizedDetails sanitizedDetails = - _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); - _convertEventsToPointerData( - data: pointerData, event: event, details: sanitizedDetails); + final _SanitizedDetails sanitizedDetails = _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); + _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); }, acceptOutsideGlasspane: true); _addMouseEventListener('mouseup', (html.MouseEvent event) { final List pointerData = []; final bool isEndOfDrag = event.buttons == 0; - final _SanitizedDetails sanitizedDetails = isEndOfDrag - ? _sanitizer.sanitizeUpEvent()! - : _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); - _convertEventsToPointerData( - data: pointerData, event: event, details: sanitizedDetails); + final _SanitizedDetails sanitizedDetails = isEndOfDrag ? + _sanitizer.sanitizeUpEvent()! : + _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); + _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); }, acceptOutsideGlasspane: true); From bfb7a791dbe050bd5295cc68ac9b52f907aef844 Mon Sep 17 00:00:00 2001 From: ferhatb Date: Tue, 3 Nov 2020 17:36:57 -0800 Subject: [PATCH 4/4] revert dartfmt changes2 --- .../lib/src/engine/pointer_binding.dart | 120 +++++++++--------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/lib/web_ui/lib/src/engine/pointer_binding.dart b/lib/web_ui/lib/src/engine/pointer_binding.dart index 3e238af36b132..675a90374f0d8 100644 --- a/lib/web_ui/lib/src/engine/pointer_binding.dart +++ b/lib/web_ui/lib/src/engine/pointer_binding.dart @@ -71,8 +71,8 @@ class PointerBinding { } PointerBinding._(this.glassPaneElement) - : _pointerDataConverter = PointerDataConverter(), - _detector = const PointerSupportDetector() { + : _pointerDataConverter = PointerDataConverter(), + _detector = const PointerSupportDetector() { _adapter = _createAdapter(); } @@ -149,10 +149,10 @@ abstract class _BaseAdapter { /// Listeners that are registered through dart to js api. static final Map _listeners = - {}; + {}; /// Listeners that are registered through native javascript api. static final Map _nativeListeners = - {}; + {}; final html.Element glassPaneElement; _PointerDataCallback _callback; PointerDataConverter _pointerDataConverter; @@ -164,17 +164,17 @@ abstract class _BaseAdapter { /// Remove all active event listeners. void clearListeners() { _listeners.forEach((String eventName, html.EventListener listener) { - html.window.removeEventListener(eventName, listener, true); + html.window.removeEventListener(eventName, listener, true); }); // For native listener, we will need to remove it through native javascript // api. _nativeListeners.forEach((String eventName, html.EventListener listener) { js_util.callMethod( - glassPaneElement, - 'removeEventListener', [ - 'wheel', - listener, - ] + glassPaneElement, + 'removeEventListener', [ + 'wheel', + listener, + ] ); }); _listeners.clear(); @@ -189,10 +189,10 @@ abstract class _BaseAdapter { /// If [acceptOutsideGlasspane] is set to true, events outside of the /// glasspane will also invoke the [handler]. void addEventListener( - String eventName, - html.EventListener handler, { - bool acceptOutsideGlasspane = false, - }) { + String eventName, + html.EventListener handler, { + bool acceptOutsideGlasspane = false, + }) { final html.EventListener loggedHandler = (html.Event event) { if (!acceptOutsideGlasspane && !glassPaneElement.contains(event.target as html.Node?)) { return; @@ -230,8 +230,8 @@ mixin _WheelEventListenerMixin on _BaseAdapter { static double? _defaultScrollLineHeight; List _convertWheelEventToPointerData( - html.WheelEvent event - ) { + html.WheelEvent event + ) { const int domDeltaPixel = 0x00; const int domDeltaLine = 0x01; const int domDeltaPage = 0x02; @@ -281,12 +281,12 @@ mixin _WheelEventListenerMixin on _BaseAdapter { _BaseAdapter._nativeListeners['wheel'] = jsHandler; js_util.setProperty(eventOptions, 'passive', false); js_util.callMethod( - glassPaneElement, - 'addEventListener', [ - 'wheel', - jsHandler, - eventOptions - ] + glassPaneElement, + 'addEventListener', [ + 'wheel', + jsHandler, + eventOptions + ] ); } @@ -321,14 +321,14 @@ mixin _WheelEventListenerMixin on _BaseAdapter { const double kFallbackFontHeight = 16.0; final html.DivElement probe = html.DivElement(); probe.style - ..fontSize = 'initial' - ..display = 'none'; + ..fontSize = 'initial' + ..display = 'none'; html.document.body!.append(probe); String fontSize = probe.getComputedStyle().fontSize; double? res; if (fontSize.contains('px')) { - fontSize = fontSize.replaceAll('px', ''); - res = double.tryParse(fontSize); + fontSize = fontSize.replaceAll('px', ''); + res = double.tryParse(fontSize); } probe.remove(); return res == null ? kFallbackFontHeight : res / 4.0; @@ -450,10 +450,10 @@ typedef _PointerEventListener = dynamic Function(html.PointerEvent event); /// For the difference between MouseEvent and PointerEvent, see _MouseAdapter. class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { _PointerAdapter( - _PointerDataCallback callback, - html.Element glassPaneElement, - PointerDataConverter pointerDataConverter - ) : super(callback, glassPaneElement, pointerDataConverter); + _PointerDataCallback callback, + html.Element glassPaneElement, + PointerDataConverter pointerDataConverter + ) : super(callback, glassPaneElement, pointerDataConverter); final Map _sanitizers = {}; @@ -477,10 +477,10 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { } void _addPointerEventListener( - String eventName, - _PointerEventListener handler, { - bool acceptOutsideGlasspane = false, - }) { + String eventName, + _PointerEventListener handler, { + bool acceptOutsideGlasspane = false, + }) { addEventListener(eventName, (html.Event event) { final html.PointerEvent pointerEvent = event as html.PointerEvent; return handler(pointerEvent); @@ -493,10 +493,10 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final int device = event.pointerId!; final List pointerData = []; final _SanitizedDetails details = - _ensureSanitizer(device).sanitizeDownEvent( - button: event.button, - buttons: event.buttons!, - ); + _ensureSanitizer(device).sanitizeDownEvent( + button: event.button, + buttons: event.buttons!, + ); _convertEventsToPointerData(data: pointerData, event: event, details: details); _callback(pointerData); }); @@ -506,7 +506,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { final _ButtonSanitizer sanitizer = _ensureSanitizer(device); final List pointerData = []; final Iterable<_SanitizedDetails> detailsList = _expandEvents(event).map( - (html.PointerEvent expandedEvent) => sanitizer.sanitizeMoveEvent(buttons: expandedEvent.buttons!), + (html.PointerEvent expandedEvent) => sanitizer.sanitizeMoveEvent(buttons: expandedEvent.buttons!), ); for (_SanitizedDetails details in detailsList) { _convertEventsToPointerData(data: pointerData, event: event, details: details); @@ -580,7 +580,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { // using the original event. if (js_util.hasProperty(event, 'getCoalescedEvents')) { final List coalescedEvents = - event.getCoalescedEvents().cast(); + event.getCoalescedEvents().cast(); // Some events don't perform coalescing, so they return an empty list. In // that case, we also fallback to using the original event. if (coalescedEvents.isNotEmpty) { @@ -606,8 +606,8 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin { /// Tilt angle is -90 to + 90. Take maximum deflection and convert to radians. double _computeHighestTilt(html.PointerEvent e) => (e.tiltX!.abs() > e.tiltY!.abs() ? e.tiltX : e.tiltY)!.toDouble() / - 180.0 * - math.pi; + 180.0 * + math.pi; } typedef _TouchEventListener = dynamic Function(html.TouchEvent event); @@ -615,10 +615,10 @@ typedef _TouchEventListener = dynamic Function(html.TouchEvent event); /// Adapter to be used with browsers that support touch events. class _TouchAdapter extends _BaseAdapter { _TouchAdapter( - _PointerDataCallback callback, - html.Element glassPaneElement, - PointerDataConverter pointerDataConverter - ) : super(callback, glassPaneElement, pointerDataConverter); + _PointerDataCallback callback, + html.Element glassPaneElement, + PointerDataConverter pointerDataConverter + ) : super(callback, glassPaneElement, pointerDataConverter); final Set _pressedTouches = {}; bool _isTouchPressed(int identifier) => _pressedTouches.contains(identifier); @@ -760,18 +760,18 @@ typedef _MouseEventListener = dynamic Function(html.MouseEvent event); /// * The `button` for dragging or hovering. class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { _MouseAdapter( - _PointerDataCallback callback, - html.Element glassPaneElement, - PointerDataConverter pointerDataConverter - ) : super(callback, glassPaneElement, pointerDataConverter); + _PointerDataCallback callback, + html.Element glassPaneElement, + PointerDataConverter pointerDataConverter + ) : super(callback, glassPaneElement, pointerDataConverter); final _ButtonSanitizer _sanitizer = _ButtonSanitizer(); void _addMouseEventListener( - String eventName, - _MouseEventListener handler, { - bool acceptOutsideGlasspane = false, - }) { + String eventName, + _MouseEventListener handler, { + bool acceptOutsideGlasspane = false, + }) { addEventListener(eventName, (html.Event event) { final html.MouseEvent mouseEvent = event as html.MouseEvent; return handler(mouseEvent); @@ -783,10 +783,10 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { _addMouseEventListener('mousedown', (html.MouseEvent event) { final List pointerData = []; final _SanitizedDetails sanitizedDetails = - _sanitizer.sanitizeDownEvent( - button: event.button, - buttons: event.buttons!, - ); + _sanitizer.sanitizeDownEvent( + button: event.button, + buttons: event.buttons!, + ); _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); }); @@ -802,8 +802,8 @@ class _MouseAdapter extends _BaseAdapter with _WheelEventListenerMixin { final List pointerData = []; final bool isEndOfDrag = event.buttons == 0; final _SanitizedDetails sanitizedDetails = isEndOfDrag ? - _sanitizer.sanitizeUpEvent()! : - _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); + _sanitizer.sanitizeUpEvent()! : + _sanitizer.sanitizeMoveEvent(buttons: event.buttons!); _convertEventsToPointerData(data: pointerData, event: event, details: sanitizedDetails); _callback(pointerData); }, acceptOutsideGlasspane: true);