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

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

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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « trunk/src/ui/gfx/image/image_skia.h ('k') | trunk/src/ui/gfx/image/image_skia_operations.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: trunk/src/ui/gfx/image/image_skia.cc
===================================================================
--- trunk/src/ui/gfx/image/image_skia.cc (revision 224498)
+++ trunk/src/ui/gfx/image/image_skia.cc (working copy)
@@ -26,7 +26,6 @@
return null_image_rep;
}
-std::vector<float>* g_supported_scales = NULL;
} // namespace
namespace internal {
@@ -34,15 +33,15 @@
class Matcher {
public:
- explicit Matcher(float scale) : scale_(scale) {
+ explicit Matcher(ui::ScaleFactor scale_factor) : scale_factor_(scale_factor) {
}
bool operator()(const ImageSkiaRep& rep) const {
- return rep.scale() == scale_;
+ return rep.scale_factor() == scale_factor_;
}
private:
- float scale_;
+ ui::ScaleFactor scale_factor_;
};
} // namespace
@@ -62,10 +61,11 @@
read_only_(false) {
}
- ImageSkiaStorage(ImageSkiaSource* source, float scale)
+ ImageSkiaStorage(ImageSkiaSource* source, ui::ScaleFactor scale_factor)
: source_(source),
read_only_(false) {
- ImageSkia::ImageSkiaReps::iterator it = FindRepresentation(scale, true);
+ ImageSkia::ImageSkiaReps::iterator it =
+ FindRepresentation(scale_factor, true);
if (it == image_reps_.end() || it->is_null())
source_.reset();
else
@@ -103,15 +103,16 @@
}
// Returns the iterator of the image rep whose density best matches
- // |scale|. If the image for the |scale| doesn't exist in the storage and
- // |storage| is set, it fetches new image by calling
- // |ImageSkiaSource::GetImageForScale|. If the source returns the image with
- // different scale (if the image doesn't exist in resource, for example), it
- // will fallback to closest image rep.
+ // |scale_factor|. If the image for the |scale_factor| doesn't exist
+ // in the storage and |storage| is set, it fetches new image by calling
+ // |ImageSkiaSource::GetImageForScale|. If the source returns the
+ // image with different scale factor (if the image doesn't exist in
+ // resource, for example), it will fallback to closest image rep.
std::vector<ImageSkiaRep>::iterator FindRepresentation(
- float scale, bool fetch_new_image) const {
+ ui::ScaleFactor scale_factor, bool fetch_new_image) const {
ImageSkiaStorage* non_const = const_cast<ImageSkiaStorage*>(this);
+ float scale = ui::GetScaleFactorScale(scale_factor);
ImageSkia::ImageSkiaReps::iterator closest_iter =
non_const->image_reps().end();
ImageSkia::ImageSkiaReps::iterator exact_iter =
@@ -120,7 +121,7 @@
for (ImageSkia::ImageSkiaReps::iterator it =
non_const->image_reps().begin();
it < image_reps_.end(); ++it) {
- if (it->scale() == scale) {
+ if (it->GetScale() == scale) {
// found exact match
fetch_new_image = false;
if (it->is_null())
@@ -128,7 +129,7 @@
exact_iter = it;
break;
}
- float diff = std::abs(it->scale() - scale);
+ float diff = std::abs(it->GetScale() - scale);
if (diff < smallest_diff && !it->is_null()) {
closest_iter = it;
smallest_diff = diff;
@@ -139,24 +140,25 @@
DCHECK(CalledOnValidThread()) <<
"An ImageSkia with the source must be accessed by the same thread.";
- ImageSkiaRep image = source_->GetImageForScale(scale);
+ ImageSkiaRep image = source_->GetImageForScale(scale_factor);
// If the source returned the new image, store it.
if (!image.is_null() &&
std::find_if(image_reps_.begin(), image_reps_.end(),
- Matcher(image.scale())) == image_reps_.end()) {
+ Matcher(image.scale_factor())) == image_reps_.end()) {
non_const->image_reps().push_back(image);
}
- // If the result image's scale isn't same as the expected scale, create
- // null ImageSkiaRep with the |scale| so that the next lookup will
- // fallback to the closest scale.
- if (image.is_null() || image.scale() != scale) {
- non_const->image_reps().push_back(ImageSkiaRep(SkBitmap(), scale));
+ // If the result image's scale factor isn't same as the expected
+ // scale factor, create null ImageSkiaRep with the |scale_factor|
+ // so that the next lookup will fallback to the closest scale.
+ if (image.is_null() || image.scale_factor() != scale_factor) {
+ non_const->image_reps().push_back(
+ ImageSkiaRep(SkBitmap(), scale_factor));
}
// image_reps_ must have the exact much now, so find again.
- return FindRepresentation(scale, false);
+ return FindRepresentation(scale_factor, false);
}
return exact_iter != image_reps_.end() ? exact_iter : closest_iter;
}
@@ -168,7 +170,7 @@
DetachFromThread();
}
- // Vector of bitmaps and their associated scale.
+ // Vector of bitmaps and their associated scale factor.
std::vector<gfx::ImageSkiaRep> image_reps_;
scoped_ptr<ImageSkiaSource> source_;
@@ -193,8 +195,8 @@
DetachStorageFromThread();
}
-ImageSkia::ImageSkia(ImageSkiaSource* source, float scale)
- : storage_(new internal::ImageSkiaStorage(source, scale)) {
+ImageSkia::ImageSkia(ImageSkiaSource* source, ui::ScaleFactor scale_factor)
+ : storage_(new internal::ImageSkiaStorage(source, scale_factor)) {
DCHECK(source);
if (!storage_->has_source())
storage_ = NULL;
@@ -220,27 +222,8 @@
}
// static
-void ImageSkia::SetSupportedScales(const std::vector<float>& supported_scales) {
- if (g_supported_scales != NULL)
- delete g_supported_scales;
- g_supported_scales = new std::vector<float>(supported_scales);
- std::sort(g_supported_scales->begin(), g_supported_scales->end());
-}
-
-// static
-const std::vector<float>& ImageSkia::GetSupportedScales() {
- DCHECK(g_supported_scales != NULL);
- return *g_supported_scales;
-}
-
-// static
-float ImageSkia::GetMaxSupportedScale() {
- return g_supported_scales->back();
-}
-
-// static
ImageSkia ImageSkia::CreateFrom1xBitmap(const SkBitmap& bitmap) {
- return ImageSkia(ImageSkiaRep(bitmap, 1.0f));
+ return ImageSkia(ImageSkiaRep(bitmap, ui::SCALE_FACTOR_100P));
}
scoped_ptr<ImageSkia> ImageSkia::DeepCopy() const {
@@ -271,9 +254,10 @@
// TODO(oshima): This method should be called |SetRepresentation|
// and replace the existing rep if there is already one with the
- // same scale so that we can guarantee that a ImageSkia instance contains only
- // one image rep per scale. This is not possible now as ImageLoader currently
- // stores need this feature, but this needs to be fixed.
+ // same scale factor so that we can guarantee that a ImageSkia
+ // instance contians only one image rep per scale factor. This is
+ // not possible now as ImageLoader currently stores need
+ // this feature, but this needs to be fixed.
if (isNull()) {
Init(image_rep);
} else {
@@ -282,34 +266,37 @@
}
}
-void ImageSkia::RemoveRepresentation(float scale) {
+void ImageSkia::RemoveRepresentation(ui::ScaleFactor scale_factor) {
if (isNull())
return;
CHECK(CanModify());
ImageSkiaReps& image_reps = storage_->image_reps();
ImageSkiaReps::iterator it =
- storage_->FindRepresentation(scale, false);
- if (it != image_reps.end() && it->scale() == scale)
+ storage_->FindRepresentation(scale_factor, false);
+ if (it != image_reps.end() && it->scale_factor() == scale_factor)
image_reps.erase(it);
}
-bool ImageSkia::HasRepresentation(float scale) const {
+bool ImageSkia::HasRepresentation(ui::ScaleFactor scale_factor) const {
if (isNull())
return false;
CHECK(CanRead());
- ImageSkiaReps::iterator it = storage_->FindRepresentation(scale, false);
- return (it != storage_->image_reps().end() && it->scale() == scale);
+ ImageSkiaReps::iterator it =
+ storage_->FindRepresentation(scale_factor, false);
+ return (it != storage_->image_reps().end() &&
+ it->scale_factor() == scale_factor);
}
-const ImageSkiaRep& ImageSkia::GetRepresentation(float scale) const {
+const ImageSkiaRep& ImageSkia::GetRepresentation(
+ ui::ScaleFactor scale_factor) const {
if (isNull())
return NullImageRep();
CHECK(CanRead());
- ImageSkiaReps::iterator it = storage_->FindRepresentation(scale, true);
+ ImageSkiaReps::iterator it = storage_->FindRepresentation(scale_factor, true);
if (it == storage_->image_reps().end())
return NullImageRep();
@@ -324,7 +311,7 @@
void ImageSkia::MakeThreadSafe() {
CHECK(storage_.get());
- EnsureRepsForSupportedScales();
+ EnsureRepsForSupportedScaleFactors();
// Delete source as we no longer needs it.
if (storage_.get())
storage_->DeleteSource();
@@ -367,15 +354,15 @@
return image_reps;
}
-void ImageSkia::EnsureRepsForSupportedScales() const {
- DCHECK(g_supported_scales != NULL);
+void ImageSkia::EnsureRepsForSupportedScaleFactors() const {
// Don't check ReadOnly because the source may generate images
// even for read only ImageSkia. Concurrent access will be protected
// by |DCHECK(CalledOnValidThread())| in FindRepresentation.
if (storage_.get() && storage_->has_source()) {
- for (std::vector<float>::const_iterator it = g_supported_scales->begin();
- it != g_supported_scales->end(); ++it)
- storage_->FindRepresentation(*it, true);
+ 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);
}
}
@@ -403,7 +390,8 @@
CHECK(CanRead());
#endif
- ImageSkiaReps::iterator it = storage_->FindRepresentation(1.0f, true);
+ ImageSkiaReps::iterator it =
+ storage_->FindRepresentation(ui::SCALE_FACTOR_100P, true);
if (it != storage_->image_reps().end())
return it->mutable_sk_bitmap();
return NullImageRep().mutable_sk_bitmap();
« no previous file with comments | « trunk/src/ui/gfx/image/image_skia.h ('k') | trunk/src/ui/gfx/image/image_skia_operations.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698