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

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

Issue 231733005: Delete the GTK+ port of Chrome. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remerge to ToT Created 6 years, 8 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
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.h" 5 #include "ui/gfx/image/image.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
11 #include "base/stl_util.h" 11 #include "base/stl_util.h"
12 #include "third_party/skia/include/core/SkBitmap.h" 12 #include "third_party/skia/include/core/SkBitmap.h"
13 #include "ui/gfx/image/image_png_rep.h" 13 #include "ui/gfx/image/image_png_rep.h"
14 #include "ui/gfx/image/image_skia.h" 14 #include "ui/gfx/image/image_skia.h"
15 #include "ui/gfx/size.h" 15 #include "ui/gfx/size.h"
16 16
17 #if !defined(OS_IOS) 17 #if !defined(OS_IOS)
18 #include "ui/gfx/codec/png_codec.h" 18 #include "ui/gfx/codec/png_codec.h"
19 #endif 19 #endif
20 20
21 #if defined(TOOLKIT_GTK) 21 #if defined(OS_IOS)
22 #include <gdk-pixbuf/gdk-pixbuf.h>
23 #include <gdk/gdk.h>
24 #include <glib-object.h>
25 #include "ui/gfx/canvas.h"
26 #include "ui/gfx/gtk_util.h"
27 #include "ui/gfx/image/cairo_cached_surface.h"
28 #include "ui/gfx/scoped_gobject.h"
29 #elif defined(OS_IOS)
30 #include "base/mac/foundation_util.h" 22 #include "base/mac/foundation_util.h"
31 #include "ui/gfx/image/image_skia_util_ios.h" 23 #include "ui/gfx/image/image_skia_util_ios.h"
32 #elif defined(OS_MACOSX) 24 #elif defined(OS_MACOSX)
33 #include "base/mac/mac_util.h" 25 #include "base/mac/mac_util.h"
34 #include "ui/gfx/image/image_skia_util_mac.h" 26 #include "ui/gfx/image/image_skia_util_mac.h"
35 #endif 27 #endif
36 28
37 namespace gfx { 29 namespace gfx {
38 30
39 namespace internal { 31 namespace internal {
40 32
41 #if defined(TOOLKIT_GTK)
42 const ImageSkia ImageSkiaFromGdkPixbuf(GdkPixbuf* pixbuf) {
43 CHECK(pixbuf);
44 gfx::Canvas canvas(gfx::Size(gdk_pixbuf_get_width(pixbuf),
45 gdk_pixbuf_get_height(pixbuf)),
46 1.0f,
47 false);
48 skia::ScopedPlatformPaint scoped_platform_paint(canvas.sk_canvas());
49 cairo_t* cr = scoped_platform_paint.GetPlatformSurface();
50 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
51 cairo_paint(cr);
52 return ImageSkia(canvas.ExtractImageRep());
53 }
54
55 // Returns a 16x16 red pixbuf to visually show error in decoding PNG.
56 // Also logs error to console.
57 GdkPixbuf* GetErrorPixbuf() {
58 LOG(ERROR) << "Unable to decode PNG.";
59 GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 16, 16);
60 gdk_pixbuf_fill(pixbuf, 0xff0000ff);
61 return pixbuf;
62 }
63
64 GdkPixbuf* GdkPixbufFromPNG(
65 const std::vector<gfx::ImagePNGRep>& image_png_reps) {
66 scoped_refptr<base::RefCountedMemory> png_bytes(NULL);
67 for (size_t i = 0; i < image_png_reps.size(); ++i) {
68 if (image_png_reps[i].scale == 1.0f)
69 png_bytes = image_png_reps[i].raw_data;
70 }
71
72 if (!png_bytes.get())
73 return GetErrorPixbuf();
74
75 GdkPixbuf* pixbuf = NULL;
76 ui::ScopedGObject<GdkPixbufLoader>::Type loader(gdk_pixbuf_loader_new());
77
78 bool ok = gdk_pixbuf_loader_write(loader.get(),
79 reinterpret_cast<const guint8*>(png_bytes->front()), png_bytes->size(),
80 NULL);
81
82 // Calling gdk_pixbuf_loader_close forces the data to be parsed by the
83 // loader. This must be done before calling gdk_pixbuf_loader_get_pixbuf.
84 if (ok)
85 ok = gdk_pixbuf_loader_close(loader.get(), NULL);
86 if (ok)
87 pixbuf = gdk_pixbuf_loader_get_pixbuf(loader.get());
88
89 if (pixbuf) {
90 // The pixbuf is owned by the scoped loader which will delete its ref when
91 // it goes out of scope. Add a ref so that the pixbuf still exists.
92 g_object_ref(pixbuf);
93 } else {
94 return GetErrorPixbuf();
95 }
96
97 return pixbuf;
98 }
99
100 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromPixbuf(
101 GdkPixbuf* pixbuf) {
102 gchar* image = NULL;
103 gsize image_size;
104 GError* error = NULL;
105 CHECK(gdk_pixbuf_save_to_buffer(
106 pixbuf, &image, &image_size, "png", &error, NULL));
107 scoped_refptr<base::RefCountedBytes> png_bytes(
108 new base::RefCountedBytes());
109 png_bytes->data().assign(image, image + image_size);
110 g_free(image);
111 return png_bytes;
112 }
113
114 #endif // defined(TOOLKIT_GTK)
115
116 #if defined(OS_IOS) 33 #if defined(OS_IOS)
117 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromUIImage( 34 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromUIImage(
118 UIImage* uiimage); 35 UIImage* uiimage);
119 // Caller takes ownership of the returned UIImage. 36 // Caller takes ownership of the returned UIImage.
120 UIImage* CreateUIImageFromPNG( 37 UIImage* CreateUIImageFromPNG(
121 const std::vector<gfx::ImagePNGRep>& image_png_reps); 38 const std::vector<gfx::ImagePNGRep>& image_png_reps);
122 gfx::Size UIImageSize(UIImage* image); 39 gfx::Size UIImageSize(UIImage* image);
123 #elif defined(OS_MACOSX) 40 #elif defined(OS_MACOSX)
124 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromNSImage( 41 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromNSImage(
125 NSImage* nsimage); 42 NSImage* nsimage);
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 ImageRepPNG* AsImageRepPNG() { 123 ImageRepPNG* AsImageRepPNG() {
207 CHECK_EQ(type_, Image::kImageRepPNG); 124 CHECK_EQ(type_, Image::kImageRepPNG);
208 return reinterpret_cast<ImageRepPNG*>(this); 125 return reinterpret_cast<ImageRepPNG*>(this);
209 } 126 }
210 127
211 ImageRepSkia* AsImageRepSkia() { 128 ImageRepSkia* AsImageRepSkia() {
212 CHECK_EQ(type_, Image::kImageRepSkia); 129 CHECK_EQ(type_, Image::kImageRepSkia);
213 return reinterpret_cast<ImageRepSkia*>(this); 130 return reinterpret_cast<ImageRepSkia*>(this);
214 } 131 }
215 132
216 #if defined(TOOLKIT_GTK)
217 ImageRepGdk* AsImageRepGdk() {
218 CHECK_EQ(type_, Image::kImageRepGdk);
219 return reinterpret_cast<ImageRepGdk*>(this);
220 }
221
222 ImageRepCairo* AsImageRepCairo() {
223 CHECK_EQ(type_, Image::kImageRepCairo);
224 return reinterpret_cast<ImageRepCairo*>(this);
225 }
226 #endif
227
228 #if defined(OS_IOS) 133 #if defined(OS_IOS)
229 ImageRepCocoaTouch* AsImageRepCocoaTouch() { 134 ImageRepCocoaTouch* AsImageRepCocoaTouch() {
230 CHECK_EQ(type_, Image::kImageRepCocoaTouch); 135 CHECK_EQ(type_, Image::kImageRepCocoaTouch);
231 return reinterpret_cast<ImageRepCocoaTouch*>(this); 136 return reinterpret_cast<ImageRepCocoaTouch*>(this);
232 } 137 }
233 #elif defined(OS_MACOSX) 138 #elif defined(OS_MACOSX)
234 ImageRepCocoa* AsImageRepCocoa() { 139 ImageRepCocoa* AsImageRepCocoa() {
235 CHECK_EQ(type_, Image::kImageRepCocoa); 140 CHECK_EQ(type_, Image::kImageRepCocoa);
236 return reinterpret_cast<ImageRepCocoa*>(this); 141 return reinterpret_cast<ImageRepCocoa*>(this);
237 } 142 }
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 } 224 }
320 225
321 ImageSkia* image() { return image_.get(); } 226 ImageSkia* image() { return image_.get(); }
322 227
323 private: 228 private:
324 scoped_ptr<ImageSkia> image_; 229 scoped_ptr<ImageSkia> image_;
325 230
326 DISALLOW_COPY_AND_ASSIGN(ImageRepSkia); 231 DISALLOW_COPY_AND_ASSIGN(ImageRepSkia);
327 }; 232 };
328 233
329 #if defined(TOOLKIT_GTK)
330 class ImageRepGdk : public ImageRep {
331 public:
332 explicit ImageRepGdk(GdkPixbuf* pixbuf)
333 : ImageRep(Image::kImageRepGdk),
334 pixbuf_(pixbuf) {
335 CHECK(pixbuf);
336 }
337
338 virtual ~ImageRepGdk() {
339 if (pixbuf_) {
340 g_object_unref(pixbuf_);
341 pixbuf_ = NULL;
342 }
343 }
344
345 virtual int Width() const OVERRIDE {
346 return gdk_pixbuf_get_width(pixbuf_);
347 }
348
349 virtual int Height() const OVERRIDE {
350 return gdk_pixbuf_get_height(pixbuf_);
351 }
352
353 virtual gfx::Size Size() const OVERRIDE {
354 return gfx::Size(Width(), Height());
355 }
356
357 GdkPixbuf* pixbuf() const { return pixbuf_; }
358
359 private:
360 GdkPixbuf* pixbuf_;
361
362 DISALLOW_COPY_AND_ASSIGN(ImageRepGdk);
363 };
364
365 // Represents data that lives on the display server instead of in the client.
366 class ImageRepCairo : public ImageRep {
367 public:
368 explicit ImageRepCairo(GdkPixbuf* pixbuf)
369 : ImageRep(Image::kImageRepCairo),
370 cairo_cache_(new CairoCachedSurface) {
371 CHECK(pixbuf);
372 cairo_cache_->UsePixbuf(pixbuf);
373 }
374
375 virtual ~ImageRepCairo() {
376 delete cairo_cache_;
377 }
378
379 virtual int Width() const OVERRIDE {
380 return cairo_cache_->Width();
381 }
382
383 virtual int Height() const OVERRIDE {
384 return cairo_cache_->Height();
385 }
386
387 virtual gfx::Size Size() const OVERRIDE {
388 return gfx::Size(Width(), Height());
389 }
390
391 CairoCachedSurface* surface() const { return cairo_cache_; }
392
393 private:
394 CairoCachedSurface* cairo_cache_;
395
396 DISALLOW_COPY_AND_ASSIGN(ImageRepCairo);
397 };
398 #endif // defined(TOOLKIT_GTK)
399
400 #if defined(OS_IOS) 234 #if defined(OS_IOS)
401 class ImageRepCocoaTouch : public ImageRep { 235 class ImageRepCocoaTouch : public ImageRep {
402 public: 236 public:
403 explicit ImageRepCocoaTouch(UIImage* image) 237 explicit ImageRepCocoaTouch(UIImage* image)
404 : ImageRep(Image::kImageRepCocoaTouch), 238 : ImageRep(Image::kImageRepCocoaTouch),
405 image_(image) { 239 image_(image) {
406 CHECK(image); 240 CHECK(image);
407 } 241 }
408 242
409 virtual ~ImageRepCocoaTouch() { 243 virtual ~ImageRepCocoaTouch() {
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
543 377
544 Image::Image(const ImageSkia& image) { 378 Image::Image(const ImageSkia& image) {
545 if (!image.isNull()) { 379 if (!image.isNull()) {
546 storage_ = new internal::ImageStorage(Image::kImageRepSkia); 380 storage_ = new internal::ImageStorage(Image::kImageRepSkia);
547 internal::ImageRepSkia* rep = new internal::ImageRepSkia( 381 internal::ImageRepSkia* rep = new internal::ImageRepSkia(
548 new ImageSkia(image)); 382 new ImageSkia(image));
549 AddRepresentation(rep); 383 AddRepresentation(rep);
550 } 384 }
551 } 385 }
552 386
553 #if defined(TOOLKIT_GTK)
554 Image::Image(GdkPixbuf* pixbuf) {
555 if (pixbuf) {
556 storage_ = new internal::ImageStorage(Image::kImageRepGdk);
557 internal::ImageRepGdk* rep = new internal::ImageRepGdk(pixbuf);
558 AddRepresentation(rep);
559 }
560 }
561 #endif
562
563 #if defined(OS_IOS) 387 #if defined(OS_IOS)
564 Image::Image(UIImage* image) 388 Image::Image(UIImage* image)
565 : storage_(new internal::ImageStorage(Image::kImageRepCocoaTouch)) { 389 : storage_(new internal::ImageStorage(Image::kImageRepCocoaTouch)) {
566 if (image) { 390 if (image) {
567 internal::ImageRepCocoaTouch* rep = new internal::ImageRepCocoaTouch(image); 391 internal::ImageRepCocoaTouch* rep = new internal::ImageRepCocoaTouch(image);
568 AddRepresentation(rep); 392 AddRepresentation(rep);
569 } 393 }
570 } 394 }
571 #elif defined(OS_MACOSX) 395 #elif defined(OS_MACOSX)
572 Image::Image(NSImage* image) { 396 Image::Image(NSImage* image) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
625 internal::ImageRep* rep = GetRepresentation(kImageRepSkia, false); 449 internal::ImageRep* rep = GetRepresentation(kImageRepSkia, false);
626 if (!rep) { 450 if (!rep) {
627 switch (DefaultRepresentationType()) { 451 switch (DefaultRepresentationType()) {
628 case kImageRepPNG: { 452 case kImageRepPNG: {
629 internal::ImageRepPNG* png_rep = 453 internal::ImageRepPNG* png_rep =
630 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG(); 454 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG();
631 rep = new internal::ImageRepSkia( 455 rep = new internal::ImageRepSkia(
632 internal::ImageSkiaFromPNG(png_rep->image_reps())); 456 internal::ImageSkiaFromPNG(png_rep->image_reps()));
633 break; 457 break;
634 } 458 }
635 #if defined(TOOLKIT_GTK) 459 #if defined(OS_IOS)
636 case kImageRepGdk: {
637 internal::ImageRepGdk* native_rep =
638 GetRepresentation(kImageRepGdk, true)->AsImageRepGdk();
639 rep = new internal::ImageRepSkia(new ImageSkia(
640 internal::ImageSkiaFromGdkPixbuf(native_rep->pixbuf())));
641 break;
642 }
643 #elif defined(OS_IOS)
644 case kImageRepCocoaTouch: { 460 case kImageRepCocoaTouch: {
645 internal::ImageRepCocoaTouch* native_rep = 461 internal::ImageRepCocoaTouch* native_rep =
646 GetRepresentation(kImageRepCocoaTouch, true) 462 GetRepresentation(kImageRepCocoaTouch, true)
647 ->AsImageRepCocoaTouch(); 463 ->AsImageRepCocoaTouch();
648 rep = new internal::ImageRepSkia(new ImageSkia( 464 rep = new internal::ImageRepSkia(new ImageSkia(
649 ImageSkiaFromUIImage(native_rep->image()))); 465 ImageSkiaFromUIImage(native_rep->image())));
650 break; 466 break;
651 } 467 }
652 #elif defined(OS_MACOSX) 468 #elif defined(OS_MACOSX)
653 case kImageRepCocoa: { 469 case kImageRepCocoa: {
654 internal::ImageRepCocoa* native_rep = 470 internal::ImageRepCocoa* native_rep =
655 GetRepresentation(kImageRepCocoa, true)->AsImageRepCocoa(); 471 GetRepresentation(kImageRepCocoa, true)->AsImageRepCocoa();
656 rep = new internal::ImageRepSkia(new ImageSkia( 472 rep = new internal::ImageRepSkia(new ImageSkia(
657 ImageSkiaFromNSImage(native_rep->image()))); 473 ImageSkiaFromNSImage(native_rep->image())));
658 break; 474 break;
659 } 475 }
660 #endif 476 #endif
661 default: 477 default:
662 NOTREACHED(); 478 NOTREACHED();
663 } 479 }
664 CHECK(rep); 480 CHECK(rep);
665 AddRepresentation(rep); 481 AddRepresentation(rep);
666 } 482 }
667 return rep->AsImageRepSkia()->image(); 483 return rep->AsImageRepSkia()->image();
668 } 484 }
669 485
670 #if defined(TOOLKIT_GTK)
671 GdkPixbuf* Image::ToGdkPixbuf() const {
672 internal::ImageRep* rep = GetRepresentation(kImageRepGdk, false);
673 if (!rep) {
674 switch (DefaultRepresentationType()) {
675 case kImageRepPNG: {
676 internal::ImageRepPNG* png_rep =
677 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG();
678 rep = new internal::ImageRepGdk(internal::GdkPixbufFromPNG(
679 png_rep->image_reps()));
680 break;
681 }
682 case kImageRepSkia: {
683 internal::ImageRepSkia* skia_rep =
684 GetRepresentation(kImageRepSkia, true)->AsImageRepSkia();
685 rep = new internal::ImageRepGdk(gfx::GdkPixbufFromSkBitmap(
686 *skia_rep->image()->bitmap()));
687 break;
688 }
689 default:
690 NOTREACHED();
691 }
692 CHECK(rep);
693 AddRepresentation(rep);
694 }
695 return rep->AsImageRepGdk()->pixbuf();
696 }
697
698 CairoCachedSurface* const Image::ToCairo() const {
699 internal::ImageRep* rep = GetRepresentation(kImageRepCairo, false);
700 if (!rep) {
701 // Handle any-to-Cairo conversion. This may create and cache an intermediate
702 // pixbuf before sending the data to the display server.
703 rep = new internal::ImageRepCairo(ToGdkPixbuf());
704 CHECK(rep);
705 AddRepresentation(rep);
706 }
707 return rep->AsImageRepCairo()->surface();
708 }
709 #endif
710
711 #if defined(OS_IOS) 486 #if defined(OS_IOS)
712 UIImage* Image::ToUIImage() const { 487 UIImage* Image::ToUIImage() const {
713 internal::ImageRep* rep = GetRepresentation(kImageRepCocoaTouch, false); 488 internal::ImageRep* rep = GetRepresentation(kImageRepCocoaTouch, false);
714 if (!rep) { 489 if (!rep) {
715 switch (DefaultRepresentationType()) { 490 switch (DefaultRepresentationType()) {
716 case kImageRepPNG: { 491 case kImageRepPNG: {
717 internal::ImageRepPNG* png_rep = 492 internal::ImageRepPNG* png_rep =
718 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG(); 493 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG();
719 rep = new internal::ImageRepCocoaTouch(internal::CreateUIImageFromPNG( 494 rep = new internal::ImageRepCocoaTouch(internal::CreateUIImageFromPNG(
720 png_rep->image_reps())); 495 png_rep->image_reps()));
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 rep->AsImageRepPNG()->image_reps(); 556 rep->AsImageRepPNG()->image_reps();
782 for (size_t i = 0; i < image_png_reps.size(); ++i) { 557 for (size_t i = 0; i < image_png_reps.size(); ++i) {
783 if (image_png_reps[i].scale == 1.0f) 558 if (image_png_reps[i].scale == 1.0f)
784 return image_png_reps[i].raw_data; 559 return image_png_reps[i].raw_data;
785 } 560 }
786 return new base::RefCountedBytes(); 561 return new base::RefCountedBytes();
787 } 562 }
788 563
789 scoped_refptr<base::RefCountedMemory> png_bytes(NULL); 564 scoped_refptr<base::RefCountedMemory> png_bytes(NULL);
790 switch (DefaultRepresentationType()) { 565 switch (DefaultRepresentationType()) {
791 #if defined(TOOLKIT_GTK) 566 #if defined(OS_IOS)
792 case kImageRepGdk: {
793 internal::ImageRepGdk* gdk_rep =
794 GetRepresentation(kImageRepGdk, true)->AsImageRepGdk();
795 png_bytes = internal::Get1xPNGBytesFromPixbuf(gdk_rep->pixbuf());
796 break;
797 }
798 #elif defined(OS_IOS)
799 case kImageRepCocoaTouch: { 567 case kImageRepCocoaTouch: {
800 internal::ImageRepCocoaTouch* cocoa_touch_rep = 568 internal::ImageRepCocoaTouch* cocoa_touch_rep =
801 GetRepresentation(kImageRepCocoaTouch, true) 569 GetRepresentation(kImageRepCocoaTouch, true)
802 ->AsImageRepCocoaTouch(); 570 ->AsImageRepCocoaTouch();
803 png_bytes = internal::Get1xPNGBytesFromUIImage( 571 png_bytes = internal::Get1xPNGBytesFromUIImage(
804 cocoa_touch_rep->image()); 572 cocoa_touch_rep->image());
805 break; 573 break;
806 } 574 }
807 #elif defined(OS_MACOSX) 575 #elif defined(OS_MACOSX)
808 case kImageRepCocoa: { 576 case kImageRepCocoa: {
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 } 631 }
864 632
865 ImageSkia* Image::CopyImageSkia() const { 633 ImageSkia* Image::CopyImageSkia() const {
866 return new ImageSkia(*ToImageSkia()); 634 return new ImageSkia(*ToImageSkia());
867 } 635 }
868 636
869 SkBitmap* Image::CopySkBitmap() const { 637 SkBitmap* Image::CopySkBitmap() const {
870 return new SkBitmap(*ToSkBitmap()); 638 return new SkBitmap(*ToSkBitmap());
871 } 639 }
872 640
873 #if defined(TOOLKIT_GTK)
874 GdkPixbuf* Image::CopyGdkPixbuf() const {
875 GdkPixbuf* pixbuf = ToGdkPixbuf();
876 g_object_ref(pixbuf);
877 return pixbuf;
878 }
879 #endif
880
881 #if defined(OS_IOS) 641 #if defined(OS_IOS)
882 UIImage* Image::CopyUIImage() const { 642 UIImage* Image::CopyUIImage() const {
883 UIImage* image = ToUIImage(); 643 UIImage* image = ToUIImage();
884 base::mac::NSObjectRetain(image); 644 base::mac::NSObjectRetain(image);
885 return image; 645 return image;
886 } 646 }
887 #elif defined(OS_MACOSX) 647 #elif defined(OS_MACOSX)
888 NSImage* Image::CopyNSImage() const { 648 NSImage* Image::CopyNSImage() const {
889 NSImage* image = ToNSImage(); 649 NSImage* image = ToNSImage();
890 base::mac::NSObjectRetain(image); 650 base::mac::NSObjectRetain(image);
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 } 715 }
956 return it->second; 716 return it->second;
957 } 717 }
958 718
959 void Image::AddRepresentation(internal::ImageRep* rep) const { 719 void Image::AddRepresentation(internal::ImageRep* rep) const {
960 CHECK(storage_.get()); 720 CHECK(storage_.get());
961 storage_->representations().insert(std::make_pair(rep->type(), rep)); 721 storage_->representations().insert(std::make_pair(rep->type(), rep));
962 } 722 }
963 723
964 } // namespace gfx 724 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698