From 1ce235b309d110c009b4ec138320a2065ce9fdb6 Mon Sep 17 00:00:00 2001 From: pixelzoom Date: Tue, 4 Oct 2022 15:46:24 -0600 Subject: [PATCH] make all arrow keys work for PHDropperNode, https://github.com/phetsims/ph-scale/issues/249 --- js/common/view/PHDropperNode.ts | 38 +++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/js/common/view/PHDropperNode.ts b/js/common/view/PHDropperNode.ts index 2b2e6504..d227d94b 100644 --- a/js/common/view/PHDropperNode.ts +++ b/js/common/view/PHDropperNode.ts @@ -13,7 +13,7 @@ import optionize, { EmptySelfOptions } from '../../../../phet-core/js/optionize. import PickRequired from '../../../../phet-core/js/types/PickRequired.js'; import ModelViewTransform2 from '../../../../phetcommon/js/view/ModelViewTransform2.js'; import EyeDropperNode, { EyeDropperNodeOptions } from '../../../../scenery-phet/js/EyeDropperNode.js'; -import { DragListener, KeyboardDragListener } from '../../../../scenery/js/imports.js'; +import { DragListener, KeyboardDragListener, KeyboardDragListenerOptions, KeyboardUtils } from '../../../../scenery/js/imports.js'; import phScale from '../../phScale.js'; import Dropper from '../model/Dropper.js'; @@ -62,7 +62,7 @@ export default class PHDropperNode extends EyeDropperNode { phetioEnabledPropertyInstrumented: true } ) ); - this.addInputListener( new KeyboardDragListener( { + this.addInputListener( new PHDropperKeyboardDragListener( { dragVelocity: 300, // velocity of the Node being dragged, in view coordinates per second shiftDragVelocity: 20, // velocity with the Shift key pressed, typically slower than dragVelocity positionProperty: dropper.positionProperty, @@ -74,4 +74,38 @@ export default class PHDropperNode extends EyeDropperNode { } } +//TODO https://github.com/phetsims/ph-scale/issues/249 delete this class, replace overrides with KeyboardDragListener options +class PHDropperKeyboardDragListener extends KeyboardDragListener { + + public constructor( providedOptions?: KeyboardDragListenerOptions ) { + super( providedOptions ); + } + + // Dragging is constrained to up/down, but we want the left/right arrows to do something. + // For now, override these methods. Eventually, this will be supported by KeyboardDragListener. + // See https://github.com/phetsims/scenery/issues/1460 + + public override leftMovementKeysDown(): boolean { + return this.keyInListDown( [ + KeyboardUtils.KEY_LEFT_ARROW, KeyboardUtils.KEY_DOWN_ARROW, + KeyboardUtils.KEY_A, KeyboardUtils.KEY_S + ] ); + } + + public override rightMovementKeysDown(): boolean { + return this.keyInListDown( [ + KeyboardUtils.KEY_RIGHT_ARROW, KeyboardUtils.KEY_UP_ARROW, + KeyboardUtils.KEY_W, KeyboardUtils.KEY_D + ] ); + } + + public override upMovementKeysDown(): boolean { + return false; + } + + public override downMovementKeysDown(): boolean { + return false; + } +} + phScale.register( 'PHDropperNode', PHDropperNode ); \ No newline at end of file