Index: ui/gfx/skbitmap_operations.cc |
diff --git a/ui/gfx/skbitmap_operations.cc b/ui/gfx/skbitmap_operations.cc |
index 96d527560372d5a0dd8e9618fd3e9428da4e4c2f..2cc053fc6436f9382223a4a42a56e479c2480e26 100644 |
--- a/ui/gfx/skbitmap_operations.cc |
+++ b/ui/gfx/skbitmap_operations.cc |
@@ -14,6 +14,7 @@ |
#include "third_party/skia/include/core/SkColorPriv.h" |
#include "third_party/skia/include/core/SkUnPreMultiply.h" |
#include "third_party/skia/include/effects/SkBlurImageFilter.h" |
+#include "ui/gfx/insets.h" |
#include "ui/gfx/point.h" |
#include "ui/gfx/size.h" |
@@ -743,30 +744,6 @@ SkBitmap SkBitmapOperations::CreateTransposedBtmap(const SkBitmap& image) { |
} |
// static |
-SkBitmap SkBitmapOperations::CreateResizedBitmap(const SkBitmap& bitmap, |
- const gfx::Size& size) { |
- DCHECK(bitmap.config() == SkBitmap::kARGB_8888_Config); |
- |
- SkBitmap src = bitmap; |
- src.buildMipMap(false); |
- |
- SkBitmap resized; |
- resized.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height()); |
- resized.allocPixels(); |
- resized.eraseARGB(0, 0, 0, 0); |
- |
- SkCanvas canvas(resized); |
- |
- SkIRect src_rect = SkIRect::MakeWH(src.width(), src.height()); |
- SkRect dst_rect = SkRect::MakeWH(size.width(), size.height()); |
- |
- SkPaint paint; |
- paint.setFilterBitmap(true); |
- canvas.drawBitmapRect(src, &src_rect, dst_rect, &paint); |
- return resized; |
-} |
- |
-// static |
SkBitmap SkBitmapOperations::CreateColorMask(const SkBitmap& bitmap, |
SkColor c) { |
DCHECK(bitmap.config() == SkBitmap::kARGB_8888_Config); |
@@ -788,43 +765,41 @@ SkBitmap SkBitmapOperations::CreateColorMask(const SkBitmap& bitmap, |
} |
// static |
-SkBitmap SkBitmapOperations::CreateDropShadow(const SkBitmap& bitmap, |
- int shadow_count, |
- const SkColor* shadow_color, |
- const gfx::Point* shadow_offset, |
- const SkScalar* shadow_radius) { |
+SkBitmap SkBitmapOperations::CreateDropShadow( |
+ const SkBitmap& bitmap, |
+ const gfx::ShadowValues& shadows) { |
DCHECK(bitmap.config() == SkBitmap::kARGB_8888_Config); |
- int padding = 0; |
- for (int i = 0; i < shadow_count; ++i) { |
- int shadow_space = std::max(abs(shadow_offset[i].x()), |
- abs(shadow_offset[i].y())) + shadow_radius[i]; |
- if (shadow_space > padding) |
- padding = shadow_space; |
- } |
+ // Shadow margin insets are negative values because they grow outside. |
+ // Negate them here as grow direction is not important and only pixel value |
+ // is of interest here. |
+ gfx::Insets shadow_margin = -gfx::ShadowValue::GetMargin(shadows); |
SkBitmap image_with_shadow; |
image_with_shadow.setConfig(SkBitmap::kARGB_8888_Config, |
- bitmap.width() + 2 * padding, |
- bitmap.height() + 2 * padding); |
+ bitmap.width() + shadow_margin.width(), |
+ bitmap.height() + shadow_margin.height()); |
image_with_shadow.allocPixels(); |
image_with_shadow.eraseARGB(0, 0, 0, 0); |
SkCanvas canvas(image_with_shadow); |
- canvas.translate(SkIntToScalar(padding), SkIntToScalar(padding)); |
+ canvas.translate(SkIntToScalar(shadow_margin.left()), |
+ SkIntToScalar(shadow_margin.top())); |
SkPaint paint; |
- for (int i = 0; i < shadow_count; ++i) { |
- SkBitmap shadow = SkBitmapOperations::CreateColorMask(bitmap, |
- shadow_color[i]); |
+ for (size_t i = 0; i < shadows.size(); ++i) { |
+ const gfx::ShadowValue& shadow = shadows[i]; |
+ SkBitmap shadow_image = SkBitmapOperations::CreateColorMask(bitmap, |
+ shadow.color()); |
paint.setImageFilter( |
- new SkBlurImageFilter(shadow_radius[i], shadow_radius[i]))->unref(); |
+ new SkBlurImageFilter(SkDoubleToScalar(shadow.blur()), |
+ SkDoubleToScalar(shadow.blur())))->unref(); |
canvas.saveLayer(0, &paint); |
- canvas.drawBitmap(shadow, |
- SkIntToScalar(shadow_offset[i].x()), |
- SkIntToScalar(shadow_offset[i].y())); |
+ canvas.drawBitmap(shadow_image, |
+ SkIntToScalar(shadow.x()), |
+ SkIntToScalar(shadow.y())); |
canvas.restore(); |
} |