Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1727)

Side by Side Diff: ui/file_manager/gallery/js/image_editor/viewport.js

Issue 383583003: Make the Viewport class pure model. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 * Viewport class controls the way the image is displayed (scale, offset etc). 8 * Viewport class controls the way the image is displayed (scale, offset etc).
9 * @constructor 9 * @constructor
10 */ 10 */
11 function Viewport() { 11 function Viewport() {
12 this.imageBounds_ = new Rect(); 12 this.imageBounds_ = new Rect();
13 this.screenBounds_ = new Rect(); 13 this.screenBounds_ = new Rect();
14 14
15 this.scale_ = 1; 15 this.scale_ = 1;
16 this.offsetX_ = 0; 16 this.offsetX_ = 0;
17 this.offsetY_ = 0; 17 this.offsetY_ = 0;
18 18
19 this.generation_ = 0; 19 this.generation_ = 0;
20 20
21 this.scaleControl_ = null;
22 this.repaintCallbacks_ = []; 21 this.repaintCallbacks_ = [];
23 this.update(); 22 this.update();
24 } 23 }
25 24
26 /* 25 /*
27 * Viewport modification. 26 * Viewport modification.
28 */ 27 */
29 28
30 /** 29 /**
31 * @param {Object} scaleControl The UI object responsible for scaling.
32 */
33 Viewport.prototype.setScaleControl = function(scaleControl) {
34 this.scaleControl_ = scaleControl;
35 };
36
37 /**
38 * @param {number} width Image width. 30 * @param {number} width Image width.
39 * @param {number} height Image height. 31 * @param {number} height Image height.
40 */ 32 */
41 Viewport.prototype.setImageSize = function(width, height) { 33 Viewport.prototype.setImageSize = function(width, height) {
42 this.imageBounds_ = new Rect(width, height); 34 this.imageBounds_ = new Rect(width, height);
43 if (this.scaleControl_) this.scaleControl_.displayImageSize(width, height);
44 this.invalidateCaches(); 35 this.invalidateCaches();
45 }; 36 };
46 37
47 /** 38 /**
48 * @param {number} width Screen width. 39 * @param {number} width Screen width.
49 * @param {number} height Screen height. 40 * @param {number} height Screen height.
50 */ 41 */
51 Viewport.prototype.setScreenSize = function(width, height) { 42 Viewport.prototype.setScreenSize = function(width, height) {
52 this.screenBounds_ = new Rect(width, height); 43 this.screenBounds_ = new Rect(width, height);
53 if (this.scaleControl_)
54 this.scaleControl_.setMinScale(this.getFittingScale());
55 this.invalidateCaches(); 44 this.invalidateCaches();
56 }; 45 };
57 46
58 /** 47 /**
59 * Set the size by an HTML element. 48 * Set the size by an HTML element.
60 * 49 *
61 * @param {HTMLElement} frame The element acting as the "screen". 50 * @param {HTMLElement} frame The element acting as the "screen".
62 */ 51 */
63 Viewport.prototype.sizeByFrame = function(frame) { 52 Viewport.prototype.sizeByFrame = function(frame) {
64 this.setScreenSize(frame.clientWidth, frame.clientHeight); 53 this.setScreenSize(frame.clientWidth, frame.clientHeight);
(...skipping 18 matching lines...) Expand all
83 */ 72 */
84 Viewport.prototype.getScale = function() { return this.scale_; }; 73 Viewport.prototype.getScale = function() { return this.scale_; };
85 74
86 /** 75 /**
87 * @param {number} scale The new scale. 76 * @param {number} scale The new scale.
88 * @param {boolean} notify True if the change should be reflected in the UI. 77 * @param {boolean} notify True if the change should be reflected in the UI.
89 */ 78 */
90 Viewport.prototype.setScale = function(scale, notify) { 79 Viewport.prototype.setScale = function(scale, notify) {
91 if (this.scale_ == scale) return; 80 if (this.scale_ == scale) return;
92 this.scale_ = scale; 81 this.scale_ = scale;
93 if (notify && this.scaleControl_) this.scaleControl_.displayScale(scale);
94 this.invalidateCaches(); 82 this.invalidateCaches();
95 }; 83 };
96 84
97 /** 85 /**
98 * @return {number} Best scale to fit the current image into the current screen. 86 * @return {number} Best scale to fit the current image into the current screen.
99 */ 87 */
100 Viewport.prototype.getFittingScale = function() { 88 Viewport.prototype.getFittingScale = function() {
101 var scaleX = this.screenBounds_.width / this.imageBounds_.width; 89 var scaleX = this.screenBounds_.width / this.imageBounds_.width;
102 var scaleY = this.screenBounds_.height / this.imageBounds_.height; 90 var scaleY = this.screenBounds_.height / this.imageBounds_.height;
103 // Scales > (1 / this.getDevicePixelRatio()) do not look good. Also they are 91 // Scales > (1 / this.getDevicePixelRatio()) do not look good. Also they are
104 // not really useful as we do not have any pixel-level operations. 92 // not really useful as we do not have any pixel-level operations.
105 return Math.min(1 / Viewport.getDevicePixelRatio(), scaleX, scaleY); 93 return Math.min(1 / Viewport.getDevicePixelRatio(), scaleX, scaleY);
106 }; 94 };
107 95
108 /** 96 /**
109 * Set the scale to fit the image into the screen. 97 * Set the scale to fit the image into the screen.
110 */ 98 */
111 Viewport.prototype.fitImage = function() { 99 Viewport.prototype.fitImage = function() {
112 var scale = this.getFittingScale(); 100 var scale = this.getFittingScale();
113 if (this.scaleControl_) this.scaleControl_.setMinScale(scale);
114 this.setScale(scale, true); 101 this.setScale(scale, true);
115 }; 102 };
116 103
117 /** 104 /**
118 * @return {number} X-offset of the viewport. 105 * @return {number} X-offset of the viewport.
119 */ 106 */
120 Viewport.prototype.getOffsetX = function() { return this.offsetX_; }; 107 Viewport.prototype.getOffsetX = function() { return this.offsetX_; };
121 108
122 /** 109 /**
123 * @return {number} Y-offset of the viewport. 110 * @return {number} Y-offset of the viewport.
(...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after
423 }; 410 };
424 411
425 /** 412 /**
426 * Repaint all clients. 413 * Repaint all clients.
427 */ 414 */
428 Viewport.prototype.repaint = function() { 415 Viewport.prototype.repaint = function() {
429 this.update(); 416 this.update();
430 for (var i = 0; i != this.repaintCallbacks_.length; i++) 417 for (var i = 0; i != this.repaintCallbacks_.length; i++)
431 this.repaintCallbacks_[i](); 418 this.repaintCallbacks_[i]();
432 }; 419 };
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698