| 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>();
|
|
|