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

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

Issue 24175004: Remove dependency on ui::ScaleFactor from ui/gfx (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix new usage of scale in FastShowPickler Created 7 years, 2 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
« no previous file with comments | « ui/gfx/image/canvas_image_source.cc ('k') | ui/gfx/image/image_ios.mm » ('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 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"
(...skipping 25 matching lines...) Expand all
36 36
37 namespace gfx { 37 namespace gfx {
38 38
39 namespace internal { 39 namespace internal {
40 40
41 #if defined(TOOLKIT_GTK) 41 #if defined(TOOLKIT_GTK)
42 const ImageSkia ImageSkiaFromGdkPixbuf(GdkPixbuf* pixbuf) { 42 const ImageSkia ImageSkiaFromGdkPixbuf(GdkPixbuf* pixbuf) {
43 CHECK(pixbuf); 43 CHECK(pixbuf);
44 gfx::Canvas canvas(gfx::Size(gdk_pixbuf_get_width(pixbuf), 44 gfx::Canvas canvas(gfx::Size(gdk_pixbuf_get_width(pixbuf),
45 gdk_pixbuf_get_height(pixbuf)), 45 gdk_pixbuf_get_height(pixbuf)),
46 ui::SCALE_FACTOR_100P, 46 1.0f,
47 false); 47 false);
48 skia::ScopedPlatformPaint scoped_platform_paint(canvas.sk_canvas()); 48 skia::ScopedPlatformPaint scoped_platform_paint(canvas.sk_canvas());
49 cairo_t* cr = scoped_platform_paint.GetPlatformSurface(); 49 cairo_t* cr = scoped_platform_paint.GetPlatformSurface();
50 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0); 50 gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
51 cairo_paint(cr); 51 cairo_paint(cr);
52 return ImageSkia(canvas.ExtractImageRep()); 52 return ImageSkia(canvas.ExtractImageRep());
53 } 53 }
54 54
55 // Returns a 16x16 red pixbuf to visually show error in decoding PNG. 55 // Returns a 16x16 red pixbuf to visually show error in decoding PNG.
56 // Also logs error to console. 56 // Also logs error to console.
57 GdkPixbuf* GetErrorPixbuf() { 57 GdkPixbuf* GetErrorPixbuf() {
58 LOG(ERROR) << "Unable to decode PNG."; 58 LOG(ERROR) << "Unable to decode PNG.";
59 GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 16, 16); 59 GdkPixbuf* pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, TRUE, 8, 16, 16);
60 gdk_pixbuf_fill(pixbuf, 0xff0000ff); 60 gdk_pixbuf_fill(pixbuf, 0xff0000ff);
61 return pixbuf; 61 return pixbuf;
62 } 62 }
63 63
64 GdkPixbuf* GdkPixbufFromPNG( 64 GdkPixbuf* GdkPixbufFromPNG(
65 const std::vector<gfx::ImagePNGRep>& image_png_reps) { 65 const std::vector<gfx::ImagePNGRep>& image_png_reps) {
66 scoped_refptr<base::RefCountedMemory> png_bytes(NULL); 66 scoped_refptr<base::RefCountedMemory> png_bytes(NULL);
67 for (size_t i = 0; i < image_png_reps.size(); ++i) { 67 for (size_t i = 0; i < image_png_reps.size(); ++i) {
68 if (image_png_reps[i].scale_factor == ui::SCALE_FACTOR_100P) 68 if (image_png_reps[i].scale == 1.0f)
69 png_bytes = image_png_reps[i].raw_data; 69 png_bytes = image_png_reps[i].raw_data;
70 } 70 }
71 71
72 if (!png_bytes.get()) 72 if (!png_bytes.get())
73 return GetErrorPixbuf(); 73 return GetErrorPixbuf();
74 74
75 GdkPixbuf* pixbuf = NULL; 75 GdkPixbuf* pixbuf = NULL;
76 ui::ScopedGObject<GdkPixbufLoader>::Type loader(gdk_pixbuf_loader_new()); 76 ui::ScopedGObject<GdkPixbufLoader>::Type loader(gdk_pixbuf_loader_new());
77 77
78 bool ok = gdk_pixbuf_loader_write(loader.get(), 78 bool ok = gdk_pixbuf_loader_write(loader.get(),
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromImageSkia( 135 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromImageSkia(
136 const ImageSkia* skia); 136 const ImageSkia* skia);
137 #else 137 #else
138 // Returns a 16x16 red image to visually show error in decoding PNG. 138 // Returns a 16x16 red image to visually show error in decoding PNG.
139 // Caller takes ownership of returned ImageSkia. 139 // Caller takes ownership of returned ImageSkia.
140 ImageSkia* GetErrorImageSkia() { 140 ImageSkia* GetErrorImageSkia() {
141 SkBitmap bitmap; 141 SkBitmap bitmap;
142 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 16, 16); 142 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 16, 16);
143 bitmap.allocPixels(); 143 bitmap.allocPixels();
144 bitmap.eraseRGB(0xff, 0, 0); 144 bitmap.eraseRGB(0xff, 0, 0);
145 return new gfx::ImageSkia(gfx::ImageSkiaRep(bitmap, ui::SCALE_FACTOR_100P)); 145 return new gfx::ImageSkia(gfx::ImageSkiaRep(bitmap, 1.0f));
146 } 146 }
147 147
148 ImageSkia* ImageSkiaFromPNG( 148 ImageSkia* ImageSkiaFromPNG(
149 const std::vector<gfx::ImagePNGRep>& image_png_reps) { 149 const std::vector<gfx::ImagePNGRep>& image_png_reps) {
150 if (image_png_reps.empty()) 150 if (image_png_reps.empty())
151 return GetErrorImageSkia(); 151 return GetErrorImageSkia();
152 152
153 scoped_ptr<gfx::ImageSkia> image_skia(new ImageSkia()); 153 scoped_ptr<gfx::ImageSkia> image_skia(new ImageSkia());
154 for (size_t i = 0; i < image_png_reps.size(); ++i) { 154 for (size_t i = 0; i < image_png_reps.size(); ++i) {
155 scoped_refptr<base::RefCountedMemory> raw_data = 155 scoped_refptr<base::RefCountedMemory> raw_data =
156 image_png_reps[i].raw_data; 156 image_png_reps[i].raw_data;
157 CHECK(raw_data.get()); 157 CHECK(raw_data.get());
158 SkBitmap bitmap; 158 SkBitmap bitmap;
159 if (!gfx::PNGCodec::Decode(raw_data->front(), raw_data->size(), 159 if (!gfx::PNGCodec::Decode(raw_data->front(), raw_data->size(),
160 &bitmap)) { 160 &bitmap)) {
161 LOG(ERROR) << "Unable to decode PNG for " 161 LOG(ERROR) << "Unable to decode PNG for "
162 << ui::GetScaleFactorScale(image_png_reps[i].scale_factor) 162 << image_png_reps[i].scale
163 << "."; 163 << ".";
164 return GetErrorImageSkia(); 164 return GetErrorImageSkia();
165 } 165 }
166 image_skia->AddRepresentation(gfx::ImageSkiaRep( 166 image_skia->AddRepresentation(gfx::ImageSkiaRep(
167 bitmap, image_png_reps[i].scale_factor)); 167 bitmap, image_png_reps[i].scale));
168 } 168 }
169 return image_skia.release(); 169 return image_skia.release();
170 } 170 }
171 171
172 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromImageSkia( 172 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromImageSkia(
173 const ImageSkia* image_skia) { 173 const ImageSkia* image_skia) {
174 ImageSkiaRep image_skia_rep = image_skia->GetRepresentation( 174 ImageSkiaRep image_skia_rep = image_skia->GetRepresentation(1.0f);
175 ui::SCALE_FACTOR_100P);
176 175
177 scoped_refptr<base::RefCountedBytes> png_bytes(new base::RefCountedBytes()); 176 scoped_refptr<base::RefCountedBytes> png_bytes(new base::RefCountedBytes());
178 if (image_skia_rep.scale_factor() != ui::SCALE_FACTOR_100P || 177 if (image_skia_rep.scale() != 1.0f ||
179 !gfx::PNGCodec::EncodeBGRASkBitmap(image_skia_rep.sk_bitmap(), false, 178 !gfx::PNGCodec::EncodeBGRASkBitmap(image_skia_rep.sk_bitmap(), false,
180 &png_bytes->data())) { 179 &png_bytes->data())) {
181 return NULL; 180 return NULL;
182 } 181 }
183 return png_bytes; 182 return png_bytes;
184 } 183 }
185 #endif 184 #endif
186 185
187 class ImageRepPNG; 186 class ImageRepPNG;
188 class ImageRepSkia; 187 class ImageRepSkia;
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 266
268 virtual int Height() const OVERRIDE { 267 virtual int Height() const OVERRIDE {
269 return Size().height(); 268 return Size().height();
270 } 269 }
271 270
272 virtual gfx::Size Size() const OVERRIDE { 271 virtual gfx::Size Size() const OVERRIDE {
273 // Read the PNG data to get the image size, caching it. 272 // Read the PNG data to get the image size, caching it.
274 if (!size_cache_) { 273 if (!size_cache_) {
275 for (std::vector<ImagePNGRep>::const_iterator it = image_reps().begin(); 274 for (std::vector<ImagePNGRep>::const_iterator it = image_reps().begin();
276 it != image_reps().end(); ++it) { 275 it != image_reps().end(); ++it) {
277 if (it->scale_factor == ui::SCALE_FACTOR_100P) { 276 if (it->scale == 1.0f) {
278 size_cache_.reset(new gfx::Size(it->Size())); 277 size_cache_.reset(new gfx::Size(it->Size()));
279 return *size_cache_; 278 return *size_cache_;
280 } 279 }
281 } 280 }
282 size_cache_.reset(new gfx::Size); 281 size_cache_.reset(new gfx::Size);
283 } 282 }
284 283
285 return *size_cache_; 284 return *size_cache_;
286 } 285 }
287 286
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
597 596
598 // static 597 // static
599 Image Image::CreateFrom1xPNGBytes(const unsigned char* input, 598 Image Image::CreateFrom1xPNGBytes(const unsigned char* input,
600 size_t input_size) { 599 size_t input_size) {
601 if (input_size == 0u) 600 if (input_size == 0u)
602 return gfx::Image(); 601 return gfx::Image();
603 602
604 scoped_refptr<base::RefCountedBytes> raw_data(new base::RefCountedBytes()); 603 scoped_refptr<base::RefCountedBytes> raw_data(new base::RefCountedBytes());
605 raw_data->data().assign(input, input + input_size); 604 raw_data->data().assign(input, input + input_size);
606 std::vector<gfx::ImagePNGRep> image_reps; 605 std::vector<gfx::ImagePNGRep> image_reps;
607 image_reps.push_back(ImagePNGRep(raw_data, ui::SCALE_FACTOR_100P)); 606 image_reps.push_back(ImagePNGRep(raw_data, 1.0f));
608 return gfx::Image(image_reps); 607 return gfx::Image(image_reps);
609 } 608 }
610 609
611 const SkBitmap* Image::ToSkBitmap() const { 610 const SkBitmap* Image::ToSkBitmap() const {
612 // Possibly create and cache an intermediate ImageRepSkia. 611 // Possibly create and cache an intermediate ImageRepSkia.
613 return ToImageSkia()->bitmap(); 612 return ToImageSkia()->bitmap();
614 } 613 }
615 614
616 const ImageSkia* Image::ToImageSkia() const { 615 const ImageSkia* Image::ToImageSkia() const {
617 internal::ImageRep* rep = GetRepresentation(kImageRepSkia, false); 616 internal::ImageRep* rep = GetRepresentation(kImageRepSkia, false);
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
765 scoped_refptr<base::RefCountedMemory> Image::As1xPNGBytes() const { 764 scoped_refptr<base::RefCountedMemory> Image::As1xPNGBytes() const {
766 if (IsEmpty()) 765 if (IsEmpty())
767 return new base::RefCountedBytes(); 766 return new base::RefCountedBytes();
768 767
769 internal::ImageRep* rep = GetRepresentation(kImageRepPNG, false); 768 internal::ImageRep* rep = GetRepresentation(kImageRepPNG, false);
770 769
771 if (rep) { 770 if (rep) {
772 const std::vector<gfx::ImagePNGRep>& image_png_reps = 771 const std::vector<gfx::ImagePNGRep>& image_png_reps =
773 rep->AsImageRepPNG()->image_reps(); 772 rep->AsImageRepPNG()->image_reps();
774 for (size_t i = 0; i < image_png_reps.size(); ++i) { 773 for (size_t i = 0; i < image_png_reps.size(); ++i) {
775 if (image_png_reps[i].scale_factor == ui::SCALE_FACTOR_100P) 774 if (image_png_reps[i].scale == 1.0f)
776 return image_png_reps[i].raw_data; 775 return image_png_reps[i].raw_data;
777 } 776 }
778 return new base::RefCountedBytes(); 777 return new base::RefCountedBytes();
779 } 778 }
780 779
781 scoped_refptr<base::RefCountedMemory> png_bytes(NULL); 780 scoped_refptr<base::RefCountedMemory> png_bytes(NULL);
782 switch (DefaultRepresentationType()) { 781 switch (DefaultRepresentationType()) {
783 #if defined(TOOLKIT_GTK) 782 #if defined(TOOLKIT_GTK)
784 case kImageRepGdk: { 783 case kImageRepGdk: {
785 internal::ImageRepGdk* gdk_rep = 784 internal::ImageRepGdk* gdk_rep =
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
820 return new base::RefCountedBytes(); 819 return new base::RefCountedBytes();
821 } 820 }
822 821
823 // Do not insert representations for scale factors other than 1x even if 822 // Do not insert representations for scale factors other than 1x even if
824 // they are available because: 823 // they are available because:
825 // - Only the 1x PNG bytes can be accessed. 824 // - Only the 1x PNG bytes can be accessed.
826 // - ImageRepPNG is not used as an intermediate type in converting to a 825 // - ImageRepPNG is not used as an intermediate type in converting to a
827 // final type eg (converting from ImageRepSkia to ImageRepPNG to get an 826 // final type eg (converting from ImageRepSkia to ImageRepPNG to get an
828 // ImageRepCocoa). 827 // ImageRepCocoa).
829 std::vector<ImagePNGRep> image_png_reps; 828 std::vector<ImagePNGRep> image_png_reps;
830 image_png_reps.push_back(gfx::ImagePNGRep(png_bytes, 829 image_png_reps.push_back(gfx::ImagePNGRep(png_bytes, 1.0f));
831 ui::SCALE_FACTOR_100P));
832 rep = new internal::ImageRepPNG(image_png_reps); 830 rep = new internal::ImageRepPNG(image_png_reps);
833 AddRepresentation(rep); 831 AddRepresentation(rep);
834 return png_bytes; 832 return png_bytes;
835 } 833 }
836 834
837 SkBitmap Image::AsBitmap() const { 835 SkBitmap Image::AsBitmap() const {
838 return IsEmpty() ? SkBitmap() : *ToSkBitmap(); 836 return IsEmpty() ? SkBitmap() : *ToSkBitmap();
839 } 837 }
840 838
841 ImageSkia Image::AsImageSkia() const { 839 ImageSkia Image::AsImageSkia() const {
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
948 } 946 }
949 return it->second; 947 return it->second;
950 } 948 }
951 949
952 void Image::AddRepresentation(internal::ImageRep* rep) const { 950 void Image::AddRepresentation(internal::ImageRep* rep) const {
953 CHECK(storage_.get()); 951 CHECK(storage_.get());
954 storage_->representations().insert(std::make_pair(rep->type(), rep)); 952 storage_->representations().insert(std::make_pair(rep->type(), rep));
955 } 953 }
956 954
957 } // namespace gfx 955 } // namespace gfx
OLDNEW
« no previous file with comments | « ui/gfx/image/canvas_image_source.cc ('k') | ui/gfx/image/image_ios.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698