Index: ui/file_manager/gallery/js/image_editor/image_view.js |
diff --git a/ui/file_manager/gallery/js/image_editor/image_view.js b/ui/file_manager/gallery/js/image_editor/image_view.js |
index 518d8ddeecfbe9220760b2f45cfaddeb1523c512..2ee21cd8b6c2e04dc824acd02fe1b18f1c2ae674 100644 |
--- a/ui/file_manager/gallery/js/image_editor/image_view.js |
+++ b/ui/file_manager/gallery/js/image_editor/image_view.js |
@@ -116,8 +116,9 @@ ImageView.prototype.draw = function() { |
*/ |
ImageView.prototype.applyViewportChange = function() { |
if (this.screenImage_) { |
- this.setTransform( |
+ this.setTransform_( |
this.screenImage_, |
+ this.viewport_, |
new ImageView.Effect.None(), |
ImageView.Effect.DEFAULT_DURATION); |
} |
@@ -224,7 +225,7 @@ ImageView.prototype.setupDeviceBuffer = function(canvas) { |
canvas.style.width = imageBounds.width + 'px'; |
canvas.style.height = imageBounds.height + 'px'; |
- this.setTransform(canvas); |
+ this.setTransform_(canvas, this.viewport_); |
return needRepaint; |
}; |
@@ -448,7 +449,7 @@ ImageView.prototype.unload = function(zoomToRect) { |
} |
if (zoomToRect && this.screenImage_) { |
var effect = this.createZoomEffect(zoomToRect); |
- this.setTransform(this.screenImage_, effect); |
+ this.setTransform_(this.screenImage_, this.viewport_, effect); |
this.screenImage_.setAttribute('fade', true); |
this.unloadTimer_ = setTimeout(function() { |
this.unloadTimer_ = null; |
@@ -552,6 +553,7 @@ ImageView.prototype.updateThumbnail_ = function(canvas) { |
ImageView.prototype.replace = function( |
content, opt_effect, opt_width, opt_height, opt_preview) { |
var oldScreenImage = this.screenImage_; |
+ var oldViewport = this.viewport_.clone(); |
this.replaceContent_(content, opt_width, opt_height, opt_preview); |
if (!opt_effect) { |
@@ -561,41 +563,50 @@ ImageView.prototype.replace = function( |
} |
var newScreenImage = this.screenImage_; |
+ this.viewport_.resetView(); |
if (oldScreenImage) |
ImageUtil.setAttribute(newScreenImage, 'fade', true); |
- this.setTransform(newScreenImage, opt_effect, 0 /* instant */); |
+ this.setTransform_( |
+ newScreenImage, this.viewport_, opt_effect, 0 /* instant */); |
setTimeout(function() { |
- this.setTransform(newScreenImage, null, |
+ this.setTransform_( |
+ newScreenImage, |
+ this.viewport_, |
+ null, |
opt_effect && opt_effect.getDuration()); |
if (oldScreenImage) { |
ImageUtil.setAttribute(newScreenImage, 'fade', false); |
ImageUtil.setAttribute(oldScreenImage, 'fade', true); |
console.assert(opt_effect.getReverse, 'Cannot revert an effect.'); |
var reverse = opt_effect.getReverse(); |
- this.setTransform(oldScreenImage, reverse); |
+ this.setTransform_(oldScreenImage, oldViewport, reverse); |
setTimeout(function() { |
if (oldScreenImage.parentNode) |
oldScreenImage.parentNode.removeChild(oldScreenImage); |
}, reverse.getSafeInterval()); |
} |
- }.bind(this), 0); |
+ }.bind(this)); |
}; |
/** |
* @param {HTMLCanvasElement} element The element to transform. |
+ * @param {Viewport} viewport Viewport to be used for calculating |
+ * transformation. |
* @param {ImageView.Effect=} opt_effect The effect to apply. |
* @param {number=} opt_duration Transition duration. |
+ * @private |
*/ |
-ImageView.prototype.setTransform = function(element, opt_effect, opt_duration) { |
+ImageView.prototype.setTransform_ = function( |
+ element, viewport, opt_effect, opt_duration) { |
if (!opt_effect) |
opt_effect = new ImageView.Effect.None(); |
if (typeof opt_duration !== 'number') |
opt_duration = opt_effect.getDuration(); |
element.style.webkitTransitionDuration = opt_duration + 'ms'; |
element.style.webkitTransitionTimingFunction = opt_effect.getTiming(); |
- element.style.webkitTransform = opt_effect.transform(element, this.viewport_); |
+ element.style.webkitTransform = opt_effect.transform(element, viewport); |
}; |
/** |
@@ -632,15 +643,15 @@ ImageView.prototype.replaceAndAnimate = function( |
new ImageView.Effect.Zoom( |
oldImageBounds.width, oldImageBounds.height, imageCropRect); |
- this.setTransform(newScreenImage, effect, 0 /* instant */); |
+ this.setTransform_(newScreenImage, this.viewport_, effect, 0 /* instant */); |
oldScreenImage.parentNode.appendChild(newScreenImage); |
oldScreenImage.parentNode.removeChild(oldScreenImage); |
// Let the layout fire, then animate back to non-transformed state. |
setTimeout( |
- this.setTransform.bind( |
- this, newScreenImage, null, effect.getDuration()), |
+ this.setTransform_.bind( |
+ this, newScreenImage, this.viewport_, null, effect.getDuration()), |
0); |
return effect.getSafeInterval(); |
@@ -667,7 +678,7 @@ ImageView.prototype.animateAndReplace = function(canvas, imageCropRect) { |
imageCropRect); |
// Animate to the transformed state. |
- this.setTransform(oldScreenImage, effect); |
+ this.setTransform_(oldScreenImage, this,viewport_, effect); |
setTimeout(setFade.bind(null, false), 0); |
setTimeout(function() { |
if (oldScreenImage.parentNode) |