Index: ui/gfx/image/image.cc |
diff --git a/ui/gfx/image/image.cc b/ui/gfx/image/image.cc |
index 66fb97c553da6c23085de2ecf2fe69bc06415dfd..178a16b9736b8ef244b406dc965099e865b29670 100644 |
--- a/ui/gfx/image/image.cc |
+++ b/ui/gfx/image/image.cc |
@@ -31,7 +31,8 @@ namespace internal { |
#if defined(OS_MACOSX) |
// This is a wrapper around gfx::NSImageToSkBitmap() because this cross-platform |
// file cannot include the [square brackets] of ObjC. |
-bool NSImageToSkBitmaps(NSImage* image, std::vector<const SkBitmap*>* bitmaps); |
+ImageSkia NSImageToImageSkia(NSImage* image); |
+NSImage* ImageSkiaToNSImage(const ImageSkia* image); |
#endif |
#if defined(TOOLKIT_GTK) |
@@ -97,6 +98,7 @@ class ImageRep { |
class ImageRepSkia : public ImageRep { |
public: |
+ // Takes ownership of |image|. |
explicit ImageRepSkia(ImageSkia* image) |
: ImageRep(Image::kImageRepSkia), |
image_(image) { |
@@ -224,17 +226,17 @@ Image::Image() { |
// |storage_| is NULL for empty Images. |
} |
-Image::Image(const SkBitmap& bitmap) |
+Image::Image(const ImageSkia& image) |
: storage_(new internal::ImageStorage(Image::kImageRepSkia)) { |
- internal::ImageRepSkia* rep = |
- new internal::ImageRepSkia(new ImageSkia(new SkBitmap(bitmap))); |
+ internal::ImageRepSkia* rep = new internal::ImageRepSkia( |
+ new ImageSkia(image)); |
AddRepresentation(rep); |
} |
-Image::Image(const std::vector<const SkBitmap*>& bitmaps) |
+Image::Image(const SkBitmap& bitmap) |
: storage_(new internal::ImageStorage(Image::kImageRepSkia)) { |
- internal::ImageRepSkia* rep = new internal::ImageRepSkia( |
- new ImageSkia(bitmaps)); |
+ internal::ImageRepSkia* rep = |
+ new internal::ImageRepSkia(new ImageSkia(bitmap)); |
AddRepresentation(rep); |
} |
@@ -267,7 +269,7 @@ Image::~Image() { |
const SkBitmap* Image::ToSkBitmap() const { |
internal::ImageRep* rep = GetRepresentation(Image::kImageRepSkia); |
- return rep->AsImageRepSkia()->image()->bitmaps()[0]; |
+ return rep->AsImageRepSkia()->image()->bitmap(); |
} |
const ImageSkia* Image::ToImageSkia() const { |
@@ -294,6 +296,10 @@ NSImage* Image::ToNSImage() const { |
} |
#endif |
+ImageSkia* Image::CopyImageSkia() const { |
+ return new ImageSkia(*ToImageSkia()); |
+} |
+ |
SkBitmap* Image::CopySkBitmap() const { |
return new SkBitmap(*ToSkBitmap()); |
} |
@@ -370,8 +376,9 @@ internal::ImageRep* Image::GetRepresentation( |
#if defined(TOOLKIT_GTK) |
if (storage_->default_representation_type() == Image::kImageRepGdk) { |
internal::ImageRepGdk* pixbuf_rep = default_rep->AsImageRepGdk(); |
- rep = new internal::ImageRepSkia(new ImageSkia( |
- internal::GdkPixbufToSkBitmap(pixbuf_rep->pixbuf()))); |
+ scoped_ptr<const SkBitmap> bitmap( |
+ internal::GdkPixbufToSkBitmap(pixbuf_rep->pixbuf())); |
+ rep = new internal::ImageRepSkia(new ImageSkia(*bitmap)); |
} |
// We don't do conversions from CairoCachedSurfaces to Skia because the |
// data lives on the display server and we'll always have a GdkPixbuf if we |
@@ -379,9 +386,8 @@ internal::ImageRep* Image::GetRepresentation( |
#elif defined(OS_MACOSX) |
if (storage_->default_representation_type() == Image::kImageRepCocoa) { |
internal::ImageRepCocoa* nsimage_rep = default_rep->AsImageRepCocoa(); |
- std::vector<const SkBitmap*> bitmaps; |
- CHECK(internal::NSImageToSkBitmaps(nsimage_rep->image(), &bitmaps)); |
- rep = new internal::ImageRepSkia(new ImageSkia(bitmaps)); |
+ ImageSkia image_skia = internal::NSImageToImageSkia(nsimage_rep->image()); |
+ rep = new internal::ImageRepSkia(new ImageSkia(image_skia)); |
} |
#endif |
CHECK(rep); |
@@ -410,13 +416,13 @@ internal::ImageRep* Image::GetRepresentation( |
#elif defined(TOOLKIT_GTK) |
if (rep_type == Image::kImageRepGdk) { |
GdkPixbuf* pixbuf = gfx::GdkPixbufFromSkBitmap( |
- default_rep->AsImageRepSkia()->image()->bitmaps()[0]); |
+ default_rep->AsImageRepSkia()->image()->bitmap()); |
native_rep = new internal::ImageRepGdk(pixbuf); |
} |
#elif defined(OS_MACOSX) |
if (rep_type == Image::kImageRepCocoa) { |
- NSImage* image = gfx::SkBitmapsToNSImage( |
- default_rep->AsImageRepSkia()->image()->bitmaps()); |
+ NSImage* image = internal::ImageSkiaToNSImage( |
+ default_rep->AsImageRepSkia()->image()); |
base::mac::NSObjectRetain(image); |
native_rep = new internal::ImageRepCocoa(image); |
} |