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!
|
}; |