Commit 174b91c8 authored by wutao's avatar wutao Committed by Commit Bot

Use new Skia Blur Filter.

Skia Blur image filter has a new mode to clamp pixels outside image to
image edge. This can resolve the bleeding black issue at the bounds of
texture.

BUG=622128
TEST=manual tested with lock screen and new app launcher.

Cq-Include-Trybots: master.tryserver.blink:linux_trusty_blink_rel
Change-Id: Id13383910327882d61bd908bff51d2c3fdc36bb9
Reviewed-on: https://chromium-review.googlesource.com/559935
Commit-Queue: Tao Wu <wutao@chromium.org>
Reviewed-by: default avatardanakj <danakj@chromium.org>
Reviewed-by: default avatarStephen White <senorblanco@chromium.org>
Reviewed-by: default avatarRobert Sesek <rsesek@chromium.org>
Reviewed-by: default avatarVladimir Levin <vmpstr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#487960}
parent e3c9b016
...@@ -22,6 +22,8 @@ bool FilterOperation::operator==(const FilterOperation& other) const { ...@@ -22,6 +22,8 @@ bool FilterOperation::operator==(const FilterOperation& other) const {
return false; return false;
if (type_ == COLOR_MATRIX) if (type_ == COLOR_MATRIX)
return !memcmp(matrix_, other.matrix_, sizeof(matrix_)); return !memcmp(matrix_, other.matrix_, sizeof(matrix_));
if (type_ == BLUR)
return amount_ == other.amount_ && blur_tile_mode_ == other.blur_tile_mode_;
if (type_ == DROP_SHADOW) { if (type_ == DROP_SHADOW) {
return amount_ == other.amount_ && return amount_ == other.amount_ &&
drop_shadow_offset_ == other.drop_shadow_offset_ && drop_shadow_offset_ == other.drop_shadow_offset_ &&
...@@ -52,6 +54,20 @@ FilterOperation::FilterOperation(FilterType type, float amount) ...@@ -52,6 +54,20 @@ FilterOperation::FilterOperation(FilterType type, float amount)
memset(matrix_, 0, sizeof(matrix_)); memset(matrix_, 0, sizeof(matrix_));
} }
FilterOperation::FilterOperation(FilterType type,
float amount,
SkBlurImageFilter::TileMode tile_mode)
: type_(type),
amount_(amount),
outer_threshold_(0),
drop_shadow_offset_(0, 0),
drop_shadow_color_(0),
zoom_inset_(0),
blur_tile_mode_(tile_mode) {
DCHECK_EQ(type_, BLUR);
memset(matrix_, 0, sizeof(matrix_));
}
FilterOperation::FilterOperation(FilterType type, FilterOperation::FilterOperation(FilterType type,
const gfx::Point& offset, const gfx::Point& offset,
float stdDeviation, float stdDeviation,
...@@ -124,7 +140,8 @@ FilterOperation::FilterOperation(const FilterOperation& other) ...@@ -124,7 +140,8 @@ FilterOperation::FilterOperation(const FilterOperation& other)
drop_shadow_color_(other.drop_shadow_color_), drop_shadow_color_(other.drop_shadow_color_),
image_filter_(other.image_filter_), image_filter_(other.image_filter_),
zoom_inset_(other.zoom_inset_), zoom_inset_(other.zoom_inset_),
region_(other.region_) { region_(other.region_),
blur_tile_mode_(other.blur_tile_mode_) {
memcpy(matrix_, other.matrix_, sizeof(matrix_)); memcpy(matrix_, other.matrix_, sizeof(matrix_));
} }
...@@ -231,7 +248,9 @@ FilterOperation FilterOperation::Blend(const FilterOperation* from, ...@@ -231,7 +248,9 @@ FilterOperation FilterOperation::Blend(const FilterOperation* from,
gfx::Tween::FloatValueBetween(progress, from_op.amount(), to_op.amount()), gfx::Tween::FloatValueBetween(progress, from_op.amount(), to_op.amount()),
to_op.type())); to_op.type()));
if (to_op.type() == FilterOperation::DROP_SHADOW) { if (to_op.type() == FilterOperation::BLUR) {
blended_filter.set_blur_tile_mode(to_op.blur_tile_mode());
} else if (to_op.type() == FilterOperation::DROP_SHADOW) {
gfx::Point blended_offset(gfx::Tween::LinearIntValueBetween( gfx::Point blended_offset(gfx::Tween::LinearIntValueBetween(
progress, from_op.drop_shadow_offset().x(), progress, from_op.drop_shadow_offset().x(),
to_op.drop_shadow_offset().x()), to_op.drop_shadow_offset().x()),
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "third_party/skia/include/core/SkImageFilter.h" #include "third_party/skia/include/core/SkImageFilter.h"
#include "third_party/skia/include/core/SkRegion.h" #include "third_party/skia/include/core/SkRegion.h"
#include "third_party/skia/include/core/SkScalar.h" #include "third_party/skia/include/core/SkScalar.h"
#include "third_party/skia/include/effects/SkBlurImageFilter.h"
#include "ui/gfx/geometry/point.h" #include "ui/gfx/geometry/point.h"
namespace base { namespace base {
...@@ -97,6 +98,11 @@ class CC_BASE_EXPORT FilterOperation { ...@@ -97,6 +98,11 @@ class CC_BASE_EXPORT FilterOperation {
return region_; return region_;
} }
SkBlurImageFilter::TileMode blur_tile_mode() const {
DCHECK_EQ(type_, BLUR);
return blur_tile_mode_;
}
static FilterOperation CreateGrayscaleFilter(float amount) { static FilterOperation CreateGrayscaleFilter(float amount) {
return FilterOperation(GRAYSCALE, amount); return FilterOperation(GRAYSCALE, amount);
} }
...@@ -129,8 +135,11 @@ class CC_BASE_EXPORT FilterOperation { ...@@ -129,8 +135,11 @@ class CC_BASE_EXPORT FilterOperation {
return FilterOperation(OPACITY, amount); return FilterOperation(OPACITY, amount);
} }
static FilterOperation CreateBlurFilter(float amount) { static FilterOperation CreateBlurFilter(
return FilterOperation(BLUR, amount); float amount,
SkBlurImageFilter::TileMode tile_mode =
SkBlurImageFilter::kClampToBlack_TileMode) {
return FilterOperation(BLUR, amount, tile_mode);
} }
static FilterOperation CreateDropShadowFilter(const gfx::Point& offset, static FilterOperation CreateDropShadowFilter(const gfx::Point& offset,
...@@ -218,6 +227,11 @@ class CC_BASE_EXPORT FilterOperation { ...@@ -218,6 +227,11 @@ class CC_BASE_EXPORT FilterOperation {
region_ = region; region_ = region;
} }
void set_blur_tile_mode(SkBlurImageFilter::TileMode tile_mode) {
DCHECK_EQ(type_, BLUR);
blur_tile_mode_ = tile_mode;
}
// Given two filters of the same type, returns a filter operation created by // Given two filters of the same type, returns a filter operation created by
// linearly interpolating a |progress| fraction from |from| to |to|. If either // linearly interpolating a |progress| fraction from |from| to |to|. If either
// |from| or |to| (but not both) is null, it is treated as a no-op filter of // |from| or |to| (but not both) is null, it is treated as a no-op filter of
...@@ -241,6 +255,10 @@ class CC_BASE_EXPORT FilterOperation { ...@@ -241,6 +255,10 @@ class CC_BASE_EXPORT FilterOperation {
private: private:
FilterOperation(FilterType type, float amount); FilterOperation(FilterType type, float amount);
FilterOperation(FilterType type,
float amount,
SkBlurImageFilter::TileMode tile_mode);
FilterOperation(FilterType type, FilterOperation(FilterType type,
const gfx::Point& offset, const gfx::Point& offset,
float stdDeviation, float stdDeviation,
...@@ -266,6 +284,7 @@ class CC_BASE_EXPORT FilterOperation { ...@@ -266,6 +284,7 @@ class CC_BASE_EXPORT FilterOperation {
SkScalar matrix_[20]; SkScalar matrix_[20];
int zoom_inset_; int zoom_inset_;
SkRegion region_; SkRegion region_;
SkBlurImageFilter::TileMode blur_tile_mode_;
}; };
} // namespace cc } // namespace cc
......
...@@ -12,7 +12,6 @@ ...@@ -12,7 +12,6 @@
#include "cc/base/filter_operations.h" #include "cc/base/filter_operations.h"
#include "third_party/skia/include/core/SkImageFilter.h" #include "third_party/skia/include/core/SkImageFilter.h"
#include "third_party/skia/include/effects/SkAlphaThresholdFilter.h" #include "third_party/skia/include/effects/SkAlphaThresholdFilter.h"
#include "third_party/skia/include/effects/SkBlurImageFilter.h"
#include "third_party/skia/include/effects/SkColorFilterImageFilter.h" #include "third_party/skia/include/effects/SkColorFilterImageFilter.h"
#include "third_party/skia/include/effects/SkColorMatrixFilter.h" #include "third_party/skia/include/effects/SkColorMatrixFilter.h"
#include "third_party/skia/include/effects/SkComposeImageFilter.h" #include "third_party/skia/include/effects/SkComposeImageFilter.h"
...@@ -195,7 +194,8 @@ sk_sp<SkImageFilter> RenderSurfaceFilters::BuildImageFilter( ...@@ -195,7 +194,8 @@ sk_sp<SkImageFilter> RenderSurfaceFilters::BuildImageFilter(
break; break;
case FilterOperation::BLUR: case FilterOperation::BLUR:
image_filter = SkBlurImageFilter::Make(op.amount(), op.amount(), image_filter = SkBlurImageFilter::Make(op.amount(), op.amount(),
std::move(image_filter)); std::move(image_filter), nullptr,
op.blur_tile_mode());
break; break;
case FilterOperation::DROP_SHADOW: case FilterOperation::DROP_SHADOW:
image_filter = SkDropShadowImageFilter::Make( image_filter = SkDropShadowImageFilter::Make(
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
module cc.mojom; module cc.mojom;
import "skia/public/interfaces/image_filter.mojom"; import "skia/public/interfaces/image_filter.mojom";
import "skia/public/interfaces/blur_image_filter_tile_mode.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom"; import "ui/gfx/geometry/mojo/geometry.mojom";
enum FilterType { enum FilterType {
...@@ -35,6 +36,7 @@ struct FilterOperation { ...@@ -35,6 +36,7 @@ struct FilterOperation {
skia.mojom.ImageFilter image_filter; skia.mojom.ImageFilter image_filter;
array<float, 20>? matrix; array<float, 20>? matrix;
int32 zoom_inset; int32 zoom_inset;
skia.mojom.BlurTileMode blur_tile_mode;
// Note: SkRegion is currently not needed for serialization. // Note: SkRegion is currently not needed for serialization.
}; };
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include "cc/base/filter_operation.h" #include "cc/base/filter_operation.h"
#include "cc/ipc/filter_operation.mojom-shared.h" #include "cc/ipc/filter_operation.mojom-shared.h"
#include "skia/public/interfaces/blur_image_filter_tile_mode_struct_traits.h"
#include "skia/public/interfaces/image_filter_struct_traits.h" #include "skia/public/interfaces/image_filter_struct_traits.h"
namespace mojo { namespace mojo {
...@@ -141,6 +142,14 @@ struct StructTraits<cc::mojom::FilterOperationDataView, cc::FilterOperation> { ...@@ -141,6 +142,14 @@ struct StructTraits<cc::mojom::FilterOperationDataView, cc::FilterOperation> {
return operation.zoom_inset(); return operation.zoom_inset();
} }
static skia::mojom::BlurTileMode blur_tile_mode(
const cc::FilterOperation& operation) {
if (operation.type() != cc::FilterOperation::BLUR)
return skia::mojom::BlurTileMode::CLAMP_TO_BLACK;
return EnumTraits<skia::mojom::BlurTileMode, SkBlurImageFilter::TileMode>::
ToMojom(operation.blur_tile_mode());
}
static bool Read(cc::mojom::FilterOperationDataView data, static bool Read(cc::mojom::FilterOperationDataView data,
cc::FilterOperation* out) { cc::FilterOperation* out) {
out->set_type(MojoFilterTypeToCC(data.type())); out->set_type(MojoFilterTypeToCC(data.type()));
...@@ -154,8 +163,14 @@ struct StructTraits<cc::mojom::FilterOperationDataView, cc::FilterOperation> { ...@@ -154,8 +163,14 @@ struct StructTraits<cc::mojom::FilterOperationDataView, cc::FilterOperation> {
case cc::FilterOperation::SATURATING_BRIGHTNESS: case cc::FilterOperation::SATURATING_BRIGHTNESS:
case cc::FilterOperation::CONTRAST: case cc::FilterOperation::CONTRAST:
case cc::FilterOperation::OPACITY: case cc::FilterOperation::OPACITY:
out->set_amount(data.amount());
return true;
case cc::FilterOperation::BLUR: case cc::FilterOperation::BLUR:
out->set_amount(data.amount()); out->set_amount(data.amount());
SkBlurImageFilter::TileMode tile_mode;
if (!data.ReadBlurTileMode(&tile_mode))
return false;
out->set_blur_tile_mode(tile_mode);
return true; return true;
case cc::FilterOperation::DROP_SHADOW: { case cc::FilterOperation::DROP_SHADOW: {
out->set_amount(data.amount()); out->set_amount(data.amount());
......
...@@ -36,7 +36,8 @@ TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlur) { ...@@ -36,7 +36,8 @@ TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlur) {
background->AddChild(blur); background->AddChild(blur);
FilterOperations filters; FilterOperations filters;
filters.Append(FilterOperation::CreateBlurFilter(2.f)); filters.Append(FilterOperation::CreateBlurFilter(
2.f, SkBlurImageFilter::kClamp_TileMode));
blur->SetBackgroundFilters(filters); blur->SetBackgroundFilters(filters);
#if defined(OS_WIN) #if defined(OS_WIN)
...@@ -77,12 +78,13 @@ TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlurOutsets) { ...@@ -77,12 +78,13 @@ TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlurOutsets) {
background->AddChild(blur); background->AddChild(blur);
FilterOperations filters; FilterOperations filters;
filters.Append(FilterOperation::CreateBlurFilter(5.f)); filters.Append(FilterOperation::CreateBlurFilter(
5.f, SkBlurImageFilter::kClamp_TileMode));
blur->SetBackgroundFilters(filters); blur->SetBackgroundFilters(filters);
#if defined(OS_WIN) #if defined(OS_WIN)
// Windows has 5.6075% pixels by at most 2: crbug.com/259922 // Windows has 5.9325% pixels by at most 2: crbug.com/259922
float percentage_pixels_large_error = 5.7f; float percentage_pixels_large_error = 6.0f;
float percentage_pixels_small_error = 0.0f; float percentage_pixels_small_error = 0.0f;
float average_error_allowed_in_bad_pixels = 2.f; float average_error_allowed_in_bad_pixels = 2.f;
int large_error_allowed = 2; int large_error_allowed = 2;
...@@ -138,7 +140,8 @@ TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlurOffAxis) { ...@@ -138,7 +140,8 @@ TEST_F(LayerTreeHostFiltersPixelTest, BackgroundFilterBlurOffAxis) {
blur->SetTransform(blur_transform); blur->SetTransform(blur_transform);
FilterOperations filters; FilterOperations filters;
filters.Append(FilterOperation::CreateBlurFilter(2.f)); filters.Append(FilterOperation::CreateBlurFilter(
2.f, SkBlurImageFilter::kClamp_TileMode));
blur->SetBackgroundFilters(filters); blur->SetBackgroundFilters(filters);
#if defined(OS_WIN) #if defined(OS_WIN)
...@@ -478,7 +481,8 @@ class ImageBackgroundFilter : public LayerTreeHostFiltersPixelTest { ...@@ -478,7 +481,8 @@ class ImageBackgroundFilter : public LayerTreeHostFiltersPixelTest {
// Add a blur filter to the blue layer. // Add a blur filter to the blue layer.
FilterOperations filters; FilterOperations filters;
filters.Append(FilterOperation::CreateBlurFilter(5.0f)); filters.Append(FilterOperation::CreateBlurFilter(
5.0f, SkBlurImageFilter::kClamp_TileMode));
filter->SetBackgroundFilters(filters); filter->SetBackgroundFilters(filters);
// Allow some fuzziness so that this doesn't fail when Skia makes minor // Allow some fuzziness so that this doesn't fail when Skia makes minor
...@@ -935,7 +939,8 @@ class BlurFilterWithClip : public LayerTreeHostFiltersPixelTest { ...@@ -935,7 +939,8 @@ class BlurFilterWithClip : public LayerTreeHostFiltersPixelTest {
filter_layer->AddChild(child4); filter_layer->AddChild(child4);
FilterOperations filters; FilterOperations filters;
filters.Append(FilterOperation::CreateBlurFilter(2.f)); filters.Append(FilterOperation::CreateBlurFilter(
2.f, SkBlurImageFilter::kClamp_TileMode));
filter_layer->SetFilters(filters); filter_layer->SetFilters(filters);
// Force the allocation a larger textures. // Force the allocation a larger textures.
......
...@@ -7,6 +7,7 @@ import("//mojo/public/tools/bindings/mojom.gni") ...@@ -7,6 +7,7 @@ import("//mojo/public/tools/bindings/mojom.gni")
mojom("interfaces") { mojom("interfaces") {
sources = [ sources = [
"bitmap.mojom", "bitmap.mojom",
"blur_image_filter_tile_mode.mojom",
"image_filter.mojom", "image_filter.mojom",
] ]
} }
......
...@@ -3,3 +3,6 @@ per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS ...@@ -3,3 +3,6 @@ per-file *_struct_traits*.*=file://ipc/SECURITY_OWNERS
per-file *.mojom=set noparent per-file *.mojom=set noparent
per-file *.mojom=file://ipc/SECURITY_OWNERS per-file *.mojom=file://ipc/SECURITY_OWNERS
per-file *.typemap=set noparent
per-file *.typemap=file://ipc/SECURITY_OWNERS
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module skia.mojom;
// Mirror of SkBlurImageFilter::TileMode.
enum BlurTileMode {
CLAMP,
REPEAT,
CLAMP_TO_BLACK,
BLUR_TILE_MODE_LAST = CLAMP_TO_BLACK
};
# Copyright 2017 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
mojom = "//skia/public/interfaces/blur_image_filter_tile_mode.mojom"
public_headers = [ "//third_party/skia/include/effects/SkBlurImageFilter.h" ]
traits_headers =
[ "//skia/public/interfaces/blur_image_filter_tile_mode_struct_traits.h" ]
type_mappings = [ "skia.mojom.BlurTileMode=SkBlurImageFilter::TileMode" ]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef SKIA_PUBLIC_INTERFACES_BLUR_IMAGE_FILTER_TILE_MODE_STRUCT_TRAITS_H_
#define SKIA_PUBLIC_INTERFACES_BLUR_IMAGE_FILTER_TILE_MODE_STRUCT_TRAITS_H_
#include "skia/public/interfaces/blur_image_filter_tile_mode.mojom-shared.h"
#include "third_party/skia/include/effects/SkBlurImageFilter.h"
namespace mojo {
template <>
struct EnumTraits<skia::mojom::BlurTileMode, SkBlurImageFilter::TileMode> {
static skia::mojom::BlurTileMode ToMojom(
SkBlurImageFilter::TileMode tile_mode) {
switch (tile_mode) {
case SkBlurImageFilter::kClamp_TileMode:
return skia::mojom::BlurTileMode::CLAMP;
case SkBlurImageFilter::kRepeat_TileMode:
return skia::mojom::BlurTileMode::REPEAT;
case SkBlurImageFilter::kClampToBlack_TileMode:
return skia::mojom::BlurTileMode::CLAMP_TO_BLACK;
}
NOTREACHED();
return skia::mojom::BlurTileMode::CLAMP_TO_BLACK;
}
static bool FromMojom(skia::mojom::BlurTileMode input,
SkBlurImageFilter::TileMode* out) {
switch (input) {
case skia::mojom::BlurTileMode::CLAMP:
*out = SkBlurImageFilter::kClamp_TileMode;
return true;
case skia::mojom::BlurTileMode::REPEAT:
*out = SkBlurImageFilter::kRepeat_TileMode;
return true;
case skia::mojom::BlurTileMode::CLAMP_TO_BLACK:
*out = SkBlurImageFilter::kClampToBlack_TileMode;
return true;
}
return false;
}
};
} // namespace mojo
#endif // SKIA_PUBLIC_INTERFACES_BLUR_IMAGE_FILTER_TILE_MODE_STRUCT_TRAITS_H_
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "third_party/skia/include/core/SkColorFilter.h" #include "third_party/skia/include/core/SkColorFilter.h"
#include "third_party/skia/include/core/SkImageInfo.h" #include "third_party/skia/include/core/SkImageInfo.h"
#include "third_party/skia/include/core/SkString.h" #include "third_party/skia/include/core/SkString.h"
#include "third_party/skia/include/effects/SkBlurImageFilter.h"
#include "third_party/skia/include/effects/SkColorFilterImageFilter.h" #include "third_party/skia/include/effects/SkColorFilterImageFilter.h"
#include "third_party/skia/include/effects/SkDropShadowImageFilter.h" #include "third_party/skia/include/effects/SkDropShadowImageFilter.h"
#include "ui/gfx/skia_util.h" #include "ui/gfx/skia_util.h"
...@@ -34,6 +35,12 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService { ...@@ -34,6 +35,12 @@ class StructTraitsTest : public testing::Test, public mojom::TraitsTestService {
std::move(callback).Run(b); std::move(callback).Run(b);
} }
void EchoBlurImageFilterTileMode(
SkBlurImageFilter::TileMode t,
EchoBlurImageFilterTileModeCallback callback) override {
std::move(callback).Run(t);
}
void EchoImageFilter(const sk_sp<SkImageFilter>& i, void EchoImageFilter(const sk_sp<SkImageFilter>& i,
EchoImageFilterCallback callback) override { EchoImageFilterCallback callback) override {
std::move(callback).Run(i); std::move(callback).Run(i);
...@@ -126,4 +133,12 @@ TEST_F(StructTraitsTest, DropShadowImageFilter) { ...@@ -126,4 +133,12 @@ TEST_F(StructTraitsTest, DropShadowImageFilter) {
EXPECT_EQ(input_str, output_str); EXPECT_EQ(input_str, output_str);
} }
TEST_F(StructTraitsTest, BlurImageFilterTileMode) {
SkBlurImageFilter::TileMode input(SkBlurImageFilter::kClamp_TileMode);
mojom::TraitsTestServicePtr proxy = GetTraitsTestProxy();
SkBlurImageFilter::TileMode output;
proxy->EchoBlurImageFilterTileMode(input, &output);
EXPECT_EQ(input, output);
}
} // namespace skia } // namespace skia
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
module skia.mojom; module skia.mojom;
import "skia/public/interfaces/bitmap.mojom"; import "skia/public/interfaces/bitmap.mojom";
import "skia/public/interfaces/blur_image_filter_tile_mode.mojom";
import "skia/public/interfaces/image_filter.mojom"; import "skia/public/interfaces/image_filter.mojom";
// All functions on this interface echo their arguments to test StructTraits // All functions on this interface echo their arguments to test StructTraits
...@@ -13,6 +14,9 @@ interface TraitsTestService { ...@@ -13,6 +14,9 @@ interface TraitsTestService {
[Sync] [Sync]
EchoBitmap(Bitmap b) => (Bitmap pass); EchoBitmap(Bitmap b) => (Bitmap pass);
[Sync]
EchoBlurImageFilterTileMode(BlurTileMode t) => (BlurTileMode pass);
[Sync] [Sync]
EchoImageFilter(ImageFilter i) => (ImageFilter pass); EchoImageFilter(ImageFilter i) => (ImageFilter pass);
}; };
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
# found in the LICENSE file. # found in the LICENSE file.
typemaps = [ typemaps = [
"//skia/public/interfaces/blur_image_filter_tile_mode.typemap",
"//skia/public/interfaces/image_filter.typemap", "//skia/public/interfaces/image_filter.typemap",
"//skia/public/interfaces/skbitmap.typemap", "//skia/public/interfaces/skbitmap.typemap",
] ]
...@@ -92,7 +92,7 @@ Layer::Layer() ...@@ -92,7 +92,7 @@ Layer::Layer()
visible_(true), visible_(true),
fills_bounds_opaquely_(true), fills_bounds_opaquely_(true),
fills_bounds_completely_(false), fills_bounds_completely_(false),
background_blur_radius_(0), background_blur_sigma_(0.0f),
layer_saturation_(0.0f), layer_saturation_(0.0f),
layer_brightness_(0.0f), layer_brightness_(0.0f),
layer_grayscale_(0.0f), layer_grayscale_(0.0f),
...@@ -118,7 +118,7 @@ Layer::Layer(LayerType type) ...@@ -118,7 +118,7 @@ Layer::Layer(LayerType type)
visible_(true), visible_(true),
fills_bounds_opaquely_(true), fills_bounds_opaquely_(true),
fills_bounds_completely_(false), fills_bounds_completely_(false),
background_blur_radius_(0), background_blur_sigma_(0.0f),
layer_saturation_(0.0f), layer_saturation_(0.0f),
layer_brightness_(0.0f), layer_brightness_(0.0f),
layer_grayscale_(0.0f), layer_grayscale_(0.0f),
...@@ -165,7 +165,7 @@ std::unique_ptr<Layer> Layer::Clone() const { ...@@ -165,7 +165,7 @@ std::unique_ptr<Layer> Layer::Clone() const {
auto clone = base::MakeUnique<Layer>(type_); auto clone = base::MakeUnique<Layer>(type_);
// Background filters. // Background filters.
clone->SetBackgroundBlur(background_blur_radius_); clone->SetBackgroundBlur(background_blur_sigma_);
clone->SetBackgroundZoom(zoom_, zoom_inset_); clone->SetBackgroundZoom(zoom_, zoom_inset_);
// Filters. // Filters.
...@@ -395,8 +395,8 @@ float Layer::GetTargetTemperature() const { ...@@ -395,8 +395,8 @@ float Layer::GetTargetTemperature() const {
return layer_temperature(); return layer_temperature();
} }
void Layer::SetBackgroundBlur(int blur_radius) { void Layer::SetBackgroundBlur(float blur_sigma) {
background_blur_radius_ = blur_radius; background_blur_sigma_ = blur_sigma;
SetLayerBackgroundFilters(); SetLayerBackgroundFilters();
} }
...@@ -512,9 +512,9 @@ void Layer::SetLayerBackgroundFilters() { ...@@ -512,9 +512,9 @@ void Layer::SetLayerBackgroundFilters() {
if (zoom_ != 1) if (zoom_ != 1)
filters.Append(cc::FilterOperation::CreateZoomFilter(zoom_, zoom_inset_)); filters.Append(cc::FilterOperation::CreateZoomFilter(zoom_, zoom_inset_));
if (background_blur_radius_) { if (background_blur_sigma_) {
filters.Append(cc::FilterOperation::CreateBlurFilter( filters.Append(cc::FilterOperation::CreateBlurFilter(
background_blur_radius_)); background_blur_sigma_, SkBlurImageFilter::kClamp_TileMode));
} }
cc_layer_->SetBackgroundFilters(filters); cc_layer_->SetBackgroundFilters(filters);
......
...@@ -193,10 +193,10 @@ class COMPOSITOR_EXPORT Layer ...@@ -193,10 +193,10 @@ class COMPOSITOR_EXPORT Layer
// temperature otherwise. // temperature otherwise.
float GetTargetTemperature() const; float GetTargetTemperature() const;
// Blur pixels by this amount in anything below the layer and visible through // Blur pixels by 3 * this amount in anything below the layer and visible
// the layer. // through the layer.
int background_blur() const { return background_blur_radius_; } float background_blur() const { return background_blur_sigma_; }
void SetBackgroundBlur(int blur_radius); void SetBackgroundBlur(float blur_sigma);
// Saturate all pixels of this layer by this amount. // Saturate all pixels of this layer by this amount.
// This effect will get "combined" with the inverted, // This effect will get "combined" with the inverted,
...@@ -503,7 +503,7 @@ class COMPOSITOR_EXPORT Layer ...@@ -503,7 +503,7 @@ class COMPOSITOR_EXPORT Layer
// to paint the content. // to paint the content.
cc::Region paint_region_; cc::Region paint_region_;
int background_blur_radius_; float background_blur_sigma_;
// Several variables which will change the visible representation of // Several variables which will change the visible representation of
// the layer. // the layer.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment