Browse Source

add maxWheelDelta

dsehnal 3 years ago
parent
commit
8ba792c4b0
2 changed files with 9 additions and 15 deletions
  1. 5 1
      src/mol-canvas3d/controls/trackball.ts
  2. 4 14
      src/mol-util/input/input-observer.ts

+ 5 - 1
src/mol-canvas3d/controls/trackball.ts

@@ -50,6 +50,7 @@ export const TrackballControlsParams = {
     maxDistance: PD.Numeric(1e150, {}, { isHidden: true }),
 
     gestureScaleFactor: PD.Numeric(1, {}, { isHidden: true }),
+    maxWheelDelta: PD.Numeric(0.02, {}, { isHidden: true }),
 
     bindings: PD.Value(DefaultTrackballBindings, { isHidden: true }),
 
@@ -396,7 +397,10 @@ namespace TrackballControls {
         function onWheel({ x, y, spinX, spinY, dz, buttons, modifiers }: WheelInput) {
             if (outsideViewport(x, y)) return;
 
-            const delta = absMax(spinX * 0.075, spinY * 0.075, dz * 0.0001);
+            let delta = absMax(spinX * 0.075, spinY * 0.075, dz * 0.0001);
+            if (delta < -p.maxWheelDelta) delta = -p.maxWheelDelta;
+            else if (delta > p.maxWheelDelta) delta = p.maxWheelDelta;
+
             if (Binding.match(p.bindings.scrollZoom, buttons, modifiers)) {
                 _zoomEnd[1] += delta;
             }

+ 4 - 14
src/mol-util/input/input-observer.ts

@@ -617,21 +617,11 @@ namespace InputObserver {
                 ev.preventDefault();
             }
 
-            let scale = 1;
-            switch (ev.deltaMode) {
-                case 0: scale = 1; break; // pixels
-                case 1: scale = 40; break; // lines
-                case 2: scale = 800; break; // pages
-            }
-
-            const dx = (ev.deltaX || 0) * scale;
-            const dy = (ev.deltaY || 0) * scale;
-            const dz = (ev.deltaZ || 0) * scale;
-
+            const normalized = normalizeWheel(ev);
             buttons = button = ButtonsType.Flag.Auxilary;
 
-            if (dx || dy || dz) {
-                wheel.next({ x, y, pageX, pageY, ...normalizeWheel(ev), buttons, button, modifiers: getModifierKeys() });
+            if (normalized.dx || normalized.dy || normalized.dz) {
+                wheel.next({ x, y, pageX, pageY, ...normalized, buttons, button, modifiers: getModifierKeys() });
             }
         }
 
@@ -748,7 +738,7 @@ function normalizeWheel(event: any) {
     if ('deltaZ' in event) { dz = event.deltaX; }
 
     if ((dx || dy || dz) && event.deltaMode) {
-        if (event.deltaMode == 1) {          // delta in LINE units
+        if (event.deltaMode === 1) {          // delta in LINE units
             dx *= LINE_HEIGHT;
             dy *= LINE_HEIGHT;
             dz *= LINE_HEIGHT;