Remove delayed wheel timer
This isn't really expected behaviour from a user, i.e. that an extremely small wheel movement still gives a large scroll event in the remote application.
This commit is contained in:
parent
07a69954b1
commit
77c32d164d
|
@ -8,7 +8,6 @@ import * as Log from '../util/logging.js';
|
||||||
import { setCapture, stopEvent, getPointerEvent } from '../util/events.js';
|
import { setCapture, stopEvent, getPointerEvent } from '../util/events.js';
|
||||||
|
|
||||||
const WHEEL_STEP = 10; // Delta threshold for a mouse wheel step
|
const WHEEL_STEP = 10; // Delta threshold for a mouse wheel step
|
||||||
const WHEEL_STEP_TIMEOUT = 50; // ms
|
|
||||||
const WHEEL_LINE_HEIGHT = 19;
|
const WHEEL_LINE_HEIGHT = 19;
|
||||||
|
|
||||||
export default class Mouse {
|
export default class Mouse {
|
||||||
|
@ -16,8 +15,6 @@ export default class Mouse {
|
||||||
this._target = target || document;
|
this._target = target || document;
|
||||||
|
|
||||||
this._pos = null;
|
this._pos = null;
|
||||||
this._wheelStepXTimer = null;
|
|
||||||
this._wheelStepYTimer = null;
|
|
||||||
this._accumulatedWheelDeltaX = 0;
|
this._accumulatedWheelDeltaX = 0;
|
||||||
this._accumulatedWheelDeltaY = 0;
|
this._accumulatedWheelDeltaY = 0;
|
||||||
|
|
||||||
|
@ -102,16 +99,7 @@ export default class Mouse {
|
||||||
this._accumulatedWheelDeltaY = 0;
|
this._accumulatedWheelDeltaY = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
_resetWheelStepTimers() {
|
|
||||||
window.clearTimeout(this._wheelStepXTimer);
|
|
||||||
window.clearTimeout(this._wheelStepYTimer);
|
|
||||||
this._wheelStepXTimer = null;
|
|
||||||
this._wheelStepYTimer = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
_handleMouseWheel(e) {
|
_handleMouseWheel(e) {
|
||||||
this._resetWheelStepTimers();
|
|
||||||
|
|
||||||
this._updateMousePosition(e);
|
this._updateMousePosition(e);
|
||||||
|
|
||||||
let dX = e.deltaX;
|
let dX = e.deltaX;
|
||||||
|
@ -136,17 +124,9 @@ export default class Mouse {
|
||||||
// after a timeout.
|
// after a timeout.
|
||||||
if (Math.abs(this._accumulatedWheelDeltaX) > WHEEL_STEP) {
|
if (Math.abs(this._accumulatedWheelDeltaX) > WHEEL_STEP) {
|
||||||
this._generateWheelStepX();
|
this._generateWheelStepX();
|
||||||
} else {
|
|
||||||
this._wheelStepXTimer =
|
|
||||||
window.setTimeout(this._generateWheelStepX.bind(this),
|
|
||||||
WHEEL_STEP_TIMEOUT);
|
|
||||||
}
|
}
|
||||||
if (Math.abs(this._accumulatedWheelDeltaY) > WHEEL_STEP) {
|
if (Math.abs(this._accumulatedWheelDeltaY) > WHEEL_STEP) {
|
||||||
this._generateWheelStepY();
|
this._generateWheelStepY();
|
||||||
} else {
|
|
||||||
this._wheelStepYTimer =
|
|
||||||
window.setTimeout(this._generateWheelStepY.bind(this),
|
|
||||||
WHEEL_STEP_TIMEOUT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
stopEvent(e);
|
stopEvent(e);
|
||||||
|
@ -214,8 +194,6 @@ export default class Mouse {
|
||||||
ungrab() {
|
ungrab() {
|
||||||
const t = this._target;
|
const t = this._target;
|
||||||
|
|
||||||
this._resetWheelStepTimers();
|
|
||||||
|
|
||||||
t.removeEventListener('mousedown', this._eventHandlers.mousedown);
|
t.removeEventListener('mousedown', this._eventHandlers.mousedown);
|
||||||
t.removeEventListener('mouseup', this._eventHandlers.mouseup);
|
t.removeEventListener('mouseup', this._eventHandlers.mouseup);
|
||||||
t.removeEventListener('mousemove', this._eventHandlers.mousemove);
|
t.removeEventListener('mousemove', this._eventHandlers.mousemove);
|
||||||
|
|
|
@ -90,9 +90,6 @@ describe('Mouse Event Handling', function () {
|
||||||
|
|
||||||
describe('Accumulate mouse wheel events with small delta', function () {
|
describe('Accumulate mouse wheel events with small delta', function () {
|
||||||
|
|
||||||
beforeEach(function () { this.clock = sinon.useFakeTimers(); });
|
|
||||||
afterEach(function () { this.clock.restore(); });
|
|
||||||
|
|
||||||
it('should accumulate wheel events if small enough', function () {
|
it('should accumulate wheel events if small enough', function () {
|
||||||
const mouse = new Mouse(target);
|
const mouse = new Mouse(target);
|
||||||
mouse.onmousebutton = sinon.spy();
|
mouse.onmousebutton = sinon.spy();
|
||||||
|
@ -100,7 +97,6 @@ describe('Mouse Event Handling', function () {
|
||||||
mouse._handleMouseWheel(mouseevent(
|
mouse._handleMouseWheel(mouseevent(
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 4, deltaY: 0, deltaMode: 0 }));
|
deltaX: 4, deltaY: 0, deltaMode: 0 }));
|
||||||
this.clock.tick(10);
|
|
||||||
mouse._handleMouseWheel(mouseevent(
|
mouse._handleMouseWheel(mouseevent(
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 4, deltaY: 0, deltaMode: 0 }));
|
deltaX: 4, deltaY: 0, deltaMode: 0 }));
|
||||||
|
@ -108,14 +104,12 @@ describe('Mouse Event Handling', function () {
|
||||||
// threshold is 10
|
// threshold is 10
|
||||||
expect(mouse._accumulatedWheelDeltaX).to.be.equal(8);
|
expect(mouse._accumulatedWheelDeltaX).to.be.equal(8);
|
||||||
|
|
||||||
this.clock.tick(10);
|
|
||||||
mouse._handleMouseWheel(mouseevent(
|
mouse._handleMouseWheel(mouseevent(
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 4, deltaY: 0, deltaMode: 0 }));
|
deltaX: 4, deltaY: 0, deltaMode: 0 }));
|
||||||
|
|
||||||
expect(mouse.onmousebutton).to.have.callCount(2); // mouse down and up
|
expect(mouse.onmousebutton).to.have.callCount(2); // mouse down and up
|
||||||
|
|
||||||
this.clock.tick(10);
|
|
||||||
mouse._handleMouseWheel(mouseevent(
|
mouse._handleMouseWheel(mouseevent(
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 4, deltaY: 9, deltaMode: 0 }));
|
deltaX: 4, deltaY: 9, deltaMode: 0 }));
|
||||||
|
@ -133,11 +127,9 @@ describe('Mouse Event Handling', function () {
|
||||||
mouse._handleMouseWheel(mouseevent(
|
mouse._handleMouseWheel(mouseevent(
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 11, deltaY: 0, deltaMode: 0 }));
|
deltaX: 11, deltaY: 0, deltaMode: 0 }));
|
||||||
this.clock.tick(10);
|
|
||||||
mouse._handleMouseWheel(mouseevent(
|
mouse._handleMouseWheel(mouseevent(
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 0, deltaY: 70, deltaMode: 0 }));
|
deltaX: 0, deltaY: 70, deltaMode: 0 }));
|
||||||
this.clock.tick(10);
|
|
||||||
mouse._handleMouseWheel(mouseevent(
|
mouse._handleMouseWheel(mouseevent(
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 400, deltaY: 400, deltaMode: 0 }));
|
deltaX: 400, deltaY: 400, deltaMode: 0 }));
|
||||||
|
@ -145,18 +137,6 @@ describe('Mouse Event Handling', function () {
|
||||||
expect(mouse.onmousebutton).to.have.callCount(8); // mouse down and up
|
expect(mouse.onmousebutton).to.have.callCount(8); // mouse down and up
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should send even small wheel events after a timeout', function () {
|
|
||||||
const mouse = new Mouse(target);
|
|
||||||
mouse.onmousebutton = sinon.spy();
|
|
||||||
|
|
||||||
mouse._handleMouseWheel(mouseevent(
|
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
|
||||||
deltaX: 1, deltaY: 0, deltaMode: 0 }));
|
|
||||||
this.clock.tick(51); // timeout on 50 ms
|
|
||||||
|
|
||||||
expect(mouse.onmousebutton).to.have.callCount(2); // mouse down and up
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should account for non-zero deltaMode', function () {
|
it('should account for non-zero deltaMode', function () {
|
||||||
const mouse = new Mouse(target);
|
const mouse = new Mouse(target);
|
||||||
mouse.onmousebutton = sinon.spy();
|
mouse.onmousebutton = sinon.spy();
|
||||||
|
@ -165,8 +145,6 @@ describe('Mouse Event Handling', function () {
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 0, deltaY: 2, deltaMode: 1 }));
|
deltaX: 0, deltaY: 2, deltaMode: 1 }));
|
||||||
|
|
||||||
this.clock.tick(10);
|
|
||||||
|
|
||||||
mouse._handleMouseWheel(mouseevent(
|
mouse._handleMouseWheel(mouseevent(
|
||||||
'mousewheel', { clientX: 18, clientY: 40,
|
'mousewheel', { clientX: 18, clientY: 40,
|
||||||
deltaX: 1, deltaY: 0, deltaMode: 2 }));
|
deltaX: 1, deltaY: 0, deltaMode: 2 }));
|
||||||
|
|
Loading…
Reference in New Issue