Index: chrome/browser/resources/file_manager/js/image_editor/image_transform.js |
diff --git a/chrome/browser/resources/file_manager/js/image_editor/image_transform.js b/chrome/browser/resources/file_manager/js/image_editor/image_transform.js |
deleted file mode 100644 |
index 6b194baf0fc5846b5ce7c8c8b3fc6a89c22632ae..0000000000000000000000000000000000000000 |
--- a/chrome/browser/resources/file_manager/js/image_editor/image_transform.js |
+++ /dev/null |
@@ -1,493 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-'use strict'; |
- |
-/** |
- * Crop mode. |
- * @constructor |
- */ |
-ImageEditor.Mode.Crop = function() { |
- ImageEditor.Mode.call(this, 'crop', 'GALLERY_CROP'); |
-}; |
- |
-ImageEditor.Mode.Crop.prototype = {__proto__: ImageEditor.Mode.prototype}; |
- |
-/** |
- * TODO(JSDOC). |
- */ |
-ImageEditor.Mode.Crop.prototype.setUp = function() { |
- ImageEditor.Mode.prototype.setUp.apply(this, arguments); |
- |
- var container = this.getImageView().container_; |
- var doc = container.ownerDocument; |
- |
- this.domOverlay_ = doc.createElement('div'); |
- this.domOverlay_.className = 'crop-overlay'; |
- container.appendChild(this.domOverlay_); |
- |
- this.shadowTop_ = doc.createElement('div'); |
- this.shadowTop_.className = 'shadow'; |
- this.domOverlay_.appendChild(this.shadowTop_); |
- |
- this.middleBox_ = doc.createElement('div'); |
- this.middleBox_.className = 'middle-box'; |
- this.domOverlay_.appendChild(this.middleBox_); |
- |
- this.shadowLeft_ = doc.createElement('div'); |
- this.shadowLeft_.className = 'shadow'; |
- this.middleBox_.appendChild(this.shadowLeft_); |
- |
- this.cropFrame_ = doc.createElement('div'); |
- this.cropFrame_.className = 'crop-frame'; |
- this.middleBox_.appendChild(this.cropFrame_); |
- |
- this.shadowRight_ = doc.createElement('div'); |
- this.shadowRight_.className = 'shadow'; |
- this.middleBox_.appendChild(this.shadowRight_); |
- |
- this.shadowBottom_ = doc.createElement('div'); |
- this.shadowBottom_.className = 'shadow'; |
- this.domOverlay_.appendChild(this.shadowBottom_); |
- |
- var cropFrame = this.cropFrame_; |
- function addCropFrame(className) { |
- var div = doc.createElement('div'); |
- div.className = className; |
- cropFrame.appendChild(div); |
- } |
- |
- addCropFrame('left top corner'); |
- addCropFrame('top horizontal'); |
- addCropFrame('right top corner'); |
- addCropFrame('left vertical'); |
- addCropFrame('right vertical'); |
- addCropFrame('left bottom corner'); |
- addCropFrame('bottom horizontal'); |
- addCropFrame('right bottom corner'); |
- |
- this.onResizedBound_ = this.onResized_.bind(this); |
- window.addEventListener('resize', this.onResizedBound_); |
- |
- this.createDefaultCrop(); |
-}; |
- |
-/** |
- * Handles resizing of the window and updates the crop rectangle. |
- * @private |
- */ |
-ImageEditor.Mode.Crop.prototype.onResized_ = function() { |
- this.positionDOM(); |
-}; |
- |
-/** |
- * TODO(JSDOC). |
- */ |
-ImageEditor.Mode.Crop.prototype.reset = function() { |
- ImageEditor.Mode.prototype.reset.call(this); |
- this.createDefaultCrop(); |
-}; |
- |
-/** |
- * TODO(JSDOC). |
- */ |
-ImageEditor.Mode.Crop.prototype.positionDOM = function() { |
- var screenClipped = this.viewport_.getScreenClipped(); |
- |
- 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'; |
-}; |
- |
-/** |
- * TODO(JSDOC). |
- */ |
-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(); |
- window.removeEventListener(this.onResizedBound_); |
- this.onResizedBound_ = null; |
-}; |
- |
-/** |
- * @const |
- * @type {number} |
- */ |
-ImageEditor.Mode.Crop.MOUSE_GRAB_RADIUS = 6; |
-/** |
- * @const |
- * @type {number} |
- */ |
-ImageEditor.Mode.Crop.TOUCH_GRAB_RADIUS = 20; |
- |
-/** |
- * TODO(JSDOC). |
- * @return {Command.Crop} // TODO(JSDOC). |
- */ |
-ImageEditor.Mode.Crop.prototype.getCommand = function() { |
- var cropImageRect = this.cropRect_.getRect(); |
- return new Command.Crop(cropImageRect); |
-}; |
- |
-/** |
- * TODO(JSDOC). |
- */ |
-ImageEditor.Mode.Crop.prototype.createDefaultCrop = function() { |
- var rect = new Rect(this.getViewport().getImageClipped()); |
- rect = rect.inflate( |
- -Math.round(rect.width / 6), -Math.round(rect.height / 6)); |
- this.cropRect_ = new DraggableRect(rect, this.getViewport()); |
- this.positionDOM(); |
-}; |
- |
-/** |
- * TODO(JSDOC). |
- * @param {number} x X coordinate for cursor. |
- * @param {number} y Y coordinate for cursor. |
- * @param {boolean} mouseDown If mouse button is down. |
- * @return {string} A value for style.cursor CSS property. |
- */ |
-ImageEditor.Mode.Crop.prototype.getCursorStyle = function(x, y, mouseDown) { |
- return this.cropRect_.getCursorStyle(x, y, mouseDown); |
-}; |
- |
-/** |
- * TODO(JSDOC). |
- * @param {number} x Event X coordinate. |
- * @param {number} y Event Y coordinate. |
- * @param {boolean} touch True if it's a touch event, false if mouse. |
- * @return {function(number,number)} A function to be called on mouse drag. |
- */ |
-ImageEditor.Mode.Crop.prototype.getDragHandler = function(x, y, touch) { |
- var cropDragHandler = this.cropRect_.getDragHandler(x, y, touch); |
- if (!cropDragHandler) return null; |
- |
- var self = this; |
- return function(x, y) { |
- cropDragHandler(x, y); |
- self.markUpdated(); |
- self.positionDOM(); |
- }; |
-}; |
- |
-/** |
- * TODO(JSDOC). |
- * @param {number} x X coordinate of the event. |
- * @param {number} y Y coordinate of the event. |
- * @return {ImageBuffer.DoubleTapAction} Action to perform as result. |
- */ |
-ImageEditor.Mode.Crop.prototype.getDoubleTapAction = function(x, y) { |
- return this.cropRect_.getDoubleTapAction(x, y); |
-}; |
- |
-/* |
- * A draggable rectangle over the image. |
- * @param {Rect} rect // TODO(JSDOC). |
- * @param {Viewport} viewport // TODO(JSDOC). |
- * @constructor |
- */ |
-function DraggableRect(rect, viewport) { |
- // The bounds are not held in a regular rectangle (with width/height). |
- // left/top/right/bottom held instead for convenience. |
- this.bounds_ = {}; |
- this.bounds_[DraggableRect.LEFT] = rect.left; |
- this.bounds_[DraggableRect.RIGHT] = rect.left + rect.width; |
- this.bounds_[DraggableRect.TOP] = rect.top; |
- this.bounds_[DraggableRect.BOTTOM] = rect.top + rect.height; |
- |
- this.viewport_ = viewport; |
- |
- this.oppositeSide_ = {}; |
- this.oppositeSide_[DraggableRect.LEFT] = DraggableRect.RIGHT; |
- this.oppositeSide_[DraggableRect.RIGHT] = DraggableRect.LEFT; |
- this.oppositeSide_[DraggableRect.TOP] = DraggableRect.BOTTOM; |
- this.oppositeSide_[DraggableRect.BOTTOM] = DraggableRect.TOP; |
- |
- // Translation table to form CSS-compatible cursor style. |
- this.cssSide_ = {}; |
- this.cssSide_[DraggableRect.LEFT] = 'w'; |
- this.cssSide_[DraggableRect.TOP] = 'n'; |
- this.cssSide_[DraggableRect.RIGHT] = 'e'; |
- this.cssSide_[DraggableRect.BOTTOM] = 's'; |
- this.cssSide_[DraggableRect.NONE] = ''; |
-} |
- |
-// Static members to simplify reflective access to the bounds. |
-/** |
- * @const |
- * @type {string} |
- */ |
-DraggableRect.LEFT = 'left'; |
-/** |
- * @const |
- * @type {string} |
- */ |
-DraggableRect.RIGHT = 'right'; |
-/** |
- * @const |
- * @type {string} |
- */ |
-DraggableRect.TOP = 'top'; |
-/** |
- * @const |
- * @type {string} |
- */ |
-DraggableRect.BOTTOM = 'bottom'; |
-/** |
- * @const |
- * @type {string} |
- */ |
-DraggableRect.NONE = 'none'; |
- |
-/** |
- * TODO(JSDOC) |
- * @return {number} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getLeft = function() { |
- return this.bounds_[DraggableRect.LEFT]; |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @return {number} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getRight = function() { |
- return this.bounds_[DraggableRect.RIGHT]; |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @return {number} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getTop = function() { |
- return this.bounds_[DraggableRect.TOP]; |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @return {number} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getBottom = function() { |
- return this.bounds_[DraggableRect.BOTTOM]; |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @return {Rect} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getRect = function() { |
- return new Rect(this.bounds_); |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @param {number} x X coordinate for cursor. |
- * @param {number} y Y coordinate for cursor. |
- * @param {boolean} touch // TODO(JSDOC). |
- * @return {Object} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getDragMode = function(x, y, touch) { |
- var result = { |
- xSide: DraggableRect.NONE, |
- ySide: DraggableRect.NONE |
- }; |
- |
- var bounds = this.bounds_; |
- var R = this.viewport_.screenToImageSize( |
- touch ? ImageEditor.Mode.Crop.TOUCH_GRAB_RADIUS : |
- ImageEditor.Mode.Crop.MOUSE_GRAB_RADIUS); |
- |
- var circle = new Circle(x, y, R); |
- |
- var xBetween = ImageUtil.between(bounds.left, x, bounds.right); |
- var yBetween = ImageUtil.between(bounds.top, y, bounds.bottom); |
- |
- if (circle.inside(bounds.left, bounds.top)) { |
- result.xSide = DraggableRect.LEFT; |
- result.ySide = DraggableRect.TOP; |
- } else if (circle.inside(bounds.left, bounds.bottom)) { |
- result.xSide = DraggableRect.LEFT; |
- result.ySide = DraggableRect.BOTTOM; |
- } else if (circle.inside(bounds.right, bounds.top)) { |
- result.xSide = DraggableRect.RIGHT; |
- result.ySide = DraggableRect.TOP; |
- } else if (circle.inside(bounds.right, bounds.bottom)) { |
- result.xSide = DraggableRect.RIGHT; |
- result.ySide = DraggableRect.BOTTOM; |
- } else if (yBetween && Math.abs(x - bounds.left) <= R) { |
- result.xSide = DraggableRect.LEFT; |
- } else if (yBetween && Math.abs(x - bounds.right) <= R) { |
- result.xSide = DraggableRect.RIGHT; |
- } else if (xBetween && Math.abs(y - bounds.top) <= R) { |
- result.ySide = DraggableRect.TOP; |
- } else if (xBetween && Math.abs(y - bounds.bottom) <= R) { |
- result.ySide = DraggableRect.BOTTOM; |
- } else if (xBetween && yBetween) { |
- result.whole = true; |
- } else { |
- result.newcrop = true; |
- result.xSide = DraggableRect.RIGHT; |
- result.ySide = DraggableRect.BOTTOM; |
- } |
- |
- return result; |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @param {number} x X coordinate for cursor. |
- * @param {number} y Y coordinate for cursor. |
- * @param {boolean} mouseDown If mouse button is down. |
- * @return {string} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getCursorStyle = function(x, y, mouseDown) { |
- var mode; |
- if (mouseDown) { |
- mode = this.dragMode_; |
- } else { |
- mode = this.getDragMode( |
- this.viewport_.screenToImageX(x), this.viewport_.screenToImageY(y)); |
- } |
- if (mode.whole) return 'move'; |
- if (mode.newcrop) return 'crop'; |
- return this.cssSide_[mode.ySide] + this.cssSide_[mode.xSide] + '-resize'; |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @param {number} x X coordinate for cursor. |
- * @param {number} y Y coordinate for cursor. |
- * @param {boolean} touch // TODO(JSDOC). |
- * @return {function(number,number)} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getDragHandler = function(x, y, touch) { |
- x = this.viewport_.screenToImageX(x); |
- y = this.viewport_.screenToImageY(y); |
- |
- var clipRect = this.viewport_.getImageClipped(); |
- if (!clipRect.inside(x, y)) return null; |
- |
- this.dragMode_ = this.getDragMode(x, y, touch); |
- |
- var self = this; |
- |
- var mouseBiasX; |
- var mouseBiasY; |
- |
- var fixedWidth = 0; |
- var fixedHeight = 0; |
- |
- var resizeFuncX; |
- var resizeFuncY; |
- |
- if (this.dragMode_.whole) { |
- mouseBiasX = this.bounds_.left - x; |
- fixedWidth = this.bounds_.right - this.bounds_.left; |
- resizeFuncX = function(x) { |
- self.bounds_.left = x; |
- self.bounds_.right = self.bounds_.left + fixedWidth; |
- }; |
- mouseBiasY = this.bounds_.top - y; |
- fixedHeight = this.bounds_.bottom - this.bounds_.top; |
- resizeFuncY = function(y) { |
- self.bounds_.top = y; |
- self.bounds_.bottom = self.bounds_.top + fixedHeight; |
- }; |
- } else { |
- var checkNewCrop = function() { |
- if (self.dragMode_.newcrop) { |
- self.dragMode_.newcrop = false; |
- self.bounds_.left = self.bounds_.right = x; |
- self.bounds_.top = self.bounds_.bottom = y; |
- mouseBiasX = 0; |
- mouseBiasY = 0; |
- } |
- }; |
- |
- var flipSide = function(side) { |
- var opposite = self.oppositeSide_[side]; |
- var temp = self.bounds_[side]; |
- self.bounds_[side] = self.bounds_[opposite]; |
- self.bounds_[opposite] = temp; |
- return opposite; |
- }; |
- |
- if (this.dragMode_.xSide != DraggableRect.NONE) { |
- mouseBiasX = self.bounds_[this.dragMode_.xSide] - x; |
- resizeFuncX = function(x) { |
- checkNewCrop(); |
- self.bounds_[self.dragMode_.xSide] = x; |
- if (self.bounds_.left > self.bounds_.right) { |
- self.dragMode_.xSide = flipSide(self.dragMode_.xSide); |
- } |
- }; |
- } |
- if (this.dragMode_.ySide != DraggableRect.NONE) { |
- mouseBiasY = self.bounds_[this.dragMode_.ySide] - y; |
- resizeFuncY = function(y) { |
- checkNewCrop(); |
- self.bounds_[self.dragMode_.ySide] = y; |
- if (self.bounds_.top > self.bounds_.bottom) { |
- self.dragMode_.ySide = flipSide(self.dragMode_.ySide); |
- } |
- }; |
- } |
- } |
- |
- function convertX(x) { |
- return ImageUtil.clamp( |
- clipRect.left, |
- self.viewport_.screenToImageX(x) + mouseBiasX, |
- clipRect.left + clipRect.width - fixedWidth); |
- } |
- |
- function convertY(y) { |
- return ImageUtil.clamp( |
- clipRect.top, |
- self.viewport_.screenToImageY(y) + mouseBiasY, |
- clipRect.top + clipRect.height - fixedHeight); |
- } |
- |
- return function(x, y) { |
- if (resizeFuncX) resizeFuncX(convertX(x)); |
- if (resizeFuncY) resizeFuncY(convertY(y)); |
- }; |
-}; |
- |
-/** |
- * TODO(JSDOC) |
- * @param {number} x X coordinate for cursor. |
- * @param {number} y Y coordinate for cursor. |
- * @param {boolean} touch // TODO(JSDOC). |
- * @return {ImageBuffer.DoubleTapAction} // TODO(JSDOC). |
- */ |
-DraggableRect.prototype.getDoubleTapAction = function(x, y, touch) { |
- x = this.viewport_.screenToImageX(x); |
- y = this.viewport_.screenToImageY(y); |
- |
- var clipRect = this.viewport_.getImageClipped(); |
- if (clipRect.inside(x, y)) |
- return ImageBuffer.DoubleTapAction.COMMIT; |
- else |
- return ImageBuffer.DoubleTapAction.NOTHING; |
-}; |