| 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);
|
| }
|
|
|