diff options
author | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-17 01:30:16 +0000 |
---|---|---|
committer | xiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-07-17 01:30:16 +0000 |
commit | 630a460335baa59d0eaeeb643bf1929d884cd9b6 (patch) | |
tree | b496f334076a808cf14c5e5c5381e0e84a008891 /ui/gfx | |
parent | a191515a2cdf8ea448eaf450f9e48d62af4e3fd9 (diff) | |
download | chromium_src-630a460335baa59d0eaeeb643bf1929d884cd9b6.zip chromium_src-630a460335baa59d0eaeeb643bf1929d884cd9b6.tar.gz chromium_src-630a460335baa59d0eaeeb643bf1929d884cd9b6.tar.bz2 |
chromeos: Fix pixelated icons in app list and launcher (part 1)
- Wrap resize and create-shadow operations into ImageSkiaOperations;
- Update launcher, app list grid and search to use ImageSkia instead of
SkBitmap;
This is part 1 of the change. No visual change until ImageLoadingTracker
is updated.
BUG=131738,131739
TEST=None. No visual change to test until the ImageLoadingTracker change is done.
Review URL: https://chromiumcodereview.appspot.com/10699065
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@146944 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/gfx')
-rw-r--r-- | ui/gfx/image/image_skia_operations.cc | 87 | ||||
-rw-r--r-- | ui/gfx/image/image_skia_operations.h | 16 | ||||
-rw-r--r-- | ui/gfx/shadow_value.cc | 4 | ||||
-rw-r--r-- | ui/gfx/shadow_value.h | 2 |
4 files changed, 106 insertions, 3 deletions
diff --git a/ui/gfx/image/image_skia_operations.cc b/ui/gfx/image/image_skia_operations.cc index cbe2c8e..9ca19b9 100644 --- a/ui/gfx/image/image_skia_operations.cc +++ b/ui/gfx/image/image_skia_operations.cc @@ -6,12 +6,14 @@ #include "base/command_line.h" #include "base/logging.h" +#include "skia/ext/image_operations.h" #include "skia/ext/platform_canvas.h" #include "ui/base/layout.h" #include "ui/base/ui_base_switches.h" #include "ui/gfx/image/image_skia.h" #include "ui/gfx/image/image_skia_rep.h" #include "ui/gfx/image/image_skia_source.h" +#include "ui/gfx/insets.h" #include "ui/gfx/rect.h" #include "ui/gfx/size.h" #include "ui/gfx/skbitmap_operations.h" @@ -141,6 +143,74 @@ class TiledImageSource : public gfx::ImageSkiaSource { DISALLOW_COPY_AND_ASSIGN(TiledImageSource); }; +// ResizeSource resizes relevant image reps in |source| to |target_dip_size| +// for requested scale factors. +class ResizeSource : public ImageSkiaSource { + public: + ResizeSource(const ImageSkia& source, + const Size& target_dip_size) + : source_(source), + target_dip_size_(target_dip_size) { + } + virtual ~ResizeSource() {} + + // gfx::ImageSkiaSource overrides: + virtual ImageSkiaRep GetImageForScale(ui::ScaleFactor scale_factor) OVERRIDE { + const ImageSkiaRep& image_rep = source_.GetRepresentation(scale_factor); + if (image_rep.GetWidth() == target_dip_size_.width() && + image_rep.GetHeight() == target_dip_size_.height()) + return image_rep; + + const float scale = image_rep.GetScale(); + const Size target_pixel_size(target_dip_size_.Scale(scale)); + const SkBitmap resized = skia::ImageOperations::Resize( + image_rep.sk_bitmap(), + skia::ImageOperations::RESIZE_BEST, + target_pixel_size.width(), + target_pixel_size.height()); + return ImageSkiaRep(resized, image_rep.scale_factor()); + } + + private: + const ImageSkia source_; + const Size target_dip_size_; + + DISALLOW_COPY_AND_ASSIGN(ResizeSource); +}; + +// DropShadowSource generates image reps with drop shadow for image reps in +// |source| that represent requested scale factors. +class DropShadowSource : public ImageSkiaSource { + public: + DropShadowSource(const ImageSkia& source, + const ShadowValues& shadows_in_dip) + : source_(source), + shaodws_in_dip_(shadows_in_dip) { + } + virtual ~DropShadowSource() {} + + // gfx::ImageSkiaSource overrides: + virtual ImageSkiaRep GetImageForScale(ui::ScaleFactor scale_factor) OVERRIDE { + const ImageSkiaRep& image_rep = source_.GetRepresentation(scale_factor); + + const float scale = image_rep.GetScale(); + ShadowValues shaodws_in_pixel; + for (size_t i = 0; i < shaodws_in_dip_.size(); ++i) + shaodws_in_pixel.push_back(shaodws_in_dip_[i].Scale(scale)); + + const SkBitmap shaodw_bitmap = SkBitmapOperations::CreateDropShadow( + image_rep.sk_bitmap(), + shaodws_in_pixel); + return ImageSkiaRep(shaodw_bitmap, image_rep.scale_factor()); + } + + private: + const ImageSkia source_; + const ShadowValues shaodws_in_dip_; + + DISALLOW_COPY_AND_ASSIGN(DropShadowSource); +}; + } // namespace; // static @@ -164,4 +234,21 @@ ImageSkia ImageSkiaOperations::CreateTiledImage(const ImageSkia& source, gfx::Size(dst_w, dst_h)); } +// static +ImageSkia ImageSkiaOperations::CreateResizedImage(const ImageSkia& source, + const Size& target_dip_size) { + return ImageSkia(new ResizeSource(source, target_dip_size), target_dip_size); +} + +// static +ImageSkia ImageSkiaOperations::CreateImageWithDropShadow( + const ImageSkia& source, + const ShadowValues& shadows) { + const gfx::Insets shadow_padding = -gfx::ShadowValue::GetMargin(shadows); + gfx::Size shadow_image_size = source.size(); + shadow_image_size.Enlarge(shadow_padding.width(), + shadow_padding.height()); + return ImageSkia(new DropShadowSource(source, shadows), shadow_image_size); +} + } // namespace gfx diff --git a/ui/gfx/image/image_skia_operations.h b/ui/gfx/image/image_skia_operations.h index 039d1c4..1e6a52a 100644 --- a/ui/gfx/image/image_skia_operations.h +++ b/ui/gfx/image/image_skia_operations.h @@ -2,14 +2,16 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#ifndef UI_GFX_IMAGESKIA_OPERATIONS_H_ -#define UI_GFX_IMAGESKIA_OPERATIONS_H_ +#ifndef UI_GFX_IMAGE_IMAGE_SKIA_OPERATIONS_H_ +#define UI_GFX_IMAGE_IMAGE_SKIA_OPERATIONS_H_ #include "base/gtest_prod_util.h" #include "ui/base/ui_export.h" +#include "ui/gfx/shadow_value.h" namespace gfx { class ImageSkia; +class Size; class UI_EXPORT ImageSkiaOperations { public: @@ -33,10 +35,18 @@ class UI_EXPORT ImageSkiaOperations { int src_x, int src_y, int dst_w, int dst_h); + // Creates an image by resizing |source| to given |target_dip_size|. + static ImageSkia CreateResizedImage(const ImageSkia& source, + const Size& target_dip_size); + + // Creates an image with drop shadow defined in |shadows| for |source|. + static ImageSkia CreateImageWithDropShadow(const ImageSkia& source, + const ShadowValues& shadows); + private: ImageSkiaOperations(); // Class for scoping only. }; } -#endif // UI_GFX_IMAGESKIA_OPERATIONS_H_ +#endif // UI_GFX_IMAGE_IMAGE_SKIA_OPERATIONS_H_ diff --git a/ui/gfx/shadow_value.cc b/ui/gfx/shadow_value.cc index c8915e2..09127ee 100644 --- a/ui/gfx/shadow_value.cc +++ b/ui/gfx/shadow_value.cc @@ -27,6 +27,10 @@ ShadowValue::ShadowValue(const gfx::Point& offset, ShadowValue::~ShadowValue() { } +ShadowValue ShadowValue::Scale(float scale) const { + return ShadowValue(offset_.Scale(scale), blur_ * scale, color_); +} + std::string ShadowValue::ToString() const { return base::StringPrintf( "(%d,%d),%.2f,rgba(%d,%d,%d,%d)", diff --git a/ui/gfx/shadow_value.h b/ui/gfx/shadow_value.h index 49e5035..d07ac94 100644 --- a/ui/gfx/shadow_value.h +++ b/ui/gfx/shadow_value.h @@ -33,6 +33,8 @@ class UI_EXPORT ShadowValue { double blur() const { return blur_; } SkColor color() const { return color_; } + ShadowValue Scale(float scale) const; + std::string ToString() const; // Gets margin space needed for shadows. Note that values in returned Insets |