Browse Source

support non-physical keys in bindings trigger code (#860)

Co-authored-by: David Sehnal <dsehnal@users.noreply.github.com>
Alexander Rose 1 year ago
parent
commit
898d877aa1
3 changed files with 10 additions and 4 deletions
  1. 1 0
      CHANGELOG.md
  2. 3 3
      src/mol-plugin/behavior/dynamic/camera.ts
  3. 6 1
      src/mol-util/binding.ts

+ 1 - 0
CHANGELOG.md

@@ -7,6 +7,7 @@ Note that since we don't clearly distinguish between a public and private interf
 ## [Unreleased]
 
 - Fix display issue with SIFTS mapping
+- Support non-physical keys in `Bindings.Trigger.code`
 - Update `getStateSnapshot` to only overwrite current snapshot if it was created automatically
 - Fix distinct palette's `getSamples` infinite loop
 - Add 'NH2', 'FOR', 'FMT' to `CommonProteinCaps`

+ 3 - 3
src/mol-plugin/behavior/dynamic/camera.ts

@@ -154,10 +154,10 @@ export const CameraAxisHelper = PluginBehavior.create<{}>({
 });
 
 const DefaultCameraControlsBindings = {
-    keySpinAnimation: Binding([Key('KeyI')], 'Spin Animation', 'Press ${triggers}'),
-    keyRockAnimation: Binding([Key('KeyO')], 'Rock Animation', 'Press ${triggers}'),
+    keySpinAnimation: Binding([Key('I')], 'Spin Animation', 'Press ${triggers}'),
+    keyRockAnimation: Binding([Key('O')], 'Rock Animation', 'Press ${triggers}'),
     keyToggleFlyMode: Binding([Key('Space', M.create({ shift: true }))], 'Toggle Fly Mode', 'Press ${triggers}'),
-    keyResetView: Binding([Key('KeyT')], 'Reset View', 'Press ${triggers}'),
+    keyResetView: Binding([Key('T')], 'Reset View', 'Press ${triggers}'),
 };
 const CameraControlsParams = {
     bindings: PD.Value(DefaultCameraControlsBindings, { isHidden: true }),

+ 6 - 1
src/mol-util/binding.ts

@@ -81,7 +81,12 @@ namespace Binding {
         export function matchKey(trigger: Trigger, code: KeyCode, modifiers: ModifiersKeys): boolean {
             const { modifiers: m, code: c } = trigger;
             return c !== undefined &&
-                (c === code) &&
+                (c === code || (
+                    c.length === 1 &&
+                    code.length === 4 &&
+                    code.startsWith('Key') &&
+                    code[3] === c.toUpperCase()
+                )) &&
                 (!m || ModifiersKeys.areEqual(m, modifiers));
         }