| Index: ui/gfx/image/image_skia.cc
|
| diff --git a/ui/gfx/image/image_skia.cc b/ui/gfx/image/image_skia.cc
|
| index e86b5e0228f64cd378e307b4cb002c54d7f81ff2..6c73b02ef8cfa915188fefe386026a09344ed2c0 100644
|
| --- a/ui/gfx/image/image_skia.cc
|
| +++ b/ui/gfx/image/image_skia.cc
|
| @@ -58,6 +58,16 @@ class ImageSkiaStorage : public base::RefCounted<ImageSkiaStorage>,
|
| read_only_(false) {
|
| }
|
|
|
| + ImageSkiaStorage(ImageSkiaSource* source, ui::ScaleFactor scale_factor)
|
| + : source_(source),
|
| + read_only_(false) {
|
| + const ImageSkiaRep& image = *FindRepresentation(scale_factor, true);
|
| + if (image.is_null())
|
| + source_.reset();
|
| + else
|
| + size_.SetSize(image.GetWidth(), image.GetHeight());
|
| + }
|
| +
|
| bool has_source() const { return source_.get() != NULL; }
|
|
|
| std::vector<gfx::ImageSkiaRep>& image_reps() { return image_reps_; }
|
| @@ -162,7 +172,7 @@ class ImageSkiaStorage : public base::RefCounted<ImageSkiaStorage>,
|
| scoped_ptr<ImageSkiaSource> source_;
|
|
|
| // Size of the image in DIP.
|
| - const gfx::Size size_;
|
| + gfx::Size size_;
|
|
|
| bool read_only_;
|
|
|
| @@ -181,6 +191,15 @@ ImageSkia::ImageSkia(ImageSkiaSource* source, const gfx::Size& size)
|
| DetachStorageFromThread();
|
| }
|
|
|
| +ImageSkia::ImageSkia(ImageSkiaSource* source, ui::ScaleFactor scale_factor)
|
| + : storage_(new internal::ImageSkiaStorage(source, scale_factor)) {
|
| + DCHECK(source);
|
| + if (!storage_->has_source())
|
| + storage_ = NULL;
|
| + // No other thread has reference to this, so it's safe to detach the thread.
|
| + DetachStorageFromThread();
|
| +}
|
| +
|
| ImageSkia::ImageSkia(const SkBitmap& bitmap) {
|
| Init(ImageSkiaRep(bitmap, ui::SCALE_FACTOR_100P));
|
| // No other thread has reference to this, so it's safe to detach the thread.
|
|
|