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

Side by Side Diff: trunk/src/ui/gfx/image/image_ios.mm

Issue 24262008: Revert 224473 "Remove dependency on ui::ScaleFactor from ui/gfx" (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « trunk/src/ui/gfx/image/image.cc ('k') | trunk/src/ui/gfx/image/image_mac.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 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 #import <UIKit/UIKit.h> 7 #import <UIKit/UIKit.h>
8 #include <cmath> 8 #include <cmath>
9 #include <limits> 9 #include <limits>
10 10
(...skipping 30 matching lines...) Expand all
41 CGContextFillRect(context, CGRectMake(0.0, 0.0, 16, 16)); 41 CGContextFillRect(context, CGRectMake(0.0, 0.0, 16, 16));
42 base::ScopedCFTypeRef<CGImageRef> cg_image( 42 base::ScopedCFTypeRef<CGImageRef> cg_image(
43 CGBitmapContextCreateImage(context)); 43 CGBitmapContextCreateImage(context));
44 return [[UIImage imageWithCGImage:cg_image.get() 44 return [[UIImage imageWithCGImage:cg_image.get()
45 scale:scale 45 scale:scale
46 orientation:UIImageOrientationUp] retain]; 46 orientation:UIImageOrientationUp] retain];
47 } 47 }
48 48
49 // Converts from ImagePNGRep to UIImage. 49 // Converts from ImagePNGRep to UIImage.
50 UIImage* CreateUIImageFromImagePNGRep(const gfx::ImagePNGRep& image_png_rep) { 50 UIImage* CreateUIImageFromImagePNGRep(const gfx::ImagePNGRep& image_png_rep) {
51 float scale = image_png_rep.scale; 51 float scale = ui::GetScaleFactorScale(image_png_rep.scale_factor);
52 scoped_refptr<base::RefCountedMemory> png = image_png_rep.raw_data; 52 scoped_refptr<base::RefCountedMemory> png = image_png_rep.raw_data;
53 CHECK(png.get()); 53 CHECK(png.get());
54 NSData* data = [NSData dataWithBytes:png->front() length:png->size()]; 54 NSData* data = [NSData dataWithBytes:png->front() length:png->size()];
55 UIImage* image = [[UIImage alloc] initWithData:data scale:scale]; 55 UIImage* image = [[UIImage alloc] initWithData:data scale:scale];
56 return image ? image : CreateErrorUIImage(scale); 56 return image ? image : CreateErrorUIImage(scale);
57 } 57 }
58 58
59 } // namespace 59 } // namespace
60 60
61 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromUIImage( 61 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromUIImage(
62 UIImage* uiimage) { 62 UIImage* uiimage) {
63 NSData* data = UIImagePNGRepresentation(uiimage); 63 NSData* data = UIImagePNGRepresentation(uiimage);
64 64
65 if ([data length] == 0) 65 if ([data length] == 0)
66 return NULL; 66 return NULL;
67 67
68 scoped_refptr<base::RefCountedBytes> png_bytes( 68 scoped_refptr<base::RefCountedBytes> png_bytes(
69 new base::RefCountedBytes()); 69 new base::RefCountedBytes());
70 png_bytes->data().resize([data length]); 70 png_bytes->data().resize([data length]);
71 [data getBytes:&png_bytes->data().at(0) length:[data length]]; 71 [data getBytes:&png_bytes->data().at(0) length:[data length]];
72 return png_bytes; 72 return png_bytes;
73 } 73 }
74 74
75 UIImage* CreateUIImageFromPNG( 75 UIImage* CreateUIImageFromPNG(
76 const std::vector<gfx::ImagePNGRep>& image_png_reps) { 76 const std::vector<gfx::ImagePNGRep>& image_png_reps) {
77 float ideal_scale = ImageSkia::GetMaxSupportedScale(); 77 ui::ScaleFactor ideal_scale_factor = ui::GetMaxScaleFactor();
78 float ideal_scale = ui::GetScaleFactorScale(ideal_scale_factor);
78 79
79 if (image_png_reps.empty()) 80 if (image_png_reps.empty())
80 return CreateErrorUIImage(ideal_scale); 81 return CreateErrorUIImage(ideal_scale);
81 82
82 // Find best match for |ideal_scale|. 83 // Find best match for |ideal_scale_factor|.
83 float smallest_diff = std::numeric_limits<float>::max(); 84 float smallest_diff = std::numeric_limits<float>::max();
84 size_t closest_index = 0u; 85 size_t closest_index = 0u;
85 for (size_t i = 0; i < image_png_reps.size(); ++i) { 86 for (size_t i = 0; i < image_png_reps.size(); ++i) {
86 float scale = image_png_reps[i].scale; 87 float scale = ui::GetScaleFactorScale(image_png_reps[i].scale_factor);
87 float diff = std::abs(ideal_scale - scale); 88 float diff = std::abs(ideal_scale - scale);
88 if (diff < smallest_diff) { 89 if (diff < smallest_diff) {
89 smallest_diff = diff; 90 smallest_diff = diff;
90 closest_index = i; 91 closest_index = i;
91 } 92 }
92 } 93 }
93 94
94 return CreateUIImageFromImagePNGRep(image_png_reps[closest_index]); 95 return CreateUIImageFromImagePNGRep(image_png_reps[closest_index]);
95 } 96 }
96 97
97 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromImageSkia( 98 scoped_refptr<base::RefCountedMemory> Get1xPNGBytesFromImageSkia(
98 const ImageSkia* skia) { 99 const ImageSkia* skia) {
99 // iOS does not expose libpng, so conversion from ImageSkia to PNG must go 100 // iOS does not expose libpng, so conversion from ImageSkia to PNG must go
100 // through UIImage. 101 // through UIImage.
101 // TODO(rohitrao): Rewrite the callers of this function to save the UIImage 102 // TODO(rohitrao): Rewrite the callers of this function to save the UIImage
102 // representation in the gfx::Image. If we're generating it, we might as well 103 // representation in the gfx::Image. If we're generating it, we might as well
103 // hold on to it. 104 // hold on to it.
104 const gfx::ImageSkiaRep& image_skia_rep = skia->GetRepresentation(1.0f); 105 const gfx::ImageSkiaRep& image_skia_rep = skia->GetRepresentation(
105 if (image_skia_rep.scale() != 1.0f) 106 ui::SCALE_FACTOR_100P);
107 if (image_skia_rep.scale_factor() != ui::SCALE_FACTOR_100P)
106 return NULL; 108 return NULL;
107 109
108 UIImage* image = UIImageFromImageSkiaRep(image_skia_rep); 110 UIImage* image = UIImageFromImageSkiaRep(image_skia_rep);
109 return Get1xPNGBytesFromUIImage(image); 111 return Get1xPNGBytesFromUIImage(image);
110 } 112 }
111 113
112 ImageSkia* ImageSkiaFromPNG( 114 ImageSkia* ImageSkiaFromPNG(
113 const std::vector<gfx::ImagePNGRep>& image_png_reps) { 115 const std::vector<gfx::ImagePNGRep>& image_png_reps) {
114 // iOS does not expose libpng, so conversion from PNG to ImageSkia must go 116 // iOS does not expose libpng, so conversion from PNG to ImageSkia must go
115 // through UIImage. 117 // through UIImage.
116 gfx::ImageSkia* image_skia = new gfx::ImageSkia(); 118 gfx::ImageSkia* image_skia = new gfx::ImageSkia();
117 for (size_t i = 0; i < image_png_reps.size(); ++i) { 119 for (size_t i = 0; i < image_png_reps.size(); ++i) {
118 base::scoped_nsobject<UIImage> uiimage( 120 base::scoped_nsobject<UIImage> uiimage(
119 CreateUIImageFromImagePNGRep(image_png_reps[i])); 121 CreateUIImageFromImagePNGRep(image_png_reps[i]));
120 gfx::ImageSkiaRep image_skia_rep = ImageSkiaRepOfScaleFromUIImage( 122 gfx::ImageSkiaRep image_skia_rep = ImageSkiaRepOfScaleFactorFromUIImage(
121 uiimage, image_png_reps[i].scale); 123 uiimage, image_png_reps[i].scale_factor);
122 if (!image_skia_rep.is_null()) 124 if (!image_skia_rep.is_null())
123 image_skia->AddRepresentation(image_skia_rep); 125 image_skia->AddRepresentation(image_skia_rep);
124 } 126 }
125 return image_skia; 127 return image_skia;
126 } 128 }
127 129
128 gfx::Size UIImageSize(UIImage* image) { 130 gfx::Size UIImageSize(UIImage* image) {
129 int width = static_cast<int>(image.size.width); 131 int width = static_cast<int>(image.size.width);
130 int height = static_cast<int>(image.size.height); 132 int height = static_cast<int>(image.size.height);
131 return gfx::Size(width, height); 133 return gfx::Size(width, height);
132 } 134 }
133 135
134 } // namespace internal 136 } // namespace internal
135 } // namespace gfx 137 } // namespace gfx
OLDNEW
« no previous file with comments | « trunk/src/ui/gfx/image/image.cc ('k') | trunk/src/ui/gfx/image/image_mac.mm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698