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

Side by Side Diff: ui/gfx/image/image_skia.cc

Issue 277773002: Add ImageSkiaRep::unscaled that tells if the image is for unscaled image. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: updated comment Created 6 years, 7 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 | « ui/base/resource/resource_bundle_unittest.cc ('k') | ui/gfx/image/image_skia_rep.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 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 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 #include "ui/gfx/image/image_skia.h" 5 #include "ui/gfx/image/image_skia.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 10
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
95 // Checks if the current thread can safely modify the storage. 95 // Checks if the current thread can safely modify the storage.
96 bool CanModify() const { 96 bool CanModify() const {
97 return !read_only_ && CalledOnValidThread(); 97 return !read_only_ && CalledOnValidThread();
98 } 98 }
99 99
100 // Checks if the current thread can safely read the storage. 100 // Checks if the current thread can safely read the storage.
101 bool CanRead() const { 101 bool CanRead() const {
102 return (read_only_ && !source_.get()) || CalledOnValidThread(); 102 return (read_only_ && !source_.get()) || CalledOnValidThread();
103 } 103 }
104 104
105 // Add a new representation. If the storage contains unscaled
106 // image rep, change it to scaled as this now contains
107 // multiple reps.
108 void AddRepresentation(const ImageSkiaRep& image) {
109 for (ImageSkia::ImageSkiaReps::iterator it = image_reps_.begin();
110 it < image_reps_.end();
111 ++it) {
112 if (it->unscaled()) {
113 it->SetScaled();
114 break;
115 }
116 }
117 image_reps_.push_back(image);
118 }
119
105 // Returns the iterator of the image rep whose density best matches 120 // Returns the iterator of the image rep whose density best matches
106 // |scale|. If the image for the |scale| doesn't exist in the storage and 121 // |scale|. If the image for the |scale| doesn't exist in the storage and
107 // |storage| is set, it fetches new image by calling 122 // |storage| is set, it fetches new image by calling
108 // |ImageSkiaSource::GetImageForScale|. If the source returns the image with 123 // |ImageSkiaSource::GetImageForScale|. If the source returns the image with
109 // different scale (if the image doesn't exist in resource, for example), it 124 // different scale (if the image doesn't exist in resource, for example), it
110 // will fallback to closest image rep. 125 // will fallback to closest image rep.
111 std::vector<ImageSkiaRep>::iterator FindRepresentation( 126 std::vector<ImageSkiaRep>::iterator FindRepresentation(
112 float scale, bool fetch_new_image) const { 127 float scale, bool fetch_new_image) const {
113 ImageSkiaStorage* non_const = const_cast<ImageSkiaStorage*>(this); 128 ImageSkiaStorage* non_const = const_cast<ImageSkiaStorage*>(this);
114 129
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 return *g_supported_scales; 248 return *g_supported_scales;
234 } 249 }
235 250
236 // static 251 // static
237 float ImageSkia::GetMaxSupportedScale() { 252 float ImageSkia::GetMaxSupportedScale() {
238 return g_supported_scales->back(); 253 return g_supported_scales->back();
239 } 254 }
240 255
241 // static 256 // static
242 ImageSkia ImageSkia::CreateFrom1xBitmap(const SkBitmap& bitmap) { 257 ImageSkia ImageSkia::CreateFrom1xBitmap(const SkBitmap& bitmap) {
243 return ImageSkia(ImageSkiaRep(bitmap, 1.0f)); 258 return ImageSkia(ImageSkiaRep(bitmap, 0.0f));
Jun Mukai 2014/05/09 17:57:39 Doesn't this cause any other unexpected results? T
oshima 2014/05/09 20:53:33 Yes, this is exactly what I wanted to guarantee ho
244 } 259 }
245 260
246 scoped_ptr<ImageSkia> ImageSkia::DeepCopy() const { 261 scoped_ptr<ImageSkia> ImageSkia::DeepCopy() const {
247 ImageSkia* copy = new ImageSkia; 262 ImageSkia* copy = new ImageSkia;
248 if (isNull()) 263 if (isNull())
249 return scoped_ptr<ImageSkia>(copy); 264 return scoped_ptr<ImageSkia>(copy);
250 265
251 CHECK(CanRead()); 266 CHECK(CanRead());
252 267
253 std::vector<gfx::ImageSkiaRep>& reps = storage_->image_reps(); 268 std::vector<gfx::ImageSkiaRep>& reps = storage_->image_reps();
(...skipping 17 matching lines...) Expand all
271 286
272 // TODO(oshima): This method should be called |SetRepresentation| 287 // TODO(oshima): This method should be called |SetRepresentation|
273 // and replace the existing rep if there is already one with the 288 // and replace the existing rep if there is already one with the
274 // same scale so that we can guarantee that a ImageSkia instance contains only 289 // same scale so that we can guarantee that a ImageSkia instance contains only
275 // one image rep per scale. This is not possible now as ImageLoader currently 290 // one image rep per scale. This is not possible now as ImageLoader currently
276 // stores need this feature, but this needs to be fixed. 291 // stores need this feature, but this needs to be fixed.
277 if (isNull()) { 292 if (isNull()) {
278 Init(image_rep); 293 Init(image_rep);
279 } else { 294 } else {
280 CHECK(CanModify()); 295 CHECK(CanModify());
281 storage_->image_reps().push_back(image_rep); 296 storage_->AddRepresentation(image_rep);
Jun Mukai 2014/05/09 17:57:39 Why only this has to be replaced by AddRepresentat
oshima 2014/05/09 20:53:33 I added the comment to explain why.
282 } 297 }
283 } 298 }
284 299
285 void ImageSkia::RemoveRepresentation(float scale) { 300 void ImageSkia::RemoveRepresentation(float scale) {
286 if (isNull()) 301 if (isNull())
287 return; 302 return;
288 CHECK(CanModify()); 303 CHECK(CanModify());
289 304
290 ImageSkiaReps& image_reps = storage_->image_reps(); 305 ImageSkiaReps& image_reps = storage_->image_reps();
291 ImageSkiaReps::iterator it = 306 ImageSkiaReps::iterator it =
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 bool ImageSkia::CanModify() const { 431 bool ImageSkia::CanModify() const {
417 return !storage_.get() || storage_->CanModify(); 432 return !storage_.get() || storage_->CanModify();
418 } 433 }
419 434
420 void ImageSkia::DetachStorageFromThread() { 435 void ImageSkia::DetachStorageFromThread() {
421 if (storage_.get()) 436 if (storage_.get())
422 storage_->DetachFromThread(); 437 storage_->DetachFromThread();
423 } 438 }
424 439
425 } // namespace gfx 440 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/base/resource/resource_bundle_unittest.cc ('k') | ui/gfx/image/image_skia_rep.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698