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

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

Issue 1868363002: Replace scoped_ptr with std::unique_ptr in //ui (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@scopedptrcc
Patch Set: scopedptrui: rebase-make_scoped_ptr Created 4 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
« no previous file with comments | « ui/gfx/image/image.h ('k') | ui/gfx/image/image_skia.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include <set> 8 #include <set>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/macros.h" 12 #include "base/macros.h"
13 #include "base/memory/ptr_util.h"
13 #include "build/build_config.h" 14 #include "build/build_config.h"
14 #include "third_party/skia/include/core/SkBitmap.h" 15 #include "third_party/skia/include/core/SkBitmap.h"
15 #include "ui/gfx/geometry/size.h" 16 #include "ui/gfx/geometry/size.h"
16 #include "ui/gfx/image/image_png_rep.h" 17 #include "ui/gfx/image/image_png_rep.h"
17 #include "ui/gfx/image/image_skia.h" 18 #include "ui/gfx/image/image_skia.h"
18 #include "ui/gfx/image/image_skia_source.h" 19 #include "ui/gfx/image/image_skia_source.h"
19 20
20 #if !defined(OS_IOS) 21 #if !defined(OS_IOS)
21 #include "ui/gfx/codec/png_codec.h" 22 #include "ui/gfx/codec/png_codec.h"
22 #endif 23 #endif
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 ImageSkiaRepSet image_skia_reps_; 130 ImageSkiaRepSet image_skia_reps_;
130 gfx::Size size_; 131 gfx::Size size_;
131 132
132 DISALLOW_COPY_AND_ASSIGN(PNGImageSource); 133 DISALLOW_COPY_AND_ASSIGN(PNGImageSource);
133 }; 134 };
134 135
135 ImageSkia* ImageSkiaFromPNG( 136 ImageSkia* ImageSkiaFromPNG(
136 const std::vector<ImagePNGRep>& image_png_reps) { 137 const std::vector<ImagePNGRep>& image_png_reps) {
137 if (image_png_reps.empty()) 138 if (image_png_reps.empty())
138 return GetErrorImageSkia(); 139 return GetErrorImageSkia();
139 scoped_ptr<PNGImageSource> image_source(new PNGImageSource); 140 std::unique_ptr<PNGImageSource> image_source(new PNGImageSource);
140 141
141 for (size_t i = 0; i < image_png_reps.size(); ++i) { 142 for (size_t i = 0; i < image_png_reps.size(); ++i) {
142 if (!image_source->AddPNGData(image_png_reps[i])) 143 if (!image_source->AddPNGData(image_png_reps[i]))
143 return GetErrorImageSkia(); 144 return GetErrorImageSkia();
144 } 145 }
145 const gfx::Size& size = image_source->size(); 146 const gfx::Size& size = image_source->size();
146 DCHECK(!size.IsEmpty()); 147 DCHECK(!size.IsEmpty());
147 if (size.IsEmpty()) 148 if (size.IsEmpty())
148 return GetErrorImageSkia(); 149 return GetErrorImageSkia();
149 return new ImageSkia(image_source.release(), size); 150 return new ImageSkia(image_source.release(), size);
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 245
245 return *size_cache_; 246 return *size_cache_;
246 } 247 }
247 248
248 const std::vector<ImagePNGRep>& image_reps() const { return image_png_reps_; } 249 const std::vector<ImagePNGRep>& image_reps() const { return image_png_reps_; }
249 250
250 private: 251 private:
251 std::vector<ImagePNGRep> image_png_reps_; 252 std::vector<ImagePNGRep> image_png_reps_;
252 253
253 // Cached to avoid having to parse the raw data multiple times. 254 // Cached to avoid having to parse the raw data multiple times.
254 mutable scoped_ptr<gfx::Size> size_cache_; 255 mutable std::unique_ptr<gfx::Size> size_cache_;
255 256
256 DISALLOW_COPY_AND_ASSIGN(ImageRepPNG); 257 DISALLOW_COPY_AND_ASSIGN(ImageRepPNG);
257 }; 258 };
258 259
259 class ImageRepSkia : public ImageRep { 260 class ImageRepSkia : public ImageRep {
260 public: 261 public:
261 // Takes ownership of |image|. 262 // Takes ownership of |image|.
262 explicit ImageRepSkia(ImageSkia* image) 263 explicit ImageRepSkia(ImageSkia* image)
263 : ImageRep(Image::kImageRepSkia), 264 : ImageRep(Image::kImageRepSkia),
264 image_(image) { 265 image_(image) {
265 } 266 }
266 267
267 ~ImageRepSkia() override {} 268 ~ImageRepSkia() override {}
268 269
269 int Width() const override { return image_->width(); } 270 int Width() const override { return image_->width(); }
270 271
271 int Height() const override { return image_->height(); } 272 int Height() const override { return image_->height(); }
272 273
273 gfx::Size Size() const override { return image_->size(); } 274 gfx::Size Size() const override { return image_->size(); }
274 275
275 ImageSkia* image() { return image_.get(); } 276 ImageSkia* image() { return image_.get(); }
276 277
277 private: 278 private:
278 scoped_ptr<ImageSkia> image_; 279 std::unique_ptr<ImageSkia> image_;
279 280
280 DISALLOW_COPY_AND_ASSIGN(ImageRepSkia); 281 DISALLOW_COPY_AND_ASSIGN(ImageRepSkia);
281 }; 282 };
282 283
283 #if defined(OS_IOS) 284 #if defined(OS_IOS)
284 class ImageRepCocoaTouch : public ImageRep { 285 class ImageRepCocoaTouch : public ImageRep {
285 public: 286 public:
286 explicit ImageRepCocoaTouch(UIImage* image) 287 explicit ImageRepCocoaTouch(UIImage* image)
287 : ImageRep(Image::kImageRepCocoaTouch), 288 : ImageRep(Image::kImageRepCocoaTouch),
288 image_(image) { 289 image_(image) {
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 std::vector<ImagePNGRep> filtered; 401 std::vector<ImagePNGRep> filtered;
401 for (size_t i = 0; i < image_reps.size(); ++i) { 402 for (size_t i = 0; i < image_reps.size(); ++i) {
402 if (image_reps[i].raw_data.get() && image_reps[i].raw_data->size()) 403 if (image_reps[i].raw_data.get() && image_reps[i].raw_data->size())
403 filtered.push_back(image_reps[i]); 404 filtered.push_back(image_reps[i]);
404 } 405 }
405 406
406 if (filtered.empty()) 407 if (filtered.empty())
407 return; 408 return;
408 409
409 storage_ = new internal::ImageStorage(Image::kImageRepPNG); 410 storage_ = new internal::ImageStorage(Image::kImageRepPNG);
410 AddRepresentation(make_scoped_ptr(new internal::ImageRepPNG(filtered))); 411 AddRepresentation(base::WrapUnique(new internal::ImageRepPNG(filtered)));
411 } 412 }
412 413
413 Image::Image(const ImageSkia& image) { 414 Image::Image(const ImageSkia& image) {
414 if (!image.isNull()) { 415 if (!image.isNull()) {
415 storage_ = new internal::ImageStorage(Image::kImageRepSkia); 416 storage_ = new internal::ImageStorage(Image::kImageRepSkia);
416 AddRepresentation( 417 AddRepresentation(
417 make_scoped_ptr(new internal::ImageRepSkia(new ImageSkia(image)))); 418 base::WrapUnique(new internal::ImageRepSkia(new ImageSkia(image))));
418 } 419 }
419 } 420 }
420 421
421 #if defined(OS_IOS) 422 #if defined(OS_IOS)
422 Image::Image(UIImage* image) 423 Image::Image(UIImage* image)
423 : storage_(new internal::ImageStorage(Image::kImageRepCocoaTouch)) { 424 : storage_(new internal::ImageStorage(Image::kImageRepCocoaTouch)) {
424 if (image) 425 if (image)
425 AddRepresentation(make_scoped_ptr(new internal::ImageRepCocoaTouch(image))); 426 AddRepresentation(
427 base::WrapUnique(new internal::ImageRepCocoaTouch(image)));
426 } 428 }
427 #elif defined(OS_MACOSX) 429 #elif defined(OS_MACOSX)
428 Image::Image(NSImage* image) { 430 Image::Image(NSImage* image) {
429 if (image) { 431 if (image) {
430 storage_ = new internal::ImageStorage(Image::kImageRepCocoa); 432 storage_ = new internal::ImageStorage(Image::kImageRepCocoa);
431 AddRepresentation(make_scoped_ptr(new internal::ImageRepCocoa(image))); 433 AddRepresentation(base::WrapUnique(new internal::ImageRepCocoa(image)));
432 } 434 }
433 } 435 }
434 #endif 436 #endif
435 437
436 Image::Image(const Image& other) : storage_(other.storage_) { 438 Image::Image(const Image& other) : storage_(other.storage_) {
437 } 439 }
438 440
439 Image& Image::operator=(const Image& other) { 441 Image& Image::operator=(const Image& other) {
440 storage_ = other.storage_; 442 storage_ = other.storage_;
441 return *this; 443 return *this;
(...skipping 30 matching lines...) Expand all
472 } 474 }
473 475
474 const SkBitmap* Image::ToSkBitmap() const { 476 const SkBitmap* Image::ToSkBitmap() const {
475 // Possibly create and cache an intermediate ImageRepSkia. 477 // Possibly create and cache an intermediate ImageRepSkia.
476 return ToImageSkia()->bitmap(); 478 return ToImageSkia()->bitmap();
477 } 479 }
478 480
479 const ImageSkia* Image::ToImageSkia() const { 481 const ImageSkia* Image::ToImageSkia() const {
480 internal::ImageRep* rep = GetRepresentation(kImageRepSkia, false); 482 internal::ImageRep* rep = GetRepresentation(kImageRepSkia, false);
481 if (!rep) { 483 if (!rep) {
482 scoped_ptr<internal::ImageRep> scoped_rep; 484 std::unique_ptr<internal::ImageRep> scoped_rep;
483 switch (DefaultRepresentationType()) { 485 switch (DefaultRepresentationType()) {
484 case kImageRepPNG: { 486 case kImageRepPNG: {
485 internal::ImageRepPNG* png_rep = 487 internal::ImageRepPNG* png_rep =
486 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG(); 488 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG();
487 scoped_rep.reset(new internal::ImageRepSkia( 489 scoped_rep.reset(new internal::ImageRepSkia(
488 internal::ImageSkiaFromPNG(png_rep->image_reps()))); 490 internal::ImageSkiaFromPNG(png_rep->image_reps())));
489 break; 491 break;
490 } 492 }
491 #if defined(OS_IOS) 493 #if defined(OS_IOS)
492 case kImageRepCocoaTouch: { 494 case kImageRepCocoaTouch: {
(...skipping 19 matching lines...) Expand all
512 CHECK(scoped_rep); 514 CHECK(scoped_rep);
513 rep = AddRepresentation(std::move(scoped_rep)); 515 rep = AddRepresentation(std::move(scoped_rep));
514 } 516 }
515 return rep->AsImageRepSkia()->image(); 517 return rep->AsImageRepSkia()->image();
516 } 518 }
517 519
518 #if defined(OS_IOS) 520 #if defined(OS_IOS)
519 UIImage* Image::ToUIImage() const { 521 UIImage* Image::ToUIImage() const {
520 internal::ImageRep* rep = GetRepresentation(kImageRepCocoaTouch, false); 522 internal::ImageRep* rep = GetRepresentation(kImageRepCocoaTouch, false);
521 if (!rep) { 523 if (!rep) {
522 scoped_ptr<internal::ImageRep> scoped_rep; 524 std::unique_ptr<internal::ImageRep> scoped_rep;
523 switch (DefaultRepresentationType()) { 525 switch (DefaultRepresentationType()) {
524 case kImageRepPNG: { 526 case kImageRepPNG: {
525 internal::ImageRepPNG* png_rep = 527 internal::ImageRepPNG* png_rep =
526 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG(); 528 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG();
527 scoped_rep.reset(new internal::ImageRepCocoaTouch( 529 scoped_rep.reset(new internal::ImageRepCocoaTouch(
528 internal::CreateUIImageFromPNG(png_rep->image_reps()))); 530 internal::CreateUIImageFromPNG(png_rep->image_reps())));
529 break; 531 break;
530 } 532 }
531 case kImageRepSkia: { 533 case kImageRepSkia: {
532 internal::ImageRepSkia* skia_rep = 534 internal::ImageRepSkia* skia_rep =
533 GetRepresentation(kImageRepSkia, true)->AsImageRepSkia(); 535 GetRepresentation(kImageRepSkia, true)->AsImageRepSkia();
534 UIImage* image = UIImageFromImageSkia(*skia_rep->image()); 536 UIImage* image = UIImageFromImageSkia(*skia_rep->image());
535 base::mac::NSObjectRetain(image); 537 base::mac::NSObjectRetain(image);
536 scoped_rep.reset(new internal::ImageRepCocoaTouch(image)); 538 scoped_rep.reset(new internal::ImageRepCocoaTouch(image));
537 break; 539 break;
538 } 540 }
539 default: 541 default:
540 NOTREACHED(); 542 NOTREACHED();
541 } 543 }
542 CHECK(scoped_rep); 544 CHECK(scoped_rep);
543 rep = AddRepresentation(std::move(scoped_rep)); 545 rep = AddRepresentation(std::move(scoped_rep));
544 } 546 }
545 return rep->AsImageRepCocoaTouch()->image(); 547 return rep->AsImageRepCocoaTouch()->image();
546 } 548 }
547 #elif defined(OS_MACOSX) 549 #elif defined(OS_MACOSX)
548 NSImage* Image::ToNSImage() const { 550 NSImage* Image::ToNSImage() const {
549 internal::ImageRep* rep = GetRepresentation(kImageRepCocoa, false); 551 internal::ImageRep* rep = GetRepresentation(kImageRepCocoa, false);
550 if (!rep) { 552 if (!rep) {
551 scoped_ptr<internal::ImageRep> scoped_rep; 553 std::unique_ptr<internal::ImageRep> scoped_rep;
552 CGColorSpaceRef default_representation_color_space = 554 CGColorSpaceRef default_representation_color_space =
553 storage_->default_representation_color_space(); 555 storage_->default_representation_color_space();
554 556
555 switch (DefaultRepresentationType()) { 557 switch (DefaultRepresentationType()) {
556 case kImageRepPNG: { 558 case kImageRepPNG: {
557 internal::ImageRepPNG* png_rep = 559 internal::ImageRepPNG* png_rep =
558 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG(); 560 GetRepresentation(kImageRepPNG, true)->AsImageRepPNG();
559 scoped_rep.reset(new internal::ImageRepCocoa(internal::NSImageFromPNG( 561 scoped_rep.reset(new internal::ImageRepCocoa(internal::NSImageFromPNG(
560 png_rep->image_reps(), default_representation_color_space))); 562 png_rep->image_reps(), default_representation_color_space)));
561 break; 563 break;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 GetRepresentation(kImageRepSkia, true)->AsImageRepSkia(); 621 GetRepresentation(kImageRepSkia, true)->AsImageRepSkia();
620 png_bytes = internal::Get1xPNGBytesFromImageSkia(skia_rep->image()); 622 png_bytes = internal::Get1xPNGBytesFromImageSkia(skia_rep->image());
621 break; 623 break;
622 } 624 }
623 default: 625 default:
624 NOTREACHED(); 626 NOTREACHED();
625 } 627 }
626 if (!png_bytes.get() || !png_bytes->size()) { 628 if (!png_bytes.get() || !png_bytes->size()) {
627 // Add an ImageRepPNG with no data such that the conversion is not 629 // Add an ImageRepPNG with no data such that the conversion is not
628 // attempted each time we want the PNG bytes. 630 // attempted each time we want the PNG bytes.
629 AddRepresentation(make_scoped_ptr(new internal::ImageRepPNG())); 631 AddRepresentation(base::WrapUnique(new internal::ImageRepPNG()));
630 return new base::RefCountedBytes(); 632 return new base::RefCountedBytes();
631 } 633 }
632 634
633 // Do not insert representations for scale factors other than 1x even if 635 // Do not insert representations for scale factors other than 1x even if
634 // they are available because: 636 // they are available because:
635 // - Only the 1x PNG bytes can be accessed. 637 // - Only the 1x PNG bytes can be accessed.
636 // - ImageRepPNG is not used as an intermediate type in converting to a 638 // - ImageRepPNG is not used as an intermediate type in converting to a
637 // final type eg (converting from ImageRepSkia to ImageRepPNG to get an 639 // final type eg (converting from ImageRepSkia to ImageRepPNG to get an
638 // ImageRepCocoa). 640 // ImageRepCocoa).
639 std::vector<ImagePNGRep> image_png_reps; 641 std::vector<ImagePNGRep> image_png_reps;
640 image_png_reps.push_back(ImagePNGRep(png_bytes, 1.0f)); 642 image_png_reps.push_back(ImagePNGRep(png_bytes, 1.0f));
641 AddRepresentation(make_scoped_ptr(new internal::ImageRepPNG(image_png_reps))); 643 AddRepresentation(
644 base::WrapUnique(new internal::ImageRepPNG(image_png_reps)));
642 return png_bytes; 645 return png_bytes;
643 } 646 }
644 647
645 SkBitmap Image::AsBitmap() const { 648 SkBitmap Image::AsBitmap() const {
646 return IsEmpty() ? SkBitmap() : *ToSkBitmap(); 649 return IsEmpty() ? SkBitmap() : *ToSkBitmap();
647 } 650 }
648 651
649 ImageSkia Image::AsImageSkia() const { 652 ImageSkia Image::AsImageSkia() const {
650 return IsEmpty() ? ImageSkia() : *ToImageSkia(); 653 return IsEmpty() ? ImageSkia() : *ToImageSkia();
651 } 654 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
740 RepresentationMap::const_iterator it = 743 RepresentationMap::const_iterator it =
741 storage_->representations().find(rep_type); 744 storage_->representations().find(rep_type);
742 if (it == storage_->representations().end()) { 745 if (it == storage_->representations().end()) {
743 CHECK(!must_exist); 746 CHECK(!must_exist);
744 return NULL; 747 return NULL;
745 } 748 }
746 return it->second.get(); 749 return it->second.get();
747 } 750 }
748 751
749 internal::ImageRep* Image::AddRepresentation( 752 internal::ImageRep* Image::AddRepresentation(
750 scoped_ptr<internal::ImageRep> rep) const { 753 std::unique_ptr<internal::ImageRep> rep) const {
751 CHECK(storage_.get()); 754 CHECK(storage_.get());
752 RepresentationType type = rep->type(); 755 RepresentationType type = rep->type();
753 auto result = 756 auto result =
754 storage_->representations().insert(std::make_pair(type, std::move(rep))); 757 storage_->representations().insert(std::make_pair(type, std::move(rep)));
755 758
756 // insert should not fail (implies that there was already a representation of 759 // insert should not fail (implies that there was already a representation of
757 // that type in the map). 760 // that type in the map).
758 CHECK(result.second) << "type was already in map."; 761 CHECK(result.second) << "type was already in map.";
759 762
760 return result.first->second.get(); 763 return result.first->second.get();
761 } 764 }
762 765
763 } // namespace gfx 766 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/image/image.h ('k') | ui/gfx/image/image_skia.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698