summaryrefslogtreecommitdiffstats
path: root/ui/gfx
diff options
context:
space:
mode:
authorxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-17 01:30:16 +0000
committerxiyuan@chromium.org <xiyuan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-07-17 01:30:16 +0000
commit630a460335baa59d0eaeeb643bf1929d884cd9b6 (patch)
treeb496f334076a808cf14c5e5c5381e0e84a008891 /ui/gfx
parenta191515a2cdf8ea448eaf450f9e48d62af4e3fd9 (diff)
downloadchromium_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.cc87
-rw-r--r--ui/gfx/image/image_skia_operations.h16
-rw-r--r--ui/gfx/shadow_value.cc4
-rw-r--r--ui/gfx/shadow_value.h2
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