@@ -234,6 +234,19 @@ void testMain() {
234
234
expect (events[1 ].buttons, equals (0 ));
235
235
expect (events[1 ].client.x, equals (0 ));
236
236
expect (events[1 ].client.y, equals (0 ));
237
+
238
+ context.pressAllModifiers ();
239
+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
240
+ expect (event.getModifierState ('Alt' ), true );
241
+ expect (event.getModifierState ('Control' ), true );
242
+ expect (event.getModifierState ('Meta' ), true );
243
+ expect (event.getModifierState ('Shift' ), true );
244
+ context.unpressAllModifiers ();
245
+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
246
+ expect (event.getModifierState ('Alt' ), false );
247
+ expect (event.getModifierState ('Control' ), false );
248
+ expect (event.getModifierState ('Meta' ), false );
249
+ expect (event.getModifierState ('Shift' ), false );
237
250
});
238
251
239
252
test ('_TouchEventContext generates expected events' , () {
@@ -330,6 +343,19 @@ void testMain() {
330
343
expect (events[0 ].changedTouches! [1 ].identifier, equals (105 ));
331
344
expect (events[0 ].changedTouches! [1 ].client.x, equals (322 ));
332
345
expect (events[0 ].changedTouches! [1 ].client.y, equals (323 ));
346
+
347
+ context.pressAllModifiers ();
348
+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
349
+ expect (event.altKey, true );
350
+ expect (event.ctrlKey, true );
351
+ expect (event.metaKey, true );
352
+ expect (event.shiftKey, true );
353
+ context.unpressAllModifiers ();
354
+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
355
+ expect (event.altKey, false );
356
+ expect (event.ctrlKey, false );
357
+ expect (event.metaKey, false );
358
+ expect (event.shiftKey, false );
333
359
});
334
360
335
361
test ('_MouseEventContext generates expected events' , () {
@@ -419,6 +445,19 @@ void testMain() {
419
445
expect (event.buttons, equals (0 ));
420
446
expect (event.client.x, equals (400 ));
421
447
expect (event.client.y, equals (401 ));
448
+
449
+ context.pressAllModifiers ();
450
+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
451
+ expect (event.getModifierState ('Alt' ), true );
452
+ expect (event.getModifierState ('Control' ), true );
453
+ expect (event.getModifierState ('Meta' ), true );
454
+ expect (event.getModifierState ('Shift' ), true );
455
+ context.unpressAllModifiers ();
456
+ event = expectCorrectType (context.primaryDown (clientX: 100 , clientY: 101 ));
457
+ expect (event.getModifierState ('Alt' ), false );
458
+ expect (event.getModifierState ('Control' ), false );
459
+ expect (event.getModifierState ('Meta' ), false );
460
+ expect (event.getModifierState ('Shift' ), false );
422
461
});
423
462
424
463
// ALL ADAPTERS
@@ -2420,6 +2459,15 @@ abstract class _BasicEventContext implements PointerSupportDetector {
2420
2459
2421
2460
bool get isSupported;
2422
2461
2462
+ // Accepted modifier keys are 'Alt', 'Control', 'Meta' and 'Shift'.
2463
+ // https://www.w3.org/TR/uievents-key/#keys-modifier defines more modifiers,
2464
+ // but only the four main modifiers could be set from MouseEvent, PointerEvent
2465
+ // and TouchEvent constructors.
2466
+ bool altPressed = false ;
2467
+ bool ctrlPressed = false ;
2468
+ bool metaPressed = false ;
2469
+ bool shitPressed = false ;
2470
+
2423
2471
// Generate an event that is:
2424
2472
//
2425
2473
// * For mouse, a left click
@@ -2437,6 +2485,20 @@ abstract class _BasicEventContext implements PointerSupportDetector {
2437
2485
// * For mouse, release LMB
2438
2486
// * For touch, a touch up
2439
2487
DomEvent primaryUp ({double clientX, double clientY});
2488
+
2489
+ void pressAllModifiers () {
2490
+ altPressed = true ;
2491
+ ctrlPressed = true ;
2492
+ metaPressed = true ;
2493
+ shitPressed = true ;
2494
+ }
2495
+
2496
+ void unpressAllModifiers () {
2497
+ altPressed = false ;
2498
+ ctrlPressed = false ;
2499
+ metaPressed = false ;
2500
+ shitPressed = false ;
2501
+ }
2440
2502
}
2441
2503
2442
2504
mixin _ButtonedEventMixin on _BasicEventContext {
@@ -2622,6 +2684,10 @@ class _TouchEventContext extends _BasicEventContext
2622
2684
),
2623
2685
)
2624
2686
.toList (),
2687
+ 'altKey' : altPressed,
2688
+ 'ctrlKey' : ctrlPressed,
2689
+ 'metaKey' : metaPressed,
2690
+ 'shiftKey' : shitPressed,
2625
2691
},
2626
2692
);
2627
2693
}
@@ -2757,6 +2823,10 @@ class _MouseEventContext extends _BasicEventContext
2757
2823
'button' : button,
2758
2824
'clientX' : clientX,
2759
2825
'clientY' : clientY,
2826
+ 'altKey' : altPressed,
2827
+ 'ctrlKey' : ctrlPressed,
2828
+ 'metaKey' : metaPressed,
2829
+ 'shiftKey' : shitPressed,
2760
2830
}
2761
2831
];
2762
2832
return js_util.callConstructor <DomMouseEvent >(
@@ -2835,6 +2905,10 @@ class _PointerEventContext extends _BasicEventContext
2835
2905
'clientX' : clientX,
2836
2906
'clientY' : clientY,
2837
2907
'pointerType' : pointerType,
2908
+ 'altKey' : altPressed,
2909
+ 'ctrlKey' : ctrlPressed,
2910
+ 'metaKey' : metaPressed,
2911
+ 'shiftKey' : shitPressed,
2838
2912
});
2839
2913
}
2840
2914
0 commit comments