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

Side by Side Diff: chrome/browser/resources/file_manager/js/image_editor/image_adjust.js

Issue 39123003: [Files.app] Split the JavaScript files into subdirectories: common, background, and foreground (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fixed test failure. Created 7 years, 1 month 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
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 'use strict';
6
7 /**
8 * The base class for simple filters that only modify the image content
9 * but do not modify the image dimensions.
10 * @constructor
11 * @extends ImageEditor.Mode
12 */
13 ImageEditor.Mode.Adjust = function() {
14 ImageEditor.Mode.apply(this, arguments);
15 this.implicitCommit = true;
16 this.doneMessage_ = null;
17 this.viewportGeneration_ = 0;
18 };
19
20 ImageEditor.Mode.Adjust.prototype = {__proto__: ImageEditor.Mode.prototype};
21
22 /** @override */
23 ImageEditor.Mode.Adjust.prototype.getCommand = function() {
24 if (!this.filter_) return null;
25
26 return new Command.Filter(this.name, this.filter_, this.doneMessage_);
27 };
28
29 /** @override */
30 ImageEditor.Mode.Adjust.prototype.cleanUpUI = function() {
31 ImageEditor.Mode.prototype.cleanUpUI.apply(this, arguments);
32 this.hidePreview();
33 };
34
35 /**
36 * TODO(JSDOC)
37 */
38 ImageEditor.Mode.Adjust.prototype.hidePreview = function() {
39 if (this.canvas_) {
40 this.canvas_.parentNode.removeChild(this.canvas_);
41 this.canvas_ = null;
42 }
43 };
44
45 /**
46 * TODO(JSDOC)
47 */
48 ImageEditor.Mode.Adjust.prototype.cleanUpCaches = function() {
49 this.filter_ = null;
50 this.previewImageData_ = null;
51 };
52
53 /**
54 * TODO(JSDOC)
55 */
56 ImageEditor.Mode.Adjust.prototype.reset = function() {
57 ImageEditor.Mode.prototype.reset.call(this);
58 this.hidePreview();
59 this.cleanUpCaches();
60 };
61
62 /**
63 * TODO(JSDOC)
64 * @param {Object} options // TODO(JSDOC).
65 */
66 ImageEditor.Mode.Adjust.prototype.update = function(options) {
67 ImageEditor.Mode.prototype.update.apply(this, arguments);
68
69 // We assume filter names are used in the UI directly.
70 // This will have to change with i18n.
71 this.filter_ = this.createFilter(options);
72 this.updatePreviewImage();
73 ImageUtil.trace.resetTimer('preview');
74 this.filter_(this.previewImageData_, this.originalImageData, 0, 0);
75 ImageUtil.trace.reportTimer('preview');
76 this.canvas_.getContext('2d').putImageData(
77 this.previewImageData_, 0, 0);
78 };
79
80 /**
81 * Copy the source image data for the preview.
82 * Use the cached copy if the viewport has not changed.
83 */
84 ImageEditor.Mode.Adjust.prototype.updatePreviewImage = function() {
85 if (!this.previewImageData_ ||
86 this.viewportGeneration_ != this.getViewport().getCacheGeneration()) {
87 this.viewportGeneration_ = this.getViewport().getCacheGeneration();
88
89 if (!this.canvas_) {
90 this.canvas_ = this.getImageView().createOverlayCanvas();
91 }
92
93 this.getImageView().setupDeviceBuffer(this.canvas_);
94
95 this.originalImageData = this.getImageView().copyScreenImageData();
96 this.previewImageData_ = this.getImageView().copyScreenImageData();
97 }
98 };
99
100 /*
101 * Own methods
102 */
103
104 /**
105 * TODO(JSDOC)
106 * @param {Object} options // TODO(JSDOC).
107 * @return {function(ImageData,ImageData,number,number)} Created function.
108 */
109 ImageEditor.Mode.Adjust.prototype.createFilter = function(options) {
110 return filter.create(this.name, options);
111 };
112
113 /**
114 * A base class for color filters that are scale independent.
115 * @constructor
116 */
117 ImageEditor.Mode.ColorFilter = function() {
118 ImageEditor.Mode.Adjust.apply(this, arguments);
119 };
120
121 ImageEditor.Mode.ColorFilter.prototype =
122 {__proto__: ImageEditor.Mode.Adjust.prototype};
123
124 /**
125 * TODO(JSDOC)
126 * @return {{r: Array.<number>, g: Array.<number>, b: Array.<number>}}
127 * histogram.
128 */
129 ImageEditor.Mode.ColorFilter.prototype.getHistogram = function() {
130 return filter.getHistogram(this.getImageView().getThumbnail());
131 };
132
133 /**
134 * Exposure/contrast filter.
135 * @constructor
136 */
137 ImageEditor.Mode.Exposure = function() {
138 ImageEditor.Mode.ColorFilter.call(this, 'exposure', 'GALLERY_EXPOSURE');
139 };
140
141 ImageEditor.Mode.Exposure.prototype =
142 {__proto__: ImageEditor.Mode.ColorFilter.prototype};
143
144 /**
145 * TODO(JSDOC)
146 * @param {ImageEditor.Toolbar} toolbar The toolbar to populate.
147 */
148 ImageEditor.Mode.Exposure.prototype.createTools = function(toolbar) {
149 toolbar.addRange('brightness', 'GALLERY_BRIGHTNESS', -1, 0, 1, 100);
150 toolbar.addRange('contrast', 'GALLERY_CONTRAST', -1, 0, 1, 100);
151 };
152
153 /**
154 * Autofix.
155 * @constructor
156 */
157 ImageEditor.Mode.Autofix = function() {
158 ImageEditor.Mode.ColorFilter.call(this, 'autofix', 'GALLERY_AUTOFIX');
159 this.doneMessage_ = 'fixed';
160 };
161
162 ImageEditor.Mode.Autofix.prototype =
163 {__proto__: ImageEditor.Mode.ColorFilter.prototype};
164
165 /**
166 * TODO(JSDOC)
167 * @param {ImageEditor.Toolbar} toolbar The toolbar to populate.
168 */
169 ImageEditor.Mode.Autofix.prototype.createTools = function(toolbar) {
170 var self = this;
171 toolbar.addButton('Apply', this.apply.bind(this));
172 };
173
174 /**
175 * TODO(JSDOC)
176 * @return {boolean} // TODO(JSDOC).
177 */
178 ImageEditor.Mode.Autofix.prototype.isApplicable = function() {
179 return this.getImageView().hasValidImage() &&
180 filter.autofix.isApplicable(this.getHistogram());
181 };
182
183 /**
184 * TODO(JSDOC)
185 */
186 ImageEditor.Mode.Autofix.prototype.apply = function() {
187 this.update({histogram: this.getHistogram()});
188 };
189
190 /**
191 * Instant Autofix.
192 * @constructor
193 */
194 ImageEditor.Mode.InstantAutofix = function() {
195 ImageEditor.Mode.Autofix.apply(this, arguments);
196 this.instant = true;
197 };
198
199 ImageEditor.Mode.InstantAutofix.prototype =
200 {__proto__: ImageEditor.Mode.Autofix.prototype};
201
202 /**
203 * TODO(JSDOC)
204 */
205 ImageEditor.Mode.InstantAutofix.prototype.setUp = function() {
206 ImageEditor.Mode.Autofix.prototype.setUp.apply(this, arguments);
207 this.apply();
208 };
209
210 /**
211 * Blur filter.
212 * @constructor
213 */
214 ImageEditor.Mode.Blur = function() {
215 ImageEditor.Mode.Adjust.call(this, 'blur');
216 };
217
218 ImageEditor.Mode.Blur.prototype =
219 {__proto__: ImageEditor.Mode.Adjust.prototype};
220
221 /**
222 * TODO(JSDOC)
223 * @param {ImageEditor.Toolbar} toolbar The toolbar to populate.
224 */
225 ImageEditor.Mode.Blur.prototype.createTools = function(toolbar) {
226 toolbar.addRange('strength', 'GALLERY_STRENGTH', 0, 0, 1, 100);
227 toolbar.addRange('radius', 'GALLERY_RADIUS', 1, 1, 3);
228 };
229
230 /**
231 * Sharpen filter.
232 * @constructor
233 */
234 ImageEditor.Mode.Sharpen = function() {
235 ImageEditor.Mode.Adjust.call(this, 'sharpen');
236 };
237
238 ImageEditor.Mode.Sharpen.prototype =
239 {__proto__: ImageEditor.Mode.Adjust.prototype};
240
241 /**
242 * TODO(JSDOC)
243 * @param {ImageEditor.Toolbar} toolbar The toolbar to populate.
244 */
245 ImageEditor.Mode.Sharpen.prototype.createTools = function(toolbar) {
246 toolbar.addRange('strength', 'GALLERY_STRENGTH', 0, 0, 1, 100);
247 toolbar.addRange('radius', 'GALLERY_RADIUS', 1, 1, 3);
248 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698