From 65e1212b2f704fa61f13517c71bf8454d55d0b9a Mon Sep 17 00:00:00 2001 From: Alexander Rose <alex.rose@rcsb.org> Date: Fri, 13 Sep 2019 16:30:55 -0700 Subject: [PATCH] wip, focusZoom action --- src/mol-canvas3d/controls/bindings.ts | 13 +++++++++---- src/mol-canvas3d/controls/trackball.ts | 9 +++++++-- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/mol-canvas3d/controls/bindings.ts b/src/mol-canvas3d/controls/bindings.ts index e6e558e1b..923b2824d 100644 --- a/src/mol-canvas3d/controls/bindings.ts +++ b/src/mol-canvas3d/controls/bindings.ts @@ -14,17 +14,20 @@ export interface Bindings { rotate: Bindings.Trigger rotateZ: Bindings.Trigger pan: Bindings.Trigger - focus: Bindings.Trigger zoom: Bindings.Trigger + focus: Bindings.Trigger + focusZoom: Bindings.Trigger }, scroll: { - focus: Bindings.Trigger zoom: Bindings.Trigger + focus: Bindings.Trigger + focusZoom: Bindings.Trigger } } export namespace Bindings { export type Trigger = { buttons: ButtonsType, modifiers?: ModifiersKeys } + export const EmptyTrigger = { buttons: ButtonsType.Flag.None } export function match(trigger: Trigger, buttons: ButtonsType, modifiers: ModifiersKeys) { const { buttons: b, modifiers: m } = trigger @@ -37,12 +40,14 @@ export namespace Bindings { rotate: { buttons: B.Flag.Primary, modifiers: M.create() }, rotateZ: { buttons: B.Flag.Primary, modifiers: M.create({ shift: true }) }, pan: { buttons: B.Flag.Secondary, modifiers: M.create() }, + zoom: EmptyTrigger, focus: { buttons: B.Flag.Forth, modifiers: M.create() }, - zoom: { buttons: B.Flag.Auxilary, modifiers: M.create() }, + focusZoom: { buttons: B.Flag.Auxilary, modifiers: M.create() }, }, scroll: { - focus: { buttons: B.Flag.Auxilary, modifiers: M.create({ shift: true }) }, zoom: { buttons: B.Flag.Auxilary, modifiers: M.create() }, + focus: { buttons: B.Flag.Auxilary, modifiers: M.create({ shift: true }) }, + focusZoom: EmptyTrigger, } } } \ No newline at end of file diff --git a/src/mol-canvas3d/controls/trackball.ts b/src/mol-canvas3d/controls/trackball.ts index d88933af0..6898857e0 100644 --- a/src/mol-canvas3d/controls/trackball.ts +++ b/src/mol-canvas3d/controls/trackball.ts @@ -292,6 +292,7 @@ namespace TrackballControls { const dragPan = Bindings.match(p.bindings.drag.pan, buttons, modifiers) const dragZoom = Bindings.match(p.bindings.drag.zoom, buttons, modifiers) const dragFocus = Bindings.match(p.bindings.drag.focus, buttons, modifiers) + const dragFocusZoom = Bindings.match(p.bindings.drag.focusZoom, buttons, modifiers) getMouseOnCircle(pageX, pageY) getMouseOnScreen(pageX, pageY) @@ -305,7 +306,7 @@ namespace TrackballControls { Vec2.copy(_zRotCurr, mouseOnCircleVec2) Vec2.copy(_zRotPrev, _zRotCurr) } - if (dragZoom) { + if (dragZoom || dragFocusZoom) { Vec2.copy(_zoomStart, mouseOnScreenVec2) Vec2.copy(_zoomEnd, _zoomStart) } @@ -321,8 +322,12 @@ namespace TrackballControls { if (dragRotate) Vec2.copy(_rotCurr, mouseOnCircleVec2) if (dragRotateZ) Vec2.copy(_zRotCurr, mouseOnCircleVec2) - if (dragZoom) Vec2.copy(_zoomEnd, mouseOnScreenVec2) + if (dragZoom || dragFocusZoom) Vec2.copy(_zoomEnd, mouseOnScreenVec2) if (dragFocus) Vec2.copy(_focusEnd, mouseOnScreenVec2) + if (dragFocusZoom) { + const dist = Vec3.distance(camera.state.position, camera.state.target); + camera.setState({ radius: dist / 5 }) + } if (dragPan) Vec2.copy(_panEnd, mouseOnScreenVec2) } -- GitLab