Index: ui/file_manager/gallery/js/image_editor/image_transform.js |
diff --git a/ui/file_manager/gallery/js/image_editor/image_transform.js b/ui/file_manager/gallery/js/image_editor/image_transform.js |
index c4cf2efc423bb3950a7b872e33abd35f1628e9d1..097c2f9212da24f3b9af2bca3ccc09054cb3c66c 100644 |
--- a/ui/file_manager/gallery/js/image_editor/image_transform.js |
+++ b/ui/file_manager/gallery/js/image_editor/image_transform.js |
@@ -213,28 +213,13 @@ ImageEditor.Mode.Crop.prototype.reset = function() { |
* Updates the position of DOM elements. |
*/ |
ImageEditor.Mode.Crop.prototype.positionDOM = function() { |
- var screenClipped = this.viewport_.getImageBoundsOnScreenClipped(); |
- |
var screenCrop = this.viewport_.imageToScreenRect(this.cropRect_.getRect()); |
- var delta = ImageEditor.Mode.Crop.MOUSE_GRAB_RADIUS; |
- this.editor_.hideOverlappingTools( |
- screenCrop.inflate(delta, delta), |
- screenCrop.inflate(-delta, -delta)); |
- |
- this.domOverlay_.style.left = screenClipped.left + 'px'; |
- this.domOverlay_.style.top = screenClipped.top + 'px'; |
- this.domOverlay_.style.width = screenClipped.width + 'px'; |
- this.domOverlay_.style.height = screenClipped.height + 'px'; |
- |
- this.shadowLeft_.style.width = screenCrop.left - screenClipped.left + 'px'; |
- |
- this.shadowTop_.style.height = screenCrop.top - screenClipped.top + 'px'; |
- |
- this.shadowRight_.style.width = screenClipped.left + screenClipped.width - |
- (screenCrop.left + screenCrop.width) + 'px'; |
- this.shadowBottom_.style.height = screenClipped.top + screenClipped.height - |
- (screenCrop.top + screenCrop.height) + 'px'; |
+ this.shadowLeft_.style.width = screenCrop.left + 'px'; |
+ this.shadowTop_.style.height = screenCrop.top + 'px'; |
+ this.shadowRight_.style.width = window.innerWidth - screenCrop.right + 'px'; |
+ this.shadowBottom_.style.height = |
+ window.innerHeight - screenCrop.bottom + 'px'; |
}; |
/** |
@@ -244,7 +229,6 @@ ImageEditor.Mode.Crop.prototype.cleanUpUI = function() { |
ImageEditor.Mode.prototype.cleanUpUI.apply(this, arguments); |
this.domOverlay_.parentNode.removeChild(this.domOverlay_); |
this.domOverlay_ = null; |
- this.editor_.hideOverlappingTools(); |
this.getViewport().removeEventListener( |
'resize', this.onViewportResizedBound_); |
this.onViewportResizedBound_ = null; |
@@ -563,15 +547,29 @@ DraggableRect.prototype.getCursorStyle = function(x, y, mouseDown) { |
*/ |
DraggableRect.prototype.getDragHandler = function( |
initialScreenX, initialScreenY, touch) { |
- // Check if the initial coordinate in the clip rect. |
+ // Check if the initial coordinate is in the image rect. |
+ var boundsOnScreen = this.viewport_.getImageBoundsOnScreenClipped(); |
+ var handlerRadius = touch ? ImageEditor.Mode.Crop.TOUCH_GRAB_RADIUS : |
+ ImageEditor.Mode.Crop.MOUSE_GRAB_RADIUS; |
+ var draggableAreas = [ |
+ boundsOnScreen, |
+ new Circle(boundsOnScreen.left, boundsOnScreen.top, handlerRadius), |
+ new Circle(boundsOnScreen.right, boundsOnScreen.top, handlerRadius), |
+ new Circle(boundsOnScreen.left, boundsOnScreen.bottom, handlerRadius), |
+ new Circle(boundsOnScreen.right, boundsOnScreen.bottom, handlerRadius) |
+ ]; |
+ |
+ if (!draggableAreas.some( |
+ (area) => area.inside(initialScreenX, initialScreenY))) { |
+ return null; |
+ } |
+ |
+ // Convert coordinates. |
var initialX = this.viewport_.screenToImageX(initialScreenX); |
var initialY = this.viewport_.screenToImageY(initialScreenY); |
var initialWidth = this.bounds_.right - this.bounds_.left; |
var initialHeight = this.bounds_.bottom - this.bounds_.top; |
- var clipRect = this.viewport_.screenToImageRect( |
- this.viewport_.getImageBoundsOnScreenClipped()); |
- if (!clipRect.inside(initialX, initialY)) |
- return null; |
+ var clipRect = this.viewport_.screenToImageRect(boundsOnScreen); |
// Obtain the drag mode. |
this.dragMode_ = this.getDragMode(initialX, initialY, touch); |