OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 'use strict'; | 5 'use strict'; |
6 | 6 |
7 /** | 7 /** |
8 * Command queue is the only way to modify images. | 8 * Command queue is the only way to modify images. |
9 * Supports undo/redo. | 9 * Supports undo/redo. |
10 * Command execution is asynchronous (callback-based). | 10 * Command execution is asynchronous (callback-based). |
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
357 | 357 |
358 /** @override */ | 358 /** @override */ |
359 Command.Rotate.prototype.revertView = function(canvas, imageView) { | 359 Command.Rotate.prototype.revertView = function(canvas, imageView) { |
360 return imageView.replaceAndAnimate(canvas, null, -this.rotate90_); | 360 return imageView.replaceAndAnimate(canvas, null, -this.rotate90_); |
361 }; | 361 }; |
362 | 362 |
363 | 363 |
364 /** | 364 /** |
365 * Crop command. | 365 * Crop command. |
366 * | 366 * |
367 * @param {Rect} imageRect Crop rectangle in image coordinates. | 367 * @param {ImageRect} imageRect Crop rectangle in image coordinates. |
368 * @constructor | 368 * @constructor |
369 * @extends {Command} | 369 * @extends {Command} |
370 */ | 370 */ |
371 Command.Crop = function(imageRect) { | 371 Command.Crop = function(imageRect) { |
372 Command.call(this, 'crop' + imageRect.toString()); | 372 Command.call(this, 'crop' + imageRect.toString()); |
373 this.imageRect_ = imageRect; | 373 this.imageRect_ = imageRect; |
374 }; | 374 }; |
375 | 375 |
376 Command.Crop.prototype = { __proto__: Command.prototype }; | 376 Command.Crop.prototype = { __proto__: Command.prototype }; |
377 | 377 |
378 /** @override */ | 378 /** @override */ |
379 Command.Crop.prototype.execute = function( | 379 Command.Crop.prototype.execute = function( |
380 document, srcCanvas, callback, uiContext) { | 380 document, srcCanvas, callback, uiContext) { |
381 var result = this.createCanvas_( | 381 var result = this.createCanvas_( |
382 document, srcCanvas, this.imageRect_.width, this.imageRect_.height); | 382 document, srcCanvas, this.imageRect_.width, this.imageRect_.height); |
383 Rect.drawImage(result.getContext('2d'), srcCanvas, null, this.imageRect_); | 383 ImageRect.drawImage( |
| 384 result.getContext('2d'), srcCanvas, null, this.imageRect_); |
384 var delay; | 385 var delay; |
385 if (uiContext.imageView) { | 386 if (uiContext.imageView) { |
386 delay = uiContext.imageView.replaceAndAnimate(result, this.imageRect_, 0); | 387 delay = uiContext.imageView.replaceAndAnimate(result, this.imageRect_, 0); |
387 } | 388 } |
388 setTimeout(callback, 0, result, delay); | 389 setTimeout(callback, 0, result, delay); |
389 }; | 390 }; |
390 | 391 |
391 /** @override */ | 392 /** @override */ |
392 Command.Crop.prototype.revertView = function(canvas, imageView) { | 393 Command.Crop.prototype.revertView = function(canvas, imageView) { |
393 return imageView.animateAndReplace(canvas, this.imageRect_); | 394 return imageView.animateAndReplace(canvas, this.imageRect_); |
(...skipping 26 matching lines...) Expand all Loading... |
420 | 421 |
421 function onProgressVisible(updatedRow, rowCount) { | 422 function onProgressVisible(updatedRow, rowCount) { |
422 if (updatedRow == rowCount) { | 423 if (updatedRow == rowCount) { |
423 uiContext.imageView.replace(result); | 424 uiContext.imageView.replace(result); |
424 if (self.message_) | 425 if (self.message_) |
425 uiContext.prompt.show(self.message_, 2000); | 426 uiContext.prompt.show(self.message_, 2000); |
426 callback(result); | 427 callback(result); |
427 } else { | 428 } else { |
428 var viewport = uiContext.imageView.viewport_; | 429 var viewport = uiContext.imageView.viewport_; |
429 | 430 |
430 var imageStrip = new Rect(viewport.getImageBounds()); | 431 var imageStrip = new ImageRect(viewport.getImageBounds()); |
431 imageStrip.top = previousRow; | 432 imageStrip.top = previousRow; |
432 imageStrip.height = updatedRow - previousRow; | 433 imageStrip.height = updatedRow - previousRow; |
433 | 434 |
434 var screenStrip = new Rect(viewport.getImageBoundsOnScreen()); | 435 var screenStrip = new ImageRect(viewport.getImageBoundsOnScreen()); |
435 screenStrip.top = Math.round(viewport.imageToScreenY(previousRow)); | 436 screenStrip.top = Math.round(viewport.imageToScreenY(previousRow)); |
436 screenStrip.height = | 437 screenStrip.height = |
437 Math.round(viewport.imageToScreenY(updatedRow)) - screenStrip.top; | 438 Math.round(viewport.imageToScreenY(updatedRow)) - screenStrip.top; |
438 | 439 |
439 uiContext.imageView.paintDeviceRect(result, imageStrip); | 440 uiContext.imageView.paintDeviceRect(result, imageStrip); |
440 previousRow = updatedRow; | 441 previousRow = updatedRow; |
441 } | 442 } |
442 } | 443 } |
443 | 444 |
444 function onProgressInvisible(updatedRow, rowCount) { | 445 function onProgressInvisible(updatedRow, rowCount) { |
445 if (updatedRow == rowCount) { | 446 if (updatedRow == rowCount) { |
446 callback(result); | 447 callback(result); |
447 } | 448 } |
448 } | 449 } |
449 | 450 |
450 filter.applyByStrips(result, srcCanvas, this.filter_, | 451 filter.applyByStrips(result, srcCanvas, this.filter_, |
451 uiContext.imageView ? onProgressVisible : onProgressInvisible); | 452 uiContext.imageView ? onProgressVisible : onProgressInvisible); |
452 }; | 453 }; |
OLD | NEW |