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

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

Issue 10928093: Adds an iOS implementation of gfx::Image. (Closed) Base URL: http://git.chromium.org/chromium/src.git@skia
Patch Set: Cleanup. Created 8 years, 3 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
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 "third_party/skia/include/core/SkBitmap.h" 11 #include "third_party/skia/include/core/SkBitmap.h"
12 #include "ui/gfx/codec/png_codec.h"
13 #include "ui/gfx/image/image_skia.h" 12 #include "ui/gfx/image/image_skia.h"
14 #include "ui/gfx/size.h" 13 #include "ui/gfx/size.h"
15 14
15 #if !defined(OS_IOS)
16 #include "ui/gfx/codec/png_codec.h"
17 #endif
18
16 #if defined(TOOLKIT_GTK) 19 #if defined(TOOLKIT_GTK)
17 #include <gdk-pixbuf/gdk-pixbuf.h> 20 #include <gdk-pixbuf/gdk-pixbuf.h>
18 #include <gdk/gdk.h> 21 #include <gdk/gdk.h>
19 #include <glib-object.h> 22 #include <glib-object.h>
20 #include "ui/base/gtk/scoped_gobject.h" 23 #include "ui/base/gtk/scoped_gobject.h"
21 #include "ui/gfx/canvas.h" 24 #include "ui/gfx/canvas.h"
22 #include "ui/gfx/gtk_util.h" 25 #include "ui/gfx/gtk_util.h"
23 #include "ui/gfx/image/cairo_cached_surface.h" 26 #include "ui/gfx/image/cairo_cached_surface.h"
27 #elif defined(OS_IOS)
28 #include "base/mac/foundation_util.h"
29 #include "ui/gfx/image/image_skia_util_ios.h"
24 #elif defined(OS_MACOSX) 30 #elif defined(OS_MACOSX)
25 #include "base/mac/mac_util.h" 31 #include "base/mac/mac_util.h"
26 #include "ui/gfx/image/image_skia_util_mac.h" 32 #include "ui/gfx/image/image_skia_util_mac.h"
27 #endif 33 #endif
28 34
29 namespace gfx { 35 namespace gfx {
30 36
31 namespace internal { 37 namespace internal {
32 38
33 #if defined(TOOLKIT_GTK) 39 #if defined(TOOLKIT_GTK)
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 gsize image_size; 83 gsize image_size;
78 GError* error = NULL; 84 GError* error = NULL;
79 CHECK(gdk_pixbuf_save_to_buffer( 85 CHECK(gdk_pixbuf_save_to_buffer(
80 pixbuf, &image, &image_size, "png", &error, NULL)); 86 pixbuf, &image, &image_size, "png", &error, NULL));
81 png->assign(image, image + image_size); 87 png->assign(image, image + image_size);
82 g_free(image); 88 g_free(image);
83 } 89 }
84 90
85 #endif // defined(TOOLKIT_GTK) 91 #endif // defined(TOOLKIT_GTK)
86 92
87 #if defined(OS_MACOSX) 93 #if defined(OS_IOS)
94 void PNGFromUIImage(UIImage* nsimage, std::vector<unsigned char>* png);
95 UIImage* CreateUIImageFromPNG(const std::vector<unsigned char>& png);
96 #elif defined(OS_MACOSX)
88 void PNGFromNSImage(NSImage* nsimage, std::vector<unsigned char>* png); 97 void PNGFromNSImage(NSImage* nsimage, std::vector<unsigned char>* png);
89 NSImage* NSImageFromPNG(const std::vector<unsigned char>& png); 98 NSImage* NSImageFromPNG(const std::vector<unsigned char>& png);
90 #endif // defined(OS_MACOSX) 99 #endif // defined(OS_MACOSX)
91 100
101 #if defined(OS_IOS)
102 ImageSkia* ImageSkiaFromPNG(const std::vector<unsigned char>& png);
103 void PNGFromImageSkia(const ImageSkia* skia, std::vector<unsigned char>* png);
104 #else
92 ImageSkia* ImageSkiaFromPNG(const std::vector<unsigned char>& png) { 105 ImageSkia* ImageSkiaFromPNG(const std::vector<unsigned char>& png) {
93 SkBitmap bitmap; 106 SkBitmap bitmap;
94 if (!gfx::PNGCodec::Decode(&png.front(), png.size(), &bitmap)) { 107 if (!gfx::PNGCodec::Decode(&png.front(), png.size(), &bitmap)) {
95 LOG(WARNING) << "Unable to decode PNG."; 108 LOG(WARNING) << "Unable to decode PNG.";
96 // Return a 16x16 red image to visually show error. 109 // Return a 16x16 red image to visually show error.
97 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 16, 16); 110 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 16, 16);
98 bitmap.allocPixels(); 111 bitmap.allocPixels();
99 bitmap.eraseRGB(0xff, 0, 0); 112 bitmap.eraseRGB(0xff, 0, 0);
100 } 113 }
101 return new ImageSkia(bitmap); 114 return new ImageSkia(bitmap);
102 } 115 }
103 116
104 void PNGFromImageSkia(const ImageSkia* skia, std::vector<unsigned char>* png) { 117 void PNGFromImageSkia(const ImageSkia* skia, std::vector<unsigned char>* png) {
105 CHECK(gfx::PNGCodec::EncodeBGRASkBitmap(*skia->bitmap(), false, png)); 118 CHECK(gfx::PNGCodec::EncodeBGRASkBitmap(*skia->bitmap(), false, png));
106 } 119 }
120 #endif
107 121
108 class ImageRepPNG; 122 class ImageRepPNG;
109 class ImageRepSkia; 123 class ImageRepSkia;
110 class ImageRepGdk; 124 class ImageRepGdk;
111 class ImageRepCairo; 125 class ImageRepCairo;
112 class ImageRepCocoa; 126 class ImageRepCocoa;
127 class ImageRepCocoaTouch;
113 128
114 // An ImageRep is the object that holds the backing memory for an Image. Each 129 // An ImageRep is the object that holds the backing memory for an Image. Each
115 // RepresentationType has an ImageRep subclass that is responsible for freeing 130 // RepresentationType has an ImageRep subclass that is responsible for freeing
116 // the memory that the ImageRep holds. When an ImageRep is created, it expects 131 // the memory that the ImageRep holds. When an ImageRep is created, it expects
117 // to take ownership of the image, without having to retain it or increase its 132 // to take ownership of the image, without having to retain it or increase its
118 // reference count. 133 // reference count.
119 class ImageRep { 134 class ImageRep {
120 public: 135 public:
121 explicit ImageRep(Image::RepresentationType rep) : type_(rep) {} 136 explicit ImageRep(Image::RepresentationType rep) : type_(rep) {}
122 137
(...skipping 16 matching lines...) Expand all
139 CHECK_EQ(type_, Image::kImageRepGdk); 154 CHECK_EQ(type_, Image::kImageRepGdk);
140 return reinterpret_cast<ImageRepGdk*>(this); 155 return reinterpret_cast<ImageRepGdk*>(this);
141 } 156 }
142 157
143 ImageRepCairo* AsImageRepCairo() { 158 ImageRepCairo* AsImageRepCairo() {
144 CHECK_EQ(type_, Image::kImageRepCairo); 159 CHECK_EQ(type_, Image::kImageRepCairo);
145 return reinterpret_cast<ImageRepCairo*>(this); 160 return reinterpret_cast<ImageRepCairo*>(this);
146 } 161 }
147 #endif 162 #endif
148 163
149 #if defined(OS_MACOSX) 164 #if defined(OS_IOS)
165 ImageRepCocoaTouch* AsImageRepCocoaTouch() {
166 CHECK_EQ(type_, Image::kImageRepCocoaTouch);
167 return reinterpret_cast<ImageRepCocoaTouch*>(this);
168 }
169 #elif defined(OS_MACOSX)
150 ImageRepCocoa* AsImageRepCocoa() { 170 ImageRepCocoa* AsImageRepCocoa() {
151 CHECK_EQ(type_, Image::kImageRepCocoa); 171 CHECK_EQ(type_, Image::kImageRepCocoa);
152 return reinterpret_cast<ImageRepCocoa*>(this); 172 return reinterpret_cast<ImageRepCocoa*>(this);
153 } 173 }
154 #endif 174 #endif
155 175
156 Image::RepresentationType type() const { return type_; } 176 Image::RepresentationType type() const { return type_; }
157 177
158 private: 178 private:
159 Image::RepresentationType type_; 179 Image::RepresentationType type_;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
238 258
239 CairoCachedSurface* surface() const { return cairo_cache_; } 259 CairoCachedSurface* surface() const { return cairo_cache_; }
240 260
241 private: 261 private:
242 CairoCachedSurface* cairo_cache_; 262 CairoCachedSurface* cairo_cache_;
243 263
244 DISALLOW_COPY_AND_ASSIGN(ImageRepCairo); 264 DISALLOW_COPY_AND_ASSIGN(ImageRepCairo);
245 }; 265 };
246 #endif // defined(TOOLKIT_GTK) 266 #endif // defined(TOOLKIT_GTK)
247 267
248 #if defined(OS_MACOSX) 268 #if defined(OS_IOS)
269 class ImageRepCocoaTouch : public ImageRep {
270 public:
271 explicit ImageRepCocoaTouch(UIImage* image)
272 : ImageRep(Image::kImageRepCocoaTouch),
273 image_(image) {
274 CHECK(image);
275 }
276
277 virtual ~ImageRepCocoaTouch() {
278 base::mac::NSObjectRelease(image_);
279 image_ = nil;
280 }
281
282 UIImage* image() const { return image_; }
283
284 private:
285 UIImage* image_;
286
287 DISALLOW_COPY_AND_ASSIGN(ImageRepCocoaTouch);
288 };
289 #elif defined(OS_MACOSX)
249 class ImageRepCocoa : public ImageRep { 290 class ImageRepCocoa : public ImageRep {
250 public: 291 public:
251 explicit ImageRepCocoa(NSImage* image) 292 explicit ImageRepCocoa(NSImage* image)
252 : ImageRep(Image::kImageRepCocoa), 293 : ImageRep(Image::kImageRepCocoa),
253 image_(image) { 294 image_(image) {
254 CHECK(image); 295 CHECK(image);
255 } 296 }
256 297
257 virtual ~ImageRepCocoa() { 298 virtual ~ImageRepCocoa() {
258 base::mac::NSObjectRelease(image_); 299 base::mac::NSObjectRelease(image_);
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
336 #if defined(TOOLKIT_GTK) 377 #if defined(TOOLKIT_GTK)
337 Image::Image(GdkPixbuf* pixbuf) { 378 Image::Image(GdkPixbuf* pixbuf) {
338 if (pixbuf) { 379 if (pixbuf) {
339 storage_ = new internal::ImageStorage(Image::kImageRepGdk); 380 storage_ = new internal::ImageStorage(Image::kImageRepGdk);
340 internal::ImageRepGdk* rep = new internal::ImageRepGdk(pixbuf); 381 internal::ImageRepGdk* rep = new internal::ImageRepGdk(pixbuf);
341 AddRepresentation(rep); 382 AddRepresentation(rep);
342 } 383 }
343 } 384 }
344 #endif 385 #endif
345 386
346 #if defined(OS_MACOSX) 387 #if defined(OS_IOS)
388 Image::Image(UIImage* image)
389 : storage_(new internal::ImageStorage(Image::kImageRepCocoaTouch)) {
390 if (image) {
391 internal::ImageRepCocoaTouch* rep = new internal::ImageRepCocoaTouch(image);
392 AddRepresentation(rep);
393 }
394 }
395 #elif defined(OS_MACOSX)
347 Image::Image(NSImage* image) { 396 Image::Image(NSImage* image) {
348 if (image) { 397 if (image) {
349 storage_ = new internal::ImageStorage(Image::kImageRepCocoa); 398 storage_ = new internal::ImageStorage(Image::kImageRepCocoa);
350 internal::ImageRepCocoa* rep = new internal::ImageRepCocoa(image); 399 internal::ImageRepCocoa* rep = new internal::ImageRepCocoa(image);
351 AddRepresentation(rep); 400 AddRepresentation(rep);
352 } 401 }
353 } 402 }
354 #endif 403 #endif
355 404
356 Image::Image(const Image& other) : storage_(other.storage_) { 405 Image::Image(const Image& other) : storage_(other.storage_) {
(...skipping 12 matching lines...) Expand all
369 if (!rep) { 418 if (!rep) {
370 internal::ImageRepPNG* png_rep = new internal::ImageRepPNG(); 419 internal::ImageRepPNG* png_rep = new internal::ImageRepPNG();
371 switch (DefaultRepresentationType()) { 420 switch (DefaultRepresentationType()) {
372 #if defined(TOOLKIT_GTK) 421 #if defined(TOOLKIT_GTK)
373 case kImageRepGdk: { 422 case kImageRepGdk: {
374 internal::ImageRepGdk* gdk_rep = 423 internal::ImageRepGdk* gdk_rep =
375 GetRepresentation(kImageRepGdk, true)->AsImageRepGdk(); 424 GetRepresentation(kImageRepGdk, true)->AsImageRepGdk();
376 internal::PNGFromGdkPixbuf(gdk_rep->pixbuf(), png_rep->image()); 425 internal::PNGFromGdkPixbuf(gdk_rep->pixbuf(), png_rep->image());
377 break; 426 break;
378 } 427 }
428 #elif defined(OS_IOS)
429 case kImageRepCocoaTouch: {
430 internal::ImageRepCocoaTouch* cocoa_touch_rep =
431 GetRepresentation(kImageRepCocoaTouch, true)
432 ->AsImageRepCocoaTouch();
433 internal::PNGFromUIImage(cocoa_touch_rep->image(), png_rep->image());
434 break;
435 }
379 #elif defined(OS_MACOSX) 436 #elif defined(OS_MACOSX)
380 case kImageRepCocoa: { 437 case kImageRepCocoa: {
381 internal::ImageRepCocoa* cocoa_rep = 438 internal::ImageRepCocoa* cocoa_rep =
382 GetRepresentation(kImageRepCocoa, true)->AsImageRepCocoa(); 439 GetRepresentation(kImageRepCocoa, true)->AsImageRepCocoa();
383 internal::PNGFromNSImage(cocoa_rep->image(), png_rep->image()); 440 internal::PNGFromNSImage(cocoa_rep->image(), png_rep->image());
384 break; 441 break;
385 } 442 }
386 #endif 443 #endif
387 case kImageRepSkia: { 444 case kImageRepSkia: {
388 internal::ImageRepSkia* skia_rep = 445 internal::ImageRepSkia* skia_rep =
(...skipping 28 matching lines...) Expand all
417 break; 474 break;
418 } 475 }
419 #if defined(TOOLKIT_GTK) 476 #if defined(TOOLKIT_GTK)
420 case kImageRepGdk: { 477 case kImageRepGdk: {
421 internal::ImageRepGdk* native_rep = 478 internal::ImageRepGdk* native_rep =
422 GetRepresentation(kImageRepGdk, true)->AsImageRepGdk(); 479 GetRepresentation(kImageRepGdk, true)->AsImageRepGdk();
423 rep = new internal::ImageRepSkia(new ImageSkia( 480 rep = new internal::ImageRepSkia(new ImageSkia(
424 internal::ImageSkiaFromGdkPixbuf(native_rep->pixbuf()))); 481 internal::ImageSkiaFromGdkPixbuf(native_rep->pixbuf())));
425 break; 482 break;
426 } 483 }
484 #elif defined(OS_IOS)
485 case kImageRepCocoaTouch: {
486 internal::ImageRepCocoaTouch* native_rep =
487 GetRepresentation(kImageRepCocoaTouch, true)
488 ->AsImageRepCocoaTouch();
489 rep = new internal::ImageRepSkia(new ImageSkia(
490 ImageSkiaFromUIImage(native_rep->image())));
491 break;
492 }
427 #elif defined(OS_MACOSX) 493 #elif defined(OS_MACOSX)
428 case kImageRepCocoa: { 494 case kImageRepCocoa: {
429 internal::ImageRepCocoa* native_rep = 495 internal::ImageRepCocoa* native_rep =
430 GetRepresentation(kImageRepCocoa, true)->AsImageRepCocoa(); 496 GetRepresentation(kImageRepCocoa, true)->AsImageRepCocoa();
431 rep = new internal::ImageRepSkia(new ImageSkia( 497 rep = new internal::ImageRepSkia(new ImageSkia(
432 ImageSkiaFromNSImage(native_rep->image()))); 498 ImageSkiaFromNSImage(native_rep->image())));
433 break; 499 break;
434 } 500 }
435 #endif 501 #endif
436 default: 502 default:
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 // Handle any-to-Cairo conversion. This may create and cache an intermediate 542 // Handle any-to-Cairo conversion. This may create and cache an intermediate
477 // pixbuf before sending the data to the display server. 543 // pixbuf before sending the data to the display server.
478 rep = new internal::ImageRepCairo(ToGdkPixbuf()); 544 rep = new internal::ImageRepCairo(ToGdkPixbuf());
479 CHECK(rep); 545 CHECK(rep);
480 AddRepresentation(rep); 546 AddRepresentation(rep);
481 } 547 }
482 return rep->AsImageRepCairo()->surface(); 548 return rep->AsImageRepCairo()->surface();
483 } 549 }
484 #endif 550 #endif
485 551
486 #if defined(OS_MACOSX) 552 #if defined(OS_IOS)
553 UIImage* Image::ToUIImage() const {
554 internal::ImageRep* rep = GetRepresentation(kImageRepCocoaTouch, false);
555 if (!rep) {
556 switch (DefaultRepresentationType()) {
557 case kImageRepPNG: {
558 internal::ImageRepPNG* png_rep =
559 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG();
560 rep = new internal::ImageRepCocoaTouch(internal::CreateUIImageFromPNG(
561 *png_rep->image()));
562 break;
563 }
564 case kImageRepSkia: {
565 internal::ImageRepSkia* skia_rep =
566 GetRepresentation(kImageRepSkia, true)->AsImageRepSkia();
567 UIImage* image = UIImageFromImageSkia(*skia_rep->image());
568 base::mac::NSObjectRetain(image);
569 rep = new internal::ImageRepCocoaTouch(image);
570 break;
571 }
572 default:
573 NOTREACHED();
574 }
575 CHECK(rep);
576 AddRepresentation(rep);
577 }
578 return rep->AsImageRepCocoaTouch()->image();
579 }
580 #elif defined(OS_MACOSX)
487 NSImage* Image::ToNSImage() const { 581 NSImage* Image::ToNSImage() const {
488 internal::ImageRep* rep = GetRepresentation(kImageRepCocoa, false); 582 internal::ImageRep* rep = GetRepresentation(kImageRepCocoa, false);
489 if (!rep) { 583 if (!rep) {
490 switch (DefaultRepresentationType()) { 584 switch (DefaultRepresentationType()) {
491 case kImageRepPNG: { 585 case kImageRepPNG: {
492 internal::ImageRepPNG* png_rep = 586 internal::ImageRepPNG* png_rep =
493 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG(); 587 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG();
494 rep = new internal::ImageRepCocoa(internal::NSImageFromPNG( 588 rep = new internal::ImageRepCocoa(internal::NSImageFromPNG(
495 *png_rep->image())); 589 *png_rep->image()));
496 break; 590 break;
(...skipping 21 matching lines...) Expand all
518 } 612 }
519 613
520 SkBitmap Image::AsBitmap() const { 614 SkBitmap Image::AsBitmap() const {
521 return IsEmpty() ? SkBitmap() : *ToSkBitmap(); 615 return IsEmpty() ? SkBitmap() : *ToSkBitmap();
522 } 616 }
523 617
524 ImageSkia Image::AsImageSkia() const { 618 ImageSkia Image::AsImageSkia() const {
525 return IsEmpty() ? ImageSkia() : *ToImageSkia(); 619 return IsEmpty() ? ImageSkia() : *ToImageSkia();
526 } 620 }
527 621
528 #if defined(OS_MACOSX) 622 #if defined(OS_MACOSX) && !defined(OS_IOS)
529 NSImage* Image::AsNSImage() const { 623 NSImage* Image::AsNSImage() const {
530 return IsEmpty() ? nil : ToNSImage(); 624 return IsEmpty() ? nil : ToNSImage();
531 } 625 }
532 #endif 626 #endif
533 627
534 ImageSkia* Image::CopyImageSkia() const { 628 ImageSkia* Image::CopyImageSkia() const {
535 return new ImageSkia(*ToImageSkia()); 629 return new ImageSkia(*ToImageSkia());
536 } 630 }
537 631
538 SkBitmap* Image::CopySkBitmap() const { 632 SkBitmap* Image::CopySkBitmap() const {
539 return new SkBitmap(*ToSkBitmap()); 633 return new SkBitmap(*ToSkBitmap());
540 } 634 }
541 635
542 #if defined(TOOLKIT_GTK) 636 #if defined(TOOLKIT_GTK)
543 GdkPixbuf* Image::CopyGdkPixbuf() const { 637 GdkPixbuf* Image::CopyGdkPixbuf() const {
544 GdkPixbuf* pixbuf = ToGdkPixbuf(); 638 GdkPixbuf* pixbuf = ToGdkPixbuf();
545 g_object_ref(pixbuf); 639 g_object_ref(pixbuf);
546 return pixbuf; 640 return pixbuf;
547 } 641 }
548 #endif 642 #endif
549 643
550 #if defined(OS_MACOSX) 644 #if defined(OS_IOS)
645 UIImage* Image::CopyUIImage() const {
646 UIImage* image = ToUIImage();
647 base::mac::NSObjectRetain(image);
648 return image;
649 }
650 #elif defined(OS_MACOSX)
551 NSImage* Image::CopyNSImage() const { 651 NSImage* Image::CopyNSImage() const {
552 NSImage* image = ToNSImage(); 652 NSImage* image = ToNSImage();
553 base::mac::NSObjectRetain(image); 653 base::mac::NSObjectRetain(image);
554 return image; 654 return image;
555 } 655 }
556 #endif 656 #endif
557 657
558 #if defined(OS_MACOSX) 658 #if defined(OS_IOS)
659 Image::operator UIImage*() const {
660 return ToUIImage();
661 }
662 #elif defined(OS_MACOSX)
559 Image::operator NSImage*() const { 663 Image::operator NSImage*() const {
560 return ToNSImage(); 664 return ToNSImage();
561 } 665 }
562 #endif 666 #endif
563 667
564 bool Image::HasRepresentation(RepresentationType type) const { 668 bool Image::HasRepresentation(RepresentationType type) const {
565 return storage_.get() && storage_->representations().count(type) != 0; 669 return storage_.get() && storage_->representations().count(type) != 0;
566 } 670 }
567 671
568 size_t Image::RepresentationCount() const { 672 size_t Image::RepresentationCount() const {
(...skipping 30 matching lines...) Expand all
599 } 703 }
600 return it->second; 704 return it->second;
601 } 705 }
602 706
603 void Image::AddRepresentation(internal::ImageRep* rep) const { 707 void Image::AddRepresentation(internal::ImageRep* rep) const {
604 CHECK(storage_.get()); 708 CHECK(storage_.get());
605 storage_->representations().insert(std::make_pair(rep->type(), rep)); 709 storage_->representations().insert(std::make_pair(rep->type(), rep));
606 } 710 }
607 711
608 } // namespace gfx 712 } // namespace gfx
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698