Merge branch 'limitmouse' of https://github.com/novnc/noVNC
This commit is contained in:
commit
0e37a3f83a
|
@ -11,7 +11,6 @@ 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_STEP_TIMEOUT = 50; // ms
|
||||||
const WHEEL_LINE_HEIGHT = 19;
|
const WHEEL_LINE_HEIGHT = 19;
|
||||||
const MOUSE_MOVE_DELAY = 17; // Minimum wait (ms) between two mouse moves
|
|
||||||
|
|
||||||
export default class Mouse {
|
export default class Mouse {
|
||||||
constructor(target) {
|
constructor(target) {
|
||||||
|
@ -23,7 +22,6 @@ export default class Mouse {
|
||||||
this._pos = null;
|
this._pos = null;
|
||||||
this._wheelStepXTimer = null;
|
this._wheelStepXTimer = null;
|
||||||
this._wheelStepYTimer = null;
|
this._wheelStepYTimer = null;
|
||||||
this._oldMouseMoveTime = 0;
|
|
||||||
this._accumulatedWheelDeltaX = 0;
|
this._accumulatedWheelDeltaX = 0;
|
||||||
this._accumulatedWheelDeltaY = 0;
|
this._accumulatedWheelDeltaY = 0;
|
||||||
|
|
||||||
|
@ -200,19 +198,7 @@ export default class Mouse {
|
||||||
|
|
||||||
_handleMouseMove(e) {
|
_handleMouseMove(e) {
|
||||||
this._updateMousePosition(e);
|
this._updateMousePosition(e);
|
||||||
|
this.onmousemove(this._pos.x, this._pos.y);
|
||||||
// Limit mouse move events to one every MOUSE_MOVE_DELAY ms
|
|
||||||
clearTimeout(this.mouseMoveTimer);
|
|
||||||
const newMouseMoveTime = Date.now();
|
|
||||||
if (newMouseMoveTime < this._oldMouseMoveTime + MOUSE_MOVE_DELAY) {
|
|
||||||
this.mouseMoveTimer = setTimeout(this.onmousemove.bind(this),
|
|
||||||
MOUSE_MOVE_DELAY,
|
|
||||||
this._pos.x, this._pos.y);
|
|
||||||
} else {
|
|
||||||
this.onmousemove(this._pos.x, this._pos.y);
|
|
||||||
}
|
|
||||||
this._oldMouseMoveTime = newMouseMoveTime;
|
|
||||||
|
|
||||||
stopEvent(e);
|
stopEvent(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
610
core/rfb.js
610
core/rfb.js
File diff suppressed because it is too large
Load Diff
|
@ -300,72 +300,4 @@ describe('Mouse Event Handling', function () {
|
||||||
expect(mouse.onmousebutton).to.have.callCount(4); // mouse down and up
|
expect(mouse.onmousebutton).to.have.callCount(4); // mouse down and up
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Move events should be limited to one each 17 ms', function () {
|
|
||||||
|
|
||||||
let mouse;
|
|
||||||
beforeEach(function () {
|
|
||||||
this.clock = sinon.useFakeTimers(Date.now());
|
|
||||||
mouse = new Mouse(target);
|
|
||||||
mouse.onmousemove = sinon.spy();
|
|
||||||
});
|
|
||||||
afterEach(function () {
|
|
||||||
this.clock.restore();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should send a single move instantly', function () {
|
|
||||||
mouse._handleMouseMove(mouseevent(
|
|
||||||
'mousemove', { clientX: 1, clientY: 2 }));
|
|
||||||
|
|
||||||
expect(mouse.onmousemove).to.have.callCount(1);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should delay one if two events are too close', function () {
|
|
||||||
mouse._handleMouseMove(mouseevent(
|
|
||||||
'mousemove', { clientX: 18, clientY: 30 }));
|
|
||||||
mouse._handleMouseMove(mouseevent(
|
|
||||||
'mousemove', { clientX: 20, clientY: 50 }));
|
|
||||||
|
|
||||||
expect(mouse.onmousemove).to.have.callCount(1);
|
|
||||||
|
|
||||||
this.clock.tick(100);
|
|
||||||
|
|
||||||
expect(mouse.onmousemove).to.have.callCount(2);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should only send first and last of many close events', function () {
|
|
||||||
mouse._handleMouseMove(mouseevent(
|
|
||||||
'mousemove', { clientX: 18, clientY: 30 }));
|
|
||||||
mouse._handleMouseMove(mouseevent(
|
|
||||||
'mousemove', { clientX: 20, clientY: 50 }));
|
|
||||||
mouse._handleMouseMove(mouseevent(
|
|
||||||
'mousemove', { clientX: 21, clientY: 55 }));
|
|
||||||
|
|
||||||
// Check positions to verify that the correct calls got through.
|
|
||||||
//
|
|
||||||
// The test canvas starts 10px from top and 10 px from left,
|
|
||||||
// that means the relative coordinates are clientCoords - 10px
|
|
||||||
expect(mouse.onmousemove).to.have.been.calledWith(8, 20);
|
|
||||||
|
|
||||||
this.clock.tick(60);
|
|
||||||
|
|
||||||
expect(mouse.onmousemove).to.have.callCount(2);
|
|
||||||
expect(mouse.onmousemove).to.have.been.calledWith(11, 45);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('should send events with enough time apart normally', function () {
|
|
||||||
mouse._handleMouseMove(mouseevent(
|
|
||||||
'mousemove', { clientX: 58, clientY: 60 }));
|
|
||||||
|
|
||||||
expect(mouse.onmousemove).to.have.callCount(1);
|
|
||||||
|
|
||||||
this.clock.tick(20);
|
|
||||||
|
|
||||||
mouse._handleMouseMove(mouseevent(
|
|
||||||
'mousemove', { clientX: 25, clientY: 60 }));
|
|
||||||
|
|
||||||
expect(mouse.onmousemove).to.have.callCount(2);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
1041
tests/test.rfb.js
1041
tests/test.rfb.js
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue