Fix the rules for determining whether a blur image filter is valid (flutter/engine#43791)
See https://github.com/flutter/flutter/issues/130318
This commit is contained in:
@@ -229,11 +229,15 @@ class DlBlurImageFilter final : public DlImageFilter {
|
||||
static std::shared_ptr<DlImageFilter> Make(SkScalar sigma_x,
|
||||
SkScalar sigma_y,
|
||||
DlTileMode tile_mode) {
|
||||
if (SkScalarIsFinite(sigma_x) && sigma_x > SK_ScalarNearlyZero &&
|
||||
SkScalarIsFinite(sigma_y) && sigma_y > SK_ScalarNearlyZero) {
|
||||
return std::make_shared<DlBlurImageFilter>(sigma_x, sigma_y, tile_mode);
|
||||
if (!SkScalarIsFinite(sigma_x) || !SkScalarIsFinite(sigma_y)) {
|
||||
return nullptr;
|
||||
}
|
||||
return nullptr;
|
||||
if (sigma_x < SK_ScalarNearlyZero && sigma_y < SK_ScalarNearlyZero) {
|
||||
return nullptr;
|
||||
}
|
||||
sigma_x = (sigma_x < SK_ScalarNearlyZero) ? 0 : sigma_x;
|
||||
sigma_y = (sigma_y < SK_ScalarNearlyZero) ? 0 : sigma_y;
|
||||
return std::make_shared<DlBlurImageFilter>(sigma_x, sigma_y, tile_mode);
|
||||
}
|
||||
|
||||
std::shared_ptr<DlImageFilter> shared() const override {
|
||||
|
||||
@@ -209,6 +209,23 @@ TEST(DisplayListImageFilter, BlurBounds) {
|
||||
TestBounds(filter, input_bounds, expected_output_bounds);
|
||||
}
|
||||
|
||||
TEST(DisplayListImageFilter, BlurZeroSigma) {
|
||||
std::shared_ptr<DlImageFilter> filter =
|
||||
DlBlurImageFilter::Make(0, 0, DlTileMode::kMirror);
|
||||
ASSERT_EQ(filter, nullptr);
|
||||
filter = DlBlurImageFilter::Make(3, SK_ScalarNaN, DlTileMode::kMirror);
|
||||
ASSERT_EQ(filter, nullptr);
|
||||
filter = DlBlurImageFilter::Make(SK_ScalarNaN, 3, DlTileMode::kMirror);
|
||||
ASSERT_EQ(filter, nullptr);
|
||||
filter =
|
||||
DlBlurImageFilter::Make(SK_ScalarNaN, SK_ScalarNaN, DlTileMode::kMirror);
|
||||
ASSERT_EQ(filter, nullptr);
|
||||
filter = DlBlurImageFilter::Make(3, 0, DlTileMode::kMirror);
|
||||
ASSERT_NE(filter, nullptr);
|
||||
filter = DlBlurImageFilter::Make(0, 3, DlTileMode::kMirror);
|
||||
ASSERT_NE(filter, nullptr);
|
||||
}
|
||||
|
||||
TEST(DisplayListImageFilter, DilateConstructor) {
|
||||
DlDilateImageFilter filter(5.0, 6.0);
|
||||
}
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 29 KiB |
Reference in New Issue
Block a user