summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryawano <yawano@chromium.org>2016-03-07 23:28:58 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-08 07:30:25 +0000
commit2afcf7037d39cd4cedf82d235123d5a3efa073c9 (patch)
treec297263fc21a8c4f90fc08b38231bb7eaf0fdde4
parent3436bb5299b3c8becec4c7033c25f3f8c70c5692 (diff)
downloadchromium_src-2afcf7037d39cd4cedf82d235123d5a3efa073c9.zip
chromium_src-2afcf7037d39cd4cedf82d235123d5a3efa073c9.tar.gz
chromium_src-2afcf7037d39cd4cedf82d235123d5a3efa073c9.tar.bz2
Gallery: do not set zoom more than once in a frame.
BUG=591033 TEST=manually tested as described in the issue. Review URL: https://codereview.chromium.org/1770903003 Cr-Commit-Position: refs/heads/master@{#379774}
-rw-r--r--ui/file_manager/gallery/js/slide_mode.js24
1 files changed, 19 insertions, 5 deletions
diff --git a/ui/file_manager/gallery/js/slide_mode.js b/ui/file_manager/gallery/js/slide_mode.js
index dcad955..1968409 100644
--- a/ui/file_manager/gallery/js/slide_mode.js
+++ b/ui/file_manager/gallery/js/slide_mode.js
@@ -1870,6 +1870,12 @@ function TouchHandler(targetElement, slideMode) {
*/
this.lastZoom_ = 1.0;
+ /**
+ * @type {number}
+ * @private
+ */
+ this.mouseWheelZoomOperationId_ = 0;
+
targetElement.addEventListener('touchstart', this.onTouchStart_.bind(this));
var onTouchEventBound = this.onTouchEvent_.bind(this);
targetElement.ownerDocument.addEventListener('touchmove', onTouchEventBound);
@@ -2068,20 +2074,28 @@ TouchHandler.WHEEL_ZOOM_FACTOR = 1.05;
*/
TouchHandler.prototype.onMouseWheel_ = function(event) {
var event = assertInstanceof(event, MouseEvent);
- var viewport = this.slideMode_.getViewport();
if (!this.enabled_)
return;
this.stopOperation();
- this.lastZoom_ = viewport.getZoom();
- var zoom = this.lastZoom_;
+
+ var viewport = this.slideMode_.getViewport();
+ var zoom = viewport.getZoom();
if (event.wheelDeltaY > 0) {
zoom *= TouchHandler.WHEEL_ZOOM_FACTOR;
} else {
zoom /= TouchHandler.WHEEL_ZOOM_FACTOR;
}
- viewport.setZoom(zoom);
- this.slideMode_.imageView_.applyViewportChange();
+
+ // Request animation frame not to set zoom more than once in a frame. This is
+ // a fix for https://crbug.com/591033
+ requestAnimationFrame(function(operationId) {
+ if (this.mouseWheelZoomOperationId_ !== operationId)
+ return;
+
+ viewport.setZoom(zoom);
+ this.slideMode_.applyViewportChange();
+ }.bind(this, ++this.mouseWheelZoomOperationId_));
};
/**