55import 'dart:math' as math;
66
77import 'package:meta/meta.dart' ;
8+ import 'package:ui/src/engine/keyboard_binding.dart' ;
89import 'package:ui/ui.dart' as ui;
910
1011import '../engine.dart' show registerHotRestartListener;
@@ -609,9 +610,19 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
609610 }, useCapture: useCapture);
610611 }
611612
613+ void _checkModifiersState (DomEvent event) {
614+ // TODO(bleroux): add support for 'Meta', 'Ctrl' and 'Alt'
615+ final DomPointerEvent pointerEvent = event as DomPointerEvent ;
616+ final bool shiftPressed = pointerEvent.getModifierState ('Shift' );
617+ KeyboardBinding .instance! .synthesizeShiftKeyIfNeeded (
618+ shiftPressed ? ui.KeyEventType .down : ui.KeyEventType .up,
619+ );
620+ }
621+
612622 @override
613623 void setup () {
614624 _addPointerEventListener (glassPaneElement, 'pointerdown' , (DomPointerEvent event) {
625+ _checkModifiersState (event);
615626 final int device = _getPointerId (event);
616627 final List <ui.PointerData > pointerData = < ui.PointerData > [];
617628 final _ButtonSanitizer sanitizer = _ensureSanitizer (device);
@@ -630,6 +641,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
630641 });
631642
632643 _addPointerEventListener (domWindow, 'pointermove' , (DomPointerEvent event) {
644+ _checkModifiersState (event);
633645 final int device = _getPointerId (event);
634646 final _ButtonSanitizer sanitizer = _ensureSanitizer (device);
635647 final List <ui.PointerData > pointerData = < ui.PointerData > [];
@@ -657,6 +669,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
657669 }, useCapture: false );
658670
659671 _addPointerEventListener (domWindow, 'pointerup' , (DomPointerEvent event) {
672+ _checkModifiersState (event);
660673 final int device = _getPointerId (event);
661674 if (_hasSanitizer (device)) {
662675 final List <ui.PointerData > pointerData = < ui.PointerData > [];
0 commit comments