[DisplayList] migrate DlColorSource objects to Impeller geometry (flutter/engine#56735)

The DlColorSource code uses Skia geometry classes for its internal computations. This PR switches those implementations to use the Impeller geometry classes for consistency and 3rd party header file independence.
This commit is contained in:
Jim Graham 2024-11-22 12:30:21 -08:00 committed by GitHub
parent 219060790d
commit dee413e427
93 changed files with 1617 additions and 1214 deletions

View File

@ -42532,33 +42532,50 @@ ORIGIN: ../../../flutter/display_list/dl_storage.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/dl_tile_mode.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/dl_tile_mode.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/dl_vertices.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/dl_vertices.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/dl_vertices.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/dl_vertices.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_blur_image_filter.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_blur_image_filter.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_image_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_image_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_linear_gradient_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_linear_gradient_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_matrix_color_source_base.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_radial_gradient_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_radial_gradient_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_runtime_effect_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_runtime_effect_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_sweep_gradient_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_sweep_gradient_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_color_filter.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_color_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_color_filter.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_color_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_color_filter_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_color_filter_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_color_source.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_color_source.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_color_source.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_color_source.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_compose_image_filter.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_color_sources.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_compose_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_dilate_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_dilate_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_erode_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_erode_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_image_filter.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_image_filter.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_image_filters.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_image_filters.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_local_matrix_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_local_matrix_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_mask_filter.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_mask_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_mask_filter.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_mask_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_matrix_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_matrix_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_runtime_effect.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_runtime_effect.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_runtime_effect.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/dl_runtime_effect.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_runtime_effect_image_filter.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_blur_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/dl_runtime_effect_image_filter.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_blur_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_color_filter_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_color_filter_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_compose_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_compose_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_dilate_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_dilate_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_erode_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_erode_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_local_matrix_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_local_matrix_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_matrix_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_matrix_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_runtime_effect_image_filter.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/effects/image_filters/dl_runtime_effect_image_filter.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/geometry/dl_geometry_types.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/geometry/dl_geometry_types.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/geometry/dl_path.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/geometry/dl_path.cc + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/geometry/dl_path.h + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/geometry/dl_path.h + ../../../flutter/LICENSE
@ -45432,33 +45449,50 @@ FILE: ../../../flutter/display_list/dl_storage.h
FILE: ../../../flutter/display_list/dl_tile_mode.h FILE: ../../../flutter/display_list/dl_tile_mode.h
FILE: ../../../flutter/display_list/dl_vertices.cc FILE: ../../../flutter/display_list/dl_vertices.cc
FILE: ../../../flutter/display_list/dl_vertices.h FILE: ../../../flutter/display_list/dl_vertices.h
FILE: ../../../flutter/display_list/effects/dl_blur_image_filter.cc FILE: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.cc
FILE: ../../../flutter/display_list/effects/dl_blur_image_filter.h FILE: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.cc
FILE: ../../../flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_image_color_source.cc
FILE: ../../../flutter/display_list/effects/color_sources/dl_image_color_source.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_linear_gradient_color_source.cc
FILE: ../../../flutter/display_list/effects/color_sources/dl_linear_gradient_color_source.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_matrix_color_source_base.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_radial_gradient_color_source.cc
FILE: ../../../flutter/display_list/effects/color_sources/dl_radial_gradient_color_source.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_runtime_effect_color_source.cc
FILE: ../../../flutter/display_list/effects/color_sources/dl_runtime_effect_color_source.h
FILE: ../../../flutter/display_list/effects/color_sources/dl_sweep_gradient_color_source.cc
FILE: ../../../flutter/display_list/effects/color_sources/dl_sweep_gradient_color_source.h
FILE: ../../../flutter/display_list/effects/dl_color_filter.cc FILE: ../../../flutter/display_list/effects/dl_color_filter.cc
FILE: ../../../flutter/display_list/effects/dl_color_filter.h FILE: ../../../flutter/display_list/effects/dl_color_filter.h
FILE: ../../../flutter/display_list/effects/dl_color_filter_image_filter.cc
FILE: ../../../flutter/display_list/effects/dl_color_filter_image_filter.h
FILE: ../../../flutter/display_list/effects/dl_color_source.cc FILE: ../../../flutter/display_list/effects/dl_color_source.cc
FILE: ../../../flutter/display_list/effects/dl_color_source.h FILE: ../../../flutter/display_list/effects/dl_color_source.h
FILE: ../../../flutter/display_list/effects/dl_compose_image_filter.cc FILE: ../../../flutter/display_list/effects/dl_color_sources.h
FILE: ../../../flutter/display_list/effects/dl_compose_image_filter.h
FILE: ../../../flutter/display_list/effects/dl_dilate_image_filter.cc
FILE: ../../../flutter/display_list/effects/dl_dilate_image_filter.h
FILE: ../../../flutter/display_list/effects/dl_erode_image_filter.cc
FILE: ../../../flutter/display_list/effects/dl_erode_image_filter.h
FILE: ../../../flutter/display_list/effects/dl_image_filter.cc FILE: ../../../flutter/display_list/effects/dl_image_filter.cc
FILE: ../../../flutter/display_list/effects/dl_image_filter.h FILE: ../../../flutter/display_list/effects/dl_image_filter.h
FILE: ../../../flutter/display_list/effects/dl_image_filters.h FILE: ../../../flutter/display_list/effects/dl_image_filters.h
FILE: ../../../flutter/display_list/effects/dl_local_matrix_image_filter.cc
FILE: ../../../flutter/display_list/effects/dl_local_matrix_image_filter.h
FILE: ../../../flutter/display_list/effects/dl_mask_filter.cc FILE: ../../../flutter/display_list/effects/dl_mask_filter.cc
FILE: ../../../flutter/display_list/effects/dl_mask_filter.h FILE: ../../../flutter/display_list/effects/dl_mask_filter.h
FILE: ../../../flutter/display_list/effects/dl_matrix_image_filter.cc
FILE: ../../../flutter/display_list/effects/dl_matrix_image_filter.h
FILE: ../../../flutter/display_list/effects/dl_runtime_effect.cc FILE: ../../../flutter/display_list/effects/dl_runtime_effect.cc
FILE: ../../../flutter/display_list/effects/dl_runtime_effect.h FILE: ../../../flutter/display_list/effects/dl_runtime_effect.h
FILE: ../../../flutter/display_list/effects/dl_runtime_effect_image_filter.cc FILE: ../../../flutter/display_list/effects/image_filters/dl_blur_image_filter.cc
FILE: ../../../flutter/display_list/effects/dl_runtime_effect_image_filter.h FILE: ../../../flutter/display_list/effects/image_filters/dl_blur_image_filter.h
FILE: ../../../flutter/display_list/effects/image_filters/dl_color_filter_image_filter.cc
FILE: ../../../flutter/display_list/effects/image_filters/dl_color_filter_image_filter.h
FILE: ../../../flutter/display_list/effects/image_filters/dl_compose_image_filter.cc
FILE: ../../../flutter/display_list/effects/image_filters/dl_compose_image_filter.h
FILE: ../../../flutter/display_list/effects/image_filters/dl_dilate_image_filter.cc
FILE: ../../../flutter/display_list/effects/image_filters/dl_dilate_image_filter.h
FILE: ../../../flutter/display_list/effects/image_filters/dl_erode_image_filter.cc
FILE: ../../../flutter/display_list/effects/image_filters/dl_erode_image_filter.h
FILE: ../../../flutter/display_list/effects/image_filters/dl_local_matrix_image_filter.cc
FILE: ../../../flutter/display_list/effects/image_filters/dl_local_matrix_image_filter.h
FILE: ../../../flutter/display_list/effects/image_filters/dl_matrix_image_filter.cc
FILE: ../../../flutter/display_list/effects/image_filters/dl_matrix_image_filter.h
FILE: ../../../flutter/display_list/effects/image_filters/dl_runtime_effect_image_filter.cc
FILE: ../../../flutter/display_list/effects/image_filters/dl_runtime_effect_image_filter.h
FILE: ../../../flutter/display_list/geometry/dl_geometry_types.h FILE: ../../../flutter/display_list/geometry/dl_geometry_types.h
FILE: ../../../flutter/display_list/geometry/dl_path.cc FILE: ../../../flutter/display_list/geometry/dl_path.cc
FILE: ../../../flutter/display_list/geometry/dl_path.h FILE: ../../../flutter/display_list/geometry/dl_path.h

View File

@ -47,33 +47,47 @@ source_set("display_list") {
"dl_tile_mode.h", "dl_tile_mode.h",
"dl_vertices.cc", "dl_vertices.cc",
"dl_vertices.h", "dl_vertices.h",
"effects/dl_blur_image_filter.cc", "effects/color_sources/dl_color_color_source.cc",
"effects/dl_blur_image_filter.h", "effects/color_sources/dl_color_color_source.h",
"effects/color_sources/dl_conical_gradient_color_source.cc",
"effects/color_sources/dl_conical_gradient_color_source.h",
"effects/color_sources/dl_image_color_source.cc",
"effects/color_sources/dl_image_color_source.h",
"effects/color_sources/dl_linear_gradient_color_source.cc",
"effects/color_sources/dl_linear_gradient_color_source.h",
"effects/color_sources/dl_radial_gradient_color_source.cc",
"effects/color_sources/dl_radial_gradient_color_source.h",
"effects/color_sources/dl_runtime_effect_color_source.cc",
"effects/color_sources/dl_runtime_effect_color_source.h",
"effects/color_sources/dl_sweep_gradient_color_source.cc",
"effects/color_sources/dl_sweep_gradient_color_source.h",
"effects/dl_color_filter.cc", "effects/dl_color_filter.cc",
"effects/dl_color_filter.h", "effects/dl_color_filter.h",
"effects/dl_color_filter_image_filter.cc",
"effects/dl_color_filter_image_filter.h",
"effects/dl_color_source.cc", "effects/dl_color_source.cc",
"effects/dl_color_source.h", "effects/dl_color_source.h",
"effects/dl_compose_image_filter.cc",
"effects/dl_compose_image_filter.h",
"effects/dl_dilate_image_filter.cc",
"effects/dl_dilate_image_filter.h",
"effects/dl_erode_image_filter.cc",
"effects/dl_erode_image_filter.h",
"effects/dl_image_filter.cc", "effects/dl_image_filter.cc",
"effects/dl_image_filter.h", "effects/dl_image_filter.h",
"effects/dl_image_filters.h", "effects/dl_image_filters.h",
"effects/dl_local_matrix_image_filter.cc",
"effects/dl_local_matrix_image_filter.h",
"effects/dl_mask_filter.cc", "effects/dl_mask_filter.cc",
"effects/dl_mask_filter.h", "effects/dl_mask_filter.h",
"effects/dl_matrix_image_filter.cc",
"effects/dl_matrix_image_filter.h",
"effects/dl_runtime_effect.cc", "effects/dl_runtime_effect.cc",
"effects/dl_runtime_effect.h", "effects/dl_runtime_effect.h",
"effects/dl_runtime_effect_image_filter.cc", "effects/image_filters/dl_blur_image_filter.cc",
"effects/dl_runtime_effect_image_filter.h", "effects/image_filters/dl_blur_image_filter.h",
"effects/image_filters/dl_color_filter_image_filter.cc",
"effects/image_filters/dl_color_filter_image_filter.h",
"effects/image_filters/dl_compose_image_filter.cc",
"effects/image_filters/dl_compose_image_filter.h",
"effects/image_filters/dl_dilate_image_filter.cc",
"effects/image_filters/dl_dilate_image_filter.h",
"effects/image_filters/dl_erode_image_filter.cc",
"effects/image_filters/dl_erode_image_filter.h",
"effects/image_filters/dl_local_matrix_image_filter.cc",
"effects/image_filters/dl_local_matrix_image_filter.h",
"effects/image_filters/dl_matrix_image_filter.cc",
"effects/image_filters/dl_matrix_image_filter.h",
"effects/image_filters/dl_runtime_effect_image_filter.cc",
"effects/image_filters/dl_runtime_effect_image_filter.h",
"geometry/dl_geometry_types.h", "geometry/dl_geometry_types.h",
"geometry/dl_path.cc", "geometry/dl_path.cc",
"geometry/dl_path.h", "geometry/dl_path.h",

View File

@ -514,7 +514,7 @@ TEST_F(DisplayListTest, BuildRestoresAttributes) {
builder.Build(); builder.Build();
check_defaults(builder, cull_rect); check_defaults(builder, cull_rect);
receiver.setColorSource(&kTestSource1); receiver.setColorSource(kTestSource1.get());
builder.Build(); builder.Build();
check_defaults(builder, cull_rect); check_defaults(builder, cull_rect);
@ -596,7 +596,7 @@ TEST_F(DisplayListTest, UnclippedSaveLayerContentAccountsForFilter) {
SkRect cull_rect = SkRect::MakeLTRB(0.0f, 0.0f, 300.0f, 300.0f); SkRect cull_rect = SkRect::MakeLTRB(0.0f, 0.0f, 300.0f, 300.0f);
SkRect clip_rect = SkRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f); SkRect clip_rect = SkRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f);
SkRect draw_rect = SkRect::MakeLTRB(50.0f, 140.0f, 101.0f, 160.0f); SkRect draw_rect = SkRect::MakeLTRB(50.0f, 140.0f, 101.0f, 160.0f);
auto filter = DlBlurImageFilter::Make(10.0f, 10.0f, DlTileMode::kDecal); auto filter = DlImageFilter::MakeBlur(10.0f, 10.0f, DlTileMode::kDecal);
DlPaint layer_paint = DlPaint().setImageFilter(filter); DlPaint layer_paint = DlPaint().setImageFilter(filter);
ASSERT_TRUE(clip_rect.intersects(draw_rect)); ASSERT_TRUE(clip_rect.intersects(draw_rect));
@ -629,7 +629,7 @@ TEST_F(DisplayListTest, ClippedSaveLayerContentAccountsForFilter) {
SkRect cull_rect = SkRect::MakeLTRB(0.0f, 0.0f, 300.0f, 300.0f); SkRect cull_rect = SkRect::MakeLTRB(0.0f, 0.0f, 300.0f, 300.0f);
SkRect clip_rect = SkRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f); SkRect clip_rect = SkRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f);
SkRect draw_rect = SkRect::MakeLTRB(50.0f, 140.0f, 99.0f, 160.0f); SkRect draw_rect = SkRect::MakeLTRB(50.0f, 140.0f, 99.0f, 160.0f);
auto filter = DlBlurImageFilter::Make(10.0f, 10.0f, DlTileMode::kDecal); auto filter = DlImageFilter::MakeBlur(10.0f, 10.0f, DlTileMode::kDecal);
DlPaint layer_paint = DlPaint().setImageFilter(filter); DlPaint layer_paint = DlPaint().setImageFilter(filter);
ASSERT_FALSE(clip_rect.intersects(draw_rect)); ASSERT_FALSE(clip_rect.intersects(draw_rect));
@ -661,7 +661,7 @@ TEST_F(DisplayListTest, ClippedSaveLayerContentAccountsForFilter) {
TEST_F(DisplayListTest, OOBSaveLayerContentCulledWithBlurFilter) { TEST_F(DisplayListTest, OOBSaveLayerContentCulledWithBlurFilter) {
DlRect cull_rect = DlRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f); DlRect cull_rect = DlRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f);
DlRect draw_rect = DlRect::MakeLTRB(25.0f, 25.0f, 99.0f, 75.0f); DlRect draw_rect = DlRect::MakeLTRB(25.0f, 25.0f, 99.0f, 75.0f);
auto filter = DlBlurImageFilter::Make(10.0f, 10.0f, DlTileMode::kDecal); auto filter = DlImageFilter::MakeBlur(10.0f, 10.0f, DlTileMode::kDecal);
DlPaint layer_paint = DlPaint().setImageFilter(filter); DlPaint layer_paint = DlPaint().setImageFilter(filter);
// We want a draw rect that is outside the layer bounds even though its // We want a draw rect that is outside the layer bounds even though its
@ -690,7 +690,7 @@ TEST_F(DisplayListTest, OOBSaveLayerContentCulledWithBlurFilter) {
TEST_F(DisplayListTest, OOBSaveLayerContentCulledWithMatrixFilter) { TEST_F(DisplayListTest, OOBSaveLayerContentCulledWithMatrixFilter) {
DlRect cull_rect = DlRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f); DlRect cull_rect = DlRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f);
DlRect draw_rect = DlRect::MakeLTRB(25.0f, 125.0f, 75.0f, 175.0f); DlRect draw_rect = DlRect::MakeLTRB(25.0f, 125.0f, 75.0f, 175.0f);
auto filter = DlMatrixImageFilter::Make( auto filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({100.0f, 0.0f}), DlImageSampling::kLinear); DlMatrix::MakeTranslation({100.0f, 0.0f}), DlImageSampling::kLinear);
DlPaint layer_paint = DlPaint().setImageFilter(filter); DlPaint layer_paint = DlPaint().setImageFilter(filter);
@ -3762,7 +3762,7 @@ TEST_F(DisplayListTest, SaveLayerBoundsComputationOfMaskBlurredRect) {
TEST_F(DisplayListTest, SaveLayerBoundsComputationOfImageBlurredRect) { TEST_F(DisplayListTest, SaveLayerBoundsComputationOfImageBlurredRect) {
SkRect rect = SkRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f); SkRect rect = SkRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f);
DlPaint draw_paint; DlPaint draw_paint;
auto image_filter = DlBlurImageFilter::Make(2.0f, 3.0f, DlTileMode::kDecal); auto image_filter = DlImageFilter::MakeBlur(2.0f, 3.0f, DlTileMode::kDecal);
draw_paint.setImageFilter(image_filter); draw_paint.setImageFilter(image_filter);
DisplayListBuilder builder; DisplayListBuilder builder;
@ -4018,7 +4018,7 @@ TEST_F(DisplayListTest, SaveLayerBoundsComputationOfFloodingImageFilter) {
auto color_filter = auto color_filter =
DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kSrc); DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kSrc);
ASSERT_TRUE(color_filter->modifies_transparent_black()); ASSERT_TRUE(color_filter->modifies_transparent_black());
auto image_filter = DlColorFilterImageFilter::Make(color_filter); auto image_filter = DlImageFilter::MakeColorFilter(color_filter);
draw_paint.setImageFilter(image_filter); draw_paint.setImageFilter(image_filter);
SkRect clip_rect = rect.makeOutset(100.0f, 100.0f); SkRect clip_rect = rect.makeOutset(100.0f, 100.0f);
ASSERT_NE(clip_rect, rect); ASSERT_NE(clip_rect, rect);
@ -4234,7 +4234,7 @@ TEST_F(DisplayListTest, FloodingFilteredLayerPushesRestoreOpIndex) {
}; };
// clang-format on // clang-format on
auto color_filter = DlMatrixColorFilter::Make(matrix); auto color_filter = DlMatrixColorFilter::Make(matrix);
save_paint.setImageFilter(DlColorFilterImageFilter::Make(color_filter)); save_paint.setImageFilter(DlImageFilter::MakeColorFilter(color_filter));
builder.SaveLayer(nullptr, &save_paint); builder.SaveLayer(nullptr, &save_paint);
int save_layer_id = DisplayListBuilderTestingLastOpIndex(builder); int save_layer_id = DisplayListBuilderTestingLastOpIndex(builder);
@ -4259,7 +4259,7 @@ TEST_F(DisplayListTest, TransformingFilterSaveLayerSimpleContentBounds) {
DlPaint save_paint; DlPaint save_paint;
auto image_filter = auto image_filter =
DlMatrixImageFilter::Make(DlMatrix::MakeTranslation({100.0f, 100.0f}), DlImageFilter::MakeMatrix(DlMatrix::MakeTranslation({100.0f, 100.0f}),
DlImageSampling::kNearestNeighbor); DlImageSampling::kNearestNeighbor);
save_paint.setImageFilter(image_filter); save_paint.setImageFilter(image_filter);
builder.SaveLayer(nullptr, &save_paint); builder.SaveLayer(nullptr, &save_paint);
@ -4278,7 +4278,7 @@ TEST_F(DisplayListTest, TransformingFilterSaveLayerFloodedContentBounds) {
DlPaint save_paint; DlPaint save_paint;
auto image_filter = auto image_filter =
DlMatrixImageFilter::Make(DlMatrix::MakeTranslation({100.0f, 100.0f}), DlImageFilter::MakeMatrix(DlMatrix::MakeTranslation({100.0f, 100.0f}),
DlImageSampling::kNearestNeighbor); DlImageSampling::kNearestNeighbor);
save_paint.setImageFilter(image_filter); save_paint.setImageFilter(image_filter);
builder.SaveLayer(nullptr, &save_paint); builder.SaveLayer(nullptr, &save_paint);
@ -5080,7 +5080,7 @@ TEST_F(DisplayListTest, RecordLargeVertices) {
auto vertices = DlVertices::Make(DlVertexMode::kTriangleStrip, vertex_count, auto vertices = DlVertices::Make(DlVertexMode::kTriangleStrip, vertex_count,
points.data(), points.data(), colors.data()); points.data(), points.data(), colors.data());
ASSERT_GT(vertices->size(), 1u << 24); ASSERT_GT(vertices->size(), 1u << 24);
auto backdrop = DlBlurImageFilter::Make(5.0f, 5.0f, DlTileMode::kDecal); auto backdrop = DlImageFilter::MakeBlur(5.0f, 5.0f, DlTileMode::kDecal);
for (int i = 0; i < 1000; i++) { for (int i = 0; i < 1000; i++) {
DisplayListBuilder builder; DisplayListBuilder builder;
@ -5820,7 +5820,7 @@ TEST_F(DisplayListTest, UnboundedRenderOpsAreReportedUnlessClipped) {
auto unbounded_cf = DlMatrixColorFilter::Make(matrix); auto unbounded_cf = DlMatrixColorFilter::Make(matrix);
// ColorFilter must modify transparent black to be "unbounded" // ColorFilter must modify transparent black to be "unbounded"
ASSERT_TRUE(unbounded_cf->modifies_transparent_black()); ASSERT_TRUE(unbounded_cf->modifies_transparent_black());
auto unbounded_if = DlColorFilterImageFilter::Make(unbounded_cf); auto unbounded_if = DlImageFilter::MakeColorFilter(unbounded_cf);
DlRect output_bounds; DlRect output_bounds;
// ImageFilter returns null from bounds queries if it is "unbounded" // ImageFilter returns null from bounds queries if it is "unbounded"
ASSERT_EQ(unbounded_if->map_local_bounds(draw_rect, output_bounds), ASSERT_EQ(unbounded_if->map_local_bounds(draw_rect, output_bounds),
@ -5832,7 +5832,7 @@ TEST_F(DisplayListTest, UnboundedRenderOpsAreReportedUnlessClipped) {
test_unbounded( test_unbounded(
"SaveLayerWithBackdropFilter", "SaveLayerWithBackdropFilter",
[](DlCanvas& builder) { [](DlCanvas& builder) {
auto filter = DlBlurImageFilter::Make(3.0f, 3.0f, DlTileMode::kMirror); auto filter = DlImageFilter::MakeBlur(3.0f, 3.0f, DlTileMode::kMirror);
builder.SaveLayer(nullptr, nullptr, filter.get()); builder.SaveLayer(nullptr, nullptr, filter.get());
builder.Restore(); builder.Restore();
}, },
@ -5847,7 +5847,7 @@ TEST_F(DisplayListTest, BackdropFilterCulledAlongsideClipAndTransform) {
SkRect draw_rect1 = SkRect::MakeLTRB(10.0f, 10.0f, 20.0f, 20.0f); SkRect draw_rect1 = SkRect::MakeLTRB(10.0f, 10.0f, 20.0f, 20.0f);
SkRect draw_rect2 = SkRect::MakeLTRB(45.0f, 20.0f, 55.0f, 55.0f); SkRect draw_rect2 = SkRect::MakeLTRB(45.0f, 20.0f, 55.0f, 55.0f);
SkRect cull_rect = SkRect::MakeLTRB(1.0f, 1.0f, 99.0f, 30.0f); SkRect cull_rect = SkRect::MakeLTRB(1.0f, 1.0f, 99.0f, 30.0f);
auto bdf_filter = DlBlurImageFilter::Make(5.0f, 5.0f, DlTileMode::kClamp); auto bdf_filter = DlImageFilter::MakeBlur(5.0f, 5.0f, DlTileMode::kClamp);
ASSERT_TRUE(frame_bounds.contains(clip_rect)); ASSERT_TRUE(frame_bounds.contains(clip_rect));
ASSERT_TRUE(frame_bounds.contains(draw_rect1)); ASSERT_TRUE(frame_bounds.contains(draw_rect1));

View File

@ -5,6 +5,7 @@
#ifndef FLUTTER_DISPLAY_LIST_DL_CANVAS_H_ #ifndef FLUTTER_DISPLAY_LIST_DL_CANVAS_H_
#define FLUTTER_DISPLAY_LIST_DL_CANVAS_H_ #define FLUTTER_DISPLAY_LIST_DL_CANVAS_H_
#include "flutter/display_list/display_list.h"
#include "flutter/display_list/dl_blend_mode.h" #include "flutter/display_list/dl_blend_mode.h"
#include "flutter/display_list/dl_paint.h" #include "flutter/display_list/dl_paint.h"
#include "flutter/display_list/dl_vertices.h" #include "flutter/display_list/dl_vertices.h"

View File

@ -9,7 +9,7 @@
#include "flutter/display_list/dl_blend_mode.h" #include "flutter/display_list/dl_blend_mode.h"
#include "flutter/display_list/dl_op_receiver.h" #include "flutter/display_list/dl_op_receiver.h"
#include "flutter/display_list/dl_sampling_options.h" #include "flutter/display_list/dl_sampling_options.h"
#include "flutter/display_list/effects/dl_color_source.h" #include "flutter/display_list/effects/dl_color_sources.h"
#include "flutter/display_list/utils/dl_comparable.h" #include "flutter/display_list/utils/dl_comparable.h"
#include "flutter/fml/macros.h" #include "flutter/fml/macros.h"
@ -169,7 +169,7 @@ struct SetBlendModeOp final : DLOp {
// instance copied to the memory following the record // instance copied to the memory following the record
// yields a size and efficiency that has somewhere between // yields a size and efficiency that has somewhere between
// 4 and 8 bytes unused // 4 and 8 bytes unused
#define DEFINE_SET_CLEAR_DLATTR_OP(name, sk_name, field) \ #define DEFINE_SET_CLEAR_DLATTR_OP(name, field) \
struct Clear##name##Op final : DLOp { \ struct Clear##name##Op final : DLOp { \
static constexpr auto kType = DisplayListOpType::kClear##name; \ static constexpr auto kType = DisplayListOpType::kClear##name; \
\ \
@ -189,14 +189,14 @@ struct SetBlendModeOp final : DLOp {
receiver.set##name(filter); \ receiver.set##name(filter); \
} \ } \
}; };
DEFINE_SET_CLEAR_DLATTR_OP(ColorFilter, ColorFilter, filter) DEFINE_SET_CLEAR_DLATTR_OP(ColorFilter, filter)
DEFINE_SET_CLEAR_DLATTR_OP(ImageFilter, ImageFilter, filter) DEFINE_SET_CLEAR_DLATTR_OP(ImageFilter, filter)
DEFINE_SET_CLEAR_DLATTR_OP(MaskFilter, MaskFilter, filter) DEFINE_SET_CLEAR_DLATTR_OP(MaskFilter, filter)
DEFINE_SET_CLEAR_DLATTR_OP(ColorSource, Shader, source) DEFINE_SET_CLEAR_DLATTR_OP(ColorSource, source)
#undef DEFINE_SET_CLEAR_DLATTR_OP #undef DEFINE_SET_CLEAR_DLATTR_OP
// 4 byte header + 80 bytes for the embedded DlImageColorSource // 4 byte header + 96 bytes for the embedded DlImageColorSource
// uses 84 total bytes (4 bytes unused) // uses 104 total bytes (4 bytes unused)
struct SetImageColorSourceOp : DLOp { struct SetImageColorSourceOp : DLOp {
static constexpr auto kType = DisplayListOpType::kSetImageColorSource; static constexpr auto kType = DisplayListOpType::kSetImageColorSource;

View File

@ -4,7 +4,6 @@
#include "flutter/display_list/dl_paint.h" #include "flutter/display_list/dl_paint.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h"
#include "flutter/display_list/utils/dl_comparable.h" #include "flutter/display_list/utils/dl_comparable.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
@ -56,14 +55,14 @@ TEST(DisplayListPaint, ConstructorDefaults) {
EXPECT_NE(paint, DlPaint().setStrokeWidth(6)); EXPECT_NE(paint, DlPaint().setStrokeWidth(6));
EXPECT_NE(paint, DlPaint().setStrokeMiter(7)); EXPECT_NE(paint, DlPaint().setStrokeMiter(7));
DlColorColorSource color_source(DlColor::kMagenta()); auto color_source = DlColorSource::MakeColor(DlColor::kMagenta());
EXPECT_NE(paint, DlPaint().setColorSource(color_source.shared())); EXPECT_NE(paint, DlPaint().setColorSource(color_source));
DlBlendColorFilter color_filter(DlColor::kYellow(), DlBlendMode::kDstIn); DlBlendColorFilter color_filter(DlColor::kYellow(), DlBlendMode::kDstIn);
EXPECT_NE(paint, DlPaint().setColorFilter(color_filter.shared())); EXPECT_NE(paint, DlPaint().setColorFilter(color_filter.shared()));
DlBlurImageFilter image_filter(1.3, 4.7, DlTileMode::kClamp); auto image_filter = DlImageFilter::MakeBlur(1.3, 4.7, DlTileMode::kClamp);
EXPECT_NE(paint, DlPaint().setImageFilter(image_filter.shared())); EXPECT_NE(paint, DlPaint().setImageFilter(image_filter));
DlBlurMaskFilter mask_filter(DlBlurStyle::kInner, 3.14); DlBlurMaskFilter mask_filter(DlBlurStyle::kInner, 3.14);
EXPECT_NE(paint, DlPaint().setMaskFilter(mask_filter.shared())); EXPECT_NE(paint, DlPaint().setMaskFilter(mask_filter.shared()));
@ -95,23 +94,22 @@ TEST(DisplayListPaint, NullSharedPointerSetGet) {
TEST(DisplayListPaint, ChainingConstructor) { TEST(DisplayListPaint, ChainingConstructor) {
DlPaint paint = DlPaint paint =
DlPaint() // DlPaint() //
.setAntiAlias(true) // .setAntiAlias(true) //
.setInvertColors(true) // .setInvertColors(true) //
.setColor(DlColor::kGreen()) // .setColor(DlColor::kGreen()) //
.setAlpha(0x7F) // .setAlpha(0x7F) //
.setBlendMode(DlBlendMode::kLuminosity) // .setBlendMode(DlBlendMode::kLuminosity) //
.setDrawStyle(DlDrawStyle::kStrokeAndFill) // .setDrawStyle(DlDrawStyle::kStrokeAndFill) //
.setStrokeCap(DlStrokeCap::kSquare) // .setStrokeCap(DlStrokeCap::kSquare) //
.setStrokeJoin(DlStrokeJoin::kBevel) // .setStrokeJoin(DlStrokeJoin::kBevel) //
.setStrokeWidth(42) // .setStrokeWidth(42) //
.setStrokeMiter(1.5) // .setStrokeMiter(1.5) //
.setColorSource(DlColorColorSource(DlColor::kMagenta()).shared()) // .setColorSource(DlColorSource::MakeColor(DlColor::kMagenta())) //
.setColorFilter( .setColorFilter(
DlBlendColorFilter(DlColor::kYellow(), DlBlendMode::kDstIn) DlBlendColorFilter(DlColor::kYellow(), DlBlendMode::kDstIn)
.shared()) .shared())
.setImageFilter( .setImageFilter(DlImageFilter::MakeBlur(1.3, 4.7, DlTileMode::kClamp))
DlBlurImageFilter(1.3, 4.7, DlTileMode::kClamp).shared())
.setMaskFilter(DlBlurMaskFilter(DlBlurStyle::kInner, 3.14).shared()); .setMaskFilter(DlBlurMaskFilter(DlBlurStyle::kInner, 3.14).shared());
EXPECT_TRUE(paint.isAntiAlias()); EXPECT_TRUE(paint.isAntiAlias());
EXPECT_TRUE(paint.isInvertColors()); EXPECT_TRUE(paint.isInvertColors());
@ -123,11 +121,12 @@ TEST(DisplayListPaint, ChainingConstructor) {
EXPECT_EQ(paint.getStrokeJoin(), DlStrokeJoin::kBevel); EXPECT_EQ(paint.getStrokeJoin(), DlStrokeJoin::kBevel);
EXPECT_EQ(paint.getStrokeWidth(), 42); EXPECT_EQ(paint.getStrokeWidth(), 42);
EXPECT_EQ(paint.getStrokeMiter(), 1.5); EXPECT_EQ(paint.getStrokeMiter(), 1.5);
EXPECT_EQ(*paint.getColorSource(), DlColorColorSource(DlColor::kMagenta())); EXPECT_TRUE(Equals(paint.getColorSource(),
DlColorSource::MakeColor(DlColor::kMagenta())));
EXPECT_EQ(*paint.getColorFilter(), EXPECT_EQ(*paint.getColorFilter(),
DlBlendColorFilter(DlColor::kYellow(), DlBlendMode::kDstIn)); DlBlendColorFilter(DlColor::kYellow(), DlBlendMode::kDstIn));
EXPECT_EQ(*paint.getImageFilter(), EXPECT_TRUE(Equals(paint.getImageFilter(),
DlBlurImageFilter(1.3, 4.7, DlTileMode::kClamp)); DlImageFilter::MakeBlur(1.3, 4.7, DlTileMode::kClamp)));
EXPECT_EQ(*paint.getMaskFilter(), EXPECT_EQ(*paint.getMaskFilter(),
DlBlurMaskFilter(DlBlurStyle::kInner, 3.14)); DlBlurMaskFilter(DlBlurStyle::kInner, 3.14));

View File

@ -0,0 +1,15 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/effects/color_sources/dl_color_color_source.h"
namespace flutter {
bool DlColorColorSource::equals_(DlColorSource const& other) const {
FML_DCHECK(other.type() == DlColorSourceType::kColor);
auto that = static_cast<DlColorColorSource const*>(&other);
return color_ == that->color_;
}
} // namespace flutter

View File

@ -0,0 +1,42 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_
#include "flutter/display_list/effects/dl_color_source.h"
namespace flutter {
class DlColorColorSource final : public DlColorSource {
public:
explicit DlColorColorSource(DlColor color) : color_(color) {}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override {
return std::make_shared<DlColorColorSource>(color_);
}
const DlColorColorSource* asColor() const override { return this; }
DlColorSourceType type() const override { return DlColorSourceType::kColor; }
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return color_.getAlpha() == 255; }
DlColor color() const { return color_; }
protected:
bool equals_(DlColorSource const& other) const override;
private:
DlColor color_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlColorColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_

View File

@ -0,0 +1,54 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.h"
namespace flutter {
DlConicalGradientColorSource::DlConicalGradientColorSource(
DlPoint start_center,
DlScalar start_radius,
DlPoint end_center,
DlScalar end_radius,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix)
: DlGradientColorSourceBase(stop_count, tile_mode, matrix),
start_center_(start_center),
start_radius_(start_radius),
end_center_(end_center),
end_radius_(end_radius) {
store_color_stops(this + 1, colors, stops);
}
DlConicalGradientColorSource::DlConicalGradientColorSource(
const DlConicalGradientColorSource* source)
: DlGradientColorSourceBase(source->stop_count(),
source->tile_mode(),
source->matrix_ptr()),
start_center_(source->start_center()),
start_radius_(source->start_radius()),
end_center_(source->end_center()),
end_radius_(source->end_radius()) {
store_color_stops(this + 1, source->colors(), source->stops());
}
std::shared_ptr<DlColorSource> DlConicalGradientColorSource::shared() const {
return MakeConical(start_center_, start_radius_, end_center_, end_radius_,
stop_count(), colors(), stops(), tile_mode(),
matrix_ptr());
}
bool DlConicalGradientColorSource::equals_(DlColorSource const& other) const {
FML_DCHECK(other.type() == DlColorSourceType::kConicalGradient);
auto that = static_cast<DlConicalGradientColorSource const*>(&other);
return (start_center_ == that->start_center_ &&
start_radius_ == that->start_radius_ &&
end_center_ == that->end_center_ &&
end_radius_ == that->end_radius_ && base_equals_(that));
}
} // namespace flutter

View File

@ -0,0 +1,64 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_CONICAL_GRADIENT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_CONICAL_GRADIENT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h"
namespace flutter {
class DlConicalGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlConicalGradientColorSource* asConicalGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override;
DlColorSourceType type() const override {
return DlColorSourceType::kConicalGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
DlPoint start_center() const { return start_center_; }
DlScalar start_radius() const { return start_radius_; }
DlPoint end_center() const { return end_center_; }
DlScalar end_radius() const { return end_radius_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override;
private:
DlConicalGradientColorSource(DlPoint start_center,
DlScalar start_radius,
DlPoint end_center,
DlScalar end_radius,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
explicit DlConicalGradientColorSource(
const DlConicalGradientColorSource* source);
DlPoint start_center_;
DlScalar start_radius_;
DlPoint end_center_;
DlScalar end_radius_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlConicalGradientColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_CONICAL_GRADIENT_COLOR_SOURCE_H_

View File

@ -0,0 +1,54 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_GRADIENT_COLOR_SOURCE_BASE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_GRADIENT_COLOR_SOURCE_BASE_H_
#include "flutter/display_list/effects/color_sources/dl_matrix_color_source_base.h"
namespace flutter {
// Utility base class common to all gradient DlColorSource implementations
class DlGradientColorSourceBase : public DlMatrixColorSourceBase {
public:
bool is_opaque() const override;
bool isGradient() const override { return true; }
DlTileMode tile_mode() const { return mode_; }
int stop_count() const { return stop_count_; }
const DlColor* colors() const {
return reinterpret_cast<const DlColor*>(pod());
}
const float* stops() const {
return reinterpret_cast<const float*>(colors() + stop_count());
}
protected:
DlGradientColorSourceBase(uint32_t stop_count,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
size_t vector_sizes() const {
return stop_count_ * (sizeof(DlColor) + sizeof(float));
}
virtual const void* pod() const = 0;
bool base_equals_(DlGradientColorSourceBase const* other_base) const;
void store_color_stops(void* pod,
const DlColor* color_data,
const float* stop_data);
private:
DlTileMode mode_;
uint32_t stop_count_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlGradientColorSourceBase);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_GRADIENT_COLOR_SOURCE_BASE_H_

View File

@ -0,0 +1,36 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/effects/color_sources/dl_image_color_source.h"
namespace flutter {
DlImageColorSource::DlImageColorSource(sk_sp<const DlImage> image,
DlTileMode horizontal_tile_mode,
DlTileMode vertical_tile_mode,
DlImageSampling sampling,
const DlMatrix* matrix)
: DlMatrixColorSourceBase(matrix),
image_(std::move(image)),
horizontal_tile_mode_(horizontal_tile_mode),
vertical_tile_mode_(vertical_tile_mode),
sampling_(sampling) {}
std::shared_ptr<DlColorSource> DlImageColorSource::WithSampling(
DlImageSampling sampling) const {
return std::make_shared<DlImageColorSource>(image_, horizontal_tile_mode_,
vertical_tile_mode_, sampling,
matrix_ptr());
}
bool DlImageColorSource::equals_(DlColorSource const& other) const {
FML_DCHECK(other.type() == DlColorSourceType::kImage);
auto that = static_cast<DlImageColorSource const*>(&other);
return (image_->Equals(that->image_) && matrix() == that->matrix() &&
horizontal_tile_mode_ == that->horizontal_tile_mode_ &&
vertical_tile_mode_ == that->vertical_tile_mode_ &&
sampling_ == that->sampling_);
}
} // namespace flutter

View File

@ -0,0 +1,56 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_IMAGE_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_IMAGE_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_matrix_color_source_base.h"
namespace flutter {
class DlImageColorSource final : public DlMatrixColorSourceBase {
public:
DlImageColorSource(sk_sp<const DlImage> image,
DlTileMode horizontal_tile_mode,
DlTileMode vertical_tile_mode,
DlImageSampling sampling = DlImageSampling::kLinear,
const DlMatrix* matrix = nullptr);
bool isUIThreadSafe() const override {
return image_ ? image_->isUIThreadSafe() : true;
}
const DlImageColorSource* asImage() const override { return this; }
std::shared_ptr<DlColorSource> shared() const override {
return WithSampling(sampling_);
}
std::shared_ptr<DlColorSource> WithSampling(DlImageSampling sampling) const;
DlColorSourceType type() const override { return DlColorSourceType::kImage; }
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return image_->isOpaque(); }
sk_sp<const DlImage> image() const { return image_; }
DlTileMode horizontal_tile_mode() const { return horizontal_tile_mode_; }
DlTileMode vertical_tile_mode() const { return vertical_tile_mode_; }
DlImageSampling sampling() const { return sampling_; }
protected:
bool equals_(DlColorSource const& other) const override;
private:
sk_sp<const DlImage> image_;
DlTileMode horizontal_tile_mode_;
DlTileMode vertical_tile_mode_;
DlImageSampling sampling_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlImageColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_IMAGE_COLOR_SOURCE_H_

View File

@ -0,0 +1,45 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/effects/color_sources/dl_linear_gradient_color_source.h"
namespace flutter {
DlLinearGradientColorSource::DlLinearGradientColorSource(
const DlPoint start_point,
const DlPoint end_point,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix)
: DlGradientColorSourceBase(stop_count, tile_mode, matrix),
start_point_(start_point),
end_point_(end_point) {
store_color_stops(this + 1, colors, stops);
}
DlLinearGradientColorSource::DlLinearGradientColorSource(
const DlLinearGradientColorSource* source)
: DlGradientColorSourceBase(source->stop_count(),
source->tile_mode(),
source->matrix_ptr()),
start_point_(source->start_point()),
end_point_(source->end_point()) {
store_color_stops(this + 1, source->colors(), source->stops());
}
std::shared_ptr<DlColorSource> DlLinearGradientColorSource::shared() const {
return MakeLinear(start_point_, end_point_, stop_count(), colors(), stops(),
tile_mode(), matrix_ptr());
}
bool DlLinearGradientColorSource::equals_(DlColorSource const& other) const {
FML_DCHECK(other.type() == DlColorSourceType::kLinearGradient);
auto that = static_cast<DlLinearGradientColorSource const*>(&other);
return (start_point_ == that->start_point_ &&
end_point_ == that->end_point_ && base_equals_(that));
}
} // namespace flutter

View File

@ -0,0 +1,58 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_LINEAR_GRADIENT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_LINEAR_GRADIENT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h"
namespace flutter {
class DlLinearGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlLinearGradientColorSource* asLinearGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
DlColorSourceType type() const override {
return DlColorSourceType::kLinearGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
std::shared_ptr<DlColorSource> shared() const override;
const DlPoint& start_point() const { return start_point_; }
const DlPoint& end_point() const { return end_point_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override;
private:
DlLinearGradientColorSource(const DlPoint start_point,
const DlPoint end_point,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
explicit DlLinearGradientColorSource(
const DlLinearGradientColorSource* source);
DlPoint start_point_;
DlPoint end_point_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlLinearGradientColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_LINEAR_GRADIENT_COLOR_SOURCE_H_

View File

@ -0,0 +1,31 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_MATRIX_COLOR_SOURCE_BASE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_MATRIX_COLOR_SOURCE_BASE_H_
#include "flutter/display_list/effects/dl_color_source.h"
namespace flutter {
// Utility base class common to all DlColorSource implementations that
// hold an optional DlMatrix
class DlMatrixColorSourceBase : public DlColorSource {
public:
const DlMatrix& matrix() const { return matrix_; }
const DlMatrix* matrix_ptr() const {
return matrix_.IsIdentity() ? nullptr : &matrix_;
}
protected:
explicit DlMatrixColorSourceBase(const DlMatrix* matrix)
: matrix_(matrix ? *matrix : DlMatrix()) {}
private:
const DlMatrix matrix_;
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_MATRIX_COLOR_SOURCE_BASE_H_

View File

@ -0,0 +1,44 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/effects/color_sources/dl_radial_gradient_color_source.h"
namespace flutter {
DlRadialGradientColorSource::DlRadialGradientColorSource(DlPoint center,
DlScalar radius,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix)
: DlGradientColorSourceBase(stop_count, tile_mode, matrix),
center_(center),
radius_(radius) {
store_color_stops(this + 1, colors, stops);
}
DlRadialGradientColorSource::DlRadialGradientColorSource(
const DlRadialGradientColorSource* source)
: DlGradientColorSourceBase(source->stop_count(),
source->tile_mode(),
source->matrix_ptr()),
center_(source->center()),
radius_(source->radius()) {
store_color_stops(this + 1, source->colors(), source->stops());
}
std::shared_ptr<DlColorSource> DlRadialGradientColorSource::shared() const {
return MakeRadial(center_, radius_, stop_count(), colors(), stops(),
tile_mode(), matrix_ptr());
}
bool DlRadialGradientColorSource::equals_(DlColorSource const& other) const {
FML_DCHECK(other.type() == DlColorSourceType::kRadialGradient);
auto that = static_cast<DlRadialGradientColorSource const*>(&other);
return (center_ == that->center_ && radius_ == that->radius_ &&
base_equals_(that));
}
} // namespace flutter

View File

@ -0,0 +1,58 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RADIAL_GRADIENT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RADIAL_GRADIENT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h"
namespace flutter {
class DlRadialGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlRadialGradientColorSource* asRadialGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override;
DlColorSourceType type() const override {
return DlColorSourceType::kRadialGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
DlPoint center() const { return center_; }
DlScalar radius() const { return radius_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override;
private:
DlRadialGradientColorSource(DlPoint center,
DlScalar radius,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
explicit DlRadialGradientColorSource(
const DlRadialGradientColorSource* source);
DlPoint center_;
DlScalar radius_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlRadialGradientColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RADIAL_GRADIENT_COLOR_SOURCE_H_

View File

@ -0,0 +1,52 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/effects/color_sources/dl_runtime_effect_color_source.h"
namespace flutter {
DlRuntimeEffectColorSource::DlRuntimeEffectColorSource(
sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data)
: runtime_effect_(std::move(runtime_effect)),
samplers_(std::move(samplers)),
uniform_data_(std::move(uniform_data)) {}
std::shared_ptr<DlColorSource> DlRuntimeEffectColorSource::shared() const {
return std::make_shared<DlRuntimeEffectColorSource>(runtime_effect_, //
samplers_, //
uniform_data_);
}
bool DlRuntimeEffectColorSource::isUIThreadSafe() const {
for (const auto& sampler : samplers_) {
if (!sampler->isUIThreadSafe()) {
return false;
}
}
return true;
}
bool DlRuntimeEffectColorSource::equals_(DlColorSource const& other) const {
FML_DCHECK(other.type() == DlColorSourceType::kRuntimeEffect);
auto that = static_cast<DlRuntimeEffectColorSource const*>(&other);
if (runtime_effect_ != that->runtime_effect_) {
return false;
}
if (uniform_data_ != that->uniform_data_) {
return false;
}
if (samplers_.size() != that->samplers_.size()) {
return false;
}
for (size_t i = 0; i < samplers_.size(); i++) {
if (samplers_[i] != that->samplers_[i]) {
return false;
}
}
return true;
}
} // namespace flutter

View File

@ -0,0 +1,57 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RUNTIME_EFFECT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RUNTIME_EFFECT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/dl_color_source.h"
namespace flutter {
class DlRuntimeEffectColorSource final : public DlColorSource {
public:
DlRuntimeEffectColorSource(
sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data);
bool isUIThreadSafe() const override;
const DlRuntimeEffectColorSource* asRuntimeEffect() const override {
return this;
}
std::shared_ptr<DlColorSource> shared() const override;
DlColorSourceType type() const override {
return DlColorSourceType::kRuntimeEffect;
}
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return false; }
const sk_sp<DlRuntimeEffect> runtime_effect() const {
return runtime_effect_;
}
const std::vector<std::shared_ptr<DlColorSource>> samplers() const {
return samplers_;
}
const std::shared_ptr<std::vector<uint8_t>> uniform_data() const {
return uniform_data_;
}
protected:
bool equals_(DlColorSource const& other) const override;
private:
sk_sp<DlRuntimeEffect> runtime_effect_;
std::vector<std::shared_ptr<DlColorSource>> samplers_;
std::shared_ptr<std::vector<uint8_t>> uniform_data_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlRuntimeEffectColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RUNTIME_EFFECT_COLOR_SOURCE_H_

View File

@ -0,0 +1,47 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/display_list/effects/color_sources/dl_sweep_gradient_color_source.h"
namespace flutter {
DlSweepGradientColorSource::DlSweepGradientColorSource(DlPoint center,
DlScalar start,
DlScalar end,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix)
: DlGradientColorSourceBase(stop_count, tile_mode, matrix),
center_(center),
start_(start),
end_(end) {
store_color_stops(this + 1, colors, stops);
}
DlSweepGradientColorSource::DlSweepGradientColorSource(
const DlSweepGradientColorSource* source)
: DlGradientColorSourceBase(source->stop_count(),
source->tile_mode(),
source->matrix_ptr()),
center_(source->center()),
start_(source->start()),
end_(source->end()) {
store_color_stops(this + 1, source->colors(), source->stops());
}
std::shared_ptr<DlColorSource> DlSweepGradientColorSource::shared() const {
return MakeSweep(center_, start_, end_, stop_count(), colors(), stops(),
tile_mode(), matrix_ptr());
}
bool DlSweepGradientColorSource::equals_(DlColorSource const& other) const {
FML_DCHECK(other.type() == DlColorSourceType::kSweepGradient);
auto that = static_cast<DlSweepGradientColorSource const*>(&other);
return (center_ == that->center_ && start_ == that->start_ &&
end_ == that->end_ && base_equals_(that));
}
} // namespace flutter

View File

@ -0,0 +1,60 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_SWEEP_GRADIENT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_SWEEP_GRADIENT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h"
namespace flutter {
class DlSweepGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlSweepGradientColorSource* asSweepGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override;
DlColorSourceType type() const override {
return DlColorSourceType::kSweepGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
DlPoint center() const { return center_; }
DlScalar start() const { return start_; }
DlScalar end() const { return end_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override;
private:
DlSweepGradientColorSource(DlPoint center,
DlScalar start,
DlScalar end,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
explicit DlSweepGradientColorSource(const DlSweepGradientColorSource* source);
DlPoint center_;
DlScalar start_;
DlScalar end_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlSweepGradientColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_SWEEP_GRADIENT_COLOR_SOURCE_H_

View File

@ -5,6 +5,7 @@
#include "flutter/display_list/effects/dl_color_source.h" #include "flutter/display_list/effects/dl_color_source.h"
#include "flutter/display_list/dl_sampling_options.h" #include "flutter/display_list/dl_sampling_options.h"
#include "flutter/display_list/effects/dl_color_sources.h"
#include "flutter/display_list/effects/dl_runtime_effect.h" #include "flutter/display_list/effects/dl_runtime_effect.h"
#include "flutter/fml/logging.h" #include "flutter/fml/logging.h"
@ -19,14 +20,28 @@ static void DlGradientDeleter(void* p) {
::operator delete(p); ::operator delete(p);
} }
std::shared_ptr<DlLinearGradientColorSource> DlColorSource::MakeLinear( std::shared_ptr<DlColorSource> DlColorSource::MakeColor(DlColor color) {
const SkPoint start_point, return std::make_shared<DlColorColorSource>(color);
const SkPoint end_point, }
std::shared_ptr<DlColorSource> DlColorSource::MakeImage(
const sk_sp<const DlImage>& image,
DlTileMode horizontal_tile_mode,
DlTileMode vertical_tile_mode,
DlImageSampling sampling,
const DlMatrix* matrix) {
return std::make_shared<DlImageColorSource>(
image, horizontal_tile_mode, vertical_tile_mode, sampling, matrix);
}
std::shared_ptr<DlColorSource> DlColorSource::MakeLinear(
const DlPoint start_point,
const DlPoint end_point,
uint32_t stop_count, uint32_t stop_count,
const DlColor* colors, const DlColor* colors,
const float* stops, const float* stops,
DlTileMode tile_mode, DlTileMode tile_mode,
const SkMatrix* matrix) { const DlMatrix* matrix) {
size_t needed = sizeof(DlLinearGradientColorSource) + size_t needed = sizeof(DlLinearGradientColorSource) +
(stop_count * (sizeof(DlColor) + sizeof(float))); (stop_count * (sizeof(DlColor) + sizeof(float)));
@ -40,14 +55,14 @@ std::shared_ptr<DlLinearGradientColorSource> DlColorSource::MakeLinear(
return ret; return ret;
} }
std::shared_ptr<DlRadialGradientColorSource> DlColorSource::MakeRadial( std::shared_ptr<DlColorSource> DlColorSource::MakeRadial(
SkPoint center, DlPoint center,
SkScalar radius, DlScalar radius,
uint32_t stop_count, uint32_t stop_count,
const DlColor* colors, const DlColor* colors,
const float* stops, const float* stops,
DlTileMode tile_mode, DlTileMode tile_mode,
const SkMatrix* matrix) { const DlMatrix* matrix) {
size_t needed = sizeof(DlRadialGradientColorSource) + size_t needed = sizeof(DlRadialGradientColorSource) +
(stop_count * (sizeof(DlColor) + sizeof(float))); (stop_count * (sizeof(DlColor) + sizeof(float)));
@ -60,16 +75,16 @@ std::shared_ptr<DlRadialGradientColorSource> DlColorSource::MakeRadial(
return ret; return ret;
} }
std::shared_ptr<DlConicalGradientColorSource> DlColorSource::MakeConical( std::shared_ptr<DlColorSource> DlColorSource::MakeConical(
SkPoint start_center, DlPoint start_center,
SkScalar start_radius, DlScalar start_radius,
SkPoint end_center, DlPoint end_center,
SkScalar end_radius, DlScalar end_radius,
uint32_t stop_count, uint32_t stop_count,
const DlColor* colors, const DlColor* colors,
const float* stops, const float* stops,
DlTileMode tile_mode, DlTileMode tile_mode,
const SkMatrix* matrix) { const DlMatrix* matrix) {
size_t needed = sizeof(DlConicalGradientColorSource) + size_t needed = sizeof(DlConicalGradientColorSource) +
(stop_count * (sizeof(DlColor) + sizeof(float))); (stop_count * (sizeof(DlColor) + sizeof(float)));
@ -83,15 +98,15 @@ std::shared_ptr<DlConicalGradientColorSource> DlColorSource::MakeConical(
return ret; return ret;
} }
std::shared_ptr<DlSweepGradientColorSource> DlColorSource::MakeSweep( std::shared_ptr<DlColorSource> DlColorSource::MakeSweep(
SkPoint center, DlPoint center,
SkScalar start, DlScalar start,
SkScalar end, DlScalar end,
uint32_t stop_count, uint32_t stop_count,
const DlColor* colors, const DlColor* colors,
const float* stops, const float* stops,
DlTileMode tile_mode, DlTileMode tile_mode,
const SkMatrix* matrix) { const DlMatrix* matrix) {
size_t needed = sizeof(DlSweepGradientColorSource) + size_t needed = sizeof(DlSweepGradientColorSource) +
(stop_count * (sizeof(DlColor) + sizeof(float))); (stop_count * (sizeof(DlColor) + sizeof(float)));
@ -105,7 +120,7 @@ std::shared_ptr<DlSweepGradientColorSource> DlColorSource::MakeSweep(
return ret; return ret;
} }
std::shared_ptr<DlRuntimeEffectColorSource> DlColorSource::MakeRuntimeEffect( std::shared_ptr<DlColorSource> DlColorSource::MakeRuntimeEffect(
sk_sp<DlRuntimeEffect> runtime_effect, sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers, std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data) { std::shared_ptr<std::vector<uint8_t>> uniform_data) {
@ -114,4 +129,55 @@ std::shared_ptr<DlRuntimeEffectColorSource> DlColorSource::MakeRuntimeEffect(
std::move(runtime_effect), std::move(samplers), std::move(uniform_data)); std::move(runtime_effect), std::move(samplers), std::move(uniform_data));
} }
DlGradientColorSourceBase::DlGradientColorSourceBase(uint32_t stop_count,
DlTileMode tile_mode,
const DlMatrix* matrix)
: DlMatrixColorSourceBase(matrix),
mode_(tile_mode),
stop_count_(stop_count) {}
bool DlGradientColorSourceBase::is_opaque() const {
if (mode_ == DlTileMode::kDecal) {
return false;
}
const DlColor* my_colors = colors();
for (uint32_t i = 0; i < stop_count_; i++) {
if (my_colors[i].getAlpha() < 255) {
return false;
}
}
return true;
}
bool DlGradientColorSourceBase::base_equals_(
DlGradientColorSourceBase const* other_base) const {
if (mode_ != other_base->mode_ || matrix() != other_base->matrix() ||
stop_count_ != other_base->stop_count_) {
return false;
}
return (memcmp(colors(), other_base->colors(),
stop_count_ * sizeof(colors()[0])) == 0 &&
memcmp(stops(), other_base->stops(),
stop_count_ * sizeof(stops()[0])) == 0);
}
void DlGradientColorSourceBase::store_color_stops(void* pod,
const DlColor* color_data,
const float* stop_data) {
DlColor* color_storage = reinterpret_cast<DlColor*>(pod);
memcpy(color_storage, color_data, stop_count_ * sizeof(*color_data));
float* stop_storage = reinterpret_cast<float*>(color_storage + stop_count_);
if (stop_data) {
memcpy(stop_storage, stop_data, stop_count_ * sizeof(*stop_data));
} else {
float div = stop_count_ - 1;
if (div <= 0) {
div = 1;
}
for (uint32_t i = 0; i < stop_count_; i++) {
stop_storage[i] = i / div;
}
}
}
} // namespace flutter } // namespace flutter

View File

@ -5,11 +5,6 @@
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_
#include <memory>
#include <utility>
#include <vector>
#include "flutter/display_list/display_list.h"
#include "flutter/display_list/dl_attributes.h" #include "flutter/display_list/dl_attributes.h"
#include "flutter/display_list/dl_color.h" #include "flutter/display_list/dl_color.h"
#include "flutter/display_list/dl_sampling_options.h" #include "flutter/display_list/dl_sampling_options.h"
@ -18,8 +13,6 @@
#include "flutter/display_list/image/dl_image.h" #include "flutter/display_list/image/dl_image.h"
#include "flutter/fml/logging.h" #include "flutter/fml/logging.h"
#include "third_party/skia/include/core/SkShader.h"
namespace flutter { namespace flutter {
class DlColorColorSource; class DlColorColorSource;
@ -52,46 +45,55 @@ enum class DlColorSourceType {
class DlColorSource : public DlAttribute<DlColorSource, DlColorSourceType> { class DlColorSource : public DlAttribute<DlColorSource, DlColorSourceType> {
public: public:
static std::shared_ptr<DlLinearGradientColorSource> MakeLinear( static std::shared_ptr<DlColorSource> MakeColor(DlColor color);
const SkPoint start_point,
const SkPoint end_point, static std::shared_ptr<DlColorSource> MakeImage(
const sk_sp<const DlImage>& image,
DlTileMode horizontal_tile_mode,
DlTileMode vertical_tile_mode,
DlImageSampling sampling = DlImageSampling::kLinear,
const DlMatrix* matrix = nullptr);
static std::shared_ptr<DlColorSource> MakeLinear(
const DlPoint start_point,
const DlPoint end_point,
uint32_t stop_count, uint32_t stop_count,
const DlColor* colors, const DlColor* colors,
const float* stops, const float* stops,
DlTileMode tile_mode, DlTileMode tile_mode,
const SkMatrix* matrix = nullptr); const DlMatrix* matrix = nullptr);
static std::shared_ptr<DlRadialGradientColorSource> MakeRadial( static std::shared_ptr<DlColorSource> MakeRadial(
SkPoint center, DlPoint center,
SkScalar radius, DlScalar radius,
uint32_t stop_count, uint32_t stop_count,
const DlColor* colors, const DlColor* colors,
const float* stops, const float* stops,
DlTileMode tile_mode, DlTileMode tile_mode,
const SkMatrix* matrix = nullptr); const DlMatrix* matrix = nullptr);
static std::shared_ptr<DlConicalGradientColorSource> MakeConical( static std::shared_ptr<DlColorSource> MakeConical(
SkPoint start_center, DlPoint start_center,
SkScalar start_radius, DlScalar start_radius,
SkPoint end_center, DlPoint end_center,
SkScalar end_radius, DlScalar end_radius,
uint32_t stop_count, uint32_t stop_count,
const DlColor* colors, const DlColor* colors,
const float* stops, const float* stops,
DlTileMode tile_mode, DlTileMode tile_mode,
const SkMatrix* matrix = nullptr); const DlMatrix* matrix = nullptr);
static std::shared_ptr<DlSweepGradientColorSource> MakeSweep( static std::shared_ptr<DlColorSource> MakeSweep(
SkPoint center, DlPoint center,
SkScalar start, DlScalar start,
SkScalar end, DlScalar end,
uint32_t stop_count, uint32_t stop_count,
const DlColor* colors, const DlColor* colors,
const float* stops, const float* stops,
DlTileMode tile_mode, DlTileMode tile_mode,
const SkMatrix* matrix = nullptr); const DlMatrix* matrix = nullptr);
static std::shared_ptr<DlRuntimeEffectColorSource> MakeRuntimeEffect( static std::shared_ptr<DlColorSource> MakeRuntimeEffect(
sk_sp<DlRuntimeEffect> runtime_effect, sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers, std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data); std::shared_ptr<std::vector<uint8_t>> uniform_data);
@ -161,535 +163,6 @@ class DlColorSource : public DlAttribute<DlColorSource, DlColorSourceType> {
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlColorSource); FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlColorSource);
}; };
class DlColorColorSource final : public DlColorSource {
public:
explicit DlColorColorSource(DlColor color) : color_(color) {}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override {
return std::make_shared<DlColorColorSource>(color_);
}
const DlColorColorSource* asColor() const override { return this; }
DlColorSourceType type() const override { return DlColorSourceType::kColor; }
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return color_.getAlpha() == 255; }
DlColor color() const { return color_; }
protected:
bool equals_(DlColorSource const& other) const override {
FML_DCHECK(other.type() == DlColorSourceType::kColor);
auto that = static_cast<DlColorColorSource const*>(&other);
return color_ == that->color_;
}
private:
DlColor color_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlColorColorSource);
};
class DlMatrixColorSourceBase : public DlColorSource {
public:
const SkMatrix& matrix() const { return matrix_; }
const SkMatrix* matrix_ptr() const {
return matrix_.isIdentity() ? nullptr : &matrix_;
}
protected:
explicit DlMatrixColorSourceBase(const SkMatrix* matrix)
: matrix_(matrix ? *matrix : SkMatrix::I()) {}
private:
const SkMatrix matrix_;
};
class DlImageColorSource final : public SkRefCnt,
public DlMatrixColorSourceBase {
public:
DlImageColorSource(sk_sp<const DlImage> image,
DlTileMode horizontal_tile_mode,
DlTileMode vertical_tile_mode,
DlImageSampling sampling = DlImageSampling::kLinear,
const SkMatrix* matrix = nullptr)
: DlMatrixColorSourceBase(matrix),
image_(std::move(image)),
horizontal_tile_mode_(horizontal_tile_mode),
vertical_tile_mode_(vertical_tile_mode),
sampling_(sampling) {}
bool isUIThreadSafe() const override {
return image_ ? image_->isUIThreadSafe() : true;
}
const DlImageColorSource* asImage() const override { return this; }
std::shared_ptr<DlColorSource> shared() const override {
return with_sampling(sampling_);
}
std::shared_ptr<DlColorSource> with_sampling(DlImageSampling sampling) const {
return std::make_shared<DlImageColorSource>(image_, horizontal_tile_mode_,
vertical_tile_mode_, sampling,
matrix_ptr());
}
DlColorSourceType type() const override { return DlColorSourceType::kImage; }
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return image_->isOpaque(); }
sk_sp<const DlImage> image() const { return image_; }
DlTileMode horizontal_tile_mode() const { return horizontal_tile_mode_; }
DlTileMode vertical_tile_mode() const { return vertical_tile_mode_; }
DlImageSampling sampling() const { return sampling_; }
protected:
bool equals_(DlColorSource const& other) const override {
FML_DCHECK(other.type() == DlColorSourceType::kImage);
auto that = static_cast<DlImageColorSource const*>(&other);
return (image_->Equals(that->image_) && matrix() == that->matrix() &&
horizontal_tile_mode_ == that->horizontal_tile_mode_ &&
vertical_tile_mode_ == that->vertical_tile_mode_ &&
sampling_ == that->sampling_);
}
private:
sk_sp<const DlImage> image_;
DlTileMode horizontal_tile_mode_;
DlTileMode vertical_tile_mode_;
DlImageSampling sampling_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlImageColorSource);
};
class DlGradientColorSourceBase : public DlMatrixColorSourceBase {
public:
bool is_opaque() const override {
if (mode_ == DlTileMode::kDecal) {
return false;
}
const DlColor* my_colors = colors();
for (uint32_t i = 0; i < stop_count_; i++) {
if (my_colors[i].getAlpha() < 255) {
return false;
}
}
return true;
}
bool isGradient() const override { return true; }
DlTileMode tile_mode() const { return mode_; }
int stop_count() const { return stop_count_; }
const DlColor* colors() const {
return reinterpret_cast<const DlColor*>(pod());
}
const float* stops() const {
return reinterpret_cast<const float*>(colors() + stop_count());
}
protected:
DlGradientColorSourceBase(uint32_t stop_count,
DlTileMode tile_mode,
const SkMatrix* matrix = nullptr)
: DlMatrixColorSourceBase(matrix),
mode_(tile_mode),
stop_count_(stop_count) {}
size_t vector_sizes() const {
return stop_count_ * (sizeof(DlColor) + sizeof(float));
}
virtual const void* pod() const = 0;
bool base_equals_(DlGradientColorSourceBase const* other_base) const {
if (mode_ != other_base->mode_ || matrix() != other_base->matrix() ||
stop_count_ != other_base->stop_count_) {
return false;
}
return (memcmp(colors(), other_base->colors(),
stop_count_ * sizeof(colors()[0])) == 0 &&
memcmp(stops(), other_base->stops(),
stop_count_ * sizeof(stops()[0])) == 0);
}
void store_color_stops(void* pod,
const DlColor* color_data,
const float* stop_data) {
DlColor* color_storage = reinterpret_cast<DlColor*>(pod);
memcpy(color_storage, color_data, stop_count_ * sizeof(*color_data));
float* stop_storage = reinterpret_cast<float*>(color_storage + stop_count_);
if (stop_data) {
memcpy(stop_storage, stop_data, stop_count_ * sizeof(*stop_data));
} else {
float div = stop_count_ - 1;
if (div <= 0) {
div = 1;
}
for (uint32_t i = 0; i < stop_count_; i++) {
stop_storage[i] = i / div;
}
}
}
private:
DlTileMode mode_;
uint32_t stop_count_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlGradientColorSourceBase);
};
class DlLinearGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlLinearGradientColorSource* asLinearGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
DlColorSourceType type() const override {
return DlColorSourceType::kLinearGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
std::shared_ptr<DlColorSource> shared() const override {
return MakeLinear(start_point_, end_point_, stop_count(), colors(), stops(),
tile_mode(), matrix_ptr());
}
const SkPoint& start_point() const { return start_point_; }
const SkPoint& end_point() const { return end_point_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override {
FML_DCHECK(other.type() == DlColorSourceType::kLinearGradient);
auto that = static_cast<DlLinearGradientColorSource const*>(&other);
return (start_point_ == that->start_point_ &&
end_point_ == that->end_point_ && base_equals_(that));
}
private:
DlLinearGradientColorSource(const SkPoint start_point,
const SkPoint end_point,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const SkMatrix* matrix = nullptr)
: DlGradientColorSourceBase(stop_count, tile_mode, matrix),
start_point_(start_point),
end_point_(end_point) {
store_color_stops(this + 1, colors, stops);
}
explicit DlLinearGradientColorSource(
const DlLinearGradientColorSource* source)
: DlGradientColorSourceBase(source->stop_count(),
source->tile_mode(),
source->matrix_ptr()),
start_point_(source->start_point()),
end_point_(source->end_point()) {
store_color_stops(this + 1, source->colors(), source->stops());
}
SkPoint start_point_;
SkPoint end_point_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlLinearGradientColorSource);
};
class DlRadialGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlRadialGradientColorSource* asRadialGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override {
return MakeRadial(center_, radius_, stop_count(), colors(), stops(),
tile_mode(), matrix_ptr());
}
DlColorSourceType type() const override {
return DlColorSourceType::kRadialGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
SkPoint center() const { return center_; }
SkScalar radius() const { return radius_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override {
FML_DCHECK(other.type() == DlColorSourceType::kRadialGradient);
auto that = static_cast<DlRadialGradientColorSource const*>(&other);
return (center_ == that->center_ && radius_ == that->radius_ &&
base_equals_(that));
}
private:
DlRadialGradientColorSource(SkPoint center,
SkScalar radius,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const SkMatrix* matrix = nullptr)
: DlGradientColorSourceBase(stop_count, tile_mode, matrix),
center_(center),
radius_(radius) {
store_color_stops(this + 1, colors, stops);
}
explicit DlRadialGradientColorSource(
const DlRadialGradientColorSource* source)
: DlGradientColorSourceBase(source->stop_count(),
source->tile_mode(),
source->matrix_ptr()),
center_(source->center()),
radius_(source->radius()) {
store_color_stops(this + 1, source->colors(), source->stops());
}
SkPoint center_;
SkScalar radius_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlRadialGradientColorSource);
};
class DlConicalGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlConicalGradientColorSource* asConicalGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override {
return MakeConical(start_center_, start_radius_, end_center_, end_radius_,
stop_count(), colors(), stops(), tile_mode(),
matrix_ptr());
}
DlColorSourceType type() const override {
return DlColorSourceType::kConicalGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
SkPoint start_center() const { return start_center_; }
SkScalar start_radius() const { return start_radius_; }
SkPoint end_center() const { return end_center_; }
SkScalar end_radius() const { return end_radius_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override {
FML_DCHECK(other.type() == DlColorSourceType::kConicalGradient);
auto that = static_cast<DlConicalGradientColorSource const*>(&other);
return (start_center_ == that->start_center_ &&
start_radius_ == that->start_radius_ &&
end_center_ == that->end_center_ &&
end_radius_ == that->end_radius_ && base_equals_(that));
}
private:
DlConicalGradientColorSource(SkPoint start_center,
SkScalar start_radius,
SkPoint end_center,
SkScalar end_radius,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const SkMatrix* matrix = nullptr)
: DlGradientColorSourceBase(stop_count, tile_mode, matrix),
start_center_(start_center),
start_radius_(start_radius),
end_center_(end_center),
end_radius_(end_radius) {
store_color_stops(this + 1, colors, stops);
}
explicit DlConicalGradientColorSource(
const DlConicalGradientColorSource* source)
: DlGradientColorSourceBase(source->stop_count(),
source->tile_mode(),
source->matrix_ptr()),
start_center_(source->start_center()),
start_radius_(source->start_radius()),
end_center_(source->end_center()),
end_radius_(source->end_radius()) {
store_color_stops(this + 1, source->colors(), source->stops());
}
SkPoint start_center_;
SkScalar start_radius_;
SkPoint end_center_;
SkScalar end_radius_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlConicalGradientColorSource);
};
class DlSweepGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlSweepGradientColorSource* asSweepGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override {
return MakeSweep(center_, start_, end_, stop_count(), colors(), stops(),
tile_mode(), matrix_ptr());
}
DlColorSourceType type() const override {
return DlColorSourceType::kSweepGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
SkPoint center() const { return center_; }
SkScalar start() const { return start_; }
SkScalar end() const { return end_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override {
FML_DCHECK(other.type() == DlColorSourceType::kSweepGradient);
auto that = static_cast<DlSweepGradientColorSource const*>(&other);
return (center_ == that->center_ && start_ == that->start_ &&
end_ == that->end_ && base_equals_(that));
}
private:
DlSweepGradientColorSource(SkPoint center,
SkScalar start,
SkScalar end,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const SkMatrix* matrix = nullptr)
: DlGradientColorSourceBase(stop_count, tile_mode, matrix),
center_(center),
start_(start),
end_(end) {
store_color_stops(this + 1, colors, stops);
}
explicit DlSweepGradientColorSource(const DlSweepGradientColorSource* source)
: DlGradientColorSourceBase(source->stop_count(),
source->tile_mode(),
source->matrix_ptr()),
center_(source->center()),
start_(source->start()),
end_(source->end()) {
store_color_stops(this + 1, source->colors(), source->stops());
}
SkPoint center_;
SkScalar start_;
SkScalar end_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlSweepGradientColorSource);
};
class DlRuntimeEffectColorSource final : public DlColorSource {
public:
DlRuntimeEffectColorSource(
sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data)
: runtime_effect_(std::move(runtime_effect)),
samplers_(std::move(samplers)),
uniform_data_(std::move(uniform_data)) {}
bool isUIThreadSafe() const override {
for (const auto& sampler : samplers_) {
if (!sampler->isUIThreadSafe()) {
return false;
}
}
return true;
}
const DlRuntimeEffectColorSource* asRuntimeEffect() const override {
return this;
}
std::shared_ptr<DlColorSource> shared() const override {
return std::make_shared<DlRuntimeEffectColorSource>(
runtime_effect_, samplers_, uniform_data_);
}
DlColorSourceType type() const override {
return DlColorSourceType::kRuntimeEffect;
}
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return false; }
const sk_sp<DlRuntimeEffect> runtime_effect() const {
return runtime_effect_;
}
const std::vector<std::shared_ptr<DlColorSource>> samplers() const {
return samplers_;
}
const std::shared_ptr<std::vector<uint8_t>> uniform_data() const {
return uniform_data_;
}
protected:
bool equals_(DlColorSource const& other) const override {
FML_DCHECK(other.type() == DlColorSourceType::kRuntimeEffect);
auto that = static_cast<DlRuntimeEffectColorSource const*>(&other);
if (runtime_effect_ != that->runtime_effect_) {
return false;
}
if (uniform_data_ != that->uniform_data_) {
return false;
}
if (samplers_.size() != that->samplers_.size()) {
return false;
}
for (size_t i = 0; i < samplers_.size(); i++) {
if (samplers_[i] != that->samplers_[i]) {
return false;
}
}
return true;
}
private:
sk_sp<DlRuntimeEffect> runtime_effect_;
std::vector<std::shared_ptr<DlColorSource>> samplers_;
std::shared_ptr<std::vector<uint8_t>> uniform_data_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlRuntimeEffectColorSource);
};
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_

View File

@ -7,7 +7,7 @@
#include "flutter/display_list/dl_color.h" #include "flutter/display_list/dl_color.h"
#include "flutter/display_list/dl_sampling_options.h" #include "flutter/display_list/dl_sampling_options.h"
#include "flutter/display_list/effects/dl_color_source.h" #include "flutter/display_list/effects/dl_color_sources.h"
#include "flutter/display_list/effects/dl_runtime_effect.h" #include "flutter/display_list/effects/dl_runtime_effect.h"
#include "flutter/display_list/image/dl_image.h" #include "flutter/display_list/image/dl_image.h"
#include "flutter/display_list/testing/dl_test_equality.h" #include "flutter/display_list/testing/dl_test_equality.h"
@ -47,14 +47,16 @@ static const sk_sp<DlImage> kTestImage1 = MakeTestImage(10, 10, SK_ColorGREEN);
static const sk_sp<DlImage> kTestAlphaImage1 = static const sk_sp<DlImage> kTestAlphaImage1 =
MakeTestImage(10, 10, SK_ColorTRANSPARENT); MakeTestImage(10, 10, SK_ColorTRANSPARENT);
// clang-format off // clang-format off
static const SkMatrix kTestMatrix1 = static const DlMatrix kTestMatrix1 =
SkMatrix::MakeAll(2, 0, 10, DlMatrix::MakeRow(2, 0, 0, 10,
0, 3, 12, 0, 3, 0, 12,
0, 0, 1); 0, 0, 1, 0,
static const SkMatrix kTestMatrix2 = 0, 0, 0, 1);
SkMatrix::MakeAll(4, 0, 15, static const DlMatrix kTestMatrix2 =
0, 7, 17, DlMatrix::MakeRow(4, 0, 0, 15,
0, 0, 1); 0, 7, 0, 17,
0, 0, 1, 0,
0, 0, 0, 1);
// clang-format on // clang-format on
static constexpr int kTestStopCount = 3; static constexpr int kTestStopCount = 3;
static constexpr DlColor kTestColors[kTestStopCount] = { static constexpr DlColor kTestColors[kTestStopCount] = {
@ -77,13 +79,13 @@ static constexpr float kTestStops2[kTestStopCount] = {
0.3f, 0.3f,
1.0f, 1.0f,
}; };
static constexpr SkPoint kTestPoints[2] = { static constexpr DlPoint kTestPoints[2] = {
SkPoint::Make(5, 15), DlPoint(5, 15),
SkPoint::Make(7, 18), DlPoint(7, 18),
}; };
static constexpr SkPoint kTestPoints2[2] = { static constexpr DlPoint kTestPoints2[2] = {
SkPoint::Make(100, 115), DlPoint(100, 115),
SkPoint::Make(107, 118), DlPoint(107, 118),
}; };
TEST(DisplayListColorSource, ColorConstructor) { TEST(DisplayListColorSource, ColorConstructor) {
@ -729,15 +731,12 @@ TEST(DisplayListColorSource, SweepGradientNotEquals) {
} }
TEST(DisplayListColorSource, RuntimeEffect) { TEST(DisplayListColorSource, RuntimeEffect) {
std::shared_ptr<DlRuntimeEffectColorSource> source1 = std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRuntimeEffect(
DlColorSource::MakeRuntimeEffect( kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>());
kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>()); std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRuntimeEffect(
std::shared_ptr<DlRuntimeEffectColorSource> source2 = kTestRuntimeEffect2, {}, std::make_shared<std::vector<uint8_t>>());
DlColorSource::MakeRuntimeEffect( std::shared_ptr<DlColorSource> source3 = DlColorSource::MakeRuntimeEffect(
kTestRuntimeEffect2, {}, std::make_shared<std::vector<uint8_t>>()); nullptr, {}, std::make_shared<std::vector<uint8_t>>());
std::shared_ptr<DlRuntimeEffectColorSource> source3 =
DlColorSource::MakeRuntimeEffect(
nullptr, {}, std::make_shared<std::vector<uint8_t>>());
ASSERT_EQ(source1->type(), DlColorSourceType::kRuntimeEffect); ASSERT_EQ(source1->type(), DlColorSourceType::kRuntimeEffect);
ASSERT_EQ(source1->asRuntimeEffect(), source1.get()); ASSERT_EQ(source1->asRuntimeEffect(), source1.get());

View File

@ -0,0 +1,16 @@
// Copyright 2013 The Flutter 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 FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCES_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCES_H_
#include "flutter/display_list/effects/color_sources/dl_color_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_image_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_linear_gradient_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_radial_gradient_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_runtime_effect_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_sweep_gradient_color_source.h"
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCES_H_

View File

@ -4,10 +4,51 @@
#include "flutter/display_list/effects/dl_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/display_list/effects/dl_local_matrix_image_filter.h" #include "flutter/display_list/effects/dl_image_filters.h"
namespace flutter { namespace flutter {
std::shared_ptr<DlImageFilter> DlImageFilter::MakeBlur(DlScalar sigma_x,
DlScalar sigma_y,
DlTileMode tile_mode) {
return DlBlurImageFilter::Make(sigma_x, sigma_y, tile_mode);
}
std::shared_ptr<DlImageFilter> DlImageFilter::MakeDilate(DlScalar radius_x,
DlScalar radius_y) {
return DlDilateImageFilter::Make(radius_x, radius_y);
}
std::shared_ptr<DlImageFilter> DlImageFilter::MakeErode(DlScalar radius_x,
DlScalar radius_y) {
return DlErodeImageFilter::Make(radius_x, radius_y);
}
std::shared_ptr<DlImageFilter> DlImageFilter::MakeMatrix(
const DlMatrix& matrix,
DlImageSampling sampling) {
return DlMatrixImageFilter::Make(matrix, sampling);
}
std::shared_ptr<DlImageFilter> DlImageFilter::MakeRuntimeEffect(
sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data) {
return DlRuntimeEffectImageFilter::Make(
std::move(runtime_effect), std::move(samplers), std::move(uniform_data));
}
std::shared_ptr<DlImageFilter> DlImageFilter::MakeColorFilter(
const std::shared_ptr<const DlColorFilter>& filter) {
return DlColorFilterImageFilter::Make(filter);
}
std::shared_ptr<DlImageFilter> DlImageFilter::MakeCompose(
const std::shared_ptr<DlImageFilter>& outer,
const std::shared_ptr<DlImageFilter>& inner) {
return DlComposeImageFilter::Make(outer, inner);
}
DlVector2 DlImageFilter::map_vectors_affine(const DlMatrix& ctm, DlVector2 DlImageFilter::map_vectors_affine(const DlMatrix& ctm,
DlScalar x, DlScalar x,
DlScalar y) { DlScalar y) {

View File

@ -6,6 +6,11 @@
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTER_H_
#include "flutter/display_list/dl_attributes.h" #include "flutter/display_list/dl_attributes.h"
#include "flutter/display_list/dl_sampling_options.h"
#include "flutter/display_list/dl_tile_mode.h"
#include "flutter/display_list/effects/dl_color_filter.h"
#include "flutter/display_list/effects/dl_color_source.h"
#include "flutter/display_list/effects/dl_runtime_effect.h"
#include "flutter/display_list/geometry/dl_geometry_types.h" #include "flutter/display_list/geometry/dl_geometry_types.h"
namespace flutter { namespace flutter {
@ -23,20 +28,20 @@ enum class DlImageFilterType {
kDilate, kDilate,
kErode, kErode,
kMatrix, kMatrix,
kCompose,
kColorFilter,
kLocalMatrix,
kRuntimeEffect, kRuntimeEffect,
kColorFilter,
kCompose,
kLocalMatrix,
}; };
class DlBlurImageFilter; class DlBlurImageFilter;
class DlDilateImageFilter; class DlDilateImageFilter;
class DlErodeImageFilter; class DlErodeImageFilter;
class DlMatrixImageFilter; class DlMatrixImageFilter;
class DlLocalMatrixImageFilter;
class DlComposeImageFilter;
class DlColorFilterImageFilter;
class DlRuntimeEffectImageFilter; class DlRuntimeEffectImageFilter;
class DlColorFilterImageFilter;
class DlComposeImageFilter;
class DlLocalMatrixImageFilter;
class DlImageFilter : public DlAttribute<DlImageFilter, DlImageFilterType> { class DlImageFilter : public DlAttribute<DlImageFilter, DlImageFilterType> {
public: public:
@ -46,6 +51,31 @@ class DlImageFilter : public DlAttribute<DlImageFilter, DlImageFilterType> {
kComplex, kComplex,
}; };
static std::shared_ptr<DlImageFilter> MakeBlur(DlScalar sigma_x,
DlScalar sigma_y,
DlTileMode tile_mode);
static std::shared_ptr<DlImageFilter> MakeDilate(DlScalar radius_x,
DlScalar radius_y);
static std::shared_ptr<DlImageFilter> MakeErode(DlScalar radius_x,
DlScalar radius_y);
static std::shared_ptr<DlImageFilter> MakeMatrix(const DlMatrix& matrix,
DlImageSampling sampling);
static std::shared_ptr<DlImageFilter> MakeRuntimeEffect(
sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data);
static std::shared_ptr<DlImageFilter> MakeColorFilter(
const std::shared_ptr<const DlColorFilter>& filter);
static std::shared_ptr<DlImageFilter> MakeCompose(
const std::shared_ptr<DlImageFilter>& outer,
const std::shared_ptr<DlImageFilter>& inner);
// Return a DlBlurImageFilter pointer to this object iff it is a Blur // Return a DlBlurImageFilter pointer to this object iff it is a Blur
// type of ImageFilter, otherwise return nullptr. // type of ImageFilter, otherwise return nullptr.
virtual const DlBlurImageFilter* asBlur() const { return nullptr; } virtual const DlBlurImageFilter* asBlur() const { return nullptr; }

View File

@ -237,18 +237,18 @@ TEST(DisplayListImageFilter, BlurBounds) {
TEST(DisplayListImageFilter, BlurZeroSigma) { TEST(DisplayListImageFilter, BlurZeroSigma) {
std::shared_ptr<DlImageFilter> filter = std::shared_ptr<DlImageFilter> filter =
DlBlurImageFilter::Make(0, 0, DlTileMode::kMirror); DlImageFilter::MakeBlur(0, 0, DlTileMode::kMirror);
ASSERT_EQ(filter, nullptr); ASSERT_EQ(filter, nullptr);
filter = DlBlurImageFilter::Make(3, SK_ScalarNaN, DlTileMode::kMirror); filter = DlImageFilter::MakeBlur(3, SK_ScalarNaN, DlTileMode::kMirror);
ASSERT_EQ(filter, nullptr); ASSERT_EQ(filter, nullptr);
filter = DlBlurImageFilter::Make(SK_ScalarNaN, 3, DlTileMode::kMirror); filter = DlImageFilter::MakeBlur(SK_ScalarNaN, 3, DlTileMode::kMirror);
ASSERT_EQ(filter, nullptr); ASSERT_EQ(filter, nullptr);
filter = filter =
DlBlurImageFilter::Make(SK_ScalarNaN, SK_ScalarNaN, DlTileMode::kMirror); DlImageFilter::MakeBlur(SK_ScalarNaN, SK_ScalarNaN, DlTileMode::kMirror);
ASSERT_EQ(filter, nullptr); ASSERT_EQ(filter, nullptr);
filter = DlBlurImageFilter::Make(3, 0, DlTileMode::kMirror); filter = DlImageFilter::MakeBlur(3, 0, DlTileMode::kMirror);
ASSERT_NE(filter, nullptr); ASSERT_NE(filter, nullptr);
filter = DlBlurImageFilter::Make(0, 3, DlTileMode::kMirror); filter = DlImageFilter::MakeBlur(0, 3, DlTileMode::kMirror);
ASSERT_NE(filter, nullptr); ASSERT_NE(filter, nullptr);
} }
@ -759,13 +759,13 @@ TEST(DisplayListImageFilter, LocalImageFilterBounds) {
DlBlendColorFilter dl_color_filter(DlColor::kRed(), DlBlendMode::kSrcOver); DlBlendColorFilter dl_color_filter(DlColor::kRed(), DlBlendMode::kSrcOver);
std::vector<std::shared_ptr<DlImageFilter>> dl_filters{ std::vector<std::shared_ptr<DlImageFilter>> dl_filters{
DlBlurImageFilter::Make(5.0, 6.0, DlTileMode::kRepeat), DlImageFilter::MakeBlur(5.0, 6.0, DlTileMode::kRepeat),
DlColorFilterImageFilter::Make(dl_color_filter.shared()), DlImageFilter::MakeColorFilter(dl_color_filter.shared()),
DlDilateImageFilter::Make(5, 10), DlImageFilter::MakeDilate(5, 10),
DlMatrixImageFilter::Make(filter_matrix, DlImageSampling::kLinear), DlImageFilter::MakeMatrix(filter_matrix, DlImageSampling::kLinear),
DlComposeImageFilter::Make( DlImageFilter::MakeCompose(
DlBlurImageFilter::Make(5.0, 6.0, DlTileMode::kRepeat), DlImageFilter::MakeBlur(5.0, 6.0, DlTileMode::kRepeat),
DlColorFilterImageFilter::Make(dl_color_filter.shared())), DlImageFilter::MakeColorFilter(dl_color_filter.shared())),
}; };
auto persp = SkMatrix::I(); auto persp = SkMatrix::I();
@ -895,10 +895,10 @@ TEST(DisplayListImageFilter, RuntimeEffectEquality) {
} }
TEST(DisplayListImageFilter, RuntimeEffectEqualityWithSamplers) { TEST(DisplayListImageFilter, RuntimeEffectEqualityWithSamplers) {
auto image_a = std::make_shared<DlImageColorSource>( auto image_a =
nullptr, DlTileMode::kClamp, DlTileMode::kDecal); DlColorSource::MakeImage(nullptr, DlTileMode::kClamp, DlTileMode::kDecal);
auto image_b = std::make_shared<DlImageColorSource>( auto image_b =
nullptr, DlTileMode::kClamp, DlTileMode::kClamp); DlColorSource::MakeImage(nullptr, DlTileMode::kClamp, DlTileMode::kClamp);
DlRuntimeEffectImageFilter filter_a(nullptr, {nullptr, image_a}, DlRuntimeEffectImageFilter filter_a(nullptr, {nullptr, image_a},
std::make_shared<std::vector<uint8_t>>()); std::make_shared<std::vector<uint8_t>>());

View File

@ -5,13 +5,13 @@
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTERS_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTERS_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTERS_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTERS_H_
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_blur_image_filter.h"
#include "flutter/display_list/effects/dl_color_filter_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_color_filter_image_filter.h"
#include "flutter/display_list/effects/dl_compose_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_compose_image_filter.h"
#include "flutter/display_list/effects/dl_dilate_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_dilate_image_filter.h"
#include "flutter/display_list/effects/dl_erode_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_erode_image_filter.h"
#include "flutter/display_list/effects/dl_local_matrix_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_local_matrix_image_filter.h"
#include "flutter/display_list/effects/dl_matrix_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_matrix_image_filter.h"
#include "flutter/display_list/effects/dl_runtime_effect_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_runtime_effect_image_filter.h"
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTERS_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTERS_H_

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_blur_image_filter.h"
namespace flutter { namespace flutter {

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_BLUR_IMAGE_FILTER_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_BLUR_IMAGE_FILTER_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_BLUR_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_BLUR_IMAGE_FILTER_H_
#include "flutter/display_list/effects/dl_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
@ -63,4 +63,4 @@ class DlBlurImageFilter final : public DlImageFilter {
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_BLUR_IMAGE_FILTER_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_BLUR_IMAGE_FILTER_H_

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_color_filter_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_color_filter_image_filter.h"
#include "flutter/display_list/utils/dl_comparable.h" #include "flutter/display_list/utils/dl_comparable.h"

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_FILTER_IMAGE_FILTER_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_COLOR_FILTER_IMAGE_FILTER_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_FILTER_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_COLOR_FILTER_IMAGE_FILTER_H_
#include "display_list/effects/dl_image_filter.h" #include "display_list/effects/dl_image_filter.h"
@ -61,11 +61,6 @@ class DlColorFilterImageFilter final : public DlImageFilter {
return MatrixCapability::kComplex; return MatrixCapability::kComplex;
} }
std::shared_ptr<DlImageFilter> makeWithLocalMatrix(
const DlMatrix& matrix) const override {
return shared();
}
protected: protected:
bool equals_(const DlImageFilter& other) const override; bool equals_(const DlImageFilter& other) const override;
@ -75,4 +70,4 @@ class DlColorFilterImageFilter final : public DlImageFilter {
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_FILTER_IMAGE_FILTER_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_COLOR_FILTER_IMAGE_FILTER_H_

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_compose_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_compose_image_filter.h"
#include "flutter/display_list/utils/dl_comparable.h" #include "flutter/display_list/utils/dl_comparable.h"

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_COMPOSE_IMAGE_FILTER_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_COMPOSE_IMAGE_FILTER_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_COMPOSE_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_COMPOSE_IMAGE_FILTER_H_
#include "display_list/effects/dl_image_filter.h" #include "display_list/effects/dl_image_filter.h"
@ -66,4 +66,4 @@ class DlComposeImageFilter final : public DlImageFilter {
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_COMPOSE_IMAGE_FILTER_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_COMPOSE_IMAGE_FILTER_H_

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_dilate_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_dilate_image_filter.h"
namespace flutter { namespace flutter {

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_DILATE_IMAGE_FILTER_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_DILATE_IMAGE_FILTER_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_DILATE_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_DILATE_IMAGE_FILTER_H_
#include "display_list/effects/dl_image_filter.h" #include "display_list/effects/dl_image_filter.h"
@ -56,4 +56,4 @@ class DlDilateImageFilter final : public DlImageFilter {
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_DILATE_IMAGE_FILTER_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_DILATE_IMAGE_FILTER_H_

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_erode_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_erode_image_filter.h"
namespace flutter { namespace flutter {

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_ERODE_IMAGE_FILTER_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_ERODE_IMAGE_FILTER_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_ERODE_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_ERODE_IMAGE_FILTER_H_
#include <utility> #include <utility>
@ -58,4 +58,4 @@ class DlErodeImageFilter final : public DlImageFilter {
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_ERODE_IMAGE_FILTER_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_ERODE_IMAGE_FILTER_H_

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_local_matrix_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_local_matrix_image_filter.h"
#include "flutter/display_list/utils/dl_comparable.h" #include "flutter/display_list/utils/dl_comparable.h"

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_LOCAL_MATRIX_IMAGE_FILTER_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_LOCAL_MATRIX_IMAGE_FILTER_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_LOCAL_MATRIX_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_LOCAL_MATRIX_IMAGE_FILTER_H_
#include "display_list/effects/dl_image_filter.h" #include "display_list/effects/dl_image_filter.h"
@ -66,4 +66,4 @@ class DlLocalMatrixImageFilter final : public DlImageFilter {
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_LOCAL_MATRIX_IMAGE_FILTER_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_LOCAL_MATRIX_IMAGE_FILTER_H_

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_matrix_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_matrix_image_filter.h"
namespace flutter { namespace flutter {

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_MATRIX_IMAGE_FILTER_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_MATRIX_IMAGE_FILTER_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_MATRIX_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_MATRIX_IMAGE_FILTER_H_
#include "display_list/effects/dl_image_filter.h" #include "display_list/effects/dl_image_filter.h"
@ -58,4 +58,4 @@ class DlMatrixImageFilter final : public DlImageFilter {
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_MATRIX_IMAGE_FILTER_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_MATRIX_IMAGE_FILTER_H_

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_runtime_effect_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_runtime_effect_image_filter.h"
namespace flutter { namespace flutter {

View File

@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_RUNTIME_EFFECT_IMAGE_FILTER_H_ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_RUNTIME_EFFECT_IMAGE_FILTER_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_RUNTIME_EFFECT_IMAGE_FILTER_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_RUNTIME_EFFECT_IMAGE_FILTER_H_
#include "display_list/effects/dl_image_filter.h" #include "display_list/effects/dl_image_filter.h"
@ -77,4 +77,4 @@ class DlRuntimeEffectImageFilter final : public DlImageFilter {
} // namespace flutter } // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_RUNTIME_EFFECT_IMAGE_FILTER_H_ #endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_RUNTIME_EFFECT_IMAGE_FILTER_H_

View File

@ -6,7 +6,7 @@
#include "flutter/display_list/skia/dl_sk_canvas.h" #include "flutter/display_list/skia/dl_sk_canvas.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_blur_image_filter.h"
#include "flutter/display_list/skia/dl_sk_conversions.h" #include "flutter/display_list/skia/dl_sk_conversions.h"
#include "flutter/display_list/skia/dl_sk_dispatcher.h" #include "flutter/display_list/skia/dl_sk_dispatcher.h"
#include "flutter/fml/trace_event.h" #include "flutter/fml/trace_event.h"

View File

@ -4,6 +4,7 @@
#include "flutter/display_list/skia/dl_sk_conversions.h" #include "flutter/display_list/skia/dl_sk_conversions.h"
#include "flutter/display_list/effects/dl_color_sources.h"
#include "flutter/display_list/effects/dl_image_filters.h" #include "flutter/display_list/effects/dl_image_filters.h"
#include "third_party/skia/include/core/SkColorFilter.h" #include "third_party/skia/include/core/SkColorFilter.h"
#include "third_party/skia/include/effects/SkGradientShader.h" #include "third_party/skia/include/effects/SkGradientShader.h"
@ -70,6 +71,7 @@ sk_sp<SkShader> ToSk(const DlColorSource* source) {
if (!source) { if (!source) {
return nullptr; return nullptr;
} }
SkMatrix scratch;
static auto ToSkColors = static auto ToSkColors =
[](const DlGradientColorSourceBase* gradient) -> std::vector<SkColor> { [](const DlGradientColorSourceBase* gradient) -> std::vector<SkColor> {
std::vector<SkColor> sk_colors; std::vector<SkColor> sk_colors;
@ -95,51 +97,53 @@ sk_sp<SkShader> ToSk(const DlColorSource* source) {
return image->skia_image()->makeShader( return image->skia_image()->makeShader(
ToSk(image_source->horizontal_tile_mode()), ToSk(image_source->horizontal_tile_mode()),
ToSk(image_source->vertical_tile_mode()), ToSk(image_source->vertical_tile_mode()),
ToSk(image_source->sampling()), image_source->matrix_ptr()); ToSk(image_source->sampling()),
ToSk(image_source->matrix_ptr(), scratch));
} }
case DlColorSourceType::kLinearGradient: { case DlColorSourceType::kLinearGradient: {
const DlLinearGradientColorSource* linear_source = const DlLinearGradientColorSource* linear_source =
source->asLinearGradient(); source->asLinearGradient();
FML_DCHECK(linear_source != nullptr); FML_DCHECK(linear_source != nullptr);
SkPoint pts[] = {linear_source->start_point(), SkPoint pts[] = {ToSkPoint(linear_source->start_point()),
linear_source->end_point()}; ToSkPoint(linear_source->end_point())};
std::vector<SkColor> skcolors = ToSkColors(linear_source); std::vector<SkColor> skcolors = ToSkColors(linear_source);
return SkGradientShader::MakeLinear( return SkGradientShader::MakeLinear(
pts, skcolors.data(), linear_source->stops(), pts, skcolors.data(), linear_source->stops(),
linear_source->stop_count(), ToSk(linear_source->tile_mode()), 0, linear_source->stop_count(), ToSk(linear_source->tile_mode()), 0,
linear_source->matrix_ptr()); ToSk(linear_source->matrix_ptr(), scratch));
} }
case DlColorSourceType::kRadialGradient: { case DlColorSourceType::kRadialGradient: {
const DlRadialGradientColorSource* radial_source = const DlRadialGradientColorSource* radial_source =
source->asRadialGradient(); source->asRadialGradient();
FML_DCHECK(radial_source != nullptr); FML_DCHECK(radial_source != nullptr);
return SkGradientShader::MakeRadial( return SkGradientShader::MakeRadial(
radial_source->center(), radial_source->radius(), ToSkPoint(radial_source->center()), radial_source->radius(),
ToSkColors(radial_source).data(), radial_source->stops(), ToSkColors(radial_source).data(), radial_source->stops(),
radial_source->stop_count(), ToSk(radial_source->tile_mode()), 0, radial_source->stop_count(), ToSk(radial_source->tile_mode()), 0,
radial_source->matrix_ptr()); ToSk(radial_source->matrix_ptr(), scratch));
} }
case DlColorSourceType::kConicalGradient: { case DlColorSourceType::kConicalGradient: {
const DlConicalGradientColorSource* conical_source = const DlConicalGradientColorSource* conical_source =
source->asConicalGradient(); source->asConicalGradient();
FML_DCHECK(conical_source != nullptr); FML_DCHECK(conical_source != nullptr);
return SkGradientShader::MakeTwoPointConical( return SkGradientShader::MakeTwoPointConical(
conical_source->start_center(), conical_source->start_radius(), ToSkPoint(conical_source->start_center()),
conical_source->end_center(), conical_source->end_radius(), conical_source->start_radius(),
ToSkPoint(conical_source->end_center()), conical_source->end_radius(),
ToSkColors(conical_source).data(), conical_source->stops(), ToSkColors(conical_source).data(), conical_source->stops(),
conical_source->stop_count(), ToSk(conical_source->tile_mode()), 0, conical_source->stop_count(), ToSk(conical_source->tile_mode()), 0,
conical_source->matrix_ptr()); ToSk(conical_source->matrix_ptr(), scratch));
} }
case DlColorSourceType::kSweepGradient: { case DlColorSourceType::kSweepGradient: {
const DlSweepGradientColorSource* sweep_source = const DlSweepGradientColorSource* sweep_source =
source->asSweepGradient(); source->asSweepGradient();
FML_DCHECK(sweep_source != nullptr); FML_DCHECK(sweep_source != nullptr);
return SkGradientShader::MakeSweep( return SkGradientShader::MakeSweep(
sweep_source->center().x(), sweep_source->center().y(), sweep_source->center().x, sweep_source->center().y,
ToSkColors(sweep_source).data(), sweep_source->stops(), ToSkColors(sweep_source).data(), sweep_source->stops(),
sweep_source->stop_count(), ToSk(sweep_source->tile_mode()), sweep_source->stop_count(), ToSk(sweep_source->tile_mode()),
sweep_source->start(), sweep_source->end(), 0, sweep_source->start(), sweep_source->end(), 0,
sweep_source->matrix_ptr()); ToSk(sweep_source->matrix_ptr(), scratch));
} }
case DlColorSourceType::kRuntimeEffect: { case DlColorSourceType::kRuntimeEffect: {
const DlRuntimeEffectColorSource* runtime_source = const DlRuntimeEffectColorSource* runtime_source =

View File

@ -111,6 +111,13 @@ inline sk_sp<SkMaskFilter> ToSk(const DlMaskFilter& filter) {
return ToSk(&filter); return ToSk(&filter);
} }
inline SkMatrix* ToSk(const DlMatrix* matrix, SkMatrix& scratch) {
return matrix ? &scratch.setAll(matrix->m[0], matrix->m[4], matrix->m[12], //
matrix->m[1], matrix->m[5], matrix->m[13], //
matrix->m[3], matrix->m[7], matrix->m[15])
: nullptr;
}
extern sk_sp<SkVertices> ToSk(const std::shared_ptr<DlVertices>& vertices); extern sk_sp<SkVertices> ToSk(const std::shared_ptr<DlVertices>& vertices);
} // namespace flutter } // namespace flutter

View File

@ -7,9 +7,8 @@
#include "flutter/display_list/dl_sampling_options.h" #include "flutter/display_list/dl_sampling_options.h"
#include "flutter/display_list/dl_tile_mode.h" #include "flutter/display_list/dl_tile_mode.h"
#include "flutter/display_list/dl_vertices.h" #include "flutter/display_list/dl_vertices.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/dl_color_sources.h"
#include "flutter/display_list/effects/dl_color_source.h" #include "flutter/display_list/effects/dl_image_filters.h"
#include "flutter/display_list/effects/dl_local_matrix_image_filter.h"
#include "flutter/display_list/skia/dl_sk_conversions.h" #include "flutter/display_list/skia/dl_sk_conversions.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "third_party/skia/include/core/SkColorSpace.h" #include "third_party/skia/include/core/SkColorSpace.h"
@ -20,7 +19,7 @@ namespace flutter {
namespace testing { namespace testing {
TEST(DisplayListImageFilter, LocalImageSkiaNull) { TEST(DisplayListImageFilter, LocalImageSkiaNull) {
auto blur_filter = DlBlurImageFilter::Make(0, 0, DlTileMode::kClamp); auto blur_filter = DlImageFilter::MakeBlur(0, 0, DlTileMode::kClamp);
DlLocalMatrixImageFilter dl_local_matrix_filter( DlLocalMatrixImageFilter dl_local_matrix_filter(
DlMatrix::MakeRotationZ(DlDegrees(45)), blur_filter); DlMatrix::MakeRotationZ(DlDegrees(45)), blur_filter);
// With sigmas set to zero on the blur filter, Skia will return a null filter. // With sigmas set to zero on the blur filter, Skia will return a null filter.
@ -231,15 +230,12 @@ TEST(DisplayListColorSource, ConvertRuntimeEffect) {
SkRuntimeEffect::MakeForShader( SkRuntimeEffect::MakeForShader(
SkString("vec4 main(vec2 p) { return vec4(1); }")) SkString("vec4 main(vec2 p) { return vec4(1); }"))
.effect); .effect);
std::shared_ptr<DlRuntimeEffectColorSource> source1 = std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRuntimeEffect(
DlColorSource::MakeRuntimeEffect( kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>());
kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>()); std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRuntimeEffect(
std::shared_ptr<DlRuntimeEffectColorSource> source2 = kTestRuntimeEffect2, {}, std::make_shared<std::vector<uint8_t>>());
DlColorSource::MakeRuntimeEffect( std::shared_ptr<DlColorSource> source3 = DlColorSource::MakeRuntimeEffect(
kTestRuntimeEffect2, {}, std::make_shared<std::vector<uint8_t>>()); nullptr, {}, std::make_shared<std::vector<uint8_t>>());
std::shared_ptr<DlRuntimeEffectColorSource> source3 =
DlColorSource::MakeRuntimeEffect(
nullptr, {}, std::make_shared<std::vector<uint8_t>>());
ASSERT_NE(ToSk(source1), nullptr); ASSERT_NE(ToSk(source1), nullptr);
ASSERT_NE(ToSk(source2), nullptr); ASSERT_NE(ToSk(source2), nullptr);
@ -251,10 +247,8 @@ TEST(DisplayListColorSource, ConvertRuntimeEffectWithNullSampler) {
SkRuntimeEffect::MakeForShader( SkRuntimeEffect::MakeForShader(
SkString("vec4 main(vec2 p) { return vec4(0); }")) SkString("vec4 main(vec2 p) { return vec4(0); }"))
.effect); .effect);
std::shared_ptr<DlRuntimeEffectColorSource> source1 = std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRuntimeEffect(
DlColorSource::MakeRuntimeEffect( kTestRuntimeEffect1, {nullptr}, std::make_shared<std::vector<uint8_t>>());
kTestRuntimeEffect1, {nullptr},
std::make_shared<std::vector<uint8_t>>());
ASSERT_EQ(ToSk(source1), nullptr); ASSERT_EQ(ToSk(source1), nullptr);
} }
@ -306,9 +300,8 @@ TEST(DisplayListSkConversions, ToSkDitheringEnabledForGradients) {
DlPaint dl_paint; DlPaint dl_paint;
// Set the paint to be a gradient. // Set the paint to be a gradient.
dl_paint.setColorSource(DlColorSource::MakeLinear(SkPoint::Make(0, 0), dl_paint.setColorSource(DlColorSource::MakeLinear(
SkPoint::Make(100, 100), 0, DlPoint(0, 0), DlPoint(100, 100), 0, 0, 0, DlTileMode::kClamp));
0, 0, DlTileMode::kClamp));
{ {
SkPaint sk_paint = ToSk(dl_paint); SkPaint sk_paint = ToSk(dl_paint);

View File

@ -7,7 +7,7 @@
#include "flutter/display_list/skia/dl_sk_dispatcher.h" #include "flutter/display_list/skia/dl_sk_dispatcher.h"
#include "flutter/display_list/dl_blend_mode.h" #include "flutter/display_list/dl_blend_mode.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_blur_image_filter.h"
#include "flutter/display_list/skia/dl_sk_conversions.h" #include "flutter/display_list/skia/dl_sk_conversions.h"
#include "flutter/display_list/skia/dl_sk_types.h" #include "flutter/display_list/skia/dl_sk_types.h"
#include "flutter/fml/trace_event.h" #include "flutter/fml/trace_event.h"

View File

@ -28,8 +28,8 @@ static const DlColor kTestColors[2] = {DlColor(0xFF000000),
DlColor(0xFFFFFFFF)}; DlColor(0xFFFFFFFF)};
static const float kTestStops[2] = {0.0f, 1.0f}; static const float kTestStops[2] = {0.0f, 1.0f};
static const auto kTestLinearGradient = static const auto kTestLinearGradient =
DlColorSource::MakeLinear(SkPoint::Make(0.0f, 0.0f), DlColorSource::MakeLinear(DlPoint(0.0f, 0.0f),
SkPoint::Make(100.0f, 100.0f), DlPoint(100.0f, 100.0f),
2, 2,
kTestColors, kTestColors,
kTestStops, kTestStops,
@ -69,7 +69,7 @@ TEST(DisplayListUtils, SetColorSourceDoesNotDitherIfNotGradient) {
EXPECT_FALSE(helper.paint(true).isDither()); EXPECT_FALSE(helper.paint(true).isDither());
EXPECT_FALSE(helper.paint(false).isDither()); EXPECT_FALSE(helper.paint(false).isDither());
helper.setColorSource(&kTestSource1); helper.setColorSource(kTestSource1.get());
EXPECT_FALSE(helper.paint(true).isDither()); EXPECT_FALSE(helper.paint(true).isDither());
EXPECT_FALSE(helper.paint(false).isDither()); EXPECT_FALSE(helper.paint(false).isDither());
} }
@ -105,7 +105,7 @@ TEST(DisplayListUtils, SkDispatcherSetColorSourceDoesNotDitherIfNotGradient) {
EXPECT_FALSE(dispatcher.safe_paint(true)->isDither()); EXPECT_FALSE(dispatcher.safe_paint(true)->isDither());
// Calling safe_paint(false) returns a nullptr // Calling safe_paint(false) returns a nullptr
dispatcher.setColorSource(&kTestSource1); dispatcher.setColorSource(kTestSource1.get());
EXPECT_FALSE(dispatcher.paint(true).isDither()); EXPECT_FALSE(dispatcher.paint(true).isDither());
EXPECT_FALSE(dispatcher.paint(false).isDither()); EXPECT_FALSE(dispatcher.paint(false).isDither());
EXPECT_FALSE(dispatcher.safe_paint(true)->isDither()); EXPECT_FALSE(dispatcher.safe_paint(true)->isDither());

View File

@ -8,7 +8,7 @@
#include "flutter/display_list/dl_builder.h" #include "flutter/display_list/dl_builder.h"
#include "flutter/display_list/dl_op_flags.h" #include "flutter/display_list/dl_op_flags.h"
#include "flutter/display_list/dl_sampling_options.h" #include "flutter/display_list/dl_sampling_options.h"
#include "flutter/display_list/effects/dl_image_filters.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/display_list/skia/dl_sk_canvas.h" #include "flutter/display_list/skia/dl_sk_canvas.h"
#include "flutter/display_list/skia/dl_sk_conversions.h" #include "flutter/display_list/skia/dl_sk_conversions.h"
#include "flutter/display_list/skia/dl_sk_dispatcher.h" #include "flutter/display_list/skia/dl_sk_dispatcher.h"
@ -1765,10 +1765,14 @@ class CanvasCompareTester {
} }
{ {
SkPoint end_points[] = { SkPoint sk_end_points[] = {
SkPoint::Make(kRenderBounds.fLeft, kRenderBounds.fTop), SkPoint::Make(kRenderBounds.fLeft, kRenderBounds.fTop),
SkPoint::Make(kRenderBounds.fRight, kRenderBounds.fBottom), SkPoint::Make(kRenderBounds.fRight, kRenderBounds.fBottom),
}; };
DlPoint dl_end_points[] = {
DlPoint(kRenderBounds.fLeft, kRenderBounds.fTop),
DlPoint(kRenderBounds.fRight, kRenderBounds.fBottom),
};
DlColor dl_colors[] = { DlColor dl_colors[] = {
DlColor::kGreen(), DlColor::kGreen(),
DlColor::kYellow().withAlpha(0x7f), DlColor::kYellow().withAlpha(0x7f),
@ -1785,10 +1789,10 @@ class CanvasCompareTester {
1.0, 1.0,
}; };
auto dl_gradient = auto dl_gradient =
DlColorSource::MakeLinear(end_points[0], end_points[1], 3, dl_colors, DlColorSource::MakeLinear(dl_end_points[0], dl_end_points[1], 3,
stops, DlTileMode::kMirror); dl_colors, stops, DlTileMode::kMirror);
auto sk_gradient = SkGradientShader::MakeLinear( auto sk_gradient = SkGradientShader::MakeLinear(
end_points, sk_colors, stops, 3, SkTileMode::kMirror, 0, nullptr); sk_end_points, sk_colors, stops, 3, SkTileMode::kMirror, 0, nullptr);
{ {
RenderWith(testP, env, tolerance, RenderWith(testP, env, tolerance,
CaseParameters( CaseParameters(
@ -3898,7 +3902,7 @@ TEST_F(DisplayListRendering, SaveLayerClippedContentStillFilters) {
}, },
[=](const DlRenderContext& ctx) { [=](const DlRenderContext& ctx) {
auto layer_filter = auto layer_filter =
DlBlurImageFilter::Make(10.0f, 10.0f, DlTileMode::kDecal); DlImageFilter::MakeBlur(10.0f, 10.0f, DlTileMode::kDecal);
DlPaint layer_paint; DlPaint layer_paint;
layer_paint.setImageFilter(layer_filter); layer_paint.setImageFilter(layer_filter);
ctx.canvas->Save(); ctx.canvas->Save();
@ -3959,10 +3963,10 @@ TEST_F(DisplayListRendering, SaveLayerConsolidation) {
DlLinearToSrgbGammaColorFilter::kInstance, DlLinearToSrgbGammaColorFilter::kInstance,
}; };
std::vector<std::shared_ptr<DlImageFilter>> image_filters = { std::vector<std::shared_ptr<DlImageFilter>> image_filters = {
DlBlurImageFilter::Make(5.0f, 5.0f, DlTileMode::kDecal), DlImageFilter::MakeBlur(5.0f, 5.0f, DlTileMode::kDecal),
DlDilateImageFilter::Make(5.0f, 5.0f), DlImageFilter::MakeDilate(5.0f, 5.0f),
DlErodeImageFilter::Make(5.0f, 5.0f), DlImageFilter::MakeErode(5.0f, 5.0f),
DlMatrixImageFilter::Make(contract_matrix, DlImageSampling::kLinear), DlImageFilter::MakeMatrix(contract_matrix, DlImageSampling::kLinear),
}; };
auto render_content = [](DisplayListBuilder& builder) { auto render_content = [](DisplayListBuilder& builder) {

View File

@ -136,14 +136,15 @@ std::vector<DisplayListInvocationGroup> CreateAllAttributesOps() {
}}, }},
{"SetColorSource", {"SetColorSource",
{ {
{0, 96, 0, [](DlOpReceiver& r) { r.setColorSource(&kTestSource1); }}, {0, 104, 0,
{0, 152, 0, [](DlOpReceiver& r) { r.setColorSource(kTestSource1.get()); }},
{0, 176, 0,
[](DlOpReceiver& r) { r.setColorSource(kTestSource2.get()); }}, [](DlOpReceiver& r) { r.setColorSource(kTestSource2.get()); }},
{0, 152, 0, {0, 176, 0,
[](DlOpReceiver& r) { r.setColorSource(kTestSource3.get()); }}, [](DlOpReceiver& r) { r.setColorSource(kTestSource3.get()); }},
{0, 160, 0, {0, 184, 0,
[](DlOpReceiver& r) { r.setColorSource(kTestSource4.get()); }}, [](DlOpReceiver& r) { r.setColorSource(kTestSource4.get()); }},
{0, 152, 0, {0, 176, 0,
[](DlOpReceiver& r) { r.setColorSource(kTestSource5.get()); }}, [](DlOpReceiver& r) { r.setColorSource(kTestSource5.get()); }},
// Reset attribute to default as last entry // Reset attribute to default as last entry

View File

@ -7,6 +7,7 @@
#include "flutter/display_list/display_list.h" #include "flutter/display_list/display_list.h"
#include "flutter/display_list/dl_builder.h" #include "flutter/display_list/dl_builder.h"
#include "flutter/display_list/effects/dl_color_sources.h"
#include "flutter/display_list/effects/dl_image_filters.h" #include "flutter/display_list/effects/dl_image_filters.h"
#include "flutter/testing/testing.h" #include "flutter/testing/testing.h"
@ -24,7 +25,7 @@ sk_sp<DisplayList> GetSampleNestedDisplayList();
typedef const std::function<void(DlOpReceiver&)> DlInvoker; typedef const std::function<void(DlOpReceiver&)> DlInvoker;
constexpr SkPoint kEndPoints[] = { constexpr DlPoint kEndPoints[] = {
{0, 0}, {0, 0},
{100, 100}, {100, 100},
}; };
@ -89,10 +90,11 @@ static auto TestImage1 = MakeTestImage(40, 40, 5);
static auto TestImage2 = MakeTestImage(50, 50, 5); static auto TestImage2 = MakeTestImage(50, 50, 5);
static auto TestSkImage = MakeTestImage(30, 30, 5)->skia_image(); static auto TestSkImage = MakeTestImage(30, 30, 5)->skia_image();
static const DlImageColorSource kTestSource1(TestImage1, static const std::shared_ptr<DlColorSource> kTestSource1 =
DlTileMode::kClamp, DlColorSource::MakeImage(TestImage1,
DlTileMode::kMirror, DlTileMode::kClamp,
kLinearSampling); DlTileMode::kMirror,
kLinearSampling);
static const std::shared_ptr<DlColorSource> kTestSource2 = static const std::shared_ptr<DlColorSource> kTestSource2 =
DlColorSource::MakeLinear(kEndPoints[0], DlColorSource::MakeLinear(kEndPoints[0],
kEndPoints[1], kEndPoints[1],

View File

@ -4,8 +4,7 @@
#include "flutter/flow/layers/backdrop_filter_layer.h" #include "flutter/flow/layers/backdrop_filter_layer.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/display_list/effects/dl_matrix_image_filter.h"
#include "flutter/flow/layers/clip_rect_layer.h" #include "flutter/flow/layers/clip_rect_layer.h"
#include "flutter/flow/layers/transform_layer.h" #include "flutter/flow/layers/transform_layer.h"
#include "flutter/flow/testing/diff_context_test.h" #include "flutter/flow/testing/diff_context_test.h"
@ -20,9 +19,9 @@ using BackdropFilterLayerTest = LayerTest;
#ifndef NDEBUG #ifndef NDEBUG
TEST_F(BackdropFilterLayerTest, PaintingEmptyLayerDies) { TEST_F(BackdropFilterLayerTest, PaintingEmptyLayerDies) {
auto filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto layer = std::make_shared<BackdropFilterLayer>(filter.shared(), auto layer =
DlBlendMode::kSrcOver); std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver);
auto parent = std::make_shared<ClipRectLayer>(kEmptyRect, Clip::kHardEdge); auto parent = std::make_shared<ClipRectLayer>(kEmptyRect, Clip::kHardEdge);
parent->Add(layer); parent->Add(layer);
@ -39,9 +38,9 @@ TEST_F(BackdropFilterLayerTest, PaintBeforePrerollDies) {
const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f); const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f);
const SkPath child_path = SkPath().addRect(child_bounds); const SkPath child_path = SkPath().addRect(child_bounds);
auto mock_layer = std::make_shared<MockLayer>(child_path); auto mock_layer = std::make_shared<MockLayer>(child_path);
auto filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto layer = std::make_shared<BackdropFilterLayer>(filter.shared(), auto layer =
DlBlendMode::kSrcOver); std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver);
layer->Add(mock_layer); layer->Add(mock_layer);
EXPECT_EQ(layer->paint_bounds(), kEmptyRect); EXPECT_EQ(layer->paint_bounds(), kEmptyRect);
@ -101,7 +100,7 @@ TEST_F(BackdropFilterLayerTest, SimpleFilter) {
const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f); const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f);
const SkPath child_path = SkPath().addRect(child_bounds); const SkPath child_path = SkPath().addRect(child_bounds);
const DlPaint child_paint = DlPaint(DlColor::kYellow()); const DlPaint child_paint = DlPaint(DlColor::kYellow());
auto layer_filter = DlBlurImageFilter::Make(2.5, 3.2, DlTileMode::kClamp); auto layer_filter = DlImageFilter::MakeBlur(2.5, 3.2, DlTileMode::kClamp);
auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint); auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
auto layer = std::make_shared<BackdropFilterLayer>(layer_filter, auto layer = std::make_shared<BackdropFilterLayer>(layer_filter,
DlBlendMode::kSrcOver); DlBlendMode::kSrcOver);
@ -148,7 +147,7 @@ TEST_F(BackdropFilterLayerTest, NonSrcOverBlend) {
const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f); const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f);
const SkPath child_path = SkPath().addRect(child_bounds); const SkPath child_path = SkPath().addRect(child_bounds);
const DlPaint child_paint = DlPaint(DlColor::kYellow()); const DlPaint child_paint = DlPaint(DlColor::kYellow());
auto layer_filter = DlBlurImageFilter::Make(2.5, 3.2, DlTileMode::kClamp); auto layer_filter = DlImageFilter::MakeBlur(2.5, 3.2, DlTileMode::kClamp);
auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint); auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
auto layer = auto layer =
std::make_shared<BackdropFilterLayer>(layer_filter, DlBlendMode::kSrc); std::make_shared<BackdropFilterLayer>(layer_filter, DlBlendMode::kSrc);
@ -204,7 +203,7 @@ TEST_F(BackdropFilterLayerTest, MultipleChildren) {
const DlPaint child_paint2 = DlPaint(DlColor::kCyan()); const DlPaint child_paint2 = DlPaint(DlColor::kCyan());
SkRect children_bounds = child_path1.getBounds(); SkRect children_bounds = child_path1.getBounds();
children_bounds.join(child_path2.getBounds()); children_bounds.join(child_path2.getBounds());
auto layer_filter = DlBlurImageFilter::Make(2.5, 3.2, DlTileMode::kClamp); auto layer_filter = DlImageFilter::MakeBlur(2.5, 3.2, DlTileMode::kClamp);
auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1); auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1);
auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2); auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
auto layer = std::make_shared<BackdropFilterLayer>(layer_filter, auto layer = std::make_shared<BackdropFilterLayer>(layer_filter,
@ -267,8 +266,8 @@ TEST_F(BackdropFilterLayerTest, Nested) {
const DlPaint child_paint2 = DlPaint(DlColor::kCyan()); const DlPaint child_paint2 = DlPaint(DlColor::kCyan());
SkRect children_bounds = child_path1.getBounds(); SkRect children_bounds = child_path1.getBounds();
children_bounds.join(child_path2.getBounds()); children_bounds.join(child_path2.getBounds());
auto layer_filter1 = DlBlurImageFilter::Make(2.5, 3.2, DlTileMode::kClamp); auto layer_filter1 = DlImageFilter::MakeBlur(2.5, 3.2, DlTileMode::kClamp);
auto layer_filter2 = DlBlurImageFilter::Make(2.7, 3.1, DlTileMode::kDecal); auto layer_filter2 = DlImageFilter::MakeBlur(2.7, 3.1, DlTileMode::kDecal);
auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1); auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1);
auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2); auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
auto layer1 = std::make_shared<BackdropFilterLayer>(layer_filter1, auto layer1 = std::make_shared<BackdropFilterLayer>(layer_filter1,
@ -339,11 +338,11 @@ TEST_F(BackdropFilterLayerTest, Nested) {
TEST_F(BackdropFilterLayerTest, Readback) { TEST_F(BackdropFilterLayerTest, Readback) {
std::shared_ptr<DlImageFilter> no_filter; std::shared_ptr<DlImageFilter> no_filter;
auto layer_filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp); auto layer_filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto initial_transform = SkMatrix(); auto initial_transform = SkMatrix();
// BDF with filter always reads from surface // BDF with filter always reads from surface
auto layer1 = std::make_shared<BackdropFilterLayer>(layer_filter.shared(), auto layer1 = std::make_shared<BackdropFilterLayer>(layer_filter,
DlBlendMode::kSrcOver); DlBlendMode::kSrcOver);
preroll_context()->surface_needs_readback = false; preroll_context()->surface_needs_readback = false;
preroll_context()->state_stack.set_preroll_delegate(initial_transform); preroll_context()->state_stack.set_preroll_delegate(initial_transform);
@ -372,14 +371,14 @@ TEST_F(BackdropFilterLayerTest, Readback) {
} }
TEST_F(BackdropFilterLayerTest, OpacityInheritance) { TEST_F(BackdropFilterLayerTest, OpacityInheritance) {
auto backdrop_filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
const SkPath mock_path = SkPath().addRect(SkRect::MakeLTRB(0, 0, 10, 10)); const SkPath mock_path = SkPath().addRect(SkRect::MakeLTRB(0, 0, 10, 10));
const DlPaint mock_paint = DlPaint(DlColor::kRed()); const DlPaint mock_paint = DlPaint(DlColor::kRed());
const SkRect clip_rect = SkRect::MakeLTRB(0, 0, 100, 100); const SkRect clip_rect = SkRect::MakeLTRB(0, 0, 100, 100);
auto clip = std::make_shared<ClipRectLayer>(clip_rect, Clip::kHardEdge); auto clip = std::make_shared<ClipRectLayer>(clip_rect, Clip::kHardEdge);
auto parent = std::make_shared<OpacityLayer>(128, SkPoint::Make(0, 0)); auto parent = std::make_shared<OpacityLayer>(128, SkPoint::Make(0, 0));
auto layer = std::make_shared<BackdropFilterLayer>(backdrop_filter.shared(), auto layer = std::make_shared<BackdropFilterLayer>(backdrop_filter,
DlBlendMode::kSrcOver); DlBlendMode::kSrcOver);
auto child = std::make_shared<MockLayer>(mock_path, mock_paint); auto child = std::make_shared<MockLayer>(mock_path, mock_paint);
layer->Add(child); layer->Add(child);
@ -400,7 +399,8 @@ TEST_F(BackdropFilterLayerTest, OpacityInheritance) {
/* BackdropFilterLayer::Paint */ { /* BackdropFilterLayer::Paint */ {
DlPaint save_paint; DlPaint save_paint;
save_paint.setAlpha(128); save_paint.setAlpha(128);
expected_builder.SaveLayer(&clip_rect, &save_paint, &backdrop_filter); expected_builder.SaveLayer(&clip_rect, &save_paint,
backdrop_filter.get());
{ {
/* MockLayer::Paint */ { /* MockLayer::Paint */ {
DlPaint child_paint; DlPaint child_paint;
@ -420,20 +420,20 @@ TEST_F(BackdropFilterLayerTest, OpacityInheritance) {
using BackdropLayerDiffTest = DiffContextTest; using BackdropLayerDiffTest = DiffContextTest;
TEST_F(BackdropLayerDiffTest, BackdropLayer) { TEST_F(BackdropLayerDiffTest, BackdropLayer) {
auto filter = DlBlurImageFilter(10, 10, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(10, 10, DlTileMode::kClamp);
{ {
// tests later assume 30px readback area, fail early if that's not the case // tests later assume 30px readback area, fail early if that's not the case
DlIRect readback; DlIRect readback;
EXPECT_EQ(filter.get_input_device_bounds(DlIRect::MakeWH(10, 10), EXPECT_EQ(filter->get_input_device_bounds(DlIRect::MakeWH(10, 10),
DlMatrix(), readback), DlMatrix(), readback),
&readback); &readback);
EXPECT_EQ(readback, DlIRect::MakeLTRB(-30, -30, 40, 40)); EXPECT_EQ(readback, DlIRect::MakeLTRB(-30, -30, 40, 40));
} }
MockLayerTree l1(SkISize::Make(100, 100)); MockLayerTree l1(SkISize::Make(100, 100));
l1.root()->Add(std::make_shared<BackdropFilterLayer>(filter.shared(), l1.root()->Add(
DlBlendMode::kSrcOver)); std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver));
// no clip, effect over entire surface // no clip, effect over entire surface
auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100))); auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100)));
@ -443,8 +443,8 @@ TEST_F(BackdropLayerDiffTest, BackdropLayer) {
auto clip = std::make_shared<ClipRectLayer>(SkRect::MakeLTRB(20, 20, 60, 60), auto clip = std::make_shared<ClipRectLayer>(SkRect::MakeLTRB(20, 20, 60, 60),
Clip::kHardEdge); Clip::kHardEdge);
clip->Add(std::make_shared<BackdropFilterLayer>(filter.shared(), clip->Add(
DlBlendMode::kSrcOver)); std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver));
l2.root()->Add(clip); l2.root()->Add(clip);
damage = DiffLayerTree(l2, MockLayerTree(SkISize::Make(100, 100))); damage = DiffLayerTree(l2, MockLayerTree(SkISize::Make(100, 100)));
@ -478,15 +478,15 @@ TEST_F(BackdropLayerDiffTest, BackdropLayer) {
} }
TEST_F(BackdropLayerDiffTest, ReadbackOutsideOfPaintArea) { TEST_F(BackdropLayerDiffTest, ReadbackOutsideOfPaintArea) {
auto filter = DlMatrixImageFilter(DlMatrix::MakeTranslation({50, 50}), auto filter = DlImageFilter::MakeMatrix(DlMatrix::MakeTranslation({50, 50}),
DlImageSampling::kLinear); DlImageSampling::kLinear);
MockLayerTree l1(SkISize::Make(100, 100)); MockLayerTree l1(SkISize::Make(100, 100));
auto clip = std::make_shared<ClipRectLayer>(SkRect::MakeLTRB(60, 60, 80, 80), auto clip = std::make_shared<ClipRectLayer>(SkRect::MakeLTRB(60, 60, 80, 80),
Clip::kHardEdge); Clip::kHardEdge);
clip->Add(std::make_shared<BackdropFilterLayer>(filter.shared(), clip->Add(
DlBlendMode::kSrcOver)); std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver));
l1.root()->Add(clip); l1.root()->Add(clip);
auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100))); auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100)));
@ -503,13 +503,13 @@ TEST_F(BackdropLayerDiffTest, ReadbackOutsideOfPaintArea) {
} }
TEST_F(BackdropLayerDiffTest, BackdropLayerInvalidTransform) { TEST_F(BackdropLayerDiffTest, BackdropLayerInvalidTransform) {
auto filter = DlBlurImageFilter(10, 10, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(10, 10, DlTileMode::kClamp);
{ {
// tests later assume 30px readback area, fail early if that's not the case // tests later assume 30px readback area, fail early if that's not the case
DlIRect readback; DlIRect readback;
EXPECT_EQ(filter.get_input_device_bounds(DlIRect::MakeWH(10, 10), EXPECT_EQ(filter->get_input_device_bounds(DlIRect::MakeWH(10, 10),
DlMatrix(), readback), DlMatrix(), readback),
&readback); &readback);
EXPECT_EQ(readback, DlIRect::MakeLTRB(-30, -30, 40, 40)); EXPECT_EQ(readback, DlIRect::MakeLTRB(-30, -30, 40, 40));
} }
@ -521,8 +521,8 @@ TEST_F(BackdropLayerDiffTest, BackdropLayerInvalidTransform) {
auto transform_layer = std::make_shared<TransformLayer>(transform); auto transform_layer = std::make_shared<TransformLayer>(transform);
l1.root()->Add(transform_layer); l1.root()->Add(transform_layer);
transform_layer->Add(std::make_shared<BackdropFilterLayer>( transform_layer->Add(
filter.shared(), DlBlendMode::kSrcOver)); std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver));
auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100))); auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100)));
EXPECT_EQ(damage.frame_damage, SkIRect::MakeWH(100, 100)); EXPECT_EQ(damage.frame_damage, SkIRect::MakeWH(100, 100));

View File

@ -5,8 +5,7 @@
#include "flutter/flow/layers/image_filter_layer.h" #include "flutter/flow/layers/image_filter_layer.h"
#include "flutter/display_list/dl_tile_mode.h" #include "flutter/display_list/dl_tile_mode.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/display_list/effects/dl_matrix_image_filter.h"
#include "flutter/flow/layers/layer_tree.h" #include "flutter/flow/layers/layer_tree.h"
#include "flutter/flow/layers/transform_layer.h" #include "flutter/flow/layers/transform_layer.h"
#include "flutter/flow/testing/diff_context_test.h" #include "flutter/flow/testing/diff_context_test.h"
@ -84,7 +83,7 @@ TEST_F(ImageFilterLayerTest, SimpleFilter) {
const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f); const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f);
const SkPath child_path = SkPath().addRect(child_bounds); const SkPath child_path = SkPath().addRect(child_bounds);
const DlPaint child_paint = DlPaint(DlColor::kYellow()); const DlPaint child_paint = DlPaint(DlColor::kYellow());
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear);
auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint); auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
auto layer = std::make_shared<ImageFilterLayer>(dl_image_filter); auto layer = std::make_shared<ImageFilterLayer>(dl_image_filter);
@ -125,7 +124,7 @@ TEST_F(ImageFilterLayerTest, SimpleFilterWithOffset) {
const SkPath child_path = SkPath().addRect(child_bounds); const SkPath child_path = SkPath().addRect(child_bounds);
const DlPaint child_paint = DlPaint(DlColor::kYellow()); const DlPaint child_paint = DlPaint(DlColor::kYellow());
const SkPoint layer_offset = SkPoint::Make(5.5, 6.5); const SkPoint layer_offset = SkPoint::Make(5.5, 6.5);
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear);
auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint); auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
auto layer = auto layer =
@ -177,7 +176,7 @@ TEST_F(ImageFilterLayerTest, SimpleFilterBounds) {
const DlPaint child_paint = DlPaint(DlColor::kYellow()); const DlPaint child_paint = DlPaint(DlColor::kYellow());
const DlMatrix filter_transform = DlMatrix::MakeScale({2.0, 2.0, 1}); const DlMatrix filter_transform = DlMatrix::MakeScale({2.0, 2.0, 1});
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
filter_transform, DlImageSampling::kMipmapLinear); filter_transform, DlImageSampling::kMipmapLinear);
auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint); auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
auto layer = std::make_shared<ImageFilterLayer>(dl_image_filter); auto layer = std::make_shared<ImageFilterLayer>(dl_image_filter);
@ -218,7 +217,7 @@ TEST_F(ImageFilterLayerTest, MultipleChildren) {
SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f)); SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f));
const DlPaint child_paint1 = DlPaint(DlColor::kYellow()); const DlPaint child_paint1 = DlPaint(DlColor::kYellow());
const DlPaint child_paint2 = DlPaint(DlColor::kCyan()); const DlPaint child_paint2 = DlPaint(DlColor::kCyan());
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear);
auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1); auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1);
auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2); auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
@ -272,9 +271,9 @@ TEST_F(ImageFilterLayerTest, Nested) {
SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f)); SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f));
const DlPaint child_paint1 = DlPaint(DlColor::kYellow()); const DlPaint child_paint1 = DlPaint(DlColor::kYellow());
const DlPaint child_paint2 = DlPaint(DlColor::kCyan()); const DlPaint child_paint2 = DlPaint(DlColor::kCyan());
auto dl_image_filter1 = DlMatrixImageFilter::Make( auto dl_image_filter1 = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear);
auto dl_image_filter2 = DlMatrixImageFilter::Make( auto dl_image_filter2 = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({3.0, 4.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({3.0, 4.0}), DlImageSampling::kMipmapLinear);
auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1); auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1);
auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2); auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
@ -345,7 +344,7 @@ TEST_F(ImageFilterLayerTest, Nested) {
} }
TEST_F(ImageFilterLayerTest, Readback) { TEST_F(ImageFilterLayerTest, Readback) {
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kLinear);
// ImageFilterLayer does not read from surface // ImageFilterLayer does not read from surface
@ -364,7 +363,7 @@ TEST_F(ImageFilterLayerTest, Readback) {
} }
TEST_F(ImageFilterLayerTest, CacheChild) { TEST_F(ImageFilterLayerTest, CacheChild) {
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear);
auto initial_transform = SkMatrix::Translate(50.0, 25.5); auto initial_transform = SkMatrix::Translate(50.0, 25.5);
auto other_transform = SkMatrix::Scale(1.0, 2.0); auto other_transform = SkMatrix::Scale(1.0, 2.0);
@ -408,7 +407,7 @@ TEST_F(ImageFilterLayerTest, CacheChild) {
} }
TEST_F(ImageFilterLayerTest, CacheChildren) { TEST_F(ImageFilterLayerTest, CacheChildren) {
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear);
auto initial_transform = SkMatrix::Translate(50.0, 25.5); auto initial_transform = SkMatrix::Translate(50.0, 25.5);
auto other_transform = SkMatrix::Scale(1.0, 2.0); auto other_transform = SkMatrix::Scale(1.0, 2.0);
@ -489,7 +488,7 @@ TEST_F(ImageFilterLayerTest, CacheChildren) {
} }
TEST_F(ImageFilterLayerTest, CacheImageFilterLayerSelf) { TEST_F(ImageFilterLayerTest, CacheImageFilterLayerSelf) {
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear);
auto initial_transform = SkMatrix::Translate(50.0, 25.5); auto initial_transform = SkMatrix::Translate(50.0, 25.5);
@ -591,7 +590,7 @@ TEST_F(ImageFilterLayerTest, OpacityInheritance) {
const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f); const SkRect child_bounds = SkRect::MakeLTRB(5.0f, 6.0f, 20.5f, 21.5f);
const SkPath child_path = SkPath().addRect(child_bounds); const SkPath child_path = SkPath().addRect(child_bounds);
const DlPaint child_paint = DlPaint(DlColor::kYellow()); const DlPaint child_paint = DlPaint(DlColor::kYellow());
auto dl_image_filter = DlMatrixImageFilter::Make( auto dl_image_filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear);
// The mock_layer child will not be compatible with opacity // The mock_layer child will not be compatible with opacity
@ -644,7 +643,7 @@ TEST_F(ImageFilterLayerTest, OpacityInheritance) {
using ImageFilterLayerDiffTest = DiffContextTest; using ImageFilterLayerDiffTest = DiffContextTest;
TEST_F(ImageFilterLayerDiffTest, ImageFilterLayer) { TEST_F(ImageFilterLayerDiffTest, ImageFilterLayer) {
auto dl_blur_filter = DlBlurImageFilter::Make(10, 10, DlTileMode::kClamp); auto dl_blur_filter = DlImageFilter::MakeBlur(10, 10, DlTileMode::kClamp);
{ {
// tests later assume 30px paint area, fail early if that's not the case // tests later assume 30px paint area, fail early if that's not the case
DlIRect input_bounds; DlIRect input_bounds;
@ -690,7 +689,7 @@ TEST_F(ImageFilterLayerDiffTest, ImageFilterLayer) {
} }
TEST_F(ImageFilterLayerDiffTest, ImageFilterLayerInflatestChildSize) { TEST_F(ImageFilterLayerDiffTest, ImageFilterLayerInflatestChildSize) {
auto dl_blur_filter = DlBlurImageFilter::Make(10, 10, DlTileMode::kClamp); auto dl_blur_filter = DlImageFilter::MakeBlur(10, 10, DlTileMode::kClamp);
{ {
// tests later assume 30px paint area, fail early if that's not the case // tests later assume 30px paint area, fail early if that's not the case

View File

@ -4,7 +4,6 @@
#include "gtest/gtest.h" #include "gtest/gtest.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h"
#include "flutter/display_list/effects/dl_color_filter.h" #include "flutter/display_list/effects/dl_color_filter.h"
#include "flutter/display_list/effects/dl_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/flow/layers/layer.h" #include "flutter/flow/layers/layer.h"
@ -289,9 +288,9 @@ TEST(LayerStateStack, ColorFilter) {
TEST(LayerStateStack, ImageFilter) { TEST(LayerStateStack, ImageFilter) {
SkRect rect = {10, 10, 20, 20}; SkRect rect = {10, 10, 20, 20};
std::shared_ptr<DlImageFilter> outer_filter = std::shared_ptr<DlImageFilter> outer_filter =
DlBlurImageFilter::Make(2.0f, 2.0f, DlTileMode::kClamp); DlImageFilter::MakeBlur(2.0f, 2.0f, DlTileMode::kClamp);
std::shared_ptr<DlImageFilter> inner_filter = std::shared_ptr<DlImageFilter> inner_filter =
DlBlurImageFilter::Make(3.0f, 3.0f, DlTileMode::kClamp); DlImageFilter::MakeBlur(3.0f, 3.0f, DlTileMode::kClamp);
SkRect inner_src_rect = rect; SkRect inner_src_rect = rect;
DlRect dl_outer_src_rect; DlRect dl_outer_src_rect;
ASSERT_EQ(inner_filter->map_local_bounds(ToDlRect(rect), dl_outer_src_rect), ASSERT_EQ(inner_filter->map_local_bounds(ToDlRect(rect), dl_outer_src_rect),
@ -432,7 +431,7 @@ TEST(LayerStateStack, OpacityAndColorFilterInteraction) {
TEST(LayerStateStack, OpacityAndImageFilterInteraction) { TEST(LayerStateStack, OpacityAndImageFilterInteraction) {
SkRect rect = {10, 10, 20, 20}; SkRect rect = {10, 10, 20, 20};
std::shared_ptr<DlImageFilter> image_filter = std::shared_ptr<DlImageFilter> image_filter =
DlBlurImageFilter::Make(2.0f, 2.0f, DlTileMode::kClamp); DlImageFilter::MakeBlur(2.0f, 2.0f, DlTileMode::kClamp);
DisplayListBuilder builder; DisplayListBuilder builder;
LayerStateStack state_stack; LayerStateStack state_stack;
@ -494,7 +493,7 @@ TEST(LayerStateStack, ColorFilterAndImageFilterInteraction) {
std::make_shared<DlBlendColorFilter>(DlColor::kYellow(), std::make_shared<DlBlendColorFilter>(DlColor::kYellow(),
DlBlendMode::kColorBurn); DlBlendMode::kColorBurn);
std::shared_ptr<DlImageFilter> image_filter = std::shared_ptr<DlImageFilter> image_filter =
DlBlurImageFilter::Make(2.0f, 2.0f, DlTileMode::kClamp); DlImageFilter::MakeBlur(2.0f, 2.0f, DlTileMode::kClamp);
DisplayListBuilder builder; DisplayListBuilder builder;
LayerStateStack state_stack; LayerStateStack state_stack;

View File

@ -4,7 +4,7 @@
#include "flutter/flow/layers/opacity_layer.h" #include "flutter/flow/layers/opacity_layer.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/flow/layers/clip_rect_layer.h" #include "flutter/flow/layers/clip_rect_layer.h"
#include "flutter/flow/layers/image_filter_layer.h" #include "flutter/flow/layers/image_filter_layer.h"
#include "flutter/flow/layers/layer_tree.h" #include "flutter/flow/layers/layer_tree.h"
@ -543,7 +543,7 @@ TEST_F(OpacityLayerTest, OpacityInheritanceThroughImageFilter) {
auto opacity_layer = auto opacity_layer =
std::make_shared<OpacityLayer>(128, SkPoint::Make(20, 20)); std::make_shared<OpacityLayer>(128, SkPoint::Make(20, 20));
auto filter_layer = std::make_shared<ImageFilterLayer>( auto filter_layer = std::make_shared<ImageFilterLayer>(
DlBlurImageFilter::Make(5.0, 5.0, DlTileMode::kClamp)); DlImageFilter::MakeBlur(5.0, 5.0, DlTileMode::kClamp));
auto mock_layer = MockLayer::MakeOpacityCompatible(SkPath()); auto mock_layer = MockLayer::MakeOpacityCompatible(SkPath());
filter_layer->Add(mock_layer); filter_layer->Add(mock_layer);
opacity_layer->Add(filter_layer); opacity_layer->Add(filter_layer);

View File

@ -30,8 +30,8 @@ static std::shared_ptr<DlColorSource> MakeFilter(DlColor color) {
0, 0,
1, 1,
}; };
return DlColorSource::MakeLinear(SkPoint::Make(0, 0), SkPoint::Make(10, 10), return DlColorSource::MakeLinear(DlPoint(0, 0), DlPoint(10, 10), 2, colors,
2, colors, stops, DlTileMode::kRepeat); stops, DlTileMode::kRepeat);
} }
#ifndef NDEBUG #ifndef NDEBUG

View File

@ -2,7 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/dl_image_filters.h"
#include "flutter/flow/embedded_views.h" #include "flutter/flow/embedded_views.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
@ -94,7 +94,7 @@ TEST(MutatorsStack, PushBackdropFilter) {
MutatorsStack stack; MutatorsStack stack;
const int num_of_mutators = 10; const int num_of_mutators = 10;
for (int i = 0; i < num_of_mutators; i++) { for (int i = 0; i < num_of_mutators; i++) {
auto filter = DlBlurImageFilter::Make(i, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(i, 5, DlTileMode::kClamp);
stack.PushBackdropFilter(filter, SkRect::MakeXYWH(i, i, i, i)); stack.PushBackdropFilter(filter, SkRect::MakeXYWH(i, i, i, i));
} }
@ -169,7 +169,7 @@ TEST(MutatorsStack, Equality) {
stack.PushClipPath(path); stack.PushClipPath(path);
int alpha = 240; int alpha = 240;
stack.PushOpacity(alpha); stack.PushOpacity(alpha);
auto filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
stack.PushBackdropFilter(filter, SkRect::MakeEmpty()); stack.PushBackdropFilter(filter, SkRect::MakeEmpty());
MutatorsStack stack_other; MutatorsStack stack_other;
@ -183,7 +183,7 @@ TEST(MutatorsStack, Equality) {
stack_other.PushClipPath(other_path); stack_other.PushClipPath(other_path);
int other_alpha = 240; int other_alpha = 240;
stack_other.PushOpacity(other_alpha); stack_other.PushOpacity(other_alpha);
auto other_filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); auto other_filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
stack_other.PushBackdropFilter(other_filter, SkRect::MakeEmpty()); stack_other.PushBackdropFilter(other_filter, SkRect::MakeEmpty());
ASSERT_TRUE(stack == stack_other); ASSERT_TRUE(stack == stack_other);
@ -215,7 +215,7 @@ TEST(Mutator, Initialization) {
Mutator mutator5 = Mutator(alpha); Mutator mutator5 = Mutator(alpha);
ASSERT_TRUE(mutator5.GetType() == MutatorType::kOpacity); ASSERT_TRUE(mutator5.GetType() == MutatorType::kOpacity);
auto filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
Mutator mutator6 = Mutator(filter, SkRect::MakeEmpty()); Mutator mutator6 = Mutator(filter, SkRect::MakeEmpty());
ASSERT_TRUE(mutator6.GetType() == MutatorType::kBackdropFilter); ASSERT_TRUE(mutator6.GetType() == MutatorType::kBackdropFilter);
ASSERT_TRUE(mutator6.GetFilterMutation().GetFilter() == *filter); ASSERT_TRUE(mutator6.GetFilterMutation().GetFilter() == *filter);
@ -248,7 +248,7 @@ TEST(Mutator, CopyConstructor) {
Mutator copy5 = Mutator(mutator5); Mutator copy5 = Mutator(mutator5);
ASSERT_TRUE(mutator5 == copy5); ASSERT_TRUE(mutator5 == copy5);
auto filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
Mutator mutator6 = Mutator(filter, SkRect::MakeEmpty()); Mutator mutator6 = Mutator(filter, SkRect::MakeEmpty());
Mutator copy6 = Mutator(mutator6); Mutator copy6 = Mutator(mutator6);
ASSERT_TRUE(mutator6 == copy6); ASSERT_TRUE(mutator6 == copy6);
@ -281,8 +281,8 @@ TEST(Mutator, Equality) {
Mutator other_mutator5 = Mutator(alpha); Mutator other_mutator5 = Mutator(alpha);
ASSERT_TRUE(mutator5 == other_mutator5); ASSERT_TRUE(mutator5 == other_mutator5);
auto filter1 = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); auto filter1 = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto filter2 = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); auto filter2 = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
Mutator mutator6 = Mutator(filter1, SkRect::MakeEmpty()); Mutator mutator6 = Mutator(filter1, SkRect::MakeEmpty());
Mutator other_mutator6 = Mutator(filter2, SkRect::MakeEmpty()); Mutator other_mutator6 = Mutator(filter2, SkRect::MakeEmpty());
ASSERT_TRUE(mutator6 == other_mutator6); ASSERT_TRUE(mutator6 == other_mutator6);
@ -302,8 +302,8 @@ TEST(Mutator, UnEquality) {
Mutator other_mutator2 = Mutator(alpha2); Mutator other_mutator2 = Mutator(alpha2);
ASSERT_TRUE(mutator2 != other_mutator2); ASSERT_TRUE(mutator2 != other_mutator2);
auto filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto filter2 = DlBlurImageFilter::Make(10, 10, DlTileMode::kClamp); auto filter2 = DlImageFilter::MakeBlur(10, 10, DlTileMode::kClamp);
Mutator mutator3 = Mutator(filter, SkRect::MakeEmpty()); Mutator mutator3 = Mutator(filter, SkRect::MakeEmpty());
Mutator other_mutator3 = Mutator(filter2, SkRect::MakeEmpty()); Mutator other_mutator3 = Mutator(filter2, SkRect::MakeEmpty());
ASSERT_TRUE(mutator3 != other_mutator3); ASSERT_TRUE(mutator3 != other_mutator3);

View File

@ -22,9 +22,9 @@ std::shared_ptr<DlColorSource> CreateCheckerboardShader(SkColor c1,
bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2); bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2);
bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2); bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2);
auto image = DlImage::Make(SkImages::RasterFromBitmap(bm)); auto image = DlImage::Make(SkImages::RasterFromBitmap(bm));
return std::make_shared<DlImageColorSource>( return DlColorSource::MakeImage(image, DlTileMode::kRepeat,
image, DlTileMode::kRepeat, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor); DlImageSampling::kNearestNeighbor);
} }
} // anonymous namespace } // anonymous namespace

View File

@ -7,7 +7,7 @@
#include "display_list/dl_tile_mode.h" #include "display_list/dl_tile_mode.h"
#include "display_list/effects/dl_color_filter.h" #include "display_list/effects/dl_color_filter.h"
#include "display_list/effects/dl_color_source.h" #include "display_list/effects/dl_color_source.h"
#include "display_list/effects/dl_image_filters.h" #include "display_list/effects/dl_image_filter.h"
#include "display_list/effects/dl_mask_filter.h" #include "display_list/effects/dl_mask_filter.h"
#include "flutter/impeller/display_list/aiks_unittests.h" #include "flutter/impeller/display_list/aiks_unittests.h"
@ -118,15 +118,14 @@ void CanRenderTiledTexture(AiksTest* aiks_test,
/*enable_mipmapping=*/true); /*enable_mipmapping=*/true);
GenerateMipmap(context, texture, "table_mountain_nx"); GenerateMipmap(context, texture, "table_mountain_nx");
auto image = DlImageImpeller::Make(texture); auto image = DlImageImpeller::Make(texture);
SkMatrix sk_local_matrix = ToSkMatrix(local_matrix); auto color_source = DlColorSource::MakeImage(
DlImageColorSource color_source(image, tile_mode, tile_mode, image, tile_mode, tile_mode, DlImageSampling::kNearestNeighbor,
DlImageSampling::kNearestNeighbor, &local_matrix);
&sk_local_matrix);
DisplayListBuilder builder; DisplayListBuilder builder;
DlPaint paint; DlPaint paint;
paint.setColor(DlColor::kWhite()); paint.setColor(DlColor::kWhite());
paint.setColorSource(&color_source); paint.setColorSource(color_source);
builder.Scale(aiks_test->GetContentScale().x, aiks_test->GetContentScale().y); builder.Scale(aiks_test->GetContentScale().x, aiks_test->GetContentScale().y);
builder.Translate(100.0f, 100.0f); builder.Translate(100.0f, 100.0f);
@ -329,10 +328,9 @@ TEST_P(AiksTest, CanRenderSimpleClips) {
{500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror)); {500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror));
draw(paint, 0, 300); draw(paint, 0, 300);
DlImageColorSource image_source(image, DlTileMode::kRepeat, paint.setColorSource(
DlTileMode::kRepeat, DlColorSource::MakeImage(image, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor); DlImageSampling::kNearestNeighbor));
paint.setColorSource(&image_source);
draw(paint, 300, 0); draw(paint, 300, 0);
ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
@ -484,11 +482,10 @@ TEST_P(AiksTest, FilledCirclesRenderCorrectly) {
{500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror)); {500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror));
builder.DrawCircle(SkPoint{500, 600}, 100, paint); builder.DrawCircle(SkPoint{500, 600}, 100, paint);
SkMatrix local_matrix = SkMatrix::Translate(700, 200); DlMatrix local_matrix = DlMatrix::MakeTranslation({700, 200});
DlImageColorSource image_source( paint.setColorSource(DlColorSource::MakeImage(
image, DlTileMode::kRepeat, DlTileMode::kRepeat, image, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor, &local_matrix); DlImageSampling::kNearestNeighbor, &local_matrix));
paint.setColorSource(&image_source);
builder.DrawCircle(SkPoint{800, 300}, 100, paint); builder.DrawCircle(SkPoint{800, 300}, 100, paint);
ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
@ -551,11 +548,10 @@ TEST_P(AiksTest, StrokedCirclesRenderCorrectly) {
{500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror)); {500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror));
draw(builder, {500, 600}, 5, 10, 10); draw(builder, {500, 600}, 5, 10, 10);
SkMatrix local_matrix = SkMatrix::Translate(700, 200); DlMatrix local_matrix = DlMatrix::MakeTranslation({700, 200});
DlImageColorSource image_source( paint.setColorSource(DlColorSource::MakeImage(
image, DlTileMode::kRepeat, DlTileMode::kRepeat, image, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor, &local_matrix); DlImageSampling::kNearestNeighbor, &local_matrix));
paint.setColorSource(&image_source);
draw(builder, {800, 300}, 5, 10, 10); draw(builder, {800, 300}, 5, 10, 10);
ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
@ -624,11 +620,10 @@ TEST_P(AiksTest, FilledEllipsesRenderCorrectly) {
builder.DrawOval(SkRect::MakeXYWH(200, 625, 200, 50), paint); builder.DrawOval(SkRect::MakeXYWH(200, 625, 200, 50), paint);
builder.DrawOval(SkRect::MakeXYWH(275, 550, 50, 200), paint); builder.DrawOval(SkRect::MakeXYWH(275, 550, 50, 200), paint);
SkMatrix local_matrix = SkMatrix::Translate(610, 15); DlMatrix local_matrix = DlMatrix::MakeTranslation({610, 15});
DlImageColorSource image_source( paint.setColorSource(DlColorSource::MakeImage(
image, DlTileMode::kRepeat, DlTileMode::kRepeat, image, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor, &local_matrix); DlImageSampling::kNearestNeighbor, &local_matrix));
paint.setColorSource(&image_source);
builder.DrawOval(SkRect::MakeXYWH(610, 90, 200, 50), paint); builder.DrawOval(SkRect::MakeXYWH(610, 90, 200, 50), paint);
builder.DrawOval(SkRect::MakeXYWH(685, 15, 50, 200), paint); builder.DrawOval(SkRect::MakeXYWH(685, 15, 50, 200), paint);
@ -711,11 +706,10 @@ TEST_P(AiksTest, FilledRoundRectsRenderCorrectly) {
SkRRect::MakeRectXY(SkRect::MakeLTRB(160, 550, 240, 750), 40, 40), paint); SkRRect::MakeRectXY(SkRect::MakeLTRB(160, 550, 240, 750), 40, 40), paint);
paint.setColor(DlColor::kWhite().modulateOpacity(0.1)); paint.setColor(DlColor::kWhite().modulateOpacity(0.1));
SkMatrix local_matrix = SkMatrix::Translate(520, 20); DlMatrix local_matrix = DlMatrix::MakeTranslation({520, 20});
DlImageColorSource image_source( paint.setColorSource(DlColorSource::MakeImage(
image, DlTileMode::kRepeat, DlTileMode::kRepeat, image, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor, &local_matrix); DlImageSampling::kNearestNeighbor, &local_matrix));
paint.setColorSource(&image_source);
for (int i = 1; i <= 10; i++) { for (int i = 1; i <= 10; i++) {
int j = 11 - i; int j = 11 - i;
builder.DrawRRect( builder.DrawRRect(
@ -726,11 +720,10 @@ TEST_P(AiksTest, FilledRoundRectsRenderCorrectly) {
} }
paint.setColor(DlColor::kWhite().modulateOpacity(0.5)); paint.setColor(DlColor::kWhite().modulateOpacity(0.5));
local_matrix = SkMatrix::Translate(800, 300); local_matrix = DlMatrix::MakeTranslation({800, 300});
DlImageColorSource image_source2( paint.setColorSource(DlColorSource::MakeImage(
image, DlTileMode::kRepeat, DlTileMode::kRepeat, image, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor, &local_matrix); DlImageSampling::kNearestNeighbor, &local_matrix));
paint.setColorSource(&image_source2);
builder.DrawRRect( builder.DrawRRect(
SkRRect::MakeRectXY(SkRect::MakeLTRB(800, 410, 1000, 490), 40, 40), SkRRect::MakeRectXY(SkRect::MakeLTRB(800, 410, 1000, 490), 40, 40),
paint); paint);
@ -835,7 +828,7 @@ TEST_P(AiksTest, CanRenderClippedBackdropFilter) {
builder.ClipRRect(clip_rrect, DlCanvas::ClipOp::kIntersect); builder.ClipRRect(clip_rrect, DlCanvas::ClipOp::kIntersect);
DlPaint save_paint; DlPaint save_paint;
auto backdrop_filter = DlColorFilterImageFilter::Make( auto backdrop_filter = DlImageFilter::MakeColorFilter(
DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kExclusion)); DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kExclusion));
builder.SaveLayer(&clip_rect, &save_paint, backdrop_filter.get()); builder.SaveLayer(&clip_rect, &save_paint, backdrop_filter.get());
@ -916,9 +909,9 @@ TEST_P(AiksTest, ImageColorSourceEffectTransform) {
// Translation // Translation
{ {
SkMatrix matrix = SkMatrix::Translate(50, 50); DlMatrix matrix = DlMatrix::MakeTranslation({50, 50});
DlPaint paint; DlPaint paint;
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(DlColorSource::MakeImage(
texture, DlTileMode::kRepeat, DlTileMode::kRepeat, texture, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor, &matrix)); DlImageSampling::kNearestNeighbor, &matrix));
@ -931,12 +924,11 @@ TEST_P(AiksTest, ImageColorSourceEffectTransform) {
builder.Rotate(45); builder.Rotate(45);
DlPaint paint; DlPaint paint;
Matrix impeller_matrix(1, -1, 0, 0, // Matrix matrix(1, -1, 0, 0, //
1, 1, 0, 0, // 1, 1, 0, 0, //
0, 0, 1, 0, // 0, 0, 1, 0, //
0, 0, 0, 1); 0, 0, 0, 1);
SkMatrix matrix = SkM44::ColMajor(impeller_matrix.m).asM33(); paint.setColorSource(DlColorSource::MakeImage(
paint.setColorSource(std::make_shared<DlImageColorSource>(
texture, DlTileMode::kRepeat, DlTileMode::kRepeat, texture, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor, &matrix)); DlImageSampling::kNearestNeighbor, &matrix));
builder.DrawRect(SkRect::MakeLTRB(100, 0, 200, 100), paint); builder.DrawRect(SkRect::MakeLTRB(100, 0, 200, 100), paint);
@ -949,8 +941,8 @@ TEST_P(AiksTest, ImageColorSourceEffectTransform) {
builder.Scale(100, 100); builder.Scale(100, 100);
DlPaint paint; DlPaint paint;
SkMatrix matrix = SkMatrix::Scale(0.005, 0.005); DlMatrix matrix = DlMatrix::MakeScale({0.005, 0.005, 1});
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(DlColorSource::MakeImage(
texture, DlTileMode::kRepeat, DlTileMode::kRepeat, texture, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor, &matrix)); DlImageSampling::kNearestNeighbor, &matrix));
@ -998,7 +990,7 @@ TEST_P(AiksTest, MatrixImageFilterDoesntCullWhenTranslatedFromOffscreen) {
DlPaint paint; DlPaint paint;
DlMatrix translate = DlMatrix::MakeTranslation({300, 0}); DlMatrix translate = DlMatrix::MakeTranslation({300, 0});
paint.setImageFilter( paint.setImageFilter(
DlMatrixImageFilter::Make(translate, DlImageSampling::kLinear)); DlImageFilter::MakeMatrix(translate, DlImageSampling::kLinear));
builder.SaveLayer(nullptr, &paint); builder.SaveLayer(nullptr, &paint);
DlPaint circle_paint; DlPaint circle_paint;
@ -1019,7 +1011,7 @@ TEST_P(AiksTest,
// +300 translation applied by a SaveLayer image filter. // +300 translation applied by a SaveLayer image filter.
DlPaint paint; DlPaint paint;
paint.setImageFilter(DlMatrixImageFilter::Make( paint.setImageFilter(DlImageFilter::MakeMatrix(
DlMatrix::MakeTranslation({300, 0}) * DlMatrix::MakeScale({2, 2, 1}), DlMatrix::MakeTranslation({300, 0}) * DlMatrix::MakeScale({2, 2, 1}),
DlImageSampling::kNearestNeighbor)); DlImageSampling::kNearestNeighbor));
builder.SaveLayer(nullptr, &paint); builder.SaveLayer(nullptr, &paint);
@ -1043,7 +1035,7 @@ TEST_P(AiksTest, ClearColorOptimizationWhenSubpassIsBiggerThanParentPass) {
paint.setColor(DlColor::kRed()); paint.setColor(DlColor::kRed());
builder.DrawRect(SkRect::MakeLTRB(200, 200, 300, 300), paint); builder.DrawRect(SkRect::MakeLTRB(200, 200, 300, 300), paint);
paint.setImageFilter(DlMatrixImageFilter::Make(DlMatrix::MakeScale({2, 2, 1}), paint.setImageFilter(DlImageFilter::MakeMatrix(DlMatrix::MakeScale({2, 2, 1}),
DlImageSampling::kLinear)); DlImageSampling::kLinear));
builder.SaveLayer(nullptr, &paint); builder.SaveLayer(nullptr, &paint);
// Draw a rectangle that would fully cover the parent pass size, but not // Draw a rectangle that would fully cover the parent pass size, but not
@ -1291,9 +1283,9 @@ TEST_P(AiksTest, FilledRoundRectPathsRenderCorrectly) {
draw_rrect_as_path(SkRect::MakeLTRB(100, 610, 300, 690), 40, 40, paint); draw_rrect_as_path(SkRect::MakeLTRB(100, 610, 300, 690), 40, 40, paint);
draw_rrect_as_path(SkRect::MakeLTRB(160, 550, 240, 750), 40, 40, paint); draw_rrect_as_path(SkRect::MakeLTRB(160, 550, 240, 750), 40, 40, paint);
auto matrix = SkMatrix::Translate(520, 20); auto matrix = DlMatrix::MakeTranslation({520, 20});
paint.setColor(DlColor::kWhite().modulateOpacity(0.1)); paint.setColor(DlColor::kWhite().modulateOpacity(0.1));
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(DlColorSource::MakeImage(
texture, DlTileMode::kRepeat, DlTileMode::kRepeat, texture, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kMipmapLinear, &matrix)); DlImageSampling::kMipmapLinear, &matrix));
for (int i = 1; i <= 10; i++) { for (int i = 1; i <= 10; i++) {
@ -1302,9 +1294,9 @@ TEST_P(AiksTest, FilledRoundRectPathsRenderCorrectly) {
720 + i * 20, 220 + j * 20), 720 + i * 20, 220 + j * 20),
i * 10, j * 10, paint); i * 10, j * 10, paint);
} }
matrix = SkMatrix::Translate(800, 300); matrix = DlMatrix::MakeTranslation({800, 300});
paint.setColor(DlColor::kWhite().modulateOpacity(0.5)); paint.setColor(DlColor::kWhite().modulateOpacity(0.5));
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(DlColorSource::MakeImage(
texture, DlTileMode::kRepeat, DlTileMode::kRepeat, texture, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kMipmapLinear, &matrix)); DlImageSampling::kMipmapLinear, &matrix));
@ -1520,7 +1512,7 @@ TEST_P(AiksTest, PipelineBlendSingleParameter) {
paint.setColor(DlColor::kGreen()); paint.setColor(DlColor::kGreen());
paint.setBlendMode(DlBlendMode::kSrcOver); paint.setBlendMode(DlBlendMode::kSrcOver);
paint.setImageFilter(DlColorFilterImageFilter::Make( paint.setImageFilter(DlImageFilter::MakeColorFilter(
DlBlendColorFilter::Make(DlColor::kWhite(), DlBlendMode::kDst))); DlBlendColorFilter::Make(DlColor::kWhite(), DlBlendMode::kDst)));
builder.DrawCircle(SkPoint::Make(200, 200), 200, paint); builder.DrawCircle(SkPoint::Make(200, 200), 200, paint);
builder.Restore(); builder.Restore();
@ -1538,7 +1530,7 @@ TEST_P(AiksTest, MassiveScalingMatrixImageFilter) {
} }
DisplayListBuilder builder(SkRect::MakeSize(SkSize::Make(1000, 1000))); DisplayListBuilder builder(SkRect::MakeSize(SkSize::Make(1000, 1000)));
auto filter = DlMatrixImageFilter::Make( auto filter = DlImageFilter::MakeMatrix(
DlMatrix::MakeScale({0.001, 0.001, 1}), DlImageSampling::kLinear); DlMatrix::MakeScale({0.001, 0.001, 1}), DlImageSampling::kLinear);
DlPaint paint; DlPaint paint;

View File

@ -154,7 +154,7 @@ TEST_P(AiksTest, DrawAdvancedBlendPartlyOffscreen) {
std::vector<Scalar> stops = {0.0, 1.0}; std::vector<Scalar> stops = {0.0, 1.0};
DlPaint paint; DlPaint paint;
SkMatrix matrix = SkMatrix::Scale(0.3, 0.3); DlMatrix matrix = DlMatrix::MakeScale({0.3, 0.3, 1.0});
paint.setColorSource(DlColorSource::MakeLinear( paint.setColorSource(DlColorSource::MakeLinear(
/*start_point=*/{0, 0}, // /*start_point=*/{0, 0}, //
/*end_point=*/{100, 100}, // /*end_point=*/{100, 100}, //

View File

@ -9,7 +9,6 @@
#include "flutter/display_list/dl_paint.h" #include "flutter/display_list/dl_paint.h"
#include "flutter/display_list/dl_sampling_options.h" #include "flutter/display_list/dl_sampling_options.h"
#include "flutter/display_list/dl_tile_mode.h" #include "flutter/display_list/dl_tile_mode.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h"
#include "flutter/display_list/effects/dl_color_filter.h" #include "flutter/display_list/effects/dl_color_filter.h"
#include "flutter/display_list/effects/dl_color_source.h" #include "flutter/display_list/effects/dl_color_source.h"
#include "flutter/display_list/effects/dl_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
@ -230,7 +229,7 @@ TEST_P(AiksTest, CanRenderBackdropBlurInteractive) {
DlPaint save_paint; DlPaint save_paint;
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = DlBlurImageFilter::Make(20, 20, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(20, 20, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get()); builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get());
builder.Restore(); builder.Restore();
@ -262,7 +261,7 @@ TEST_P(AiksTest, CanRenderBackdropBlur) {
DlPaint save_paint; DlPaint save_paint;
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = DlBlurImageFilter::Make(30, 30, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(30, 30, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get()); builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get());
builder.Restore(); builder.Restore();
@ -285,7 +284,7 @@ TEST_P(AiksTest, CanRenderBackdropBlurWithSingleBackdropId) {
DlPaint save_paint; DlPaint save_paint;
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = DlBlurImageFilter::Make(30, 30, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(30, 30, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get(), builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get(),
/*backdrop_id=*/1); /*backdrop_id=*/1);
builder.Restore(); builder.Restore();
@ -311,7 +310,7 @@ TEST_P(AiksTest, CanRenderMultipleBackdropBlurWithSingleBackdropId) {
DlPaint save_paint; DlPaint save_paint;
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = DlBlurImageFilter::Make(30, 30, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(30, 30, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get(), builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get(),
/*backdrop_id=*/1); /*backdrop_id=*/1);
builder.Restore(); builder.Restore();
@ -340,7 +339,7 @@ TEST_P(AiksTest,
DlPaint save_paint; DlPaint save_paint;
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = auto backdrop_filter =
DlBlurImageFilter::Make(30 + i, 30, DlTileMode::kClamp); DlImageFilter::MakeBlur(30 + i, 30, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get(), builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get(),
/*backdrop_id=*/1); /*backdrop_id=*/1);
builder.Restore(); builder.Restore();
@ -361,7 +360,7 @@ TEST_P(AiksTest, CanRenderBackdropBlurHugeSigma) {
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = auto backdrop_filter =
DlBlurImageFilter::Make(999999, 999999, DlTileMode::kClamp); DlImageFilter::MakeBlur(999999, 999999, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get()); builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get());
builder.Restore(); builder.Restore();
@ -374,7 +373,7 @@ TEST_P(AiksTest, CanRenderClippedBlur) {
DlPaint paint; DlPaint paint;
paint.setColor(DlColor::kGreen()); paint.setColor(DlColor::kGreen());
paint.setImageFilter(DlBlurImageFilter::Make(20, 20, DlTileMode::kDecal)); paint.setImageFilter(DlImageFilter::MakeBlur(20, 20, DlTileMode::kDecal));
builder.DrawCircle(SkPoint{400, 400}, 200, paint); builder.DrawCircle(SkPoint{400, 400}, 200, paint);
builder.Restore(); builder.Restore();
@ -580,7 +579,7 @@ static const std::map<std::string, MaskBlurTestConfig> kPaintVariations = {
{.style = DlBlurStyle::kSolid, {.style = DlBlurStyle::kSolid,
.sigma = 8.0f, .sigma = 8.0f,
.alpha = 0.5f, .alpha = 0.5f,
.image_filter = DlBlurImageFilter::Make(3, 3, DlTileMode::kClamp), .image_filter = DlImageFilter::MakeBlur(3, 3, DlTileMode::kClamp),
.invert_colors = true}}, .invert_colors = true}},
// 6. Solid style, translucent, exclusion blended. // 6. Solid style, translucent, exclusion blended.
{"SolidTranslucentExclusionBlend", {"SolidTranslucentExclusionBlend",
@ -596,7 +595,7 @@ static const std::map<std::string, MaskBlurTestConfig> kPaintVariations = {
{.style = DlBlurStyle::kInner, {.style = DlBlurStyle::kInner,
.sigma = 8.0f, .sigma = 8.0f,
.alpha = 0.5f, .alpha = 0.5f,
.image_filter = DlBlurImageFilter::Make(3, 3, DlTileMode::kClamp)}}, .image_filter = DlImageFilter::MakeBlur(3, 3, DlTileMode::kClamp)}},
// 9. Outer style, translucent. // 9. Outer style, translucent.
{"OuterTranslucent", {"OuterTranslucent",
{.style = DlBlurStyle::kOuter, .sigma = 8.0f, .alpha = 0.5f}}, {.style = DlBlurStyle::kOuter, .sigma = 8.0f, .alpha = 0.5f}},
@ -604,7 +603,7 @@ static const std::map<std::string, MaskBlurTestConfig> kPaintVariations = {
{"OuterOpaqueWithBlurImageFilter", {"OuterOpaqueWithBlurImageFilter",
{.style = DlBlurStyle::kOuter, {.style = DlBlurStyle::kOuter,
.sigma = 8.0f, .sigma = 8.0f,
.image_filter = DlBlurImageFilter::Make(3, 3, DlTileMode::kClamp)}}, .image_filter = DlImageFilter::MakeBlur(3, 3, DlTileMode::kClamp)}},
}; };
#define MASK_BLUR_VARIANT_TEST(config) \ #define MASK_BLUR_VARIANT_TEST(config) \
@ -757,7 +756,7 @@ TEST_P(AiksTest, MaskBlurDoesntStretchContents) {
builder.Transform(SkMatrix::Translate(100, 100) * builder.Transform(SkMatrix::Translate(100, 100) *
SkMatrix::Scale(0.5, 0.5)); SkMatrix::Scale(0.5, 0.5));
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(DlColorSource::MakeImage(
DlImageImpeller::Make(boston), DlTileMode::kRepeat, DlTileMode::kRepeat, DlImageImpeller::Make(boston), DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kMipmapLinear)); DlImageSampling::kMipmapLinear));
paint.setMaskFilter(DlBlurMaskFilter::Make(DlBlurStyle::kNormal, sigma)); paint.setMaskFilter(DlBlurMaskFilter::Make(DlBlurStyle::kNormal, sigma));
@ -791,7 +790,7 @@ TEST_P(AiksTest, GaussianBlurAtPeripheryVertical) {
DlPaint save_paint; DlPaint save_paint;
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = DlBlurImageFilter::Make(20, 20, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(20, 20, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get()); builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get());
builder.Restore(); builder.Restore();
@ -821,7 +820,7 @@ TEST_P(AiksTest, GaussianBlurAtPeripheryHorizontal) {
DlPaint save_paint; DlPaint save_paint;
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = DlBlurImageFilter::Make(20, 20, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(20, 20, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get()); builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get());
builder.Restore(); builder.Restore();
@ -869,7 +868,7 @@ TEST_P(AiksTest, GaussianBlurAnimatedBackdrop) {
paint.setBlendMode(DlBlendMode::kSrc); paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = auto backdrop_filter =
DlBlurImageFilter::Make(sigma, sigma, DlTileMode::kClamp); DlImageFilter::MakeBlur(sigma, sigma, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &paint, backdrop_filter.get()); builder.SaveLayer(nullptr, &paint, backdrop_filter.get());
count += 1; count += 1;
return builder.Build(); return builder.Build();
@ -995,7 +994,7 @@ TEST_P(AiksTest, GaussianBlurScaledAndClipped) {
Vector2 image_center = Vector2(bounds.GetSize() / 2); Vector2 image_center = Vector2(bounds.GetSize() / 2);
DlPaint paint; DlPaint paint;
paint.setImageFilter(DlBlurImageFilter::Make(20, 20, DlTileMode::kDecal)); paint.setImageFilter(DlImageFilter::MakeBlur(20, 20, DlTileMode::kDecal));
Vector2 clip_size = {150, 75}; Vector2 clip_size = {150, 75};
Vector2 center = Vector2(1024, 768) / 2; Vector2 center = Vector2(1024, 768) / 2;
@ -1047,7 +1046,7 @@ TEST_P(AiksTest, GaussianBlurRotatedAndClippedInteractive) {
Vector2 image_center = Vector2(bounds.GetSize() / 2); Vector2 image_center = Vector2(bounds.GetSize() / 2);
DlPaint paint; DlPaint paint;
paint.setImageFilter( paint.setImageFilter(
DlBlurImageFilter::Make(20, 20, tile_modes[selected_tile_mode])); DlImageFilter::MakeBlur(20, 20, tile_modes[selected_tile_mode]));
static PlaygroundPoint point_a(Point(362, 309), 20, Color::Red()); static PlaygroundPoint point_a(Point(362, 309), 20, Color::Red());
static PlaygroundPoint point_b(Point(662, 459), 20, Color::Red()); static PlaygroundPoint point_b(Point(662, 459), 20, Color::Red());
@ -1087,7 +1086,7 @@ TEST_P(AiksTest, GaussianBlurOneDimension) {
DlPaint paint; DlPaint paint;
paint.setBlendMode(DlBlendMode::kSrc); paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = DlBlurImageFilter::Make(50, 0, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(50, 0, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &paint, backdrop_filter.get()); builder.SaveLayer(nullptr, &paint, backdrop_filter.get());
builder.Restore(); builder.Restore();
ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
@ -1105,7 +1104,7 @@ TEST_P(AiksTest, GaussianBlurRotatedAndClipped) {
Rect::MakeXYWH(0, 0, boston->GetSize().width, boston->GetSize().height); Rect::MakeXYWH(0, 0, boston->GetSize().width, boston->GetSize().height);
DlPaint paint; DlPaint paint;
paint.setImageFilter(DlBlurImageFilter::Make(20, 20, DlTileMode::kDecal)); paint.setImageFilter(DlImageFilter::MakeBlur(20, 20, DlTileMode::kDecal));
Vector2 image_center = Vector2(bounds.GetSize() / 2); Vector2 image_center = Vector2(bounds.GetSize() / 2);
Vector2 clip_size = {150, 75}; Vector2 clip_size = {150, 75};
@ -1158,7 +1157,7 @@ TEST_P(AiksTest, GaussianBlurRotatedNonUniform) {
DlPaint paint; DlPaint paint;
paint.setColor(DlColor::kGreen()); paint.setColor(DlColor::kGreen());
paint.setImageFilter( paint.setImageFilter(
DlBlurImageFilter::Make(50, 0, tile_modes[selected_tile_mode])); DlImageFilter::MakeBlur(50, 0, tile_modes[selected_tile_mode]));
Vector2 center = Vector2(1024, 768) / 2; Vector2 center = Vector2(1024, 768) / 2;
builder.Scale(GetContentScale().x, GetContentScale().y); builder.Scale(GetContentScale().x, GetContentScale().y);
@ -1211,9 +1210,9 @@ TEST_P(AiksTest, BlurredRectangleWithShader) {
auto texture = auto texture =
DisplayListToTexture(recorder_builder.Build(), {100, 100}, renderer); DisplayListToTexture(recorder_builder.Build(), {100, 100}, renderer);
auto image_source = std::make_shared<DlImageColorSource>( auto image_source = DlColorSource::MakeImage(
DlImageImpeller::Make(texture), DlTileMode::kRepeat, DlTileMode::kRepeat); DlImageImpeller::Make(texture), DlTileMode::kRepeat, DlTileMode::kRepeat);
auto blur_filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kDecal); auto blur_filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kDecal);
DlPaint paint; DlPaint paint;
paint.setColor(DlColor::kDarkGreen()); paint.setColor(DlColor::kDarkGreen());
@ -1284,7 +1283,7 @@ TEST_P(AiksTest, GaussianBlurWithoutDecalSupport) {
paint.setColor(DlColor::kBlack()); paint.setColor(DlColor::kBlack());
builder.DrawPaint(paint); builder.DrawPaint(paint);
auto blur_filter = DlBlurImageFilter::Make(20, 20, DlTileMode::kDecal); auto blur_filter = DlImageFilter::MakeBlur(20, 20, DlTileMode::kDecal);
paint.setImageFilter(blur_filter); paint.setImageFilter(blur_filter);
builder.DrawImage(texture, SkPoint::Make(200, 200), {}, &paint); builder.DrawImage(texture, SkPoint::Make(200, 200), {}, &paint);
ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
@ -1305,7 +1304,7 @@ TEST_P(AiksTest, GaussianBlurSolidColorTinyMipMap) {
DlPaint paint; DlPaint paint;
paint.setColor(DlColor::kChartreuse()); paint.setColor(DlColor::kChartreuse());
auto blur_filter = DlBlurImageFilter::Make(0.1, 0.1, DlTileMode::kClamp); auto blur_filter = DlImageFilter::MakeBlur(0.1, 0.1, DlTileMode::kClamp);
paint.setImageFilter(blur_filter); paint.setImageFilter(blur_filter);
builder.DrawPath(path, paint); builder.DrawPath(path, paint);
@ -1330,7 +1329,7 @@ TEST_P(AiksTest, GaussianBlurBackdropTinyMipMap) {
DlPaint paint; DlPaint paint;
paint.setColor(DlColor::kGreen()); paint.setColor(DlColor::kGreen());
auto blur_filter = DlBlurImageFilter::Make(0.1, 0.1, DlTileMode::kDecal); auto blur_filter = DlImageFilter::MakeBlur(0.1, 0.1, DlTileMode::kDecal);
paint.setImageFilter(blur_filter); paint.setImageFilter(blur_filter);
builder.DrawCircle(SkPoint{400, 400}, 200, paint); builder.DrawCircle(SkPoint{400, 400}, 200, paint);
@ -1364,7 +1363,7 @@ TEST_P(AiksTest,
DlPaint save_paint; DlPaint save_paint;
save_paint.setBlendMode(DlBlendMode::kSrc); save_paint.setBlendMode(DlBlendMode::kSrc);
auto backdrop_filter = DlBlurImageFilter::Make(30, 30, DlTileMode::kClamp); auto backdrop_filter = DlImageFilter::MakeBlur(30, 30, DlTileMode::kClamp);
builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get(), builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get(),
/*backdrop_id=*/1); /*backdrop_id=*/1);
builder.Restore(); builder.Restore();

View File

@ -676,23 +676,23 @@ TEST_P(AiksTest, CanRenderConicalGradient) {
DlColor(Color::MakeRGBA8(0x4c, 0xAF, 0x50, 0xFF).ToARGB()), DlColor(Color::MakeRGBA8(0x4c, 0xAF, 0x50, 0xFF).ToARGB()),
DlColor(Color::MakeRGBA8(0x21, 0x96, 0xF3, 0xFF).ToARGB())}; DlColor(Color::MakeRGBA8(0x21, 0x96, 0xF3, 0xFF).ToARGB())};
std::vector<Scalar> stops = {0.0, 1.f / 3.f, 2.f / 3.f, 1.0}; std::vector<Scalar> stops = {0.0, 1.f / 3.f, 2.f / 3.f, 1.0};
std::array<std::tuple<SkPoint, float, SkPoint, float>, 8> array{ std::array<std::tuple<DlPoint, float, DlPoint, float>, 8> array{
std::make_tuple(SkPoint::Make(size / 2.f, size / 2.f), 0.f, std::make_tuple(DlPoint(size / 2.f, size / 2.f), 0.f,
SkPoint::Make(size / 2.f, size / 2.f), size / 2.f), DlPoint(size / 2.f, size / 2.f), size / 2.f),
std::make_tuple(SkPoint::Make(size / 2.f, size / 2.f), size / 4.f, std::make_tuple(DlPoint(size / 2.f, size / 2.f), size / 4.f,
SkPoint::Make(size / 2.f, size / 2.f), size / 2.f), DlPoint(size / 2.f, size / 2.f), size / 2.f),
std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), 0.f, std::make_tuple(DlPoint(size / 4.f, size / 4.f), 0.f,
SkPoint::Make(size / 2.f, size / 2.f), size / 2.f), DlPoint(size / 2.f, size / 2.f), size / 2.f),
std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), size / 2.f, std::make_tuple(DlPoint(size / 4.f, size / 4.f), size / 2.f,
SkPoint::Make(size / 2.f, size / 2.f), 0), DlPoint(size / 2.f, size / 2.f), 0),
std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), size / 4.f, std::make_tuple(DlPoint(size / 4.f, size / 4.f), size / 4.f,
SkPoint::Make(size / 2.f, size / 2.f), size / 2.f), DlPoint(size / 2.f, size / 2.f), size / 2.f),
std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), size / 16.f, std::make_tuple(DlPoint(size / 4.f, size / 4.f), size / 16.f,
SkPoint::Make(size / 2.f, size / 2.f), size / 8.f), DlPoint(size / 2.f, size / 2.f), size / 8.f),
std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), size / 8.f, std::make_tuple(DlPoint(size / 4.f, size / 4.f), size / 8.f,
SkPoint::Make(size / 2.f, size / 2.f), size / 16.f), DlPoint(size / 2.f, size / 2.f), size / 16.f),
std::make_tuple(SkPoint::Make(size / 8.f, size / 8.f), size / 8.f, std::make_tuple(DlPoint(size / 8.f, size / 8.f), size / 8.f,
SkPoint::Make(size / 2.f, size / 2.f), size / 8.f), DlPoint(size / 2.f, size / 2.f), size / 8.f),
}; };
for (int i = 0; i < 8; i++) { for (int i = 0; i < 8; i++) {
builder.Save(); builder.Save();

View File

@ -368,8 +368,8 @@ TEST_P(AiksTest, DrawLinesRenderCorrectly) {
DlTileMode::kMirror)); DlTileMode::kMirror));
draw(paint); draw(paint);
SkMatrix matrix = SkMatrix::Translate(-150, 75); DlMatrix matrix = DlMatrix::MakeTranslation({-150, 75});
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(DlColorSource::MakeImage(
texture, DlTileMode::kRepeat, DlTileMode::kRepeat, texture, DlTileMode::kRepeat, DlTileMode::kRepeat,
DlImageSampling::kMipmapLinear, &matrix)); DlImageSampling::kMipmapLinear, &matrix));
draw(paint); draw(paint);

View File

@ -9,7 +9,6 @@
#include "flutter/display_list/effects/dl_color_source.h" #include "flutter/display_list/effects/dl_color_source.h"
#include "flutter/display_list/effects/dl_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/display_list/effects/dl_runtime_effect.h" #include "flutter/display_list/effects/dl_runtime_effect.h"
#include "flutter/display_list/effects/dl_runtime_effect_image_filter.h"
#include "flutter/impeller/display_list/aiks_unittests.h" #include "flutter/impeller/display_list/aiks_unittests.h"
#include "include/core/SkPath.h" #include "include/core/SkPath.h"
@ -21,7 +20,7 @@ namespace testing {
using namespace flutter; using namespace flutter;
namespace { namespace {
std::shared_ptr<DlRuntimeEffectColorSource> MakeRuntimeEffect( std::shared_ptr<DlColorSource> MakeRuntimeEffect(
AiksTest* test, AiksTest* test,
std::string_view name, std::string_view name,
const std::shared_ptr<std::vector<uint8_t>>& uniform_data = {}, const std::shared_ptr<std::vector<uint8_t>>& uniform_data = {},
@ -34,8 +33,8 @@ std::shared_ptr<DlRuntimeEffectColorSource> MakeRuntimeEffect(
auto dl_runtime_effect = DlRuntimeEffect::MakeImpeller(runtime_stage); auto dl_runtime_effect = DlRuntimeEffect::MakeImpeller(runtime_stage);
return std::make_shared<DlRuntimeEffectColorSource>(dl_runtime_effect, return DlColorSource::MakeRuntimeEffect(dl_runtime_effect, samplers,
samplers, uniform_data); uniform_data);
} }
} // namespace } // namespace
@ -102,7 +101,7 @@ TEST_P(AiksTest, CanRenderRuntimeEffectFilter) {
DlPaint paint; DlPaint paint;
paint.setColor(DlColor::kAqua()); paint.setColor(DlColor::kAqua());
paint.setImageFilter(DlRuntimeEffectImageFilter::Make( paint.setImageFilter(DlImageFilter::MakeRuntimeEffect(
DlRuntimeEffect::MakeImpeller(runtime_stage), sampler_inputs, DlRuntimeEffect::MakeImpeller(runtime_stage), sampler_inputs,
uniform_data)); uniform_data));

View File

@ -463,8 +463,8 @@ TEST_P(AiksTest, TextForegroundShaderWithTransform) {
1.0, 1.0,
}; };
text_paint.setColorSource(DlColorSource::MakeLinear( text_paint.setColorSource(DlColorSource::MakeLinear(
/*start_point=*/{0, 0}, // /*start_point=*/DlPoint(0, 0), //
/*end_point=*/{100, 100}, // /*end_point=*/DlPoint(100, 100), //
/*stop_count=*/2, // /*stop_count=*/2, //
/*colors=*/colors.data(), // /*colors=*/colors.data(), //
/*stops=*/stops.data(), // /*stops=*/stops.data(), //

View File

@ -8,7 +8,7 @@
#include "display_list/dl_tile_mode.h" #include "display_list/dl_tile_mode.h"
#include "display_list/effects/dl_color_filter.h" #include "display_list/effects/dl_color_filter.h"
#include "display_list/effects/dl_color_source.h" #include "display_list/effects/dl_color_source.h"
#include "display_list/effects/dl_image_filters.h" #include "display_list/effects/dl_image_filter.h"
#include "display_list/geometry/dl_geometry_types.h" #include "display_list/geometry/dl_geometry_types.h"
#include "display_list/geometry/dl_path.h" #include "display_list/geometry/dl_path.h"
#include "display_list/image/dl_image.h" #include "display_list/image/dl_image.h"
@ -68,7 +68,7 @@ TEST_P(AiksTest, CollapsedDrawPaintInSubpassBackdropFilter) {
paint.setBlendMode(DlBlendMode::kSrc); paint.setBlendMode(DlBlendMode::kSrc);
builder.DrawPaint(paint); builder.DrawPaint(paint);
auto filter = DlBlurImageFilter::Make(20.0, 20.0, DlTileMode::kDecal); auto filter = DlImageFilter::MakeBlur(20.0, 20.0, DlTileMode::kDecal);
builder.SaveLayer(nullptr, nullptr, filter.get()); builder.SaveLayer(nullptr, nullptr, filter.get());
DlPaint draw_paint; DlPaint draw_paint;
@ -186,7 +186,7 @@ TEST_P(AiksTest, TranslucentSaveLayerWithBlendImageFilterDrawsCorrectly) {
DlPaint save_paint; DlPaint save_paint;
save_paint.setColor(DlColor::kBlack().withAlpha(128)); save_paint.setColor(DlColor::kBlack().withAlpha(128));
save_paint.setImageFilter(DlColorFilterImageFilter::Make( save_paint.setImageFilter(DlImageFilter::MakeColorFilter(
DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kDstOver))); DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kDstOver)));
builder.SaveLayer(nullptr, &save_paint); builder.SaveLayer(nullptr, &save_paint);
@ -229,7 +229,7 @@ TEST_P(AiksTest, ImageFilteredUnboundedSaveLayerWithUnboundedContents) {
DlPaint save_paint; DlPaint save_paint;
save_paint.setImageFilter( save_paint.setImageFilter(
DlBlurImageFilter::Make(10.0, 10.0, DlTileMode::kDecal)); DlImageFilter::MakeBlur(10.0, 10.0, DlTileMode::kDecal));
builder.SaveLayer(nullptr, &save_paint); builder.SaveLayer(nullptr, &save_paint);
{ {
@ -323,7 +323,7 @@ TEST_P(AiksTest,
DlPaint paint; DlPaint paint;
paint.setColor(DlColor::kBlack().withAlpha(128)); paint.setColor(DlColor::kBlack().withAlpha(128));
paint.setImageFilter( paint.setImageFilter(
DlColorFilterImageFilter::Make(DlMatrixColorFilter::Make(matrix))); DlImageFilter::MakeColorFilter(DlMatrixColorFilter::Make(matrix)));
paint.setColorFilter( paint.setColorFilter(
DlBlendColorFilter::Make(DlColor::kGreen(), DlBlendMode::kModulate)); DlBlendColorFilter::Make(DlColor::kGreen(), DlBlendMode::kModulate));
builder.SaveLayer(nullptr, &paint); builder.SaveLayer(nullptr, &paint);
@ -454,8 +454,8 @@ TEST_P(AiksTest, CanDrawPointsWithTextureMap) {
{52, 52}, // {52, 52}, //
}; };
auto image_src = std::make_shared<DlImageColorSource>( auto image_src =
texture, DlTileMode::kClamp, DlTileMode::kClamp); DlColorSource::MakeImage(texture, DlTileMode::kClamp, DlTileMode::kClamp);
DlPaint paint_round; DlPaint paint_round;
paint_round.setStrokeCap(DlStrokeCap::kRound); paint_round.setStrokeCap(DlStrokeCap::kRound);
@ -605,7 +605,7 @@ TEST_P(AiksTest, ReleasesTextureOnTeardown) {
builder.Translate(100.0f, 100.0f); builder.Translate(100.0f, 100.0f);
DlPaint paint; DlPaint paint;
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(DlColorSource::MakeImage(
DlImageImpeller::Make(texture), DlTileMode::kClamp, DlTileMode::kClamp, DlImageImpeller::Make(texture), DlTileMode::kClamp, DlTileMode::kClamp,
DlImageSampling::kLinear, nullptr)); DlImageSampling::kLinear, nullptr));
@ -644,7 +644,7 @@ TEST_P(AiksTest, MatrixImageFilterMagnify) {
DlMatrix matrix = DlMatrix::MakeScale({scale, scale, 1}); DlMatrix matrix = DlMatrix::MakeScale({scale, scale, 1});
DlPaint paint; DlPaint paint;
paint.setImageFilter( paint.setImageFilter(
DlMatrixImageFilter::Make(matrix, DlImageSampling::kLinear)); DlImageFilter::MakeMatrix(matrix, DlImageSampling::kLinear));
builder.SaveLayer(nullptr, &paint); builder.SaveLayer(nullptr, &paint);
DlPaint rect_paint; DlPaint rect_paint;
@ -696,22 +696,22 @@ TEST_P(AiksTest, ImageFilteredSaveLayerWithUnboundedContents) {
builder.Restore(); builder.Restore();
}; };
test(DlBlurImageFilter::Make(10.0, 10.0, DlTileMode::kDecal)); test(DlImageFilter::MakeBlur(10.0, 10.0, DlTileMode::kDecal));
builder.Translate(200.0, 0.0); builder.Translate(200.0, 0.0);
test(DlDilateImageFilter::Make(10.0, 10.0)); test(DlImageFilter::MakeDilate(10.0, 10.0));
builder.Translate(200.0, 0.0); builder.Translate(200.0, 0.0);
test(DlErodeImageFilter::Make(10.0, 10.0)); test(DlImageFilter::MakeErode(10.0, 10.0));
builder.Translate(-400.0, 200.0); builder.Translate(-400.0, 200.0);
DlMatrix matrix = DlMatrix::MakeRotationZ(DlDegrees(10)); DlMatrix matrix = DlMatrix::MakeRotationZ(DlDegrees(10));
auto rotate_filter = auto rotate_filter =
DlMatrixImageFilter::Make(matrix, DlImageSampling::kLinear); DlImageFilter::MakeMatrix(matrix, DlImageSampling::kLinear);
test(rotate_filter); test(rotate_filter);
builder.Translate(200.0, 0.0); builder.Translate(200.0, 0.0);
@ -723,28 +723,27 @@ TEST_P(AiksTest, ImageFilteredSaveLayerWithUnboundedContents) {
0, 0, 0, 1, 0 // 0, 0, 0, 1, 0 //
}; };
auto rgb_swap_filter = auto rgb_swap_filter =
DlColorFilterImageFilter::Make(std::make_shared<DlMatrixColorFilter>(m)); DlImageFilter::MakeColorFilter(std::make_shared<DlMatrixColorFilter>(m));
test(rgb_swap_filter); test(rgb_swap_filter);
builder.Translate(200.0, 0.0); builder.Translate(200.0, 0.0);
test(DlComposeImageFilter::Make(rotate_filter, rgb_swap_filter)); test(DlImageFilter::MakeCompose(rotate_filter, rgb_swap_filter));
builder.Translate(-400.0, 200.0); builder.Translate(-400.0, 200.0);
test(DlLocalMatrixImageFilter::Make(DlMatrix::MakeTranslation({25.0, 25.0}), test(rotate_filter->makeWithLocalMatrix(
rotate_filter)); DlMatrix::MakeTranslation({25.0, 25.0})));
builder.Translate(200.0, 0.0); builder.Translate(200.0, 0.0);
test(DlLocalMatrixImageFilter::Make(DlMatrix::MakeTranslation({25.0, 25.0}), test(rgb_swap_filter->makeWithLocalMatrix(
rgb_swap_filter)); DlMatrix::MakeTranslation({25.0, 25.0})));
builder.Translate(200.0, 0.0); builder.Translate(200.0, 0.0);
test(DlLocalMatrixImageFilter::Make( test(DlImageFilter::MakeCompose(rotate_filter, rgb_swap_filter)
DlMatrix::MakeTranslation({25.0, 25.0}), ->makeWithLocalMatrix(DlMatrix::MakeTranslation({25.0, 25.0})));
DlComposeImageFilter::Make(rotate_filter, rgb_swap_filter)));
ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
} }
@ -774,7 +773,7 @@ TEST_P(AiksTest, MatrixBackdropFilter) {
DlMatrix::MakeScale({0.5, 0.5, 1}) * DlMatrix::MakeScale({0.5, 0.5, 1}) *
DlMatrix::MakeTranslation({-100, -100}); DlMatrix::MakeTranslation({-100, -100});
auto backdrop_filter = auto backdrop_filter =
DlMatrixImageFilter::Make(matrix, DlImageSampling::kLinear); DlImageFilter::MakeMatrix(matrix, DlImageSampling::kLinear);
builder.SaveLayer(nullptr, nullptr, backdrop_filter.get()); builder.SaveLayer(nullptr, nullptr, backdrop_filter.get());
builder.Restore(); builder.Restore();
} }
@ -803,7 +802,7 @@ TEST_P(AiksTest, MatrixSaveLayerFilter) {
DlMatrix::MakeTranslation({-200, -200}); DlMatrix::MakeTranslation({-200, -200});
DlPaint save_paint; DlPaint save_paint;
save_paint.setImageFilter( save_paint.setImageFilter(
DlMatrixImageFilter::Make(matrix, DlImageSampling::kLinear)); DlImageFilter::MakeMatrix(matrix, DlImageSampling::kLinear));
builder.SaveLayer(nullptr, &save_paint); builder.SaveLayer(nullptr, &save_paint);
@ -923,7 +922,7 @@ TEST_P(AiksTest, BackdropRestoreUsesCorrectCoverageForFirstRestoredClip) {
{ {
// Create a save layer with a backdrop blur filter. // Create a save layer with a backdrop blur filter.
auto backdrop_filter = auto backdrop_filter =
DlBlurImageFilter::Make(10.0, 10.0, DlTileMode::kDecal); DlImageFilter::MakeBlur(10.0, 10.0, DlTileMode::kDecal);
builder.SaveLayer(nullptr, nullptr, backdrop_filter.get()); builder.SaveLayer(nullptr, nullptr, backdrop_filter.get());
} }
} }

View File

@ -52,8 +52,8 @@ TEST_P(AiksTest, VerticesGeometryUVPositionData) {
DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png")); DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png"));
auto size = image->impeller_texture()->GetSize(); auto size = image->impeller_texture()->GetSize();
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(
image, DlTileMode::kClamp, DlTileMode::kClamp)); DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp));
std::vector<SkPoint> vertex_coordinates = {SkPoint::Make(0, 0), std::vector<SkPoint> vertex_coordinates = {SkPoint::Make(0, 0),
SkPoint::Make(size.width, 0), SkPoint::Make(size.width, 0),
@ -73,12 +73,10 @@ TEST_P(AiksTest, VerticesGeometryUVPositionDataWithTranslate) {
DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png")); DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png"));
auto size = image->impeller_texture()->GetSize(); auto size = image->impeller_texture()->GetSize();
SkMatrix matrix; DlMatrix matrix = DlMatrix::MakeTranslation({100, 100});
matrix.setTranslateX(100); paint.setColorSource(
matrix.setTranslateY(100); DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp,
paint.setColorSource(std::make_shared<DlImageColorSource>( DlImageSampling::kLinear, &matrix));
image, DlTileMode::kClamp, DlTileMode::kClamp, DlImageSampling::kLinear,
&matrix));
std::vector<SkPoint> positions = {SkPoint::Make(0, 0), std::vector<SkPoint> positions = {SkPoint::Make(0, 0),
SkPoint::Make(size.width, 0), SkPoint::Make(size.width, 0),
@ -98,8 +96,8 @@ TEST_P(AiksTest, VerticesGeometryColorUVPositionData) {
DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png")); DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png"));
auto size = image->impeller_texture()->GetSize(); auto size = image->impeller_texture()->GetSize();
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(
image, DlTileMode::kClamp, DlTileMode::kClamp)); DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp));
std::vector<SkPoint> positions = { std::vector<SkPoint> positions = {
SkPoint::Make(0, 0), SkPoint::Make(size.width, 0), SkPoint::Make(0, 0), SkPoint::Make(size.width, 0),
@ -126,8 +124,8 @@ TEST_P(AiksTest, VerticesGeometryColorUVPositionDataAdvancedBlend) {
DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png")); DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png"));
auto size = image->impeller_texture()->GetSize(); auto size = image->impeller_texture()->GetSize();
paint.setColorSource(std::make_shared<DlImageColorSource>( paint.setColorSource(
image, DlTileMode::kClamp, DlTileMode::kClamp)); DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp));
std::vector<SkPoint> positions = { std::vector<SkPoint> positions = {
SkPoint::Make(0, 0), SkPoint::Make(size.width, 0), SkPoint::Make(0, 0), SkPoint::Make(size.width, 0),
@ -273,10 +271,10 @@ TEST_P(AiksTest, DrawVerticesImageSourceWithTextureCoordinates) {
flutter::DisplayListBuilder builder; flutter::DisplayListBuilder builder;
flutter::DlPaint paint; flutter::DlPaint paint;
auto image_source = flutter::DlImageColorSource( auto image_source = flutter::DlColorSource::MakeImage(
dl_image, flutter::DlTileMode::kRepeat, flutter::DlTileMode::kRepeat); dl_image, flutter::DlTileMode::kRepeat, flutter::DlTileMode::kRepeat);
paint.setColorSource(&image_source); paint.setColorSource(image_source);
builder.DrawVertices(vertices, flutter::DlBlendMode::kSrcOver, paint); builder.DrawVertices(vertices, flutter::DlBlendMode::kSrcOver, paint);
ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
@ -302,10 +300,10 @@ TEST_P(AiksTest,
flutter::DisplayListBuilder builder; flutter::DisplayListBuilder builder;
flutter::DlPaint paint; flutter::DlPaint paint;
auto image_source = flutter::DlImageColorSource( auto image_source = flutter::DlColorSource::MakeImage(
dl_image, flutter::DlTileMode::kRepeat, flutter::DlTileMode::kRepeat); dl_image, flutter::DlTileMode::kRepeat, flutter::DlTileMode::kRepeat);
paint.setColorSource(&image_source); paint.setColorSource(image_source);
builder.DrawVertices(vertices, flutter::DlBlendMode::kModulate, paint); builder.DrawVertices(vertices, flutter::DlBlendMode::kModulate, paint);
ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));

View File

@ -777,8 +777,7 @@ void Canvas::DrawVertices(const std::shared_ptr<VerticesGeometry>& vertices,
static_cast<Entity::TileMode>(image_color_source->vertical_tile_mode()); static_cast<Entity::TileMode>(image_color_source->vertical_tile_mode());
auto sampler_descriptor = auto sampler_descriptor =
skia_conversions::ToSamplerDescriptor(image_color_source->sampling()); skia_conversions::ToSamplerDescriptor(image_color_source->sampling());
auto effect_transform = auto effect_transform = image_color_source->matrix();
skia_conversions::ToMatrix(image_color_source->matrix());
auto contents = std::make_shared<VerticesSimpleBlendContents>(); auto contents = std::make_shared<VerticesSimpleBlendContents>();
contents->SetBlendMode(blend_mode); contents->SetBlendMode(blend_mode);

View File

@ -5,7 +5,7 @@
#include <unordered_map> #include <unordered_map>
#include "flutter/display_list/dl_tile_mode.h" #include "flutter/display_list/dl_tile_mode.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/display_list/geometry/dl_geometry_types.h" #include "flutter/display_list/geometry/dl_geometry_types.h"
#include "flutter/testing/testing.h" #include "flutter/testing/testing.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
@ -143,7 +143,7 @@ TEST_P(AiksTest, BackdropCountDownNormal) {
canvas->SetBackdropData({}, 3); canvas->SetBackdropData({}, 3);
auto blur = auto blur =
flutter::DlBlurImageFilter::Make(4, 4, flutter::DlTileMode::kClamp); flutter::DlImageFilter::MakeBlur(4, 4, flutter::DlTileMode::kClamp);
flutter::DlRect rect = flutter::DlRect::MakeLTRB(0, 0, 50, 50); flutter::DlRect rect = flutter::DlRect::MakeLTRB(0, 0, 50, 50);
EXPECT_TRUE(canvas->RequiresReadback()); EXPECT_TRUE(canvas->RequiresReadback());
@ -180,7 +180,7 @@ TEST_P(AiksTest, BackdropCountDownBackdropId) {
canvas->SetBackdropData(data, 3); canvas->SetBackdropData(data, 3);
auto blur = auto blur =
flutter::DlBlurImageFilter::Make(4, 4, flutter::DlTileMode::kClamp); flutter::DlImageFilter::MakeBlur(4, 4, flutter::DlTileMode::kClamp);
EXPECT_TRUE(canvas->RequiresReadback()); EXPECT_TRUE(canvas->RequiresReadback());
canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50), canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50),
@ -220,7 +220,7 @@ TEST_P(AiksTest, BackdropCountDownBackdropIdMixed) {
canvas->SetBackdropData(data, 3); canvas->SetBackdropData(data, 3);
auto blur = auto blur =
flutter::DlBlurImageFilter::Make(4, 4, flutter::DlTileMode::kClamp); flutter::DlImageFilter::MakeBlur(4, 4, flutter::DlTileMode::kClamp);
EXPECT_TRUE(canvas->RequiresReadback()); EXPECT_TRUE(canvas->RequiresReadback());
canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50), canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50),
@ -255,7 +255,7 @@ TEST_P(AiksTest, BackdropCountDownWithNestedSaveLayers) {
canvas->SetBackdropData({}, 2); canvas->SetBackdropData({}, 2);
auto blur = auto blur =
flutter::DlBlurImageFilter::Make(4, 4, flutter::DlTileMode::kClamp); flutter::DlImageFilter::MakeBlur(4, 4, flutter::DlTileMode::kClamp);
EXPECT_TRUE(canvas->RequiresReadback()); EXPECT_TRUE(canvas->RequiresReadback());
canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50), canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50),

View File

@ -5,7 +5,6 @@
#include "impeller/display_list/dl_golden_unittests.h" #include "impeller/display_list/dl_golden_unittests.h"
#include "flutter/display_list/dl_builder.h" #include "flutter/display_list/dl_builder.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h"
#include "flutter/display_list/effects/dl_mask_filter.h" #include "flutter/display_list/effects/dl_mask_filter.h"
#include "flutter/impeller/geometry/round_rect.h" #include "flutter/impeller/geometry/round_rect.h"
#include "flutter/impeller/golden_tests/screenshot.h" #include "flutter/impeller/golden_tests/screenshot.h"
@ -166,9 +165,9 @@ TEST_P(DlGoldenTest, ShimmerTest) {
DlImageSampling::kLinear, &paint); DlImageSampling::kLinear, &paint);
SkRect save_layer_bounds = SkRect::MakeLTRB(0, 0, 1024, 768); SkRect save_layer_bounds = SkRect::MakeLTRB(0, 0, 1024, 768);
DlBlurImageFilter blur(sigma, sigma, DlTileMode::kDecal); auto blur = DlImageFilter::MakeBlur(sigma, sigma, DlTileMode::kDecal);
canvas->ClipRect(SkRect::MakeLTRB(11.125, 10.3737, 911.25, 755.3333)); canvas->ClipRect(SkRect::MakeLTRB(11.125, 10.3737, 911.25, 755.3333));
canvas->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, &blur); canvas->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, blur.get());
canvas->Restore(); canvas->Restore();
}; };

View File

@ -5,7 +5,6 @@
#include "impeller/display_list/dl_golden_unittests.h" #include "impeller/display_list/dl_golden_unittests.h"
#include "flutter/display_list/dl_builder.h" #include "flutter/display_list/dl_builder.h"
#include "flutter/display_list/effects/dl_matrix_image_filter.h"
#include "flutter/impeller/geometry/path_builder.h" #include "flutter/impeller/geometry/path_builder.h"
#include "flutter/testing/testing.h" #include "flutter/testing/testing.h"
#include "gtest/gtest.h" #include "gtest/gtest.h"
@ -79,12 +78,13 @@ TEST_P(DlGoldenTest, Bug147807) {
SkRRect::MakeOval(SkRect::MakeLTRB(201.25, 10, 361.25, 170)), SkRRect::MakeOval(SkRect::MakeLTRB(201.25, 10, 361.25, 170)),
DlCanvas::ClipOp::kIntersect, true); DlCanvas::ClipOp::kIntersect, true);
SkRect save_layer_bounds = SkRect::MakeLTRB(201.25, 10, 361.25, 170); SkRect save_layer_bounds = SkRect::MakeLTRB(201.25, 10, 361.25, 170);
DlMatrixImageFilter backdrop(DlMatrix::MakeRow(3, 0, 0.0, -280, // auto backdrop =
0, 3, 0.0, -920, // DlImageFilter::MakeMatrix(DlMatrix::MakeRow(3, 0, 0.0, -280, //
0, 0, 1.0, 0.0, // 0, 3, 0.0, -920, //
0, 0, 0.0, 1.0), 0, 0, 1.0, 0.0, //
DlImageSampling::kLinear); 0, 0, 0.0, 1.0),
canvas->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, &backdrop); DlImageSampling::kLinear);
canvas->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, backdrop.get());
{ {
canvas->Translate(201.25, 10); canvas->Translate(201.25, 10);
auto paint = DlPaint() auto paint = DlPaint()

View File

@ -1163,9 +1163,9 @@ TEST_P(DisplayListTest, CanDrawPaintWithColorSource) {
builder.Translate(500, 500); builder.Translate(500, 500);
builder.ClipRect(clip_bounds, flutter::DlCanvas::ClipOp::kIntersect, false); builder.ClipRect(clip_bounds, flutter::DlCanvas::ClipOp::kIntersect, false);
auto texture = CreateTextureForFixture("table_mountain_nx.png"); auto texture = CreateTextureForFixture("table_mountain_nx.png");
auto image = std::make_shared<flutter::DlImageColorSource>( auto image = flutter::DlColorSource::MakeImage(DlImageImpeller::Make(texture),
DlImageImpeller::Make(texture), flutter::DlTileMode::kRepeat, flutter::DlTileMode::kRepeat,
flutter::DlTileMode::kRepeat); flutter::DlTileMode::kRepeat);
paint.setColorSource(image); paint.setColorSource(image);
builder.DrawPaint(paint); builder.DrawPaint(paint);
builder.Restore(); builder.Restore();
@ -1263,9 +1263,9 @@ TEST_P(DisplayListTest, MaskBlursApplyCorrectlyToColorSources) {
flutter::DlColor::kGreen()}; flutter::DlColor::kGreen()};
std::array<float, 2> stops = {0, 1}; std::array<float, 2> stops = {0, 1};
std::array<std::shared_ptr<flutter::DlColorSource>, 2> color_sources = { std::array<std::shared_ptr<flutter::DlColorSource>, 2> color_sources = {
std::make_shared<flutter::DlColorColorSource>(flutter::DlColor::kWhite()), flutter::DlColorSource::MakeColor(flutter::DlColor::kWhite()),
flutter::DlColorSource::MakeLinear( flutter::DlColorSource::MakeLinear(
SkPoint::Make(0, 0), SkPoint::Make(100, 50), 2, colors.data(), flutter::DlPoint(0, 0), flutter::DlPoint(100, 50), 2, colors.data(),
stops.data(), flutter::DlTileMode::kClamp)}; stops.data(), flutter::DlTileMode::kClamp)};
int offset = 100; int offset = 100;

View File

@ -6,9 +6,9 @@
#include <memory> #include <memory>
#include "display_list/effects/dl_color_filter.h" #include "flutter/display_list/effects/dl_color_filter.h"
#include "display_list/effects/dl_color_source.h" #include "flutter/display_list/effects/dl_color_sources.h"
#include "display_list/geometry/dl_path.h" #include "flutter/display_list/geometry/dl_path.h"
#include "fml/logging.h" #include "fml/logging.h"
#include "impeller/display_list/color_filter.h" #include "impeller/display_list/color_filter.h"
#include "impeller/display_list/skia_conversions.h" #include "impeller/display_list/skia_conversions.h"
@ -46,14 +46,14 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
const flutter::DlLinearGradientColorSource* linear = const flutter::DlLinearGradientColorSource* linear =
color_source->asLinearGradient(); color_source->asLinearGradient();
FML_DCHECK(linear); FML_DCHECK(linear);
auto start_point = skia_conversions::ToPoint(linear->start_point()); auto start_point = linear->start_point();
auto end_point = skia_conversions::ToPoint(linear->end_point()); auto end_point = linear->end_point();
std::vector<Color> colors; std::vector<Color> colors;
std::vector<float> stops; std::vector<float> stops;
skia_conversions::ConvertStops(linear, colors, stops); skia_conversions::ConvertStops(linear, colors, stops);
auto tile_mode = static_cast<Entity::TileMode>(linear->tile_mode()); auto tile_mode = static_cast<Entity::TileMode>(linear->tile_mode());
auto effect_transform = skia_conversions::ToMatrix(linear->matrix()); auto effect_transform = linear->matrix();
auto contents = std::make_shared<LinearGradientContents>(); auto contents = std::make_shared<LinearGradientContents>();
contents->SetOpacityFactor(color.alpha); contents->SetOpacityFactor(color.alpha);
@ -74,7 +74,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
const flutter::DlRadialGradientColorSource* radialGradient = const flutter::DlRadialGradientColorSource* radialGradient =
color_source->asRadialGradient(); color_source->asRadialGradient();
FML_DCHECK(radialGradient); FML_DCHECK(radialGradient);
auto center = skia_conversions::ToPoint(radialGradient->center()); auto center = radialGradient->center();
auto radius = radialGradient->radius(); auto radius = radialGradient->radius();
std::vector<Color> colors; std::vector<Color> colors;
std::vector<float> stops; std::vector<float> stops;
@ -82,8 +82,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
auto tile_mode = auto tile_mode =
static_cast<Entity::TileMode>(radialGradient->tile_mode()); static_cast<Entity::TileMode>(radialGradient->tile_mode());
auto effect_transform = auto effect_transform = radialGradient->matrix();
skia_conversions::ToMatrix(radialGradient->matrix());
auto contents = std::make_shared<RadialGradientContents>(); auto contents = std::make_shared<RadialGradientContents>();
contents->SetOpacityFactor(color.alpha); contents->SetOpacityFactor(color.alpha);
@ -105,10 +104,9 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
const flutter::DlConicalGradientColorSource* conical_gradient = const flutter::DlConicalGradientColorSource* conical_gradient =
color_source->asConicalGradient(); color_source->asConicalGradient();
FML_DCHECK(conical_gradient); FML_DCHECK(conical_gradient);
Point center = skia_conversions::ToPoint(conical_gradient->end_center()); Point center = conical_gradient->end_center();
DlScalar radius = conical_gradient->end_radius(); DlScalar radius = conical_gradient->end_radius();
Point focus_center = Point focus_center = conical_gradient->start_center();
skia_conversions::ToPoint(conical_gradient->start_center());
DlScalar focus_radius = conical_gradient->start_radius(); DlScalar focus_radius = conical_gradient->start_radius();
std::vector<Color> colors; std::vector<Color> colors;
std::vector<float> stops; std::vector<float> stops;
@ -116,8 +114,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
auto tile_mode = auto tile_mode =
static_cast<Entity::TileMode>(conical_gradient->tile_mode()); static_cast<Entity::TileMode>(conical_gradient->tile_mode());
auto effect_transform = auto effect_transform = conical_gradient->matrix();
skia_conversions::ToMatrix(conical_gradient->matrix());
std::shared_ptr<ConicalGradientContents> contents = std::shared_ptr<ConicalGradientContents> contents =
std::make_shared<ConicalGradientContents>(); std::make_shared<ConicalGradientContents>();
@ -142,7 +139,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
color_source->asSweepGradient(); color_source->asSweepGradient();
FML_DCHECK(sweepGradient); FML_DCHECK(sweepGradient);
auto center = skia_conversions::ToPoint(sweepGradient->center()); auto center = sweepGradient->center();
auto start_angle = Degrees(sweepGradient->start()); auto start_angle = Degrees(sweepGradient->start());
auto end_angle = Degrees(sweepGradient->end()); auto end_angle = Degrees(sweepGradient->end());
std::vector<Color> colors; std::vector<Color> colors;
@ -151,8 +148,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
auto tile_mode = auto tile_mode =
static_cast<Entity::TileMode>(sweepGradient->tile_mode()); static_cast<Entity::TileMode>(sweepGradient->tile_mode());
auto effect_transform = auto effect_transform = sweepGradient->matrix();
skia_conversions::ToMatrix(sweepGradient->matrix());
auto contents = std::make_shared<SweepGradientContents>(); auto contents = std::make_shared<SweepGradientContents>();
contents->SetOpacityFactor(color.alpha); contents->SetOpacityFactor(color.alpha);
@ -176,8 +172,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
image_color_source->vertical_tile_mode()); image_color_source->vertical_tile_mode());
auto sampler_descriptor = auto sampler_descriptor =
skia_conversions::ToSamplerDescriptor(image_color_source->sampling()); skia_conversions::ToSamplerDescriptor(image_color_source->sampling());
auto effect_transform = auto effect_transform = image_color_source->matrix();
skia_conversions::ToMatrix(image_color_source->matrix());
auto contents = std::make_shared<TiledTextureContents>(); auto contents = std::make_shared<TiledTextureContents>();
contents->SetOpacityFactor(color.alpha); contents->SetOpacityFactor(color.alpha);

View File

@ -3,7 +3,8 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "impeller/display_list/skia_conversions.h" #include "impeller/display_list/skia_conversions.h"
#include "display_list/dl_color.h" #include "flutter/display_list/dl_blend_mode.h"
#include "flutter/display_list/dl_color.h"
#include "third_party/skia/modules/skparagraph/include/Paragraph.h" #include "third_party/skia/modules/skparagraph/include/Paragraph.h"
namespace impeller { namespace impeller {

View File

@ -5,8 +5,9 @@
#ifndef FLUTTER_IMPELLER_DISPLAY_LIST_SKIA_CONVERSIONS_H_ #ifndef FLUTTER_IMPELLER_DISPLAY_LIST_SKIA_CONVERSIONS_H_
#define FLUTTER_IMPELLER_DISPLAY_LIST_SKIA_CONVERSIONS_H_ #define FLUTTER_IMPELLER_DISPLAY_LIST_SKIA_CONVERSIONS_H_
#include "display_list/dl_color.h" #include "flutter/display_list/dl_blend_mode.h"
#include "display_list/effects/dl_color_source.h" #include "flutter/display_list/dl_color.h"
#include "flutter/display_list/effects/dl_color_sources.h"
#include "impeller/core/formats.h" #include "impeller/core/formats.h"
#include "impeller/core/sampler_descriptor.h" #include "impeller/core/sampler_descriptor.h"
#include "impeller/geometry/color.h" #include "impeller/geometry/color.h"

View File

@ -134,8 +134,8 @@ TEST(SkiaConversionsTest, GradientStopConversion) {
flutter::DlColor::kGreen()}; flutter::DlColor::kGreen()};
std::vector<float> stops = {0.0, 0.5, 1.0}; std::vector<float> stops = {0.0, 0.5, 1.0};
const auto gradient = const auto gradient =
flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), //
SkPoint::Make(1.0, 1.0), // flutter::DlPoint(1.0, 1.0), //
3, // 3, //
colors.data(), // colors.data(), //
stops.data(), // stops.data(), //
@ -145,7 +145,7 @@ TEST(SkiaConversionsTest, GradientStopConversion) {
std::vector<Color> converted_colors; std::vector<Color> converted_colors;
std::vector<Scalar> converted_stops; std::vector<Scalar> converted_stops;
skia_conversions::ConvertStops(gradient.get(), converted_colors, skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors,
converted_stops); converted_stops);
ASSERT_TRUE(ScalarNearlyEqual(converted_stops[0], 0.0f)); ASSERT_TRUE(ScalarNearlyEqual(converted_stops[0], 0.0f));
@ -158,8 +158,8 @@ TEST(SkiaConversionsTest, GradientMissing0) {
flutter::DlColor::kRed()}; flutter::DlColor::kRed()};
std::vector<float> stops = {0.5, 1.0}; std::vector<float> stops = {0.5, 1.0};
const auto gradient = const auto gradient =
flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), //
SkPoint::Make(1.0, 1.0), // flutter::DlPoint(1.0, 1.0), //
2, // 2, //
colors.data(), // colors.data(), //
stops.data(), // stops.data(), //
@ -169,7 +169,7 @@ TEST(SkiaConversionsTest, GradientMissing0) {
std::vector<Color> converted_colors; std::vector<Color> converted_colors;
std::vector<Scalar> converted_stops; std::vector<Scalar> converted_stops;
skia_conversions::ConvertStops(gradient.get(), converted_colors, skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors,
converted_stops); converted_stops);
// First color is inserted as blue. // First color is inserted as blue.
@ -184,8 +184,8 @@ TEST(SkiaConversionsTest, GradientMissingLastValue) {
flutter::DlColor::kRed()}; flutter::DlColor::kRed()};
std::vector<float> stops = {0.0, .5}; std::vector<float> stops = {0.0, .5};
const auto gradient = const auto gradient =
flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), //
SkPoint::Make(1.0, 1.0), // flutter::DlPoint(1.0, 1.0), //
2, // 2, //
colors.data(), // colors.data(), //
stops.data(), // stops.data(), //
@ -195,7 +195,7 @@ TEST(SkiaConversionsTest, GradientMissingLastValue) {
std::vector<Color> converted_colors; std::vector<Color> converted_colors;
std::vector<Scalar> converted_stops; std::vector<Scalar> converted_stops;
skia_conversions::ConvertStops(gradient.get(), converted_colors, skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors,
converted_stops); converted_stops);
// Last color is inserted as red. // Last color is inserted as red.
@ -211,8 +211,8 @@ TEST(SkiaConversionsTest, GradientStopGreaterThan1) {
flutter::DlColor::kRed()}; flutter::DlColor::kRed()};
std::vector<float> stops = {0.0, 100, 1.0}; std::vector<float> stops = {0.0, 100, 1.0};
const auto gradient = const auto gradient =
flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), //
SkPoint::Make(1.0, 1.0), // flutter::DlPoint(1.0, 1.0), //
3, // 3, //
colors.data(), // colors.data(), //
stops.data(), // stops.data(), //
@ -222,7 +222,7 @@ TEST(SkiaConversionsTest, GradientStopGreaterThan1) {
std::vector<Color> converted_colors; std::vector<Color> converted_colors;
std::vector<Scalar> converted_stops; std::vector<Scalar> converted_stops;
skia_conversions::ConvertStops(gradient.get(), converted_colors, skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors,
converted_stops); converted_stops);
// Value is clamped to 1.0 // Value is clamped to 1.0
@ -237,8 +237,8 @@ TEST(SkiaConversionsTest, GradientConversionNonMonotonic) {
flutter::DlColor::kGreen(), flutter::DlColor::kRed()}; flutter::DlColor::kGreen(), flutter::DlColor::kRed()};
std::vector<float> stops = {0.0, 0.5, 0.4, 1.0}; std::vector<float> stops = {0.0, 0.5, 0.4, 1.0};
const auto gradient = const auto gradient =
flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), //
SkPoint::Make(1.0, 1.0), // flutter::DlPoint(1.0, 1.0), //
4, // 4, //
colors.data(), // colors.data(), //
stops.data(), // stops.data(), //
@ -248,7 +248,7 @@ TEST(SkiaConversionsTest, GradientConversionNonMonotonic) {
std::vector<Color> converted_colors; std::vector<Color> converted_colors;
std::vector<Scalar> converted_stops; std::vector<Scalar> converted_stops;
skia_conversions::ConvertStops(gradient.get(), converted_colors, skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors,
converted_stops); converted_stops);
// Value is clamped to 0.5 // Value is clamped to 0.5

View File

@ -82,7 +82,7 @@ TEST_F(GoldenTests, ConicalGradient) {
flutter::DlColor::RGBA(0, 0, 1, 1)}; flutter::DlColor::RGBA(0, 0, 1, 1)};
Scalar stops[2] = {0, 1}; Scalar stops[2] = {0, 1};
paint.setColorSource(flutter::DlConicalGradientColorSource::MakeConical( paint.setColorSource(flutter::DlColorSource::MakeConical(
/*start_center=*/{125, 125}, // /*start_center=*/{125, 125}, //
/*start_radius=*/125, {180, 180}, // /*start_radius=*/125, {180, 180}, //
/*end_radius=*/0, // /*end_radius=*/0, //

View File

@ -13,16 +13,14 @@ ScopedObject<ColorSource> ColorSource::MakeLinearGradient(
const std::vector<Scalar>& stops, const std::vector<Scalar>& stops,
flutter::DlTileMode tile_mode, flutter::DlTileMode tile_mode,
const Matrix& transformation) { const Matrix& transformation) {
const auto sk_transformation = ToSkMatrix(transformation); auto dl_filter = flutter::DlColorSource::MakeLinear(start_point, //
auto dl_filter = end_point, //
flutter::DlColorSource::MakeLinear(ToSkiaType(start_point), // stops.size(), //
ToSkiaType(end_point), // colors.data(), //
stops.size(), // stops.data(), //
colors.data(), // tile_mode, //
stops.data(), // &transformation //
tile_mode, // );
&sk_transformation //
);
if (!dl_filter) { if (!dl_filter) {
return nullptr; return nullptr;
} }
@ -36,14 +34,13 @@ ScopedObject<ColorSource> ColorSource::MakeRadialGradient(
const std::vector<Scalar>& stops, const std::vector<Scalar>& stops,
flutter::DlTileMode tile_mode, flutter::DlTileMode tile_mode,
const Matrix& transformation) { const Matrix& transformation) {
const auto sk_transformation = ToSkMatrix(transformation); auto dl_filter = flutter::DlColorSource::MakeRadial(center, //
auto dl_filter = flutter::DlColorSource::MakeRadial(ToSkiaType(center), // radius, //
radius, // stops.size(), //
stops.size(), // colors.data(), //
colors.data(), // stops.data(), //
stops.data(), // tile_mode, //
tile_mode, // &transformation //
&sk_transformation //
); );
if (!dl_filter) { if (!dl_filter) {
return nullptr; return nullptr;
@ -60,18 +57,16 @@ ScopedObject<ColorSource> ColorSource::MakeConicalGradient(
const std::vector<Scalar>& stops, const std::vector<Scalar>& stops,
flutter::DlTileMode tile_mode, flutter::DlTileMode tile_mode,
const Matrix& transformation) { const Matrix& transformation) {
const auto sk_transformation = ToSkMatrix(transformation); auto dl_filter = flutter::DlColorSource::MakeConical(start_center, //
auto dl_filter = start_radius, //
flutter::DlColorSource::MakeConical(ToSkiaType(start_center), // end_center, //
start_radius, // end_radius, //
ToSkiaType(end_center), // stops.size(), //
end_radius, // colors.data(), //
stops.size(), // stops.data(), //
colors.data(), // tile_mode, //
stops.data(), // &transformation //
tile_mode, // );
&sk_transformation //
);
if (!dl_filter) { if (!dl_filter) {
return nullptr; return nullptr;
} }
@ -86,15 +81,14 @@ ScopedObject<ColorSource> ColorSource::MakeSweepGradient(
const std::vector<Scalar>& stops, const std::vector<Scalar>& stops,
flutter::DlTileMode tile_mode, flutter::DlTileMode tile_mode,
const Matrix& transformation) { const Matrix& transformation) {
const auto sk_transformation = ToSkMatrix(transformation); auto dl_filter = flutter::DlColorSource::MakeSweep(center, //
auto dl_filter = flutter::DlColorSource::MakeSweep(ToSkiaType(center), // start, //
start, // end, //
end, // stops.size(), //
stops.size(), // colors.data(), //
colors.data(), // stops.data(), //
stops.data(), // tile_mode, //
tile_mode, // &transformation //
&sk_transformation //
); );
if (!dl_filter) { if (!dl_filter) {
return nullptr; return nullptr;
@ -108,14 +102,12 @@ ScopedObject<ColorSource> ColorSource::MakeImage(
flutter::DlTileMode vertical_tile_mode, flutter::DlTileMode vertical_tile_mode,
flutter::DlImageSampling sampling, flutter::DlImageSampling sampling,
const Matrix& transformation) { const Matrix& transformation) {
const auto sk_transformation = ToSkMatrix(transformation); auto dl_filter = flutter::DlColorSource::MakeImage(image.MakeImage(), //
auto dl_filter = horizontal_tile_mode, //
std::make_shared<flutter::DlImageColorSource>(image.MakeImage(), // vertical_tile_mode, //
horizontal_tile_mode, // sampling, //
vertical_tile_mode, // &transformation //
sampling, // );
&sk_transformation //
);
return Create<ColorSource>(std::move(dl_filter)); return Create<ColorSource>(std::move(dl_filter));
} }

View File

@ -6,7 +6,6 @@
#include <sstream> #include <sstream>
#include "display_list/effects/dl_runtime_effect.h" #include "display_list/effects/dl_runtime_effect.h"
#include "display_list/effects/dl_runtime_effect_image_filter.h"
#include "flutter/lib/ui/painting/fragment_program.h" #include "flutter/lib/ui/painting/fragment_program.h"
#include "flutter/assets/asset_manager.h" #include "flutter/assets/asset_manager.h"
@ -148,7 +147,7 @@ std::shared_ptr<DlColorSource> FragmentProgram::MakeDlColorSource(
std::shared_ptr<DlImageFilter> FragmentProgram::MakeDlImageFilter( std::shared_ptr<DlImageFilter> FragmentProgram::MakeDlImageFilter(
std::shared_ptr<std::vector<uint8_t>> float_uniforms, std::shared_ptr<std::vector<uint8_t>> float_uniforms,
const std::vector<std::shared_ptr<DlColorSource>>& children) { const std::vector<std::shared_ptr<DlColorSource>>& children) {
return DlRuntimeEffectImageFilter::Make(runtime_effect_, children, return DlImageFilter::MakeRuntimeEffect(runtime_effect_, children,
std::move(float_uniforms)); std::move(float_uniforms));
} }

View File

@ -73,7 +73,7 @@ void ReusableFragmentShader::SetImageSampler(Dart_Handle index_handle,
// TODO(115794): Once the DlImageSampling enum is replaced, expose the // TODO(115794): Once the DlImageSampling enum is replaced, expose the
// sampling options as a new default parameter for users. // sampling options as a new default parameter for users.
samplers_[index] = std::make_shared<DlImageColorSource>( samplers_[index] = DlColorSource::MakeImage(
image->image(), DlTileMode::kClamp, DlTileMode::kClamp, image->image(), DlTileMode::kClamp, DlTileMode::kClamp,
DlImageSampling::kNearestNeighbor, nullptr); DlImageSampling::kNearestNeighbor, nullptr);
// This should be true since we already checked the image above, but // This should be true since we already checked the image above, but

View File

@ -33,19 +33,17 @@ void CanvasGradient::initLinear(const tonic::Float32List& end_points,
color_stops.data() == nullptr); color_stops.data() == nullptr);
int num_colors = colors.num_elements() / 4; int num_colors = colors.num_elements() / 4;
static_assert(sizeof(SkPoint) == sizeof(float) * 2, static_assert(sizeof(DlPoint) == sizeof(float) * 2,
"SkPoint doesn't use floats."); "DlPoint doesn't use floats.");
static_assert(sizeof(SkColor) == sizeof(int32_t),
"SkColor doesn't use int32_t.");
SkMatrix sk_matrix; DlMatrix dl_matrix;
bool has_matrix = matrix4.data() != nullptr; bool has_matrix = matrix4.data() != nullptr;
if (has_matrix) { if (has_matrix) {
sk_matrix = ToSkMatrix(matrix4); dl_matrix = ToDlMatrix(matrix4);
} }
SkPoint p0 = SkPoint::Make(end_points[0], end_points[1]); DlPoint p0 = DlPoint(end_points[0], end_points[1]);
SkPoint p1 = SkPoint::Make(end_points[2], end_points[3]); DlPoint p1 = DlPoint(end_points[2], end_points[3]);
std::vector<DlColor> dl_colors; std::vector<DlColor> dl_colors;
dl_colors.reserve(num_colors); dl_colors.reserve(num_colors);
for (int i = 0; i < colors.num_elements(); i += 4) { for (int i = 0; i < colors.num_elements(); i += 4) {
@ -58,7 +56,7 @@ void CanvasGradient::initLinear(const tonic::Float32List& end_points,
dl_shader_ = DlColorSource::MakeLinear(p0, p1, num_colors, dl_colors.data(), dl_shader_ = DlColorSource::MakeLinear(p0, p1, num_colors, dl_colors.data(),
color_stops.data(), tile_mode, color_stops.data(), tile_mode,
has_matrix ? &sk_matrix : nullptr); has_matrix ? &dl_matrix : nullptr);
// Just a sanity check, all gradient shaders should be thread-safe // Just a sanity check, all gradient shaders should be thread-safe
FML_DCHECK(dl_shader_->isUIThreadSafe()); FML_DCHECK(dl_shader_->isUIThreadSafe());
} }
@ -74,13 +72,10 @@ void CanvasGradient::initRadial(double center_x,
color_stops.data() == nullptr); color_stops.data() == nullptr);
int num_colors = colors.num_elements() / 4; int num_colors = colors.num_elements() / 4;
static_assert(sizeof(SkColor) == sizeof(int32_t), DlMatrix dl_matrix;
"SkColor doesn't use int32_t.");
SkMatrix sk_matrix;
bool has_matrix = matrix4.data() != nullptr; bool has_matrix = matrix4.data() != nullptr;
if (has_matrix) { if (has_matrix) {
sk_matrix = ToSkMatrix(matrix4); dl_matrix = ToDlMatrix(matrix4);
} }
std::vector<DlColor> dl_colors; std::vector<DlColor> dl_colors;
@ -94,9 +89,9 @@ void CanvasGradient::initRadial(double center_x,
} }
dl_shader_ = DlColorSource::MakeRadial( dl_shader_ = DlColorSource::MakeRadial(
SkPoint::Make(SafeNarrow(center_x), SafeNarrow(center_y)), DlPoint(SafeNarrow(center_x), SafeNarrow(center_y)), SafeNarrow(radius),
SafeNarrow(radius), num_colors, dl_colors.data(), color_stops.data(), num_colors, dl_colors.data(), color_stops.data(), tile_mode,
tile_mode, has_matrix ? &sk_matrix : nullptr); has_matrix ? &dl_matrix : nullptr);
// Just a sanity check, all gradient shaders should be thread-safe // Just a sanity check, all gradient shaders should be thread-safe
FML_DCHECK(dl_shader_->isUIThreadSafe()); FML_DCHECK(dl_shader_->isUIThreadSafe());
} }
@ -113,13 +108,10 @@ void CanvasGradient::initSweep(double center_x,
color_stops.data() == nullptr); color_stops.data() == nullptr);
int num_colors = colors.num_elements() / 4; int num_colors = colors.num_elements() / 4;
static_assert(sizeof(SkColor) == sizeof(int32_t), DlMatrix dl_matrix;
"SkColor doesn't use int32_t.");
SkMatrix sk_matrix;
bool has_matrix = matrix4.data() != nullptr; bool has_matrix = matrix4.data() != nullptr;
if (has_matrix) { if (has_matrix) {
sk_matrix = ToSkMatrix(matrix4); dl_matrix = ToDlMatrix(matrix4);
} }
std::vector<DlColor> dl_colors; std::vector<DlColor> dl_colors;
@ -133,11 +125,11 @@ void CanvasGradient::initSweep(double center_x,
} }
dl_shader_ = DlColorSource::MakeSweep( dl_shader_ = DlColorSource::MakeSweep(
SkPoint::Make(SafeNarrow(center_x), SafeNarrow(center_y)), DlPoint(SafeNarrow(center_x), SafeNarrow(center_y)),
SafeNarrow(start_angle) * 180.0f / static_cast<float>(M_PI), SafeNarrow(start_angle) * 180.0f / static_cast<float>(M_PI),
SafeNarrow(end_angle) * 180.0f / static_cast<float>(M_PI), num_colors, SafeNarrow(end_angle) * 180.0f / static_cast<float>(M_PI), num_colors,
dl_colors.data(), color_stops.data(), tile_mode, dl_colors.data(), color_stops.data(), tile_mode,
has_matrix ? &sk_matrix : nullptr); has_matrix ? &dl_matrix : nullptr);
// Just a sanity check, all gradient shaders should be thread-safe // Just a sanity check, all gradient shaders should be thread-safe
FML_DCHECK(dl_shader_->isUIThreadSafe()); FML_DCHECK(dl_shader_->isUIThreadSafe());
} }
@ -156,13 +148,10 @@ void CanvasGradient::initTwoPointConical(double start_x,
color_stops.data() == nullptr); color_stops.data() == nullptr);
int num_colors = colors.num_elements() / 4; int num_colors = colors.num_elements() / 4;
static_assert(sizeof(SkColor) == sizeof(int32_t), DlMatrix dl_matrix;
"SkColor doesn't use int32_t.");
SkMatrix sk_matrix;
bool has_matrix = matrix4.data() != nullptr; bool has_matrix = matrix4.data() != nullptr;
if (has_matrix) { if (has_matrix) {
sk_matrix = ToSkMatrix(matrix4); dl_matrix = ToDlMatrix(matrix4);
} }
std::vector<DlColor> dl_colors; std::vector<DlColor> dl_colors;
@ -176,11 +165,10 @@ void CanvasGradient::initTwoPointConical(double start_x,
} }
dl_shader_ = DlColorSource::MakeConical( dl_shader_ = DlColorSource::MakeConical(
SkPoint::Make(SafeNarrow(start_x), SafeNarrow(start_y)), DlPoint(SafeNarrow(start_x), SafeNarrow(start_y)),
SafeNarrow(start_radius), SafeNarrow(start_radius), DlPoint(SafeNarrow(end_x), SafeNarrow(end_y)),
SkPoint::Make(SafeNarrow(end_x), SafeNarrow(end_y)),
SafeNarrow(end_radius), num_colors, dl_colors.data(), color_stops.data(), SafeNarrow(end_radius), num_colors, dl_colors.data(), color_stops.data(),
tile_mode, has_matrix ? &sk_matrix : nullptr); tile_mode, has_matrix ? &dl_matrix : nullptr);
// Just a sanity check, all gradient shaders should be thread-safe // Just a sanity check, all gradient shaders should be thread-safe
FML_DCHECK(dl_shader_->isUIThreadSafe()); FML_DCHECK(dl_shader_->isUIThreadSafe());
} }

View File

@ -5,6 +5,7 @@
#include "flutter/lib/ui/painting/image_shader.h" #include "flutter/lib/ui/painting/image_shader.h"
#include "flutter/lib/ui/painting/image_filter.h" #include "flutter/lib/ui/painting/image_filter.h"
#include "flutter/display_list/effects/color_sources/dl_image_color_source.h"
#include "flutter/lib/ui/painting/display_list_image_gpu.h" #include "flutter/lib/ui/painting/display_list_image_gpu.h"
#include "flutter/lib/ui/ui_dart_state.h" #include "flutter/lib/ui/ui_dart_state.h"
#include "third_party/tonic/converter/dart_converter.h" #include "third_party/tonic/converter/dart_converter.h"
@ -35,23 +36,25 @@ Dart_Handle ImageShader::initWithImage(CanvasImage* image,
image_ = image->image(); image_ = image->image();
tonic::Float64List matrix4(matrix_handle); tonic::Float64List matrix4(matrix_handle);
SkMatrix local_matrix = ToSkMatrix(matrix4); DlMatrix local_matrix = ToDlMatrix(matrix4);
matrix4.Release(); matrix4.Release();
sampling_is_locked_ = filter_quality_index >= 0; sampling_is_locked_ = filter_quality_index >= 0;
DlImageSampling sampling = DlImageSampling sampling =
sampling_is_locked_ ? ImageFilter::SamplingFromIndex(filter_quality_index) sampling_is_locked_ ? ImageFilter::SamplingFromIndex(filter_quality_index)
: DlImageSampling::kLinear; : DlImageSampling::kLinear;
cached_shader_ = std::make_shared<DlImageColorSource>( cached_shader_ =
image_, tmx, tmy, sampling, &local_matrix); DlColorSource::MakeImage(image_, tmx, tmy, sampling, &local_matrix);
FML_DCHECK(cached_shader_->isUIThreadSafe()); FML_DCHECK(cached_shader_->isUIThreadSafe());
return Dart_Null(); return Dart_Null();
} }
std::shared_ptr<DlColorSource> ImageShader::shader(DlImageSampling sampling) { std::shared_ptr<DlColorSource> ImageShader::shader(DlImageSampling sampling) {
if (sampling_is_locked_ || sampling == cached_shader_->sampling()) { const DlImageColorSource* image_shader = cached_shader_->asImage();
FML_DCHECK(image_shader);
if (sampling_is_locked_ || sampling == image_shader->sampling()) {
return cached_shader_; return cached_shader_;
} }
return cached_shader_->with_sampling(sampling); return image_shader->WithSampling(sampling);
} }
int ImageShader::width() { int ImageShader::width() {

View File

@ -43,7 +43,7 @@ class ImageShader : public Shader {
sk_sp<const DlImage> image_; sk_sp<const DlImage> image_;
bool sampling_is_locked_; bool sampling_is_locked_;
std::shared_ptr<DlImageColorSource> cached_shader_; std::shared_ptr<DlColorSource> cached_shader_;
}; };
} // namespace flutter } // namespace flutter

View File

@ -4,6 +4,8 @@
#include "flutter/shell/common/dl_op_spy.h" #include "flutter/shell/common/dl_op_spy.h"
#include "flutter/display_list/effects/color_sources/dl_color_color_source.h"
namespace flutter { namespace flutter {
bool DlOpSpy::did_draw() { bool DlOpSpy::did_draw() {

View File

@ -19,7 +19,7 @@
#include "assets/asset_resolver.h" #include "assets/asset_resolver.h"
#include "assets/directory_asset_bundle.h" #include "assets/directory_asset_bundle.h"
#include "common/graphics/persistent_cache.h" #include "common/graphics/persistent_cache.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/dl_image_filter.h"
#include "flutter/flow/layers/backdrop_filter_layer.h" #include "flutter/flow/layers/backdrop_filter_layer.h"
#include "flutter/flow/layers/clip_rect_layer.h" #include "flutter/flow/layers/clip_rect_layer.h"
#include "flutter/flow/layers/display_list_layer.h" #include "flutter/flow/layers/display_list_layer.h"
@ -989,7 +989,7 @@ TEST_F(ShellTest, PushBackdropFilterToVisitedPlatformViews) {
auto clip_rect_layer = std::make_shared<ClipRectLayer>( auto clip_rect_layer = std::make_shared<ClipRectLayer>(
SkRect::MakeLTRB(0, 0, 30, 30), Clip::kHardEdge); SkRect::MakeLTRB(0, 0, 30, 30), Clip::kHardEdge);
transform_layer->Add(clip_rect_layer); transform_layer->Add(clip_rect_layer);
auto filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto backdrop_filter_layer = auto backdrop_filter_layer =
std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver); std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver);
clip_rect_layer->Add(backdrop_filter_layer); clip_rect_layer->Add(backdrop_filter_layer);
@ -1004,10 +1004,10 @@ TEST_F(ShellTest, PushBackdropFilterToVisitedPlatformViews) {
ASSERT_TRUE(stack_75.is_empty()); ASSERT_TRUE(stack_75.is_empty());
ASSERT_FALSE(stack_50.is_empty()); ASSERT_FALSE(stack_50.is_empty());
auto filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp); auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto mutator = *stack_50.Begin(); auto mutator = *stack_50.Begin();
ASSERT_EQ(mutator->GetType(), MutatorType::kBackdropFilter); ASSERT_EQ(mutator->GetType(), MutatorType::kBackdropFilter);
ASSERT_EQ(mutator->GetFilterMutation().GetFilter(), filter); ASSERT_EQ(mutator->GetFilterMutation().GetFilter(), *filter);
// Make sure the filterRect is in global coordinates (contains the (1,1) // Make sure the filterRect is in global coordinates (contains the (1,1)
// translation). // translation).
ASSERT_EQ(mutator->GetFilterMutation().GetFilterRect(), ASSERT_EQ(mutator->GetFilterMutation().GetFilterRect(),

View File

@ -67,7 +67,7 @@ void SurfaceTextureExternalTexture::DrawFrame(
PaintContext& context, PaintContext& context,
const SkRect& bounds, const SkRect& bounds,
const DlImageSampling sampling) const { const DlImageSampling sampling) const {
auto transform = GetCurrentUVTransformation().asM33(); auto transform = ToDlMatrix(GetCurrentUVTransformation());
// Android's SurfaceTexture transform matrix works on texture coordinate // Android's SurfaceTexture transform matrix works on texture coordinate
// lookups in the range 0.0-1.0, while Skia's Shader transform matrix works on // lookups in the range 0.0-1.0, while Skia's Shader transform matrix works on
@ -76,19 +76,18 @@ void SurfaceTextureExternalTexture::DrawFrame(
// texture) is the same as a Skia transform by 2.0 (scaling 50% of the image // texture) is the same as a Skia transform by 2.0 (scaling 50% of the image
// outside of the virtual "clip rect"), so we invert the incoming matrix. // outside of the virtual "clip rect"), so we invert the incoming matrix.
SkMatrix inverted; if (transform.IsIdentity()) {
if (!transform.invert(&inverted)) {
FML_LOG(FATAL)
<< "Invalid (not invertable) SurfaceTexture transformation matrix";
}
transform = inverted;
if (transform.isIdentity()) {
context.canvas->DrawImage(dl_image_, SkPoint{0, 0}, sampling, context.canvas->DrawImage(dl_image_, SkPoint{0, 0}, sampling,
context.paint); context.paint);
return; return;
} }
if (!transform.IsInvertible()) {
FML_LOG(FATAL)
<< "Invalid (not invertable) SurfaceTexture transformation matrix";
}
transform = transform.Invert();
DlAutoCanvasRestore autoRestore(context.canvas, true); DlAutoCanvasRestore autoRestore(context.canvas, true);
// The incoming texture is vertically flipped, so we flip it // The incoming texture is vertically flipped, so we flip it
@ -97,14 +96,14 @@ void SurfaceTextureExternalTexture::DrawFrame(
context.canvas->Translate(bounds.x(), bounds.y() + bounds.height()); context.canvas->Translate(bounds.x(), bounds.y() + bounds.height());
context.canvas->Scale(bounds.width(), -bounds.height()); context.canvas->Scale(bounds.width(), -bounds.height());
DlImageColorSource source(dl_image_, DlTileMode::kClamp, DlTileMode::kClamp, auto source = DlColorSource::MakeImage(
sampling, &transform); dl_image_, DlTileMode::kClamp, DlTileMode::kClamp, sampling, &transform);
DlPaint paintWithShader; DlPaint paintWithShader;
if (context.paint) { if (context.paint) {
paintWithShader = *context.paint; paintWithShader = *context.paint;
} }
paintWithShader.setColorSource(&source); paintWithShader.setColorSource(source);
context.canvas->DrawRect(SkRect::MakeWH(1, 1), paintWithShader); context.canvas->DrawRect(SkRect::MakeWH(1, 1), paintWithShader);
} }

View File

@ -4,7 +4,7 @@
#import "shell/platform/darwin/ios/framework/Source/platform_views_controller.h" #import "shell/platform/darwin/ios/framework/Source/platform_views_controller.h"
#include "flutter/display_list/effects/dl_blur_image_filter.h" #include "flutter/display_list/effects/image_filters/dl_blur_image_filter.h"
#include "flutter/flow/surface_frame.h" #include "flutter/flow/surface_frame.h"
#include "flutter/flow/view_slicer.h" #include "flutter/flow/view_slicer.h"
#include "flutter/fml/make_copyable.h" #include "flutter/fml/make_copyable.h"

View File

@ -8,6 +8,7 @@
#include <iomanip> #include <iomanip>
#include "flutter/display_list/display_list.h" #include "flutter/display_list/display_list.h"
#include "flutter/display_list/effects/dl_color_sources.h"
#include "flutter/display_list/effects/dl_image_filters.h" #include "flutter/display_list/effects/dl_image_filters.h"
namespace flutter::testing { namespace flutter::testing {
@ -207,19 +208,6 @@ extern std::ostream& operator<<(std::ostream& os, const DlPath& path) {
<< ")"; << ")";
} }
static std::ostream& operator<<(std::ostream& os, const SkMatrix& matrix) {
return os << "SkMatrix("
<< "[" << matrix[0] << ", " << matrix[1] << ", " << matrix[2] << "], "
<< "[" << matrix[3] << ", " << matrix[4] << ", " << matrix[5] << "], "
<< "[" << matrix[6] << ", " << matrix[7] << ", " << matrix[8] << "]"
<< ")";
}
static std::ostream& operator<<(std::ostream& os, const SkMatrix* matrix) {
if (matrix) return os << "&" << *matrix;
return os << "no matrix";
}
static std::ostream& operator<<(std::ostream& os, const SkRSXform& xform) { static std::ostream& operator<<(std::ostream& os, const SkRSXform& xform) {
return os << "SkRSXform(" return os << "SkRSXform("
<< "scos: " << xform.fSCos << ", " << "scos: " << xform.fSCos << ", "

View File

@ -285,7 +285,7 @@ TEST_F(PainterTest, DrawTextWithGradientImpeller) {
std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kCyan()}; std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kCyan()};
std::vector<float> stops = {0.0, 1.0}; std::vector<float> stops = {0.0, 1.0};
foreground.setColorSource(DlColorSource::MakeLinear( foreground.setColorSource(DlColorSource::MakeLinear(
SkPoint::Make(0, 0), SkPoint::Make(100, 100), 2, colors.data(), DlPoint(0, 0), DlPoint(100, 100), 2, colors.data(),
stops.data(), DlTileMode::kClamp)); stops.data(), DlTileMode::kClamp));
style.foreground = foreground; style.foreground = foreground;
@ -306,7 +306,7 @@ TEST_F(PainterTest, DrawEmojiTextWithGradientImpeller) {
std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kCyan()}; std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kCyan()};
std::vector<float> stops = {0.0, 1.0}; std::vector<float> stops = {0.0, 1.0};
foreground.setColorSource(DlColorSource::MakeLinear( foreground.setColorSource(DlColorSource::MakeLinear(
SkPoint::Make(0, 0), SkPoint::Make(100, 100), 2, colors.data(), DlPoint(0, 0), DlPoint(100, 100), 2, colors.data(),
stops.data(), DlTileMode::kClamp)); stops.data(), DlTileMode::kClamp));
style.foreground = foreground; style.foreground = foreground;