OLD | NEW |
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_skia.h" | 5 #include "ui/gfx/image/image_skia.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <cmath> | 8 #include <cmath> |
9 #include <limits> | 9 #include <limits> |
10 | 10 |
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
228 | 228 |
229 // Attempt to generate image reps for as many scale factors supported by | 229 // Attempt to generate image reps for as many scale factors supported by |
230 // this platform as possible. | 230 // this platform as possible. |
231 // Do not build return array here because the mapping from scale factor to | 231 // Do not build return array here because the mapping from scale factor to |
232 // image rep is one to many in some cases. | 232 // image rep is one to many in some cases. |
233 std::vector<ui::ScaleFactor> supported_scale_factors = | 233 std::vector<ui::ScaleFactor> supported_scale_factors = |
234 ui::GetSupportedScaleFactors(); | 234 ui::GetSupportedScaleFactors(); |
235 for (size_t i = 0; i < supported_scale_factors.size(); ++i) | 235 for (size_t i = 0; i < supported_scale_factors.size(); ++i) |
236 storage_->FindRepresentation(supported_scale_factors[i], true); | 236 storage_->FindRepresentation(supported_scale_factors[i], true); |
237 | 237 |
238 ImageSkiaReps internal_image_reps = storage_->image_reps(); | 238 return image_reps(); |
239 // Create list of image reps to return, skipping null image reps which were | |
240 // added for caching purposes only. | |
241 ImageSkiaReps image_reps; | |
242 for (ImageSkiaReps::iterator it = internal_image_reps.begin(); | |
243 it != internal_image_reps.end(); ++it) { | |
244 if (!it->is_null()) | |
245 image_reps.push_back(*it); | |
246 } | |
247 | |
248 return image_reps; | |
249 } | 239 } |
250 | 240 |
251 #endif // OS_MACOSX | 241 #endif // OS_MACOSX |
252 | 242 |
253 bool ImageSkia::empty() const { | 243 bool ImageSkia::empty() const { |
254 return isNull() || storage_->size().IsEmpty(); | 244 return isNull() || storage_->size().IsEmpty(); |
255 } | 245 } |
256 | 246 |
257 int ImageSkia::width() const { | 247 int ImageSkia::width() const { |
258 return isNull() ? 0 : storage_->size().width(); | 248 return isNull() ? 0 : storage_->size().width(); |
(...skipping 10 matching lines...) Expand all Loading... |
269 bool ImageSkia::extractSubset(ImageSkia* dst, const SkIRect& subset) const { | 259 bool ImageSkia::extractSubset(ImageSkia* dst, const SkIRect& subset) const { |
270 gfx::Rect rect(subset.x(), subset.y(), subset.width(), subset.height()); | 260 gfx::Rect rect(subset.x(), subset.y(), subset.width(), subset.height()); |
271 *dst = ImageSkiaOperations::ExtractSubset(*this, rect); | 261 *dst = ImageSkiaOperations::ExtractSubset(*this, rect); |
272 return (!dst->isNull()); | 262 return (!dst->isNull()); |
273 } | 263 } |
274 | 264 |
275 std::vector<ImageSkiaRep> ImageSkia::image_reps() const { | 265 std::vector<ImageSkiaRep> ImageSkia::image_reps() const { |
276 if (isNull()) | 266 if (isNull()) |
277 return std::vector<ImageSkiaRep>(); | 267 return std::vector<ImageSkiaRep>(); |
278 | 268 |
279 return storage_->image_reps(); | 269 ImageSkiaReps internal_image_reps = storage_->image_reps(); |
| 270 // Create list of image reps to return, skipping null image reps which were |
| 271 // added for caching purposes only. |
| 272 ImageSkiaReps image_reps; |
| 273 for (ImageSkiaReps::iterator it = internal_image_reps.begin(); |
| 274 it != internal_image_reps.end(); ++it) { |
| 275 if (!it->is_null()) |
| 276 image_reps.push_back(*it); |
| 277 } |
| 278 |
| 279 return image_reps; |
280 } | 280 } |
281 | 281 |
282 const SkBitmap* ImageSkia::bitmap() const { | 282 const SkBitmap* ImageSkia::bitmap() const { |
283 if (isNull()) { | 283 if (isNull()) { |
284 // Callers expect a ImageSkiaRep even if it is |isNull()|. | 284 // Callers expect a ImageSkiaRep even if it is |isNull()|. |
285 // TODO(pkotwicz): Fix this. | 285 // TODO(pkotwicz): Fix this. |
286 return &NullImageRep().sk_bitmap(); | 286 return &NullImageRep().sk_bitmap(); |
287 } | 287 } |
288 | 288 |
289 ImageSkiaReps::iterator it = | 289 ImageSkiaReps::iterator it = |
290 storage_->FindRepresentation(ui::SCALE_FACTOR_100P, true); | 290 storage_->FindRepresentation(ui::SCALE_FACTOR_100P, true); |
291 return &it->sk_bitmap(); | 291 return &it->sk_bitmap(); |
292 } | 292 } |
293 | 293 |
294 void ImageSkia::Init(const ImageSkiaRep& image_rep) { | 294 void ImageSkia::Init(const ImageSkiaRep& image_rep) { |
295 // TODO(pkotwicz): The image should be null whenever image rep is null. | 295 // TODO(pkotwicz): The image should be null whenever image rep is null. |
296 if (image_rep.sk_bitmap().empty()) { | 296 if (image_rep.sk_bitmap().empty()) { |
297 storage_ = NULL; | 297 storage_ = NULL; |
298 return; | 298 return; |
299 } | 299 } |
300 storage_ = new internal::ImageSkiaStorage( | 300 storage_ = new internal::ImageSkiaStorage( |
301 NULL, gfx::Size(image_rep.GetWidth(), image_rep.GetHeight())); | 301 NULL, gfx::Size(image_rep.GetWidth(), image_rep.GetHeight())); |
302 storage_->image_reps().push_back(image_rep); | 302 storage_->image_reps().push_back(image_rep); |
303 } | 303 } |
304 | 304 |
305 } // namespace gfx | 305 } // namespace gfx |
OLD | NEW |