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

Unified Diff: ui/gfx/image/image_skia.cc

Issue 10780010: Introduces ImageSkia::GetRepresentations() for Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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 side-by-side diff with in-line comments
Download patch
Index: ui/gfx/image/image_skia.cc
diff --git a/ui/gfx/image/image_skia.cc b/ui/gfx/image/image_skia.cc
index 9472cda8b6be4d26c4bc42e63e0a893e4536ff34..7dd1e78fe0420294ad516880bf1ef583f7742a54 100644
--- a/ui/gfx/image/image_skia.cc
+++ b/ui/gfx/image/image_skia.cc
@@ -53,6 +53,8 @@ class ImageSkiaStorage : public base::RefCounted<ImageSkiaStorage> {
size_(size) {
}
+ bool has_source() const { return source_.get() != NULL; }
+
std::vector<gfx::ImageSkiaRep>& image_reps() { return image_reps_; }
const gfx::Size& size() const { return size_; }
@@ -191,7 +193,7 @@ void ImageSkia::RemoveRepresentation(ui::ScaleFactor scale_factor) {
image_reps.erase(it);
}
-bool ImageSkia::HasRepresentation(ui::ScaleFactor scale_factor) {
+bool ImageSkia::HasRepresentation(ui::ScaleFactor scale_factor) const {
if (isNull())
return false;
@@ -213,6 +215,36 @@ const ImageSkiaRep& ImageSkia::GetRepresentation(
return *it;
}
+std::vector<ImageSkiaRep> ImageSkia::GetRepresentations() const {
+ if (isNull())
+ return std::vector<ImageSkiaRep>();
+
+ if (!storage_->has_source())
+ return image_reps();
+
+ // Attempt to generate image reps for as many scale factors supported by
+ // this platform as possible.
+ // Do not build return array here because the mapping from scale factor to
+ // image rep is one to many in some cases.
+ std::vector<ui::ScaleFactor> supported_scale_factors =
+ ui::GetSupportedScaleFactors();
+ for (size_t i = 0; i < supported_scale_factors.size(); ++i) {
+ storage_->FindRepresentation(supported_scale_factors[i], true);
+ }
+
+ ImageSkiaReps internal_image_reps = storage_->image_reps();
+ // Create list of image reps to return, skipping null image reps which were
+ // added for caching purposes only.
+ ImageSkiaReps image_reps;
+ for (ImageSkiaReps::iterator it = internal_image_reps.begin();
+ it != internal_image_reps.end(); ++it) {
+ if (!it->is_null())
+ image_reps.push_back(*it);
+ }
+
+ return image_reps;
+}
+
bool ImageSkia::empty() const {
return isNull() || storage_->size().IsEmpty();
}
@@ -270,7 +302,9 @@ const SkBitmap* ImageSkia::bitmap() const {
return &NullImageRep().sk_bitmap();
}
- return &storage_->image_reps()[0].sk_bitmap();
+ ImageSkiaReps::iterator it =
+ storage_->FindRepresentation(ui::SCALE_FACTOR_100P, true);
+ return &it->sk_bitmap();
}
void ImageSkia::Init(const ImageSkiaRep& image_rep) {

Powered by Google App Engine
This is Rietveld 408576698