Fix Viewport.update with zoomPoint.

This commit is contained in:
Antoine Vandecreme 2016-04-21 16:06:07 -04:00
parent 766e2b0e1f
commit 79977b09a0
2 changed files with 26 additions and 17 deletions

View File

@ -234,6 +234,15 @@ $.Spring.prototype = {
} else { } else {
this.current.value = currentValue; this.current.value = currentValue;
} }
},
/**
* Returns whether the spring is at the target value
* @function
* @returns {Boolean} True if at target value, false otherwise
*/
isAtTargetValue: function() {
return this.current.value === this.target.value;
} }
}; };

View File

@ -888,37 +888,37 @@ $.Viewport.prototype = {
}, },
/** /**
* Update the zoom and center (X and Y) springs.
* @function * @function
* @returns {Boolean} True if any change has been made, false otherwise.
*/ */
update: function() { update: function() {
var oldZoomPixel,
newZoomPixel,
deltaZoomPixels,
deltaZoomPoints;
if (this.zoomPoint) { if (this.zoomPoint) {
oldZoomPixel = this.pixelFromPoint( this.zoomPoint, true ); var oldZoomPixel = this.pixelFromPoint(this.zoomPoint, true);
}
this.zoomSpring.update(); this.zoomSpring.update();
var newZoomPixel = this.pixelFromPoint(this.zoomPoint, true);
if (this.zoomPoint && this.zoomSpring.current.value != this._oldZoom) { var deltaZoomPixels = newZoomPixel.minus(oldZoomPixel);
newZoomPixel = this.pixelFromPoint( this.zoomPoint, true ); var deltaZoomPoints = this.deltaPointsFromPixels(
deltaZoomPixels = newZoomPixel.minus( oldZoomPixel ); deltaZoomPixels, true);
deltaZoomPoints = this.deltaPointsFromPixels( deltaZoomPixels, true );
this.centerSpringX.shiftBy( deltaZoomPoints.x ); this.centerSpringX.shiftBy(deltaZoomPoints.x);
this.centerSpringY.shiftBy( deltaZoomPoints.y ); this.centerSpringY.shiftBy(deltaZoomPoints.y);
} else {
if (this.zoomSpring.isAtTargetValue()) {
this.zoomPoint = null; this.zoomPoint = null;
} }
} else {
this.zoomSpring.update();
}
this.centerSpringX.update(); this.centerSpringX.update();
this.centerSpringY.update(); this.centerSpringY.update();
var changed = this.centerSpringX.current.value != this._oldCenterX || var changed = this.centerSpringX.current.value !== this._oldCenterX ||
this.centerSpringY.current.value != this._oldCenterY || this.centerSpringY.current.value !== this._oldCenterY ||
this.zoomSpring.current.value != this._oldZoom; this.zoomSpring.current.value !== this._oldZoom;
this._oldCenterX = this.centerSpringX.current.value; this._oldCenterX = this.centerSpringX.current.value;
this._oldCenterY = this.centerSpringY.current.value; this._oldCenterY = this.centerSpringY.current.value;