De-duplicated mouse move events

This commit is contained in:
Lewis Hemens 2014-01-12 14:38:56 +00:00
parent 14a19b7327
commit d2c6e799a8
3 changed files with 11 additions and 3 deletions

View File

@ -18,7 +18,7 @@ ascii.Vector = function(x, y) {
* @return {boolean} * @return {boolean}
*/ */
ascii.Vector.prototype.equals = function(other) { ascii.Vector.prototype.equals = function(other) {
return (this.x == other.x) && (this.y == other.y); return (other != null) && (this.x == other.x) && (this.y == other.y);
}; };
/** /**

View File

@ -24,6 +24,7 @@ ascii.Controller = function(view, state) {
/** @type {ascii.Vector} */ this.dragOrigin; /** @type {ascii.Vector} */ this.dragOrigin;
/** @type {ascii.Vector} */ this.pressVector; /** @type {ascii.Vector} */ this.pressVector;
/** @type {ascii.Vector} */ this.lastMoveCell;
/** @type {number} */ this.pressTimestamp; /** @type {number} */ this.pressTimestamp;
this.installDesktopBindings(); this.installDesktopBindings();
@ -60,10 +61,14 @@ ascii.Controller.prototype.handleMove = function(position) {
this.dragOrigin = this.view.offset; this.dragOrigin = this.view.offset;
} }
// Not dragging, so pass the mouse move on. // Not dragging, so pass the mouse move on, but remove duplicates.
if (this.dragOrigin == null && if (this.dragOrigin == null &&
($.now() - this.pressTimestamp) >= DRAG_LATENCY) { ($.now() - this.pressTimestamp) >= DRAG_LATENCY &&
(this.lastMoveCell == null ||
!this.view.screenToCell(position)
.equals(this.view.screenToCell(this.lastMoveCell)))) {
this.stateController.handleDrawingMove(this.view.screenToCell(position)); this.stateController.handleDrawingMove(this.view.screenToCell(position));
this.lastMoveCell = position;
} }
// Drag in progress, update the view origin. // Drag in progress, update the view origin.
@ -87,6 +92,7 @@ ascii.Controller.prototype.handleRelease = function(position) {
this.pressVector = null; this.pressVector = null;
this.pressTimestamp = 0; this.pressTimestamp = 0;
this.dragOrigin = null; this.dragOrigin = null;
this.lastMoveCell = null;
}; };
/** /**
@ -141,4 +147,5 @@ ascii.Controller.prototype.installTouchBindings = function() {
e.originalEvent.touches[0].pageX, e.originalEvent.touches[0].pageX,
e.originalEvent.touches[0].pageY)); e.originalEvent.touches[0].pageY));
}); });
// TODO: Handle pinch to zoom.
}; };

View File

@ -35,3 +35,4 @@ ascii.StateController.prototype.handleDrawingRelease = function(position) {
ascii.StateController.prototype.handleDrawingMove = function(position) { ascii.StateController.prototype.handleDrawingMove = function(position) {
this.state.setValue(position, 'O'); this.state.setValue(position, 'O');
}; };