5
5
import 'dart:math' as math;
6
6
7
7
import 'package:meta/meta.dart' ;
8
+ import 'package:ui/src/engine/keyboard_binding.dart' ;
8
9
import 'package:ui/ui.dart' as ui;
9
10
10
11
import '../engine.dart' show registerHotRestartListener;
@@ -609,9 +610,19 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
609
610
}, useCapture: useCapture);
610
611
}
611
612
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
+
612
622
@override
613
623
void setup () {
614
624
_addPointerEventListener (glassPaneElement, 'pointerdown' , (DomPointerEvent event) {
625
+ _checkModifiersState (event);
615
626
final int device = _getPointerId (event);
616
627
final List <ui.PointerData > pointerData = < ui.PointerData > [];
617
628
final _ButtonSanitizer sanitizer = _ensureSanitizer (device);
@@ -630,6 +641,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
630
641
});
631
642
632
643
_addPointerEventListener (domWindow, 'pointermove' , (DomPointerEvent event) {
644
+ _checkModifiersState (event);
633
645
final int device = _getPointerId (event);
634
646
final _ButtonSanitizer sanitizer = _ensureSanitizer (device);
635
647
final List <ui.PointerData > pointerData = < ui.PointerData > [];
@@ -657,6 +669,7 @@ class _PointerAdapter extends _BaseAdapter with _WheelEventListenerMixin {
657
669
}, useCapture: false );
658
670
659
671
_addPointerEventListener (domWindow, 'pointerup' , (DomPointerEvent event) {
672
+ _checkModifiersState (event);
660
673
final int device = _getPointerId (event);
661
674
if (_hasSanitizer (device)) {
662
675
final List <ui.PointerData > pointerData = < ui.PointerData > [];
0 commit comments