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

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

Issue 10699065: chromeos: Fix pixelated icons in app list and launcher (part 1) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 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 e5fb8e3c617ce18b81fb4c00aea2918c07cd49d2..0dd7bffcb03ed628d97c322d69331fb9fd97512e 100644
--- a/ui/gfx/image/image_skia.cc
+++ b/ui/gfx/image/image_skia.cc
@@ -8,7 +8,9 @@
#include <cmath>
#include "base/logging.h"
+#include "skia/ext/image_operations.h"
#include "ui/gfx/size.h"
+#include "ui/gfx/skbitmap_operations.h"
#include "ui/gfx/skia_util.h"
namespace gfx {
@@ -168,6 +170,55 @@ bool ImageSkia::extractSubset(ImageSkia* dst, const SkIRect& subset) const {
return true;
}
+ImageSkia ImageSkia::Resize(const gfx::Size& size) const {
+ DCHECK(!empty());
+
+ if (width() == size.width() && height() == size.height())
+ return *this;
+
+ ImageSkia image;
+ ImageSkiaReps& image_reps = storage_->image_reps();
+ for (ImageSkiaReps::iterator it = image_reps.begin();
+ it != image_reps.end(); ++it) {
+ const ImageSkiaRep& image_rep = *it;
+ float dip_scale = image_rep.GetScale();
+
+ gfx::Size scaled_size(static_cast<int>(size.width() * dip_scale),
+ static_cast<int>(size.height() * dip_scale));
+ SkBitmap resized = skia::ImageOperations::Resize(image_rep.sk_bitmap(),
+ skia::ImageOperations::RESIZE_BEST,
+ scaled_size.width(),
+ scaled_size.height());
+ image.AddRepresentation(ImageSkiaRep(resized, image_rep.scale_factor()));
+ }
+
+ return image;
+}
+
+ImageSkia ImageSkia::CreateDropShadow(const gfx::ShadowValues& shadows) const {
+ DCHECK(!empty());
+
+ ImageSkia image;
+ ImageSkiaReps& image_reps = storage_->image_reps();
+ for (ImageSkiaReps::iterator it = image_reps.begin();
+ it != image_reps.end(); ++it) {
+ const ImageSkiaRep& image_rep = *it;
+ float dip_scale = image_rep.GetScale();
+
+ gfx::ShadowValues scaled_shadows;
+ for (size_t i = 0; i < shadows.size(); ++i)
+ scaled_shadows.push_back(shadows[i].GetScaled(dip_scale));
+
+ SkBitmap shadow_image = SkBitmapOperations::CreateDropShadow(
+ image_rep.sk_bitmap(),
+ scaled_shadows);
+ image.AddRepresentation(ImageSkiaRep(shadow_image,
+ image_rep.scale_factor()));
+ }
+
+ return image;
+}
+
std::vector<ImageSkiaRep> ImageSkia::image_reps() const {
if (isNull())
return std::vector<ImageSkiaRep>();

Powered by Google App Engine
This is Rietveld 408576698