| 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 52fe9d4c3065543d4e0e665d655bb6692930bac1..312fe726e42d58fd0e187dc959cdf7049855edcb 100644
|
| --- a/ui/file_manager/gallery/js/image_editor/image_view.js
|
| +++ b/ui/file_manager/gallery/js/image_editor/image_view.js
|
| @@ -119,8 +119,7 @@ ImageView.prototype.draw = function() {
|
| this.displayedContentGeneration_ = this.contentGeneration_;
|
|
|
| ImageUtil.trace.resetTimer('paint');
|
| - this.paintDeviceRect(this.viewport_.getDeviceClipped(),
|
| - this.contentCanvas_, this.viewport_.getImageClipped());
|
| + this.paintDeviceRect(this.contentCanvas_, new Rect(this.contentCanvas_));
|
| ImageUtil.trace.reportTimer('paint');
|
| }
|
| };
|
| @@ -178,22 +177,29 @@ ImageView.prototype.getContentRevision = function() {
|
| * Copies an image fragment from a full resolution canvas to a device resolution
|
| * canvas.
|
| *
|
| - * @param {Rect} deviceRect Rectangle in the device coordinates.
|
| - * @param {HTMLCanvasElement} canvas Full resolution canvas.
|
| - * @param {Rect} imageRect Rectangle in the full resolution canvas.
|
| - */
|
| -ImageView.prototype.paintDeviceRect = function(deviceRect, canvas, imageRect) {
|
| - // Map screen canvas (0,0) to (deviceBounds.left, deviceBounds.top)
|
| - var deviceBounds = this.viewport_.getDeviceClipped();
|
| - deviceRect = deviceRect.shift(-deviceBounds.left, -deviceBounds.top);
|
| -
|
| - // The source canvas may have different physical size than the image size
|
| - // set at the viewport. Adjust imageRect accordingly.
|
| - var bounds = this.viewport_.getImageBounds();
|
| - var scaleX = canvas.width / bounds.width;
|
| - var scaleY = canvas.height / bounds.height;
|
| - imageRect = new Rect(imageRect.left * scaleX, imageRect.top * scaleY,
|
| - imageRect.width * scaleX, imageRect.height * scaleY);
|
| + * @param {HTMLCanvasElement} canvas Canvas containing whole image. The canvas
|
| + * may not be full resolution (scaled).
|
| + * @param {Rect} imageRect Rectangle region of the canvas to be rendered.
|
| + */
|
| +ImageView.prototype.paintDeviceRect = function(canvas, imageRect) {
|
| + // Check canvas size.
|
| + var deviceBounds = this.viewport_.getDeviceBounds();
|
| + if (this.screenImage_.width != deviceBounds.width ||
|
| + this.screenImage_.height != deviceBounds.height) {
|
| + console.error('The size of canvas is invalid.', (new Error).stack);
|
| + return;
|
| + }
|
| +
|
| + // Map the rectangle in full resolution image to the rectangle in the device
|
| + // canvas.
|
| + var scaleX = deviceBounds.width / canvas.width;
|
| + var scaleY = deviceBounds.height / canvas.height;
|
| + var deviceRect = new Rect(
|
| + imageRect.left * scaleX,
|
| + imageRect.top * scaleY,
|
| + imageRect.width * scaleX,
|
| + imageRect.height * scaleY);
|
| +
|
| Rect.drawImage(
|
| this.screenImage_.getContext('2d'), canvas, deviceRect, imageRect);
|
| };
|
| @@ -217,17 +223,17 @@ ImageView.prototype.createOverlayCanvas = function() {
|
| * @param {HTMLCanvasElement} canvas The buffer canvas.
|
| */
|
| ImageView.prototype.setupDeviceBuffer = function(canvas) {
|
| - var deviceRect = this.viewport_.getDeviceClipped();
|
| -
|
| // Set the canvas position and size in device pixels.
|
| + var deviceRect = this.viewport_.getDeviceBounds();
|
| if (canvas.width !== deviceRect.width)
|
| canvas.width = deviceRect.width;
|
| -
|
| if (canvas.height !== deviceRect.height)
|
| canvas.height = deviceRect.height;
|
|
|
| - canvas.style.left = deviceRect.left + 'px';
|
| - canvas.style.top = deviceRect.top + 'px';
|
| + // Center the image.
|
| + var imageBoudns = this.viewport_.getImageElementBoundsOnScreen();
|
| + canvas.style.left = imageBoudns.left + 'px';
|
| + canvas.style.top = imageBoudns.top + 'px';
|
|
|
| // Scale the canvas down to screen pixels.
|
| this.setTransform(canvas);
|
|
|