Chromium Code Reviews| Index: ui/file_manager/gallery/js/slide_mode.js |
| diff --git a/ui/file_manager/gallery/js/slide_mode.js b/ui/file_manager/gallery/js/slide_mode.js |
| index a550d201a91c9d1e8fe7717b7eca3cc60db54a11..23523052a4f61957359ebd3c17568c6aa458204e 100644 |
| --- a/ui/file_manager/gallery/js/slide_mode.js |
| +++ b/ui/file_manager/gallery/js/slide_mode.js |
| @@ -1826,6 +1826,13 @@ function TouchHandler(targetElement, slideMode) { |
| this.touchStarted_ = false; |
| /** |
| + * Whether the element is being clicked now or not. |
| + * @type {boolean} |
| + * @private |
| + */ |
| + this.clickStarted_ = false; |
| + |
| + /** |
| * The swipe action that should happen only once in an operation is already |
| * done or not. |
| * @type {boolean} |
| @@ -1867,6 +1874,11 @@ function TouchHandler(targetElement, slideMode) { |
| targetElement.ownerDocument.addEventListener('touchmove', onTouchEventBound); |
| targetElement.ownerDocument.addEventListener('touchend', onTouchEventBound); |
| + targetElement.addEventListener('mousedown', this.onMouseDown_.bind(this)); |
| + targetElement.ownerDocument.addEventListener('mousemove', |
| + this.onMouseMove_.bind(this)); |
| + targetElement.ownerDocument.addEventListener('mouseup', |
| + this.onMouseUp_.bind(this)); |
| targetElement.addEventListener('mousewheel', this.onMouseWheel_.bind(this)); |
| } |
| @@ -2042,6 +2054,13 @@ TouchHandler.prototype.onTouchEvent_ = function(event) { |
| }; |
| /** |
| + * Zoom magnification of one scroll event. |
| + * @private {number} |
| + * @const |
| + */ |
| +TouchHandler.WHEEL_ZOOM_FACTOR = 1.05; |
| + |
| +/** |
| * Handles mouse wheel events. |
| * @param {!Event} event Wheel event. |
| * @private |
| @@ -2049,11 +2068,57 @@ TouchHandler.prototype.onTouchEvent_ = function(event) { |
| TouchHandler.prototype.onMouseWheel_ = function(event) { |
| var event = assertInstanceof(event, MouseEvent); |
| var viewport = this.slideMode_.getViewport(); |
| - if (!this.enabled_ || !viewport.isZoomed()) |
| + if (!this.enabled_) |
| return; |
| + |
| this.stopOperation(); |
| + this.lastZoom_ = viewport.getZoom(); |
| + var zoom = this.lastZoom_; |
| + if (event.wheelDeltaY > 0) { |
| + zoom = zoom * TouchHandler.WHEEL_ZOOM_FACTOR; |
| + } else { |
| + zoom = zoom / TouchHandler.WHEEL_ZOOM_FACTOR; |
| + } |
| + viewport.setZoom(zoom); |
| + this.slideMode_.imageView_.applyViewportChange(); |
| +}; |
| + |
| +/** |
| + * Handles mouse down events. |
| + * @param {!Event} event Wheel event. |
| + * @private |
| + */ |
| +TouchHandler.prototype.onMouseDown_ = function(event) { |
| + var event = assertInstanceof(event, MouseEvent); |
| + var viewport = this.slideMode_.getViewport(); |
| + if (!this.enabled_ || event.button !== 0) |
| + return; |
| + this.clickStarted_ = true; |
| +}; |
| + |
| +/** |
| + * Handles mouse move events. |
| + * @param {!Event} event Wheel event. |
| + * @private |
| + */ |
| +TouchHandler.prototype.onMouseMove_ = function(event) { |
| + var event = assertInstanceof(event, MouseEvent); |
| + var viewport = this.slideMode_.getViewport(); |
| + if (!this.enabled_ || !this.clickStarted_) |
| + return; |
| viewport.setOffset( |
|
hirono
2016/02/10 02:06:53
Please call this.stopOperation() before setting of
ryoh
2016/02/10 03:51:56
Done.
|
| - viewport.getOffsetX() + event.wheelDeltaX, |
| - viewport.getOffsetY() + event.wheelDeltaY); |
| - this.slideMode_.applyViewportChange(); |
| + viewport.getOffsetX() + |
| + (/** @type {{movementX: number}} */(event)).movementX, |
| + viewport.getOffsetY() + |
| + (/** @type {{movementY: number}} */(event)).movementY); |
| + this.slideMode_.imageView_.applyViewportChange(); |
| +}; |
| + |
| +/** |
| + * Handles mouse up events. |
| + * @param {!Event} event Wheel event. |
| + * @private |
| + */ |
| +TouchHandler.prototype.onMouseUp_ = function(event) { |
| + this.clickStarted_ = false; |
|
hirono
2016/02/10 02:06:53
I think you also need to check event.button here.
ryoh
2016/02/10 03:51:56
That's right!
|
| }; |