diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 0a43072886810..dcc329aba54cf 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -42530,33 +42530,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_vertices.cc + ../../../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/dl_blur_image_filter.h + ../../../flutter/LICENSE +ORIGIN: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.cc + ../../../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.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.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/display_list/effects/dl_compose_image_filter.cc + ../../../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_color_sources.h + ../../../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_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.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.h + ../../../flutter/LICENSE -ORIGIN: ../../../flutter/display_list/effects/dl_runtime_effect_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.cc + ../../../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_path.cc + ../../../flutter/LICENSE ORIGIN: ../../../flutter/display_list/geometry/dl_path.h + ../../../flutter/LICENSE @@ -45426,33 +45443,50 @@ FILE: ../../../flutter/display_list/dl_storage.h FILE: ../../../flutter/display_list/dl_tile_mode.h FILE: ../../../flutter/display_list/dl_vertices.cc FILE: ../../../flutter/display_list/dl_vertices.h -FILE: ../../../flutter/display_list/effects/dl_blur_image_filter.cc -FILE: ../../../flutter/display_list/effects/dl_blur_image_filter.h +FILE: ../../../flutter/display_list/effects/color_sources/dl_color_color_source.cc +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.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.h -FILE: ../../../flutter/display_list/effects/dl_compose_image_filter.cc -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_color_sources.h 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_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.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.h -FILE: ../../../flutter/display_list/effects/dl_runtime_effect_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.cc +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_path.cc FILE: ../../../flutter/display_list/geometry/dl_path.h diff --git a/display_list/BUILD.gn b/display_list/BUILD.gn index a65f4d6dffcff..c1c9f94fcf772 100644 --- a/display_list/BUILD.gn +++ b/display_list/BUILD.gn @@ -47,33 +47,47 @@ source_set("display_list") { "dl_tile_mode.h", "dl_vertices.cc", "dl_vertices.h", - "effects/dl_blur_image_filter.cc", - "effects/dl_blur_image_filter.h", + "effects/color_sources/dl_color_color_source.cc", + "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.h", - "effects/dl_color_filter_image_filter.cc", - "effects/dl_color_filter_image_filter.h", "effects/dl_color_source.cc", "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.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.h", - "effects/dl_matrix_image_filter.cc", - "effects/dl_matrix_image_filter.h", "effects/dl_runtime_effect.cc", "effects/dl_runtime_effect.h", - "effects/dl_runtime_effect_image_filter.cc", - "effects/dl_runtime_effect_image_filter.h", + "effects/image_filters/dl_blur_image_filter.cc", + "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_path.cc", "geometry/dl_path.h", diff --git a/display_list/display_list_unittests.cc b/display_list/display_list_unittests.cc index 7058ac2577f16..c26c9bd77e453 100644 --- a/display_list/display_list_unittests.cc +++ b/display_list/display_list_unittests.cc @@ -514,7 +514,7 @@ TEST_F(DisplayListTest, BuildRestoresAttributes) { builder.Build(); check_defaults(builder, cull_rect); - receiver.setColorSource(&kTestSource1); + receiver.setColorSource(kTestSource1.get()); builder.Build(); 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 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); - 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); 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 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); - 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); ASSERT_FALSE(clip_rect.intersects(draw_rect)); @@ -661,7 +661,7 @@ TEST_F(DisplayListTest, ClippedSaveLayerContentAccountsForFilter) { TEST_F(DisplayListTest, OOBSaveLayerContentCulledWithBlurFilter) { 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); - 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); // 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) { 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); - auto filter = DlMatrixImageFilter::Make( + auto filter = DlImageFilter::MakeMatrix( DlMatrix::MakeTranslation({100.0f, 0.0f}), DlImageSampling::kLinear); DlPaint layer_paint = DlPaint().setImageFilter(filter); @@ -3762,7 +3762,7 @@ TEST_F(DisplayListTest, SaveLayerBoundsComputationOfMaskBlurredRect) { TEST_F(DisplayListTest, SaveLayerBoundsComputationOfImageBlurredRect) { SkRect rect = SkRect::MakeLTRB(100.0f, 100.0f, 200.0f, 200.0f); 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); DisplayListBuilder builder; @@ -4018,7 +4018,7 @@ TEST_F(DisplayListTest, SaveLayerBoundsComputationOfFloodingImageFilter) { auto color_filter = DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kSrc); 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); SkRect clip_rect = rect.makeOutset(100.0f, 100.0f); ASSERT_NE(clip_rect, rect); @@ -4234,7 +4234,7 @@ TEST_F(DisplayListTest, FloodingFilteredLayerPushesRestoreOpIndex) { }; // clang-format on 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); int save_layer_id = DisplayListBuilderTestingLastOpIndex(builder); @@ -4259,7 +4259,7 @@ TEST_F(DisplayListTest, TransformingFilterSaveLayerSimpleContentBounds) { DlPaint save_paint; auto image_filter = - DlMatrixImageFilter::Make(DlMatrix::MakeTranslation({100.0f, 100.0f}), + DlImageFilter::MakeMatrix(DlMatrix::MakeTranslation({100.0f, 100.0f}), DlImageSampling::kNearestNeighbor); save_paint.setImageFilter(image_filter); builder.SaveLayer(nullptr, &save_paint); @@ -4278,7 +4278,7 @@ TEST_F(DisplayListTest, TransformingFilterSaveLayerFloodedContentBounds) { DlPaint save_paint; auto image_filter = - DlMatrixImageFilter::Make(DlMatrix::MakeTranslation({100.0f, 100.0f}), + DlImageFilter::MakeMatrix(DlMatrix::MakeTranslation({100.0f, 100.0f}), DlImageSampling::kNearestNeighbor); save_paint.setImageFilter(image_filter); builder.SaveLayer(nullptr, &save_paint); @@ -5080,7 +5080,7 @@ TEST_F(DisplayListTest, RecordLargeVertices) { auto vertices = DlVertices::Make(DlVertexMode::kTriangleStrip, vertex_count, points.data(), points.data(), colors.data()); 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++) { DisplayListBuilder builder; @@ -5820,7 +5820,7 @@ TEST_F(DisplayListTest, UnboundedRenderOpsAreReportedUnlessClipped) { auto unbounded_cf = DlMatrixColorFilter::Make(matrix); // ColorFilter must modify transparent black to be "unbounded" ASSERT_TRUE(unbounded_cf->modifies_transparent_black()); - auto unbounded_if = DlColorFilterImageFilter::Make(unbounded_cf); + auto unbounded_if = DlImageFilter::MakeColorFilter(unbounded_cf); DlRect output_bounds; // ImageFilter returns null from bounds queries if it is "unbounded" ASSERT_EQ(unbounded_if->map_local_bounds(draw_rect, output_bounds), @@ -5832,7 +5832,7 @@ TEST_F(DisplayListTest, UnboundedRenderOpsAreReportedUnlessClipped) { test_unbounded( "SaveLayerWithBackdropFilter", [](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.Restore(); }, @@ -5847,7 +5847,7 @@ TEST_F(DisplayListTest, BackdropFilterCulledAlongsideClipAndTransform) { 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 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(draw_rect1)); diff --git a/display_list/dl_canvas.h b/display_list/dl_canvas.h index 9139d8e518c54..c2ae784ff5f59 100644 --- a/display_list/dl_canvas.h +++ b/display_list/dl_canvas.h @@ -5,6 +5,7 @@ #ifndef 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_paint.h" #include "flutter/display_list/dl_vertices.h" diff --git a/display_list/dl_op_records.h b/display_list/dl_op_records.h index b977c2d269117..1df10f933f3c0 100644 --- a/display_list/dl_op_records.h +++ b/display_list/dl_op_records.h @@ -9,7 +9,7 @@ #include "flutter/display_list/dl_blend_mode.h" #include "flutter/display_list/dl_op_receiver.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/fml/macros.h" @@ -169,7 +169,7 @@ struct SetBlendModeOp final : DLOp { // instance copied to the memory following the record // yields a size and efficiency that has somewhere between // 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 { \ static constexpr auto kType = DisplayListOpType::kClear##name; \ \ @@ -189,14 +189,14 @@ struct SetBlendModeOp final : DLOp { receiver.set##name(filter); \ } \ }; -DEFINE_SET_CLEAR_DLATTR_OP(ColorFilter, ColorFilter, filter) -DEFINE_SET_CLEAR_DLATTR_OP(ImageFilter, ImageFilter, filter) -DEFINE_SET_CLEAR_DLATTR_OP(MaskFilter, MaskFilter, filter) -DEFINE_SET_CLEAR_DLATTR_OP(ColorSource, Shader, source) +DEFINE_SET_CLEAR_DLATTR_OP(ColorFilter, filter) +DEFINE_SET_CLEAR_DLATTR_OP(ImageFilter, filter) +DEFINE_SET_CLEAR_DLATTR_OP(MaskFilter, filter) +DEFINE_SET_CLEAR_DLATTR_OP(ColorSource, source) #undef DEFINE_SET_CLEAR_DLATTR_OP -// 4 byte header + 80 bytes for the embedded DlImageColorSource -// uses 84 total bytes (4 bytes unused) +// 4 byte header + 96 bytes for the embedded DlImageColorSource +// uses 104 total bytes (4 bytes unused) struct SetImageColorSourceOp : DLOp { static constexpr auto kType = DisplayListOpType::kSetImageColorSource; diff --git a/display_list/dl_paint_unittests.cc b/display_list/dl_paint_unittests.cc index f3b27727b05db..9320c6486582a 100644 --- a/display_list/dl_paint_unittests.cc +++ b/display_list/dl_paint_unittests.cc @@ -4,7 +4,6 @@ #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 "gtest/gtest.h" @@ -56,14 +55,14 @@ TEST(DisplayListPaint, ConstructorDefaults) { EXPECT_NE(paint, DlPaint().setStrokeWidth(6)); EXPECT_NE(paint, DlPaint().setStrokeMiter(7)); - DlColorColorSource color_source(DlColor::kMagenta()); - EXPECT_NE(paint, DlPaint().setColorSource(color_source.shared())); + auto color_source = DlColorSource::MakeColor(DlColor::kMagenta()); + EXPECT_NE(paint, DlPaint().setColorSource(color_source)); DlBlendColorFilter color_filter(DlColor::kYellow(), DlBlendMode::kDstIn); EXPECT_NE(paint, DlPaint().setColorFilter(color_filter.shared())); - DlBlurImageFilter image_filter(1.3, 4.7, DlTileMode::kClamp); - EXPECT_NE(paint, DlPaint().setImageFilter(image_filter.shared())); + auto image_filter = DlImageFilter::MakeBlur(1.3, 4.7, DlTileMode::kClamp); + EXPECT_NE(paint, DlPaint().setImageFilter(image_filter)); DlBlurMaskFilter mask_filter(DlBlurStyle::kInner, 3.14); EXPECT_NE(paint, DlPaint().setMaskFilter(mask_filter.shared())); @@ -95,23 +94,22 @@ TEST(DisplayListPaint, NullSharedPointerSetGet) { TEST(DisplayListPaint, ChainingConstructor) { DlPaint paint = - DlPaint() // - .setAntiAlias(true) // - .setInvertColors(true) // - .setColor(DlColor::kGreen()) // - .setAlpha(0x7F) // - .setBlendMode(DlBlendMode::kLuminosity) // - .setDrawStyle(DlDrawStyle::kStrokeAndFill) // - .setStrokeCap(DlStrokeCap::kSquare) // - .setStrokeJoin(DlStrokeJoin::kBevel) // - .setStrokeWidth(42) // - .setStrokeMiter(1.5) // - .setColorSource(DlColorColorSource(DlColor::kMagenta()).shared()) // + DlPaint() // + .setAntiAlias(true) // + .setInvertColors(true) // + .setColor(DlColor::kGreen()) // + .setAlpha(0x7F) // + .setBlendMode(DlBlendMode::kLuminosity) // + .setDrawStyle(DlDrawStyle::kStrokeAndFill) // + .setStrokeCap(DlStrokeCap::kSquare) // + .setStrokeJoin(DlStrokeJoin::kBevel) // + .setStrokeWidth(42) // + .setStrokeMiter(1.5) // + .setColorSource(DlColorSource::MakeColor(DlColor::kMagenta())) // .setColorFilter( DlBlendColorFilter(DlColor::kYellow(), DlBlendMode::kDstIn) .shared()) - .setImageFilter( - DlBlurImageFilter(1.3, 4.7, DlTileMode::kClamp).shared()) + .setImageFilter(DlImageFilter::MakeBlur(1.3, 4.7, DlTileMode::kClamp)) .setMaskFilter(DlBlurMaskFilter(DlBlurStyle::kInner, 3.14).shared()); EXPECT_TRUE(paint.isAntiAlias()); EXPECT_TRUE(paint.isInvertColors()); @@ -123,11 +121,12 @@ TEST(DisplayListPaint, ChainingConstructor) { EXPECT_EQ(paint.getStrokeJoin(), DlStrokeJoin::kBevel); EXPECT_EQ(paint.getStrokeWidth(), 42); 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(), DlBlendColorFilter(DlColor::kYellow(), DlBlendMode::kDstIn)); - EXPECT_EQ(*paint.getImageFilter(), - DlBlurImageFilter(1.3, 4.7, DlTileMode::kClamp)); + EXPECT_TRUE(Equals(paint.getImageFilter(), + DlImageFilter::MakeBlur(1.3, 4.7, DlTileMode::kClamp))); EXPECT_EQ(*paint.getMaskFilter(), DlBlurMaskFilter(DlBlurStyle::kInner, 3.14)); diff --git a/display_list/effects/color_sources/dl_color_color_source.cc b/display_list/effects/color_sources/dl_color_color_source.cc new file mode 100644 index 0000000000000..e9f56f758c24f --- /dev/null +++ b/display_list/effects/color_sources/dl_color_color_source.cc @@ -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(&other); + return color_ == that->color_; +} + +} // namespace flutter diff --git a/display_list/effects/color_sources/dl_color_color_source.h b/display_list/effects/color_sources/dl_color_color_source.h new file mode 100644 index 0000000000000..c873448ae44cf --- /dev/null +++ b/display_list/effects/color_sources/dl_color_color_source.h @@ -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 shared() const override { + return std::make_shared(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_ diff --git a/display_list/effects/color_sources/dl_conical_gradient_color_source.cc b/display_list/effects/color_sources/dl_conical_gradient_color_source.cc new file mode 100644 index 0000000000000..0e94d0c6078d3 --- /dev/null +++ b/display_list/effects/color_sources/dl_conical_gradient_color_source.cc @@ -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 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(&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 diff --git a/display_list/effects/color_sources/dl_conical_gradient_color_source.h b/display_list/effects/color_sources/dl_conical_gradient_color_source.h new file mode 100644 index 0000000000000..db523bc94c1c5 --- /dev/null +++ b/display_list/effects/color_sources/dl_conical_gradient_color_source.h @@ -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 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_ diff --git a/display_list/effects/color_sources/dl_gradient_color_source_base.h b/display_list/effects/color_sources/dl_gradient_color_source_base.h new file mode 100644 index 0000000000000..f7a8620373e5b --- /dev/null +++ b/display_list/effects/color_sources/dl_gradient_color_source_base.h @@ -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(pod()); + } + const float* stops() const { + return reinterpret_cast(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_ diff --git a/display_list/effects/color_sources/dl_image_color_source.cc b/display_list/effects/color_sources/dl_image_color_source.cc new file mode 100644 index 0000000000000..bd778efe93ca7 --- /dev/null +++ b/display_list/effects/color_sources/dl_image_color_source.cc @@ -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 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 DlImageColorSource::WithSampling( + DlImageSampling sampling) const { + return std::make_shared(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(&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 diff --git a/display_list/effects/color_sources/dl_image_color_source.h b/display_list/effects/color_sources/dl_image_color_source.h new file mode 100644 index 0000000000000..046b9352fcbb3 --- /dev/null +++ b/display_list/effects/color_sources/dl_image_color_source.h @@ -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 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 shared() const override { + return WithSampling(sampling_); + } + + std::shared_ptr 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 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 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_ diff --git a/display_list/effects/color_sources/dl_linear_gradient_color_source.cc b/display_list/effects/color_sources/dl_linear_gradient_color_source.cc new file mode 100644 index 0000000000000..380dce96f95bd --- /dev/null +++ b/display_list/effects/color_sources/dl_linear_gradient_color_source.cc @@ -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 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(&other); + return (start_point_ == that->start_point_ && + end_point_ == that->end_point_ && base_equals_(that)); +} + +} // namespace flutter diff --git a/display_list/effects/color_sources/dl_linear_gradient_color_source.h b/display_list/effects/color_sources/dl_linear_gradient_color_source.h new file mode 100644 index 0000000000000..886d4ceb8811a --- /dev/null +++ b/display_list/effects/color_sources/dl_linear_gradient_color_source.h @@ -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 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_ diff --git a/display_list/effects/color_sources/dl_matrix_color_source_base.h b/display_list/effects/color_sources/dl_matrix_color_source_base.h new file mode 100644 index 0000000000000..e9c178e5526ef --- /dev/null +++ b/display_list/effects/color_sources/dl_matrix_color_source_base.h @@ -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_ diff --git a/display_list/effects/color_sources/dl_radial_gradient_color_source.cc b/display_list/effects/color_sources/dl_radial_gradient_color_source.cc new file mode 100644 index 0000000000000..7c217f649fbd7 --- /dev/null +++ b/display_list/effects/color_sources/dl_radial_gradient_color_source.cc @@ -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 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(&other); + return (center_ == that->center_ && radius_ == that->radius_ && + base_equals_(that)); +} + +} // namespace flutter diff --git a/display_list/effects/color_sources/dl_radial_gradient_color_source.h b/display_list/effects/color_sources/dl_radial_gradient_color_source.h new file mode 100644 index 0000000000000..70b48d504578f --- /dev/null +++ b/display_list/effects/color_sources/dl_radial_gradient_color_source.h @@ -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 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_ diff --git a/display_list/effects/color_sources/dl_runtime_effect_color_source.cc b/display_list/effects/color_sources/dl_runtime_effect_color_source.cc new file mode 100644 index 0000000000000..8f38b994cacae --- /dev/null +++ b/display_list/effects/color_sources/dl_runtime_effect_color_source.cc @@ -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 runtime_effect, + std::vector> samplers, + std::shared_ptr> uniform_data) + : runtime_effect_(std::move(runtime_effect)), + samplers_(std::move(samplers)), + uniform_data_(std::move(uniform_data)) {} + +std::shared_ptr DlRuntimeEffectColorSource::shared() const { + return std::make_shared(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(&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 diff --git a/display_list/effects/color_sources/dl_runtime_effect_color_source.h b/display_list/effects/color_sources/dl_runtime_effect_color_source.h new file mode 100644 index 0000000000000..126a3b6a0a8f0 --- /dev/null +++ b/display_list/effects/color_sources/dl_runtime_effect_color_source.h @@ -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 runtime_effect, + std::vector> samplers, + std::shared_ptr> uniform_data); + + bool isUIThreadSafe() const override; + + const DlRuntimeEffectColorSource* asRuntimeEffect() const override { + return this; + } + + std::shared_ptr 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 runtime_effect() const { + return runtime_effect_; + } + const std::vector> samplers() const { + return samplers_; + } + const std::shared_ptr> uniform_data() const { + return uniform_data_; + } + + protected: + bool equals_(DlColorSource const& other) const override; + + private: + sk_sp runtime_effect_; + std::vector> samplers_; + std::shared_ptr> uniform_data_; + + FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlRuntimeEffectColorSource); +}; + +} // namespace flutter + +#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RUNTIME_EFFECT_COLOR_SOURCE_H_ diff --git a/display_list/effects/color_sources/dl_sweep_gradient_color_source.cc b/display_list/effects/color_sources/dl_sweep_gradient_color_source.cc new file mode 100644 index 0000000000000..c575e72947a31 --- /dev/null +++ b/display_list/effects/color_sources/dl_sweep_gradient_color_source.cc @@ -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 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(&other); + return (center_ == that->center_ && start_ == that->start_ && + end_ == that->end_ && base_equals_(that)); +} + +} // namespace flutter diff --git a/display_list/effects/color_sources/dl_sweep_gradient_color_source.h b/display_list/effects/color_sources/dl_sweep_gradient_color_source.h new file mode 100644 index 0000000000000..b33753898ce31 --- /dev/null +++ b/display_list/effects/color_sources/dl_sweep_gradient_color_source.h @@ -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 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_ diff --git a/display_list/effects/dl_color_source.cc b/display_list/effects/dl_color_source.cc index 47a30d544a803..6009096b3dab3 100644 --- a/display_list/effects/dl_color_source.cc +++ b/display_list/effects/dl_color_source.cc @@ -5,6 +5,7 @@ #include "flutter/display_list/effects/dl_color_source.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/fml/logging.h" @@ -19,14 +20,28 @@ static void DlGradientDeleter(void* p) { ::operator delete(p); } -std::shared_ptr DlColorSource::MakeLinear( - const SkPoint start_point, - const SkPoint end_point, +std::shared_ptr DlColorSource::MakeColor(DlColor color) { + return std::make_shared(color); +} + +std::shared_ptr DlColorSource::MakeImage( + const sk_sp& image, + DlTileMode horizontal_tile_mode, + DlTileMode vertical_tile_mode, + DlImageSampling sampling, + const DlMatrix* matrix) { + return std::make_shared( + image, horizontal_tile_mode, vertical_tile_mode, sampling, matrix); +} + +std::shared_ptr DlColorSource::MakeLinear( + const DlPoint start_point, + const DlPoint end_point, uint32_t stop_count, const DlColor* colors, const float* stops, DlTileMode tile_mode, - const SkMatrix* matrix) { + const DlMatrix* matrix) { size_t needed = sizeof(DlLinearGradientColorSource) + (stop_count * (sizeof(DlColor) + sizeof(float))); @@ -40,14 +55,14 @@ std::shared_ptr DlColorSource::MakeLinear( return ret; } -std::shared_ptr DlColorSource::MakeRadial( - SkPoint center, - SkScalar radius, +std::shared_ptr DlColorSource::MakeRadial( + DlPoint center, + DlScalar radius, uint32_t stop_count, const DlColor* colors, const float* stops, DlTileMode tile_mode, - const SkMatrix* matrix) { + const DlMatrix* matrix) { size_t needed = sizeof(DlRadialGradientColorSource) + (stop_count * (sizeof(DlColor) + sizeof(float))); @@ -60,16 +75,16 @@ std::shared_ptr DlColorSource::MakeRadial( return ret; } -std::shared_ptr DlColorSource::MakeConical( - SkPoint start_center, - SkScalar start_radius, - SkPoint end_center, - SkScalar end_radius, +std::shared_ptr DlColorSource::MakeConical( + 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 SkMatrix* matrix) { + const DlMatrix* matrix) { size_t needed = sizeof(DlConicalGradientColorSource) + (stop_count * (sizeof(DlColor) + sizeof(float))); @@ -83,15 +98,15 @@ std::shared_ptr DlColorSource::MakeConical( return ret; } -std::shared_ptr DlColorSource::MakeSweep( - SkPoint center, - SkScalar start, - SkScalar end, +std::shared_ptr DlColorSource::MakeSweep( + DlPoint center, + DlScalar start, + DlScalar end, uint32_t stop_count, const DlColor* colors, const float* stops, DlTileMode tile_mode, - const SkMatrix* matrix) { + const DlMatrix* matrix) { size_t needed = sizeof(DlSweepGradientColorSource) + (stop_count * (sizeof(DlColor) + sizeof(float))); @@ -105,7 +120,7 @@ std::shared_ptr DlColorSource::MakeSweep( return ret; } -std::shared_ptr DlColorSource::MakeRuntimeEffect( +std::shared_ptr DlColorSource::MakeRuntimeEffect( sk_sp runtime_effect, std::vector> samplers, std::shared_ptr> uniform_data) { @@ -114,4 +129,55 @@ std::shared_ptr DlColorSource::MakeRuntimeEffect( 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(pod); + memcpy(color_storage, color_data, stop_count_ * sizeof(*color_data)); + float* stop_storage = reinterpret_cast(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 diff --git a/display_list/effects/dl_color_source.h b/display_list/effects/dl_color_source.h index 90f034ddee263..8b25644248306 100644 --- a/display_list/effects/dl_color_source.h +++ b/display_list/effects/dl_color_source.h @@ -5,11 +5,6 @@ #ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_ #define FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_ -#include -#include -#include - -#include "flutter/display_list/display_list.h" #include "flutter/display_list/dl_attributes.h" #include "flutter/display_list/dl_color.h" #include "flutter/display_list/dl_sampling_options.h" @@ -18,8 +13,6 @@ #include "flutter/display_list/image/dl_image.h" #include "flutter/fml/logging.h" -#include "third_party/skia/include/core/SkShader.h" - namespace flutter { class DlColorColorSource; @@ -52,46 +45,55 @@ enum class DlColorSourceType { class DlColorSource : public DlAttribute { public: - static std::shared_ptr MakeLinear( - const SkPoint start_point, - const SkPoint end_point, + static std::shared_ptr MakeColor(DlColor color); + + static std::shared_ptr MakeImage( + const sk_sp& image, + DlTileMode horizontal_tile_mode, + DlTileMode vertical_tile_mode, + DlImageSampling sampling = DlImageSampling::kLinear, + const DlMatrix* matrix = nullptr); + + static std::shared_ptr MakeLinear( + const DlPoint start_point, + const DlPoint end_point, uint32_t stop_count, const DlColor* colors, const float* stops, DlTileMode tile_mode, - const SkMatrix* matrix = nullptr); + const DlMatrix* matrix = nullptr); - static std::shared_ptr MakeRadial( - SkPoint center, - SkScalar radius, + static std::shared_ptr MakeRadial( + DlPoint center, + DlScalar radius, uint32_t stop_count, const DlColor* colors, const float* stops, DlTileMode tile_mode, - const SkMatrix* matrix = nullptr); + const DlMatrix* matrix = nullptr); - static std::shared_ptr MakeConical( - SkPoint start_center, - SkScalar start_radius, - SkPoint end_center, - SkScalar end_radius, + static std::shared_ptr MakeConical( + 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 SkMatrix* matrix = nullptr); + const DlMatrix* matrix = nullptr); - static std::shared_ptr MakeSweep( - SkPoint center, - SkScalar start, - SkScalar end, + static std::shared_ptr MakeSweep( + DlPoint center, + DlScalar start, + DlScalar end, uint32_t stop_count, const DlColor* colors, const float* stops, DlTileMode tile_mode, - const SkMatrix* matrix = nullptr); + const DlMatrix* matrix = nullptr); - static std::shared_ptr MakeRuntimeEffect( + static std::shared_ptr MakeRuntimeEffect( sk_sp runtime_effect, std::vector> samplers, std::shared_ptr> uniform_data); @@ -161,535 +163,6 @@ class DlColorSource : public DlAttribute { 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 shared() const override { - return std::make_shared(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(&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 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 shared() const override { - return with_sampling(sampling_); - } - - std::shared_ptr with_sampling(DlImageSampling sampling) const { - return std::make_shared(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 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(&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 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(pod()); - } - const float* stops() const { - return reinterpret_cast(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(pod); - memcpy(color_storage, color_data, stop_count_ * sizeof(*color_data)); - float* stop_storage = reinterpret_cast(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 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(&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 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(&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 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(&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 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(&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 runtime_effect, - std::vector> samplers, - std::shared_ptr> 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 shared() const override { - return std::make_shared( - 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 runtime_effect() const { - return runtime_effect_; - } - const std::vector> samplers() const { - return samplers_; - } - const std::shared_ptr> uniform_data() const { - return uniform_data_; - } - - protected: - bool equals_(DlColorSource const& other) const override { - FML_DCHECK(other.type() == DlColorSourceType::kRuntimeEffect); - auto that = static_cast(&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 runtime_effect_; - std::vector> samplers_; - std::shared_ptr> uniform_data_; - - FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlRuntimeEffectColorSource); -}; } // namespace flutter #endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCE_H_ diff --git a/display_list/effects/dl_color_source_unittests.cc b/display_list/effects/dl_color_source_unittests.cc index 1dcfda7b40313..423c5c405bbb5 100644 --- a/display_list/effects/dl_color_source_unittests.cc +++ b/display_list/effects/dl_color_source_unittests.cc @@ -7,7 +7,7 @@ #include "flutter/display_list/dl_color.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/image/dl_image.h" #include "flutter/display_list/testing/dl_test_equality.h" @@ -47,14 +47,16 @@ static const sk_sp kTestImage1 = MakeTestImage(10, 10, SK_ColorGREEN); static const sk_sp kTestAlphaImage1 = MakeTestImage(10, 10, SK_ColorTRANSPARENT); // clang-format off -static const SkMatrix kTestMatrix1 = - SkMatrix::MakeAll(2, 0, 10, - 0, 3, 12, - 0, 0, 1); -static const SkMatrix kTestMatrix2 = - SkMatrix::MakeAll(4, 0, 15, - 0, 7, 17, - 0, 0, 1); +static const DlMatrix kTestMatrix1 = + DlMatrix::MakeRow(2, 0, 0, 10, + 0, 3, 0, 12, + 0, 0, 1, 0, + 0, 0, 0, 1); +static const DlMatrix kTestMatrix2 = + DlMatrix::MakeRow(4, 0, 0, 15, + 0, 7, 0, 17, + 0, 0, 1, 0, + 0, 0, 0, 1); // clang-format on static constexpr int kTestStopCount = 3; static constexpr DlColor kTestColors[kTestStopCount] = { @@ -77,13 +79,13 @@ static constexpr float kTestStops2[kTestStopCount] = { 0.3f, 1.0f, }; -static constexpr SkPoint kTestPoints[2] = { - SkPoint::Make(5, 15), - SkPoint::Make(7, 18), +static constexpr DlPoint kTestPoints[2] = { + DlPoint(5, 15), + DlPoint(7, 18), }; -static constexpr SkPoint kTestPoints2[2] = { - SkPoint::Make(100, 115), - SkPoint::Make(107, 118), +static constexpr DlPoint kTestPoints2[2] = { + DlPoint(100, 115), + DlPoint(107, 118), }; TEST(DisplayListColorSource, ColorConstructor) { @@ -729,15 +731,12 @@ TEST(DisplayListColorSource, SweepGradientNotEquals) { } TEST(DisplayListColorSource, RuntimeEffect) { - std::shared_ptr source1 = - DlColorSource::MakeRuntimeEffect( - kTestRuntimeEffect1, {}, std::make_shared>()); - std::shared_ptr source2 = - DlColorSource::MakeRuntimeEffect( - kTestRuntimeEffect2, {}, std::make_shared>()); - std::shared_ptr source3 = - DlColorSource::MakeRuntimeEffect( - nullptr, {}, std::make_shared>()); + std::shared_ptr source1 = DlColorSource::MakeRuntimeEffect( + kTestRuntimeEffect1, {}, std::make_shared>()); + std::shared_ptr source2 = DlColorSource::MakeRuntimeEffect( + kTestRuntimeEffect2, {}, std::make_shared>()); + std::shared_ptr source3 = DlColorSource::MakeRuntimeEffect( + nullptr, {}, std::make_shared>()); ASSERT_EQ(source1->type(), DlColorSourceType::kRuntimeEffect); ASSERT_EQ(source1->asRuntimeEffect(), source1.get()); diff --git a/display_list/effects/dl_color_sources.h b/display_list/effects/dl_color_sources.h new file mode 100644 index 0000000000000..ce5d802d04176 --- /dev/null +++ b/display_list/effects/dl_color_sources.h @@ -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_ diff --git a/display_list/effects/dl_image_filter.cc b/display_list/effects/dl_image_filter.cc index 663a8d152de00..468b420991656 100644 --- a/display_list/effects/dl_image_filter.cc +++ b/display_list/effects/dl_image_filter.cc @@ -4,10 +4,51 @@ #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 { +std::shared_ptr DlImageFilter::MakeBlur(DlScalar sigma_x, + DlScalar sigma_y, + DlTileMode tile_mode) { + return DlBlurImageFilter::Make(sigma_x, sigma_y, tile_mode); +} + +std::shared_ptr DlImageFilter::MakeDilate(DlScalar radius_x, + DlScalar radius_y) { + return DlDilateImageFilter::Make(radius_x, radius_y); +} + +std::shared_ptr DlImageFilter::MakeErode(DlScalar radius_x, + DlScalar radius_y) { + return DlErodeImageFilter::Make(radius_x, radius_y); +} + +std::shared_ptr DlImageFilter::MakeMatrix( + const DlMatrix& matrix, + DlImageSampling sampling) { + return DlMatrixImageFilter::Make(matrix, sampling); +} + +std::shared_ptr DlImageFilter::MakeRuntimeEffect( + sk_sp runtime_effect, + std::vector> samplers, + std::shared_ptr> uniform_data) { + return DlRuntimeEffectImageFilter::Make( + std::move(runtime_effect), std::move(samplers), std::move(uniform_data)); +} + +std::shared_ptr DlImageFilter::MakeColorFilter( + const std::shared_ptr& filter) { + return DlColorFilterImageFilter::Make(filter); +} + +std::shared_ptr DlImageFilter::MakeCompose( + const std::shared_ptr& outer, + const std::shared_ptr& inner) { + return DlComposeImageFilter::Make(outer, inner); +} + DlVector2 DlImageFilter::map_vectors_affine(const DlMatrix& ctm, DlScalar x, DlScalar y) { diff --git a/display_list/effects/dl_image_filter.h b/display_list/effects/dl_image_filter.h index 50b3444b03833..911fe62778247 100644 --- a/display_list/effects/dl_image_filter.h +++ b/display_list/effects/dl_image_filter.h @@ -6,6 +6,11 @@ #define FLUTTER_DISPLAY_LIST_EFFECTS_DL_IMAGE_FILTER_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" namespace flutter { @@ -23,20 +28,20 @@ enum class DlImageFilterType { kDilate, kErode, kMatrix, - kCompose, + kRuntimeEffect, kColorFilter, + kCompose, kLocalMatrix, - kRuntimeEffect, }; class DlBlurImageFilter; class DlDilateImageFilter; class DlErodeImageFilter; class DlMatrixImageFilter; -class DlLocalMatrixImageFilter; -class DlComposeImageFilter; -class DlColorFilterImageFilter; class DlRuntimeEffectImageFilter; +class DlColorFilterImageFilter; +class DlComposeImageFilter; +class DlLocalMatrixImageFilter; class DlImageFilter : public DlAttribute { public: @@ -46,6 +51,31 @@ class DlImageFilter : public DlAttribute { kComplex, }; + static std::shared_ptr MakeBlur(DlScalar sigma_x, + DlScalar sigma_y, + DlTileMode tile_mode); + + static std::shared_ptr MakeDilate(DlScalar radius_x, + DlScalar radius_y); + + static std::shared_ptr MakeErode(DlScalar radius_x, + DlScalar radius_y); + + static std::shared_ptr MakeMatrix(const DlMatrix& matrix, + DlImageSampling sampling); + + static std::shared_ptr MakeRuntimeEffect( + sk_sp runtime_effect, + std::vector> samplers, + std::shared_ptr> uniform_data); + + static std::shared_ptr MakeColorFilter( + const std::shared_ptr& filter); + + static std::shared_ptr MakeCompose( + const std::shared_ptr& outer, + const std::shared_ptr& inner); + // Return a DlBlurImageFilter pointer to this object iff it is a Blur // type of ImageFilter, otherwise return nullptr. virtual const DlBlurImageFilter* asBlur() const { return nullptr; } diff --git a/display_list/effects/dl_image_filter_unittests.cc b/display_list/effects/dl_image_filter_unittests.cc index 4746690c8d599..b9996f34f355a 100644 --- a/display_list/effects/dl_image_filter_unittests.cc +++ b/display_list/effects/dl_image_filter_unittests.cc @@ -237,18 +237,18 @@ TEST(DisplayListImageFilter, BlurBounds) { TEST(DisplayListImageFilter, BlurZeroSigma) { std::shared_ptr filter = - DlBlurImageFilter::Make(0, 0, DlTileMode::kMirror); + DlImageFilter::MakeBlur(0, 0, DlTileMode::kMirror); ASSERT_EQ(filter, nullptr); - filter = DlBlurImageFilter::Make(3, SK_ScalarNaN, DlTileMode::kMirror); + filter = DlImageFilter::MakeBlur(3, SK_ScalarNaN, DlTileMode::kMirror); ASSERT_EQ(filter, nullptr); - filter = DlBlurImageFilter::Make(SK_ScalarNaN, 3, DlTileMode::kMirror); + filter = DlImageFilter::MakeBlur(SK_ScalarNaN, 3, DlTileMode::kMirror); ASSERT_EQ(filter, nullptr); filter = - DlBlurImageFilter::Make(SK_ScalarNaN, SK_ScalarNaN, DlTileMode::kMirror); + DlImageFilter::MakeBlur(SK_ScalarNaN, SK_ScalarNaN, DlTileMode::kMirror); ASSERT_EQ(filter, nullptr); - filter = DlBlurImageFilter::Make(3, 0, DlTileMode::kMirror); + filter = DlImageFilter::MakeBlur(3, 0, DlTileMode::kMirror); ASSERT_NE(filter, nullptr); - filter = DlBlurImageFilter::Make(0, 3, DlTileMode::kMirror); + filter = DlImageFilter::MakeBlur(0, 3, DlTileMode::kMirror); ASSERT_NE(filter, nullptr); } @@ -759,13 +759,13 @@ TEST(DisplayListImageFilter, LocalImageFilterBounds) { DlBlendColorFilter dl_color_filter(DlColor::kRed(), DlBlendMode::kSrcOver); std::vector> dl_filters{ - DlBlurImageFilter::Make(5.0, 6.0, DlTileMode::kRepeat), - DlColorFilterImageFilter::Make(dl_color_filter.shared()), - DlDilateImageFilter::Make(5, 10), - DlMatrixImageFilter::Make(filter_matrix, DlImageSampling::kLinear), - DlComposeImageFilter::Make( - DlBlurImageFilter::Make(5.0, 6.0, DlTileMode::kRepeat), - DlColorFilterImageFilter::Make(dl_color_filter.shared())), + DlImageFilter::MakeBlur(5.0, 6.0, DlTileMode::kRepeat), + DlImageFilter::MakeColorFilter(dl_color_filter.shared()), + DlImageFilter::MakeDilate(5, 10), + DlImageFilter::MakeMatrix(filter_matrix, DlImageSampling::kLinear), + DlImageFilter::MakeCompose( + DlImageFilter::MakeBlur(5.0, 6.0, DlTileMode::kRepeat), + DlImageFilter::MakeColorFilter(dl_color_filter.shared())), }; auto persp = SkMatrix::I(); @@ -895,10 +895,10 @@ TEST(DisplayListImageFilter, RuntimeEffectEquality) { } TEST(DisplayListImageFilter, RuntimeEffectEqualityWithSamplers) { - auto image_a = std::make_shared( - nullptr, DlTileMode::kClamp, DlTileMode::kDecal); - auto image_b = std::make_shared( - nullptr, DlTileMode::kClamp, DlTileMode::kClamp); + auto image_a = + DlColorSource::MakeImage(nullptr, DlTileMode::kClamp, DlTileMode::kDecal); + auto image_b = + DlColorSource::MakeImage(nullptr, DlTileMode::kClamp, DlTileMode::kClamp); DlRuntimeEffectImageFilter filter_a(nullptr, {nullptr, image_a}, std::make_shared>()); diff --git a/display_list/effects/dl_image_filters.h b/display_list/effects/dl_image_filters.h index 3a13e6899413b..e3a7f48f7a69d 100644 --- a/display_list/effects/dl_image_filters.h +++ b/display_list/effects/dl_image_filters.h @@ -5,13 +5,13 @@ #ifndef 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/dl_color_filter_image_filter.h" -#include "flutter/display_list/effects/dl_compose_image_filter.h" -#include "flutter/display_list/effects/dl_dilate_image_filter.h" -#include "flutter/display_list/effects/dl_erode_image_filter.h" -#include "flutter/display_list/effects/dl_local_matrix_image_filter.h" -#include "flutter/display_list/effects/dl_matrix_image_filter.h" -#include "flutter/display_list/effects/dl_runtime_effect_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_blur_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_color_filter_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_compose_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_dilate_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_erode_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_local_matrix_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_matrix_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_ diff --git a/display_list/effects/dl_blur_image_filter.cc b/display_list/effects/image_filters/dl_blur_image_filter.cc similarity index 96% rename from display_list/effects/dl_blur_image_filter.cc rename to display_list/effects/image_filters/dl_blur_image_filter.cc index a45a083579cde..5b1e61b96912f 100644 --- a/display_list/effects/dl_blur_image_filter.cc +++ b/display_list/effects/image_filters/dl_blur_image_filter.cc @@ -2,7 +2,7 @@ // 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/dl_blur_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_blur_image_filter.h" namespace flutter { diff --git a/display_list/effects/dl_blur_image_filter.h b/display_list/effects/image_filters/dl_blur_image_filter.h similarity index 90% rename from display_list/effects/dl_blur_image_filter.h rename to display_list/effects/image_filters/dl_blur_image_filter.h index 090334ad9dbcf..6853a9354f6ac 100644 --- a/display_list/effects/dl_blur_image_filter.h +++ b/display_list/effects/image_filters/dl_blur_image_filter.h @@ -2,8 +2,8 @@ // 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_BLUR_IMAGE_FILTER_H_ -#define 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_IMAGE_FILTERS_DL_BLUR_IMAGE_FILTER_H_ #include "flutter/display_list/effects/dl_image_filter.h" @@ -63,4 +63,4 @@ class DlBlurImageFilter final : public DlImageFilter { } // namespace flutter -#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_BLUR_IMAGE_FILTER_H_ +#endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_BLUR_IMAGE_FILTER_H_ diff --git a/display_list/effects/dl_color_filter_image_filter.cc b/display_list/effects/image_filters/dl_color_filter_image_filter.cc similarity index 94% rename from display_list/effects/dl_color_filter_image_filter.cc rename to display_list/effects/image_filters/dl_color_filter_image_filter.cc index f06efc884d2b5..92ada43cf9ccd 100644 --- a/display_list/effects/dl_color_filter_image_filter.cc +++ b/display_list/effects/image_filters/dl_color_filter_image_filter.cc @@ -2,7 +2,7 @@ // 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/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" diff --git a/display_list/effects/dl_color_filter_image_filter.h b/display_list/effects/image_filters/dl_color_filter_image_filter.h similarity index 87% rename from display_list/effects/dl_color_filter_image_filter.h rename to display_list/effects/image_filters/dl_color_filter_image_filter.h index 845586d48f69c..602770d87c471 100644 --- a/display_list/effects/dl_color_filter_image_filter.h +++ b/display_list/effects/image_filters/dl_color_filter_image_filter.h @@ -2,8 +2,8 @@ // 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_FILTER_IMAGE_FILTER_H_ -#define 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_IMAGE_FILTERS_DL_COLOR_FILTER_IMAGE_FILTER_H_ #include "display_list/effects/dl_image_filter.h" @@ -61,11 +61,6 @@ class DlColorFilterImageFilter final : public DlImageFilter { return MatrixCapability::kComplex; } - std::shared_ptr makeWithLocalMatrix( - const DlMatrix& matrix) const override { - return shared(); - } - protected: bool equals_(const DlImageFilter& other) const override; @@ -75,4 +70,4 @@ class DlColorFilterImageFilter final : public DlImageFilter { } // 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_ diff --git a/display_list/effects/dl_compose_image_filter.cc b/display_list/effects/image_filters/dl_compose_image_filter.cc similarity index 97% rename from display_list/effects/dl_compose_image_filter.cc rename to display_list/effects/image_filters/dl_compose_image_filter.cc index 73ea92b547c2a..13ab97882d25e 100644 --- a/display_list/effects/dl_compose_image_filter.cc +++ b/display_list/effects/image_filters/dl_compose_image_filter.cc @@ -2,7 +2,7 @@ // 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/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" diff --git a/display_list/effects/dl_compose_image_filter.h b/display_list/effects/image_filters/dl_compose_image_filter.h similarity index 91% rename from display_list/effects/dl_compose_image_filter.h rename to display_list/effects/image_filters/dl_compose_image_filter.h index a66eb9cf07f89..5ce5f6c668c9b 100644 --- a/display_list/effects/dl_compose_image_filter.h +++ b/display_list/effects/image_filters/dl_compose_image_filter.h @@ -2,8 +2,8 @@ // 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_COMPOSE_IMAGE_FILTER_H_ -#define 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_IMAGE_FILTERS_DL_COMPOSE_IMAGE_FILTER_H_ #include "display_list/effects/dl_image_filter.h" @@ -66,4 +66,4 @@ class DlComposeImageFilter final : public DlImageFilter { } // namespace flutter -#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_COMPOSE_IMAGE_FILTER_H_ +#endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_COMPOSE_IMAGE_FILTER_H_ diff --git a/display_list/effects/dl_dilate_image_filter.cc b/display_list/effects/image_filters/dl_dilate_image_filter.cc similarity index 95% rename from display_list/effects/dl_dilate_image_filter.cc rename to display_list/effects/image_filters/dl_dilate_image_filter.cc index 89523e95a2299..da192176fe508 100644 --- a/display_list/effects/dl_dilate_image_filter.cc +++ b/display_list/effects/image_filters/dl_dilate_image_filter.cc @@ -2,7 +2,7 @@ // 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/dl_dilate_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_dilate_image_filter.h" namespace flutter { diff --git a/display_list/effects/dl_dilate_image_filter.h b/display_list/effects/image_filters/dl_dilate_image_filter.h similarity index 89% rename from display_list/effects/dl_dilate_image_filter.h rename to display_list/effects/image_filters/dl_dilate_image_filter.h index 003f3092d67fd..b0dd3de28ebb9 100644 --- a/display_list/effects/dl_dilate_image_filter.h +++ b/display_list/effects/image_filters/dl_dilate_image_filter.h @@ -2,8 +2,8 @@ // 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_DILATE_IMAGE_FILTER_H_ -#define 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_IMAGE_FILTERS_DL_DILATE_IMAGE_FILTER_H_ #include "display_list/effects/dl_image_filter.h" @@ -56,4 +56,4 @@ class DlDilateImageFilter final : public DlImageFilter { } // namespace flutter -#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_DILATE_IMAGE_FILTER_H_ +#endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_DILATE_IMAGE_FILTER_H_ diff --git a/display_list/effects/dl_erode_image_filter.cc b/display_list/effects/image_filters/dl_erode_image_filter.cc similarity index 95% rename from display_list/effects/dl_erode_image_filter.cc rename to display_list/effects/image_filters/dl_erode_image_filter.cc index 71538b7d1f2e2..0b58af6e6f5ff 100644 --- a/display_list/effects/dl_erode_image_filter.cc +++ b/display_list/effects/image_filters/dl_erode_image_filter.cc @@ -2,7 +2,7 @@ // 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/dl_erode_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_erode_image_filter.h" namespace flutter { diff --git a/display_list/effects/dl_erode_image_filter.h b/display_list/effects/image_filters/dl_erode_image_filter.h similarity index 89% rename from display_list/effects/dl_erode_image_filter.h rename to display_list/effects/image_filters/dl_erode_image_filter.h index 9cd28488237c4..6bbae385740ea 100644 --- a/display_list/effects/dl_erode_image_filter.h +++ b/display_list/effects/image_filters/dl_erode_image_filter.h @@ -2,8 +2,8 @@ // 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_ERODE_IMAGE_FILTER_H_ -#define 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_IMAGE_FILTERS_DL_ERODE_IMAGE_FILTER_H_ #include @@ -58,4 +58,4 @@ class DlErodeImageFilter final : public DlImageFilter { } // namespace flutter -#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_ERODE_IMAGE_FILTER_H_ +#endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_ERODE_IMAGE_FILTER_H_ diff --git a/display_list/effects/dl_local_matrix_image_filter.cc b/display_list/effects/image_filters/dl_local_matrix_image_filter.cc similarity index 95% rename from display_list/effects/dl_local_matrix_image_filter.cc rename to display_list/effects/image_filters/dl_local_matrix_image_filter.cc index 42a1782f2fb76..68c0e9c784028 100644 --- a/display_list/effects/dl_local_matrix_image_filter.cc +++ b/display_list/effects/image_filters/dl_local_matrix_image_filter.cc @@ -2,7 +2,7 @@ // 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/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" diff --git a/display_list/effects/dl_local_matrix_image_filter.h b/display_list/effects/image_filters/dl_local_matrix_image_filter.h similarity index 89% rename from display_list/effects/dl_local_matrix_image_filter.h rename to display_list/effects/image_filters/dl_local_matrix_image_filter.h index 8b212c675eefb..94a88ac25caaf 100644 --- a/display_list/effects/dl_local_matrix_image_filter.h +++ b/display_list/effects/image_filters/dl_local_matrix_image_filter.h @@ -2,8 +2,8 @@ // 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_LOCAL_MATRIX_IMAGE_FILTER_H_ -#define 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_IMAGE_FILTERS_DL_LOCAL_MATRIX_IMAGE_FILTER_H_ #include "display_list/effects/dl_image_filter.h" @@ -66,4 +66,4 @@ class DlLocalMatrixImageFilter final : public DlImageFilter { } // 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_ diff --git a/display_list/effects/dl_matrix_image_filter.cc b/display_list/effects/image_filters/dl_matrix_image_filter.cc similarity index 96% rename from display_list/effects/dl_matrix_image_filter.cc rename to display_list/effects/image_filters/dl_matrix_image_filter.cc index 87bc08efbef77..4d9bc95efcf34 100644 --- a/display_list/effects/dl_matrix_image_filter.cc +++ b/display_list/effects/image_filters/dl_matrix_image_filter.cc @@ -2,7 +2,7 @@ // 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/dl_matrix_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_matrix_image_filter.h" namespace flutter { diff --git a/display_list/effects/dl_matrix_image_filter.h b/display_list/effects/image_filters/dl_matrix_image_filter.h similarity index 89% rename from display_list/effects/dl_matrix_image_filter.h rename to display_list/effects/image_filters/dl_matrix_image_filter.h index 5d268ad87661b..ee98e9c2d11a3 100644 --- a/display_list/effects/dl_matrix_image_filter.h +++ b/display_list/effects/image_filters/dl_matrix_image_filter.h @@ -2,8 +2,8 @@ // 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_MATRIX_IMAGE_FILTER_H_ -#define 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_IMAGE_FILTERS_DL_MATRIX_IMAGE_FILTER_H_ #include "display_list/effects/dl_image_filter.h" @@ -58,4 +58,4 @@ class DlMatrixImageFilter final : public DlImageFilter { } // namespace flutter -#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_MATRIX_IMAGE_FILTER_H_ +#endif // FLUTTER_DISPLAY_LIST_EFFECTS_IMAGE_FILTERS_DL_MATRIX_IMAGE_FILTER_H_ diff --git a/display_list/effects/dl_runtime_effect_image_filter.cc b/display_list/effects/image_filters/dl_runtime_effect_image_filter.cc similarity index 95% rename from display_list/effects/dl_runtime_effect_image_filter.cc rename to display_list/effects/image_filters/dl_runtime_effect_image_filter.cc index 451063a27ff57..9c6c285532d61 100644 --- a/display_list/effects/dl_runtime_effect_image_filter.cc +++ b/display_list/effects/image_filters/dl_runtime_effect_image_filter.cc @@ -2,7 +2,7 @@ // 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/dl_runtime_effect_image_filter.h" +#include "flutter/display_list/effects/image_filters/dl_runtime_effect_image_filter.h" namespace flutter { diff --git a/display_list/effects/dl_runtime_effect_image_filter.h b/display_list/effects/image_filters/dl_runtime_effect_image_filter.h similarity index 90% rename from display_list/effects/dl_runtime_effect_image_filter.h rename to display_list/effects/image_filters/dl_runtime_effect_image_filter.h index dffa42ae0b91c..391cfd9f475f9 100644 --- a/display_list/effects/dl_runtime_effect_image_filter.h +++ b/display_list/effects/image_filters/dl_runtime_effect_image_filter.h @@ -2,8 +2,8 @@ // 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_RUNTIME_EFFECT_IMAGE_FILTER_H_ -#define 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_IMAGE_FILTERS_DL_RUNTIME_EFFECT_IMAGE_FILTER_H_ #include "display_list/effects/dl_image_filter.h" @@ -77,4 +77,4 @@ class DlRuntimeEffectImageFilter final : public DlImageFilter { } // 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_ diff --git a/display_list/skia/dl_sk_canvas.cc b/display_list/skia/dl_sk_canvas.cc index 1ffc234ac1d4e..6d66c466745e6 100644 --- a/display_list/skia/dl_sk_canvas.cc +++ b/display_list/skia/dl_sk_canvas.cc @@ -6,7 +6,7 @@ #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_dispatcher.h" #include "flutter/fml/trace_event.h" diff --git a/display_list/skia/dl_sk_conversions.cc b/display_list/skia/dl_sk_conversions.cc index 0db0e1ed3a958..b97b7d584a32b 100644 --- a/display_list/skia/dl_sk_conversions.cc +++ b/display_list/skia/dl_sk_conversions.cc @@ -4,6 +4,7 @@ #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 "third_party/skia/include/core/SkColorFilter.h" #include "third_party/skia/include/effects/SkGradientShader.h" @@ -70,6 +71,7 @@ sk_sp ToSk(const DlColorSource* source) { if (!source) { return nullptr; } + SkMatrix scratch; static auto ToSkColors = [](const DlGradientColorSourceBase* gradient) -> std::vector { std::vector sk_colors; @@ -95,51 +97,53 @@ sk_sp ToSk(const DlColorSource* source) { return image->skia_image()->makeShader( ToSk(image_source->horizontal_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: { const DlLinearGradientColorSource* linear_source = source->asLinearGradient(); FML_DCHECK(linear_source != nullptr); - SkPoint pts[] = {linear_source->start_point(), - linear_source->end_point()}; + SkPoint pts[] = {ToSkPoint(linear_source->start_point()), + ToSkPoint(linear_source->end_point())}; std::vector skcolors = ToSkColors(linear_source); return SkGradientShader::MakeLinear( pts, skcolors.data(), linear_source->stops(), linear_source->stop_count(), ToSk(linear_source->tile_mode()), 0, - linear_source->matrix_ptr()); + ToSk(linear_source->matrix_ptr(), scratch)); } case DlColorSourceType::kRadialGradient: { const DlRadialGradientColorSource* radial_source = source->asRadialGradient(); FML_DCHECK(radial_source != nullptr); return SkGradientShader::MakeRadial( - radial_source->center(), radial_source->radius(), + ToSkPoint(radial_source->center()), radial_source->radius(), ToSkColors(radial_source).data(), radial_source->stops(), radial_source->stop_count(), ToSk(radial_source->tile_mode()), 0, - radial_source->matrix_ptr()); + ToSk(radial_source->matrix_ptr(), scratch)); } case DlColorSourceType::kConicalGradient: { const DlConicalGradientColorSource* conical_source = source->asConicalGradient(); FML_DCHECK(conical_source != nullptr); return SkGradientShader::MakeTwoPointConical( - conical_source->start_center(), conical_source->start_radius(), - conical_source->end_center(), conical_source->end_radius(), + ToSkPoint(conical_source->start_center()), + conical_source->start_radius(), + ToSkPoint(conical_source->end_center()), conical_source->end_radius(), ToSkColors(conical_source).data(), conical_source->stops(), conical_source->stop_count(), ToSk(conical_source->tile_mode()), 0, - conical_source->matrix_ptr()); + ToSk(conical_source->matrix_ptr(), scratch)); } case DlColorSourceType::kSweepGradient: { const DlSweepGradientColorSource* sweep_source = source->asSweepGradient(); FML_DCHECK(sweep_source != nullptr); 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(), sweep_source->stop_count(), ToSk(sweep_source->tile_mode()), sweep_source->start(), sweep_source->end(), 0, - sweep_source->matrix_ptr()); + ToSk(sweep_source->matrix_ptr(), scratch)); } case DlColorSourceType::kRuntimeEffect: { const DlRuntimeEffectColorSource* runtime_source = diff --git a/display_list/skia/dl_sk_conversions.h b/display_list/skia/dl_sk_conversions.h index 1e6a05cd16731..f3d5d7320b173 100644 --- a/display_list/skia/dl_sk_conversions.h +++ b/display_list/skia/dl_sk_conversions.h @@ -111,6 +111,13 @@ inline sk_sp ToSk(const DlMaskFilter& 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 ToSk(const std::shared_ptr& vertices); } // namespace flutter diff --git a/display_list/skia/dl_sk_conversions_unittests.cc b/display_list/skia/dl_sk_conversions_unittests.cc index 368caf13672dc..7d3ad72b54797 100644 --- a/display_list/skia/dl_sk_conversions_unittests.cc +++ b/display_list/skia/dl_sk_conversions_unittests.cc @@ -7,9 +7,8 @@ #include "flutter/display_list/dl_sampling_options.h" #include "flutter/display_list/dl_tile_mode.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_source.h" -#include "flutter/display_list/effects/dl_local_matrix_image_filter.h" +#include "flutter/display_list/effects/dl_color_sources.h" +#include "flutter/display_list/effects/dl_image_filters.h" #include "flutter/display_list/skia/dl_sk_conversions.h" #include "gtest/gtest.h" #include "third_party/skia/include/core/SkColorSpace.h" @@ -20,7 +19,7 @@ namespace flutter { namespace testing { 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( DlMatrix::MakeRotationZ(DlDegrees(45)), blur_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( SkString("vec4 main(vec2 p) { return vec4(1); }")) .effect); - std::shared_ptr source1 = - DlColorSource::MakeRuntimeEffect( - kTestRuntimeEffect1, {}, std::make_shared>()); - std::shared_ptr source2 = - DlColorSource::MakeRuntimeEffect( - kTestRuntimeEffect2, {}, std::make_shared>()); - std::shared_ptr source3 = - DlColorSource::MakeRuntimeEffect( - nullptr, {}, std::make_shared>()); + std::shared_ptr source1 = DlColorSource::MakeRuntimeEffect( + kTestRuntimeEffect1, {}, std::make_shared>()); + std::shared_ptr source2 = DlColorSource::MakeRuntimeEffect( + kTestRuntimeEffect2, {}, std::make_shared>()); + std::shared_ptr source3 = DlColorSource::MakeRuntimeEffect( + nullptr, {}, std::make_shared>()); ASSERT_NE(ToSk(source1), nullptr); ASSERT_NE(ToSk(source2), nullptr); @@ -251,10 +247,8 @@ TEST(DisplayListColorSource, ConvertRuntimeEffectWithNullSampler) { SkRuntimeEffect::MakeForShader( SkString("vec4 main(vec2 p) { return vec4(0); }")) .effect); - std::shared_ptr source1 = - DlColorSource::MakeRuntimeEffect( - kTestRuntimeEffect1, {nullptr}, - std::make_shared>()); + std::shared_ptr source1 = DlColorSource::MakeRuntimeEffect( + kTestRuntimeEffect1, {nullptr}, std::make_shared>()); ASSERT_EQ(ToSk(source1), nullptr); } @@ -306,9 +300,8 @@ TEST(DisplayListSkConversions, ToSkDitheringEnabledForGradients) { DlPaint dl_paint; // Set the paint to be a gradient. - dl_paint.setColorSource(DlColorSource::MakeLinear(SkPoint::Make(0, 0), - SkPoint::Make(100, 100), 0, - 0, 0, DlTileMode::kClamp)); + dl_paint.setColorSource(DlColorSource::MakeLinear( + DlPoint(0, 0), DlPoint(100, 100), 0, 0, 0, DlTileMode::kClamp)); { SkPaint sk_paint = ToSk(dl_paint); diff --git a/display_list/skia/dl_sk_dispatcher.cc b/display_list/skia/dl_sk_dispatcher.cc index eca791a1bdbbe..0f9ffda98879a 100644 --- a/display_list/skia/dl_sk_dispatcher.cc +++ b/display_list/skia/dl_sk_dispatcher.cc @@ -7,7 +7,7 @@ #include "flutter/display_list/skia/dl_sk_dispatcher.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_types.h" #include "flutter/fml/trace_event.h" diff --git a/display_list/skia/dl_sk_paint_dispatcher_unittests.cc b/display_list/skia/dl_sk_paint_dispatcher_unittests.cc index 405c6cbeb5cdf..e515537ba203e 100644 --- a/display_list/skia/dl_sk_paint_dispatcher_unittests.cc +++ b/display_list/skia/dl_sk_paint_dispatcher_unittests.cc @@ -28,8 +28,8 @@ static const DlColor kTestColors[2] = {DlColor(0xFF000000), DlColor(0xFFFFFFFF)}; static const float kTestStops[2] = {0.0f, 1.0f}; static const auto kTestLinearGradient = - DlColorSource::MakeLinear(SkPoint::Make(0.0f, 0.0f), - SkPoint::Make(100.0f, 100.0f), + DlColorSource::MakeLinear(DlPoint(0.0f, 0.0f), + DlPoint(100.0f, 100.0f), 2, kTestColors, kTestStops, @@ -69,7 +69,7 @@ TEST(DisplayListUtils, SetColorSourceDoesNotDitherIfNotGradient) { EXPECT_FALSE(helper.paint(true).isDither()); EXPECT_FALSE(helper.paint(false).isDither()); - helper.setColorSource(&kTestSource1); + helper.setColorSource(kTestSource1.get()); EXPECT_FALSE(helper.paint(true).isDither()); EXPECT_FALSE(helper.paint(false).isDither()); } @@ -105,7 +105,7 @@ TEST(DisplayListUtils, SkDispatcherSetColorSourceDoesNotDitherIfNotGradient) { EXPECT_FALSE(dispatcher.safe_paint(true)->isDither()); // Calling safe_paint(false) returns a nullptr - dispatcher.setColorSource(&kTestSource1); + dispatcher.setColorSource(kTestSource1.get()); EXPECT_FALSE(dispatcher.paint(true).isDither()); EXPECT_FALSE(dispatcher.paint(false).isDither()); EXPECT_FALSE(dispatcher.safe_paint(true)->isDither()); diff --git a/display_list/testing/dl_rendering_unittests.cc b/display_list/testing/dl_rendering_unittests.cc index 9c85527225645..0419c11c48831 100644 --- a/display_list/testing/dl_rendering_unittests.cc +++ b/display_list/testing/dl_rendering_unittests.cc @@ -8,7 +8,7 @@ #include "flutter/display_list/dl_builder.h" #include "flutter/display_list/dl_op_flags.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_conversions.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.fRight, kRenderBounds.fBottom), }; + DlPoint dl_end_points[] = { + DlPoint(kRenderBounds.fLeft, kRenderBounds.fTop), + DlPoint(kRenderBounds.fRight, kRenderBounds.fBottom), + }; DlColor dl_colors[] = { DlColor::kGreen(), DlColor::kYellow().withAlpha(0x7f), @@ -1785,10 +1789,10 @@ class CanvasCompareTester { 1.0, }; auto dl_gradient = - DlColorSource::MakeLinear(end_points[0], end_points[1], 3, dl_colors, - stops, DlTileMode::kMirror); + DlColorSource::MakeLinear(dl_end_points[0], dl_end_points[1], 3, + dl_colors, stops, DlTileMode::kMirror); 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, CaseParameters( @@ -3898,7 +3902,7 @@ TEST_F(DisplayListRendering, SaveLayerClippedContentStillFilters) { }, [=](const DlRenderContext& ctx) { auto layer_filter = - DlBlurImageFilter::Make(10.0f, 10.0f, DlTileMode::kDecal); + DlImageFilter::MakeBlur(10.0f, 10.0f, DlTileMode::kDecal); DlPaint layer_paint; layer_paint.setImageFilter(layer_filter); ctx.canvas->Save(); @@ -3959,10 +3963,10 @@ TEST_F(DisplayListRendering, SaveLayerConsolidation) { DlLinearToSrgbGammaColorFilter::kInstance, }; std::vector> image_filters = { - DlBlurImageFilter::Make(5.0f, 5.0f, DlTileMode::kDecal), - DlDilateImageFilter::Make(5.0f, 5.0f), - DlErodeImageFilter::Make(5.0f, 5.0f), - DlMatrixImageFilter::Make(contract_matrix, DlImageSampling::kLinear), + DlImageFilter::MakeBlur(5.0f, 5.0f, DlTileMode::kDecal), + DlImageFilter::MakeDilate(5.0f, 5.0f), + DlImageFilter::MakeErode(5.0f, 5.0f), + DlImageFilter::MakeMatrix(contract_matrix, DlImageSampling::kLinear), }; auto render_content = [](DisplayListBuilder& builder) { diff --git a/display_list/testing/dl_test_snippets.cc b/display_list/testing/dl_test_snippets.cc index ccc25a2dbea81..bc348dbaf0063 100644 --- a/display_list/testing/dl_test_snippets.cc +++ b/display_list/testing/dl_test_snippets.cc @@ -136,14 +136,15 @@ std::vector CreateAllAttributesOps() { }}, {"SetColorSource", { - {0, 96, 0, [](DlOpReceiver& r) { r.setColorSource(&kTestSource1); }}, - {0, 152, 0, + {0, 104, 0, + [](DlOpReceiver& r) { r.setColorSource(kTestSource1.get()); }}, + {0, 176, 0, [](DlOpReceiver& r) { r.setColorSource(kTestSource2.get()); }}, - {0, 152, 0, + {0, 176, 0, [](DlOpReceiver& r) { r.setColorSource(kTestSource3.get()); }}, - {0, 160, 0, + {0, 184, 0, [](DlOpReceiver& r) { r.setColorSource(kTestSource4.get()); }}, - {0, 152, 0, + {0, 176, 0, [](DlOpReceiver& r) { r.setColorSource(kTestSource5.get()); }}, // Reset attribute to default as last entry diff --git a/display_list/testing/dl_test_snippets.h b/display_list/testing/dl_test_snippets.h index 3de3b39bffbef..c0c5668bfc9a1 100644 --- a/display_list/testing/dl_test_snippets.h +++ b/display_list/testing/dl_test_snippets.h @@ -7,6 +7,7 @@ #include "flutter/display_list/display_list.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/testing/testing.h" @@ -24,7 +25,7 @@ sk_sp GetSampleNestedDisplayList(); typedef const std::function DlInvoker; -constexpr SkPoint kEndPoints[] = { +constexpr DlPoint kEndPoints[] = { {0, 0}, {100, 100}, }; @@ -89,10 +90,11 @@ static auto TestImage1 = MakeTestImage(40, 40, 5); static auto TestImage2 = MakeTestImage(50, 50, 5); static auto TestSkImage = MakeTestImage(30, 30, 5)->skia_image(); -static const DlImageColorSource kTestSource1(TestImage1, - DlTileMode::kClamp, - DlTileMode::kMirror, - kLinearSampling); +static const std::shared_ptr kTestSource1 = + DlColorSource::MakeImage(TestImage1, + DlTileMode::kClamp, + DlTileMode::kMirror, + kLinearSampling); static const std::shared_ptr kTestSource2 = DlColorSource::MakeLinear(kEndPoints[0], kEndPoints[1], diff --git a/flow/layers/backdrop_filter_layer_unittests.cc b/flow/layers/backdrop_filter_layer_unittests.cc index 11c8cd7a84b9e..01a6b54cadc26 100644 --- a/flow/layers/backdrop_filter_layer_unittests.cc +++ b/flow/layers/backdrop_filter_layer_unittests.cc @@ -4,8 +4,7 @@ #include "flutter/flow/layers/backdrop_filter_layer.h" -#include "flutter/display_list/effects/dl_blur_image_filter.h" -#include "flutter/display_list/effects/dl_matrix_image_filter.h" +#include "flutter/display_list/effects/dl_image_filter.h" #include "flutter/flow/layers/clip_rect_layer.h" #include "flutter/flow/layers/transform_layer.h" #include "flutter/flow/testing/diff_context_test.h" @@ -20,9 +19,9 @@ using BackdropFilterLayerTest = LayerTest; #ifndef NDEBUG TEST_F(BackdropFilterLayerTest, PaintingEmptyLayerDies) { - auto filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp); - auto layer = std::make_shared(filter.shared(), - DlBlendMode::kSrcOver); + auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp); + auto layer = + std::make_shared(filter, DlBlendMode::kSrcOver); auto parent = std::make_shared(kEmptyRect, Clip::kHardEdge); 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 SkPath child_path = SkPath().addRect(child_bounds); auto mock_layer = std::make_shared(child_path); - auto filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp); - auto layer = std::make_shared(filter.shared(), - DlBlendMode::kSrcOver); + auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp); + auto layer = + std::make_shared(filter, DlBlendMode::kSrcOver); layer->Add(mock_layer); 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 SkPath child_path = SkPath().addRect(child_bounds); 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(child_path, child_paint); auto layer = std::make_shared(layer_filter, 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 SkPath child_path = SkPath().addRect(child_bounds); 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(child_path, child_paint); auto layer = std::make_shared(layer_filter, DlBlendMode::kSrc); @@ -204,7 +203,7 @@ TEST_F(BackdropFilterLayerTest, MultipleChildren) { const DlPaint child_paint2 = DlPaint(DlColor::kCyan()); SkRect children_bounds = child_path1.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(child_path1, child_paint1); auto mock_layer2 = std::make_shared(child_path2, child_paint2); auto layer = std::make_shared(layer_filter, @@ -267,8 +266,8 @@ TEST_F(BackdropFilterLayerTest, Nested) { const DlPaint child_paint2 = DlPaint(DlColor::kCyan()); SkRect children_bounds = child_path1.getBounds(); children_bounds.join(child_path2.getBounds()); - auto layer_filter1 = DlBlurImageFilter::Make(2.5, 3.2, DlTileMode::kClamp); - auto layer_filter2 = DlBlurImageFilter::Make(2.7, 3.1, DlTileMode::kDecal); + auto layer_filter1 = DlImageFilter::MakeBlur(2.5, 3.2, DlTileMode::kClamp); + auto layer_filter2 = DlImageFilter::MakeBlur(2.7, 3.1, DlTileMode::kDecal); auto mock_layer1 = std::make_shared(child_path1, child_paint1); auto mock_layer2 = std::make_shared(child_path2, child_paint2); auto layer1 = std::make_shared(layer_filter1, @@ -339,11 +338,11 @@ TEST_F(BackdropFilterLayerTest, Nested) { TEST_F(BackdropFilterLayerTest, Readback) { std::shared_ptr no_filter; - auto layer_filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp); + auto layer_filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp); auto initial_transform = SkMatrix(); // BDF with filter always reads from surface - auto layer1 = std::make_shared(layer_filter.shared(), + auto layer1 = std::make_shared(layer_filter, DlBlendMode::kSrcOver); preroll_context()->surface_needs_readback = false; preroll_context()->state_stack.set_preroll_delegate(initial_transform); @@ -372,14 +371,14 @@ TEST_F(BackdropFilterLayerTest, Readback) { } 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 DlPaint mock_paint = DlPaint(DlColor::kRed()); const SkRect clip_rect = SkRect::MakeLTRB(0, 0, 100, 100); auto clip = std::make_shared(clip_rect, Clip::kHardEdge); auto parent = std::make_shared(128, SkPoint::Make(0, 0)); - auto layer = std::make_shared(backdrop_filter.shared(), + auto layer = std::make_shared(backdrop_filter, DlBlendMode::kSrcOver); auto child = std::make_shared(mock_path, mock_paint); layer->Add(child); @@ -400,7 +399,8 @@ TEST_F(BackdropFilterLayerTest, OpacityInheritance) { /* BackdropFilterLayer::Paint */ { DlPaint save_paint; 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 */ { DlPaint child_paint; @@ -420,20 +420,20 @@ TEST_F(BackdropFilterLayerTest, OpacityInheritance) { using BackdropLayerDiffTest = DiffContextTest; 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 DlIRect readback; - EXPECT_EQ(filter.get_input_device_bounds(DlIRect::MakeWH(10, 10), - DlMatrix(), readback), + EXPECT_EQ(filter->get_input_device_bounds(DlIRect::MakeWH(10, 10), + DlMatrix(), readback), &readback); EXPECT_EQ(readback, DlIRect::MakeLTRB(-30, -30, 40, 40)); } MockLayerTree l1(SkISize::Make(100, 100)); - l1.root()->Add(std::make_shared(filter.shared(), - DlBlendMode::kSrcOver)); + l1.root()->Add( + std::make_shared(filter, DlBlendMode::kSrcOver)); // no clip, effect over entire surface auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100))); @@ -443,8 +443,8 @@ TEST_F(BackdropLayerDiffTest, BackdropLayer) { auto clip = std::make_shared(SkRect::MakeLTRB(20, 20, 60, 60), Clip::kHardEdge); - clip->Add(std::make_shared(filter.shared(), - DlBlendMode::kSrcOver)); + clip->Add( + std::make_shared(filter, DlBlendMode::kSrcOver)); l2.root()->Add(clip); damage = DiffLayerTree(l2, MockLayerTree(SkISize::Make(100, 100))); @@ -478,15 +478,15 @@ TEST_F(BackdropLayerDiffTest, BackdropLayer) { } TEST_F(BackdropLayerDiffTest, ReadbackOutsideOfPaintArea) { - auto filter = DlMatrixImageFilter(DlMatrix::MakeTranslation({50, 50}), - DlImageSampling::kLinear); + auto filter = DlImageFilter::MakeMatrix(DlMatrix::MakeTranslation({50, 50}), + DlImageSampling::kLinear); MockLayerTree l1(SkISize::Make(100, 100)); auto clip = std::make_shared(SkRect::MakeLTRB(60, 60, 80, 80), Clip::kHardEdge); - clip->Add(std::make_shared(filter.shared(), - DlBlendMode::kSrcOver)); + clip->Add( + std::make_shared(filter, DlBlendMode::kSrcOver)); l1.root()->Add(clip); auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100))); @@ -503,13 +503,13 @@ TEST_F(BackdropLayerDiffTest, ReadbackOutsideOfPaintArea) { } 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 DlIRect readback; - EXPECT_EQ(filter.get_input_device_bounds(DlIRect::MakeWH(10, 10), - DlMatrix(), readback), + EXPECT_EQ(filter->get_input_device_bounds(DlIRect::MakeWH(10, 10), + DlMatrix(), readback), &readback); EXPECT_EQ(readback, DlIRect::MakeLTRB(-30, -30, 40, 40)); } @@ -521,8 +521,8 @@ TEST_F(BackdropLayerDiffTest, BackdropLayerInvalidTransform) { auto transform_layer = std::make_shared(transform); l1.root()->Add(transform_layer); - transform_layer->Add(std::make_shared( - filter.shared(), DlBlendMode::kSrcOver)); + transform_layer->Add( + std::make_shared(filter, DlBlendMode::kSrcOver)); auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100))); EXPECT_EQ(damage.frame_damage, SkIRect::MakeWH(100, 100)); diff --git a/flow/layers/image_filter_layer_unittests.cc b/flow/layers/image_filter_layer_unittests.cc index 405d6a44377d7..cfbeb17ba2f8b 100644 --- a/flow/layers/image_filter_layer_unittests.cc +++ b/flow/layers/image_filter_layer_unittests.cc @@ -5,8 +5,7 @@ #include "flutter/flow/layers/image_filter_layer.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_matrix_image_filter.h" +#include "flutter/display_list/effects/dl_image_filter.h" #include "flutter/flow/layers/layer_tree.h" #include "flutter/flow/layers/transform_layer.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 SkPath child_path = SkPath().addRect(child_bounds); 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); auto mock_layer = std::make_shared(child_path, child_paint); auto layer = std::make_shared(dl_image_filter); @@ -125,7 +124,7 @@ TEST_F(ImageFilterLayerTest, SimpleFilterWithOffset) { const SkPath child_path = SkPath().addRect(child_bounds); const DlPaint child_paint = DlPaint(DlColor::kYellow()); 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); auto mock_layer = std::make_shared(child_path, child_paint); auto layer = @@ -177,7 +176,7 @@ TEST_F(ImageFilterLayerTest, SimpleFilterBounds) { const DlPaint child_paint = DlPaint(DlColor::kYellow()); 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); auto mock_layer = std::make_shared(child_path, child_paint); auto layer = std::make_shared(dl_image_filter); @@ -218,7 +217,7 @@ TEST_F(ImageFilterLayerTest, MultipleChildren) { SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f)); const DlPaint child_paint1 = DlPaint(DlColor::kYellow()); 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); auto mock_layer1 = std::make_shared(child_path1, child_paint1); auto mock_layer2 = std::make_shared(child_path2, child_paint2); @@ -272,9 +271,9 @@ TEST_F(ImageFilterLayerTest, Nested) { SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f)); const DlPaint child_paint1 = DlPaint(DlColor::kYellow()); 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); - auto dl_image_filter2 = DlMatrixImageFilter::Make( + auto dl_image_filter2 = DlImageFilter::MakeMatrix( DlMatrix::MakeTranslation({3.0, 4.0}), DlImageSampling::kMipmapLinear); auto mock_layer1 = std::make_shared(child_path1, child_paint1); auto mock_layer2 = std::make_shared(child_path2, child_paint2); @@ -345,7 +344,7 @@ TEST_F(ImageFilterLayerTest, Nested) { } TEST_F(ImageFilterLayerTest, Readback) { - auto dl_image_filter = DlMatrixImageFilter::Make( + auto dl_image_filter = DlImageFilter::MakeMatrix( DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kLinear); // ImageFilterLayer does not read from surface @@ -364,7 +363,7 @@ TEST_F(ImageFilterLayerTest, Readback) { } TEST_F(ImageFilterLayerTest, CacheChild) { - auto dl_image_filter = DlMatrixImageFilter::Make( + auto dl_image_filter = DlImageFilter::MakeMatrix( DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); auto initial_transform = SkMatrix::Translate(50.0, 25.5); auto other_transform = SkMatrix::Scale(1.0, 2.0); @@ -408,7 +407,7 @@ TEST_F(ImageFilterLayerTest, CacheChild) { } TEST_F(ImageFilterLayerTest, CacheChildren) { - auto dl_image_filter = DlMatrixImageFilter::Make( + auto dl_image_filter = DlImageFilter::MakeMatrix( DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); auto initial_transform = SkMatrix::Translate(50.0, 25.5); auto other_transform = SkMatrix::Scale(1.0, 2.0); @@ -489,7 +488,7 @@ TEST_F(ImageFilterLayerTest, CacheChildren) { } TEST_F(ImageFilterLayerTest, CacheImageFilterLayerSelf) { - auto dl_image_filter = DlMatrixImageFilter::Make( + auto dl_image_filter = DlImageFilter::MakeMatrix( DlMatrix::MakeTranslation({1.0, 2.0}), DlImageSampling::kMipmapLinear); 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 SkPath child_path = SkPath().addRect(child_bounds); 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); // The mock_layer child will not be compatible with opacity @@ -644,7 +643,7 @@ TEST_F(ImageFilterLayerTest, OpacityInheritance) { using ImageFilterLayerDiffTest = DiffContextTest; 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 DlIRect input_bounds; @@ -690,7 +689,7 @@ TEST_F(ImageFilterLayerDiffTest, ImageFilterLayer) { } 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 diff --git a/flow/layers/layer_state_stack_unittests.cc b/flow/layers/layer_state_stack_unittests.cc index 1a11e6742b65e..4e3f092270d9b 100644 --- a/flow/layers/layer_state_stack_unittests.cc +++ b/flow/layers/layer_state_stack_unittests.cc @@ -4,7 +4,6 @@ #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_image_filter.h" #include "flutter/flow/layers/layer.h" @@ -289,9 +288,9 @@ TEST(LayerStateStack, ColorFilter) { TEST(LayerStateStack, ImageFilter) { SkRect rect = {10, 10, 20, 20}; std::shared_ptr outer_filter = - DlBlurImageFilter::Make(2.0f, 2.0f, DlTileMode::kClamp); + DlImageFilter::MakeBlur(2.0f, 2.0f, DlTileMode::kClamp); std::shared_ptr inner_filter = - DlBlurImageFilter::Make(3.0f, 3.0f, DlTileMode::kClamp); + DlImageFilter::MakeBlur(3.0f, 3.0f, DlTileMode::kClamp); SkRect inner_src_rect = rect; DlRect 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) { SkRect rect = {10, 10, 20, 20}; std::shared_ptr image_filter = - DlBlurImageFilter::Make(2.0f, 2.0f, DlTileMode::kClamp); + DlImageFilter::MakeBlur(2.0f, 2.0f, DlTileMode::kClamp); DisplayListBuilder builder; LayerStateStack state_stack; @@ -494,7 +493,7 @@ TEST(LayerStateStack, ColorFilterAndImageFilterInteraction) { std::make_shared(DlColor::kYellow(), DlBlendMode::kColorBurn); std::shared_ptr image_filter = - DlBlurImageFilter::Make(2.0f, 2.0f, DlTileMode::kClamp); + DlImageFilter::MakeBlur(2.0f, 2.0f, DlTileMode::kClamp); DisplayListBuilder builder; LayerStateStack state_stack; diff --git a/flow/layers/opacity_layer_unittests.cc b/flow/layers/opacity_layer_unittests.cc index e32437e3a52a5..0993fb13b5077 100644 --- a/flow/layers/opacity_layer_unittests.cc +++ b/flow/layers/opacity_layer_unittests.cc @@ -4,7 +4,7 @@ #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/image_filter_layer.h" #include "flutter/flow/layers/layer_tree.h" @@ -543,7 +543,7 @@ TEST_F(OpacityLayerTest, OpacityInheritanceThroughImageFilter) { auto opacity_layer = std::make_shared(128, SkPoint::Make(20, 20)); auto filter_layer = std::make_shared( - DlBlurImageFilter::Make(5.0, 5.0, DlTileMode::kClamp)); + DlImageFilter::MakeBlur(5.0, 5.0, DlTileMode::kClamp)); auto mock_layer = MockLayer::MakeOpacityCompatible(SkPath()); filter_layer->Add(mock_layer); opacity_layer->Add(filter_layer); diff --git a/flow/layers/shader_mask_layer_unittests.cc b/flow/layers/shader_mask_layer_unittests.cc index 933ba70664835..5cd676e485e98 100644 --- a/flow/layers/shader_mask_layer_unittests.cc +++ b/flow/layers/shader_mask_layer_unittests.cc @@ -30,8 +30,8 @@ static std::shared_ptr MakeFilter(DlColor color) { 0, 1, }; - return DlColorSource::MakeLinear(SkPoint::Make(0, 0), SkPoint::Make(10, 10), - 2, colors, stops, DlTileMode::kRepeat); + return DlColorSource::MakeLinear(DlPoint(0, 0), DlPoint(10, 10), 2, colors, + stops, DlTileMode::kRepeat); } #ifndef NDEBUG diff --git a/flow/mutators_stack_unittests.cc b/flow/mutators_stack_unittests.cc index 93fd081bf8e1e..42969c330835f 100644 --- a/flow/mutators_stack_unittests.cc +++ b/flow/mutators_stack_unittests.cc @@ -2,7 +2,7 @@ // 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/dl_blur_image_filter.h" +#include "flutter/display_list/effects/dl_image_filters.h" #include "flutter/flow/embedded_views.h" #include "gtest/gtest.h" @@ -94,7 +94,7 @@ TEST(MutatorsStack, PushBackdropFilter) { MutatorsStack stack; const int num_of_mutators = 10; 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)); } @@ -169,7 +169,7 @@ TEST(MutatorsStack, Equality) { stack.PushClipPath(path); int alpha = 240; stack.PushOpacity(alpha); - auto filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); + auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp); stack.PushBackdropFilter(filter, SkRect::MakeEmpty()); MutatorsStack stack_other; @@ -183,7 +183,7 @@ TEST(MutatorsStack, Equality) { stack_other.PushClipPath(other_path); int other_alpha = 240; 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()); ASSERT_TRUE(stack == stack_other); @@ -215,7 +215,7 @@ TEST(Mutator, Initialization) { Mutator mutator5 = Mutator(alpha); 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()); ASSERT_TRUE(mutator6.GetType() == MutatorType::kBackdropFilter); ASSERT_TRUE(mutator6.GetFilterMutation().GetFilter() == *filter); @@ -248,7 +248,7 @@ TEST(Mutator, CopyConstructor) { Mutator copy5 = Mutator(mutator5); 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 copy6 = Mutator(mutator6); ASSERT_TRUE(mutator6 == copy6); @@ -281,8 +281,8 @@ TEST(Mutator, Equality) { Mutator other_mutator5 = Mutator(alpha); ASSERT_TRUE(mutator5 == other_mutator5); - auto filter1 = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); - auto filter2 = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); + auto filter1 = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp); + auto filter2 = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp); Mutator mutator6 = Mutator(filter1, SkRect::MakeEmpty()); Mutator other_mutator6 = Mutator(filter2, SkRect::MakeEmpty()); ASSERT_TRUE(mutator6 == other_mutator6); @@ -302,8 +302,8 @@ TEST(Mutator, UnEquality) { Mutator other_mutator2 = Mutator(alpha2); ASSERT_TRUE(mutator2 != other_mutator2); - auto filter = DlBlurImageFilter::Make(5, 5, DlTileMode::kClamp); - auto filter2 = DlBlurImageFilter::Make(10, 10, DlTileMode::kClamp); + auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp); + auto filter2 = DlImageFilter::MakeBlur(10, 10, DlTileMode::kClamp); Mutator mutator3 = Mutator(filter, SkRect::MakeEmpty()); Mutator other_mutator3 = Mutator(filter2, SkRect::MakeEmpty()); ASSERT_TRUE(mutator3 != other_mutator3); diff --git a/flow/paint_utils.cc b/flow/paint_utils.cc index eab62daad1d7a..815ab2c51bec0 100644 --- a/flow/paint_utils.cc +++ b/flow/paint_utils.cc @@ -22,9 +22,9 @@ std::shared_ptr CreateCheckerboardShader(SkColor c1, bm.eraseArea(SkIRect::MakeLTRB(0, 0, size, size), c2); bm.eraseArea(SkIRect::MakeLTRB(size, size, 2 * size, 2 * size), c2); auto image = DlImage::Make(SkImages::RasterFromBitmap(bm)); - return std::make_shared( - image, DlTileMode::kRepeat, DlTileMode::kRepeat, - DlImageSampling::kNearestNeighbor); + return DlColorSource::MakeImage(image, DlTileMode::kRepeat, + DlTileMode::kRepeat, + DlImageSampling::kNearestNeighbor); } } // anonymous namespace diff --git a/impeller/display_list/aiks_dl_basic_unittests.cc b/impeller/display_list/aiks_dl_basic_unittests.cc index e017d71d92670..d62d2ace32686 100644 --- a/impeller/display_list/aiks_dl_basic_unittests.cc +++ b/impeller/display_list/aiks_dl_basic_unittests.cc @@ -7,7 +7,7 @@ #include "display_list/dl_tile_mode.h" #include "display_list/effects/dl_color_filter.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 "flutter/impeller/display_list/aiks_unittests.h" @@ -118,15 +118,14 @@ void CanRenderTiledTexture(AiksTest* aiks_test, /*enable_mipmapping=*/true); GenerateMipmap(context, texture, "table_mountain_nx"); auto image = DlImageImpeller::Make(texture); - SkMatrix sk_local_matrix = ToSkMatrix(local_matrix); - DlImageColorSource color_source(image, tile_mode, tile_mode, - DlImageSampling::kNearestNeighbor, - &sk_local_matrix); + auto color_source = DlColorSource::MakeImage( + image, tile_mode, tile_mode, DlImageSampling::kNearestNeighbor, + &local_matrix); DisplayListBuilder builder; DlPaint paint; paint.setColor(DlColor::kWhite()); - paint.setColorSource(&color_source); + paint.setColorSource(color_source); builder.Scale(aiks_test->GetContentScale().x, aiks_test->GetContentScale().y); builder.Translate(100.0f, 100.0f); @@ -329,10 +328,9 @@ TEST_P(AiksTest, CanRenderSimpleClips) { {500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror)); draw(paint, 0, 300); - DlImageColorSource image_source(image, DlTileMode::kRepeat, - DlTileMode::kRepeat, - DlImageSampling::kNearestNeighbor); - paint.setColorSource(&image_source); + paint.setColorSource( + DlColorSource::MakeImage(image, DlTileMode::kRepeat, DlTileMode::kRepeat, + DlImageSampling::kNearestNeighbor)); draw(paint, 300, 0); ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); @@ -484,11 +482,10 @@ TEST_P(AiksTest, FilledCirclesRenderCorrectly) { {500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror)); builder.DrawCircle(SkPoint{500, 600}, 100, paint); - SkMatrix local_matrix = SkMatrix::Translate(700, 200); - DlImageColorSource image_source( + DlMatrix local_matrix = DlMatrix::MakeTranslation({700, 200}); + paint.setColorSource(DlColorSource::MakeImage( image, DlTileMode::kRepeat, DlTileMode::kRepeat, - DlImageSampling::kNearestNeighbor, &local_matrix); - paint.setColorSource(&image_source); + DlImageSampling::kNearestNeighbor, &local_matrix)); builder.DrawCircle(SkPoint{800, 300}, 100, paint); ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); @@ -551,11 +548,10 @@ TEST_P(AiksTest, StrokedCirclesRenderCorrectly) { {500, 600}, 75, 7, gradient_colors, stops, DlTileMode::kMirror)); draw(builder, {500, 600}, 5, 10, 10); - SkMatrix local_matrix = SkMatrix::Translate(700, 200); - DlImageColorSource image_source( + DlMatrix local_matrix = DlMatrix::MakeTranslation({700, 200}); + paint.setColorSource(DlColorSource::MakeImage( image, DlTileMode::kRepeat, DlTileMode::kRepeat, - DlImageSampling::kNearestNeighbor, &local_matrix); - paint.setColorSource(&image_source); + DlImageSampling::kNearestNeighbor, &local_matrix)); draw(builder, {800, 300}, 5, 10, 10); 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(275, 550, 50, 200), paint); - SkMatrix local_matrix = SkMatrix::Translate(610, 15); - DlImageColorSource image_source( + DlMatrix local_matrix = DlMatrix::MakeTranslation({610, 15}); + paint.setColorSource(DlColorSource::MakeImage( image, DlTileMode::kRepeat, DlTileMode::kRepeat, - DlImageSampling::kNearestNeighbor, &local_matrix); - paint.setColorSource(&image_source); + DlImageSampling::kNearestNeighbor, &local_matrix)); builder.DrawOval(SkRect::MakeXYWH(610, 90, 200, 50), 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); paint.setColor(DlColor::kWhite().modulateOpacity(0.1)); - SkMatrix local_matrix = SkMatrix::Translate(520, 20); - DlImageColorSource image_source( + DlMatrix local_matrix = DlMatrix::MakeTranslation({520, 20}); + paint.setColorSource(DlColorSource::MakeImage( image, DlTileMode::kRepeat, DlTileMode::kRepeat, - DlImageSampling::kNearestNeighbor, &local_matrix); - paint.setColorSource(&image_source); + DlImageSampling::kNearestNeighbor, &local_matrix)); for (int i = 1; i <= 10; i++) { int j = 11 - i; builder.DrawRRect( @@ -726,11 +720,10 @@ TEST_P(AiksTest, FilledRoundRectsRenderCorrectly) { } paint.setColor(DlColor::kWhite().modulateOpacity(0.5)); - local_matrix = SkMatrix::Translate(800, 300); - DlImageColorSource image_source2( + local_matrix = DlMatrix::MakeTranslation({800, 300}); + paint.setColorSource(DlColorSource::MakeImage( image, DlTileMode::kRepeat, DlTileMode::kRepeat, - DlImageSampling::kNearestNeighbor, &local_matrix); - paint.setColorSource(&image_source2); + DlImageSampling::kNearestNeighbor, &local_matrix)); builder.DrawRRect( SkRRect::MakeRectXY(SkRect::MakeLTRB(800, 410, 1000, 490), 40, 40), paint); @@ -835,7 +828,7 @@ TEST_P(AiksTest, CanRenderClippedBackdropFilter) { builder.ClipRRect(clip_rrect, DlCanvas::ClipOp::kIntersect); DlPaint save_paint; - auto backdrop_filter = DlColorFilterImageFilter::Make( + auto backdrop_filter = DlImageFilter::MakeColorFilter( DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kExclusion)); builder.SaveLayer(&clip_rect, &save_paint, backdrop_filter.get()); @@ -916,9 +909,9 @@ TEST_P(AiksTest, ImageColorSourceEffectTransform) { // Translation { - SkMatrix matrix = SkMatrix::Translate(50, 50); + DlMatrix matrix = DlMatrix::MakeTranslation({50, 50}); DlPaint paint; - paint.setColorSource(std::make_shared( + paint.setColorSource(DlColorSource::MakeImage( texture, DlTileMode::kRepeat, DlTileMode::kRepeat, DlImageSampling::kNearestNeighbor, &matrix)); @@ -931,12 +924,11 @@ TEST_P(AiksTest, ImageColorSourceEffectTransform) { builder.Rotate(45); DlPaint paint; - Matrix impeller_matrix(1, -1, 0, 0, // - 1, 1, 0, 0, // - 0, 0, 1, 0, // - 0, 0, 0, 1); - SkMatrix matrix = SkM44::ColMajor(impeller_matrix.m).asM33(); - paint.setColorSource(std::make_shared( + Matrix matrix(1, -1, 0, 0, // + 1, 1, 0, 0, // + 0, 0, 1, 0, // + 0, 0, 0, 1); + paint.setColorSource(DlColorSource::MakeImage( texture, DlTileMode::kRepeat, DlTileMode::kRepeat, DlImageSampling::kNearestNeighbor, &matrix)); builder.DrawRect(SkRect::MakeLTRB(100, 0, 200, 100), paint); @@ -949,8 +941,8 @@ TEST_P(AiksTest, ImageColorSourceEffectTransform) { builder.Scale(100, 100); DlPaint paint; - SkMatrix matrix = SkMatrix::Scale(0.005, 0.005); - paint.setColorSource(std::make_shared( + DlMatrix matrix = DlMatrix::MakeScale({0.005, 0.005, 1}); + paint.setColorSource(DlColorSource::MakeImage( texture, DlTileMode::kRepeat, DlTileMode::kRepeat, DlImageSampling::kNearestNeighbor, &matrix)); @@ -998,7 +990,7 @@ TEST_P(AiksTest, MatrixImageFilterDoesntCullWhenTranslatedFromOffscreen) { DlPaint paint; DlMatrix translate = DlMatrix::MakeTranslation({300, 0}); paint.setImageFilter( - DlMatrixImageFilter::Make(translate, DlImageSampling::kLinear)); + DlImageFilter::MakeMatrix(translate, DlImageSampling::kLinear)); builder.SaveLayer(nullptr, &paint); DlPaint circle_paint; @@ -1019,7 +1011,7 @@ TEST_P(AiksTest, // +300 translation applied by a SaveLayer image filter. DlPaint paint; - paint.setImageFilter(DlMatrixImageFilter::Make( + paint.setImageFilter(DlImageFilter::MakeMatrix( DlMatrix::MakeTranslation({300, 0}) * DlMatrix::MakeScale({2, 2, 1}), DlImageSampling::kNearestNeighbor)); builder.SaveLayer(nullptr, &paint); @@ -1043,7 +1035,7 @@ TEST_P(AiksTest, ClearColorOptimizationWhenSubpassIsBiggerThanParentPass) { paint.setColor(DlColor::kRed()); 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)); builder.SaveLayer(nullptr, &paint); // 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(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.setColorSource(std::make_shared( + paint.setColorSource(DlColorSource::MakeImage( texture, DlTileMode::kRepeat, DlTileMode::kRepeat, DlImageSampling::kMipmapLinear, &matrix)); for (int i = 1; i <= 10; i++) { @@ -1302,9 +1294,9 @@ TEST_P(AiksTest, FilledRoundRectPathsRenderCorrectly) { 720 + i * 20, 220 + j * 20), i * 10, j * 10, paint); } - matrix = SkMatrix::Translate(800, 300); + matrix = DlMatrix::MakeTranslation({800, 300}); paint.setColor(DlColor::kWhite().modulateOpacity(0.5)); - paint.setColorSource(std::make_shared( + paint.setColorSource(DlColorSource::MakeImage( texture, DlTileMode::kRepeat, DlTileMode::kRepeat, DlImageSampling::kMipmapLinear, &matrix)); @@ -1520,7 +1512,7 @@ TEST_P(AiksTest, PipelineBlendSingleParameter) { paint.setColor(DlColor::kGreen()); paint.setBlendMode(DlBlendMode::kSrcOver); - paint.setImageFilter(DlColorFilterImageFilter::Make( + paint.setImageFilter(DlImageFilter::MakeColorFilter( DlBlendColorFilter::Make(DlColor::kWhite(), DlBlendMode::kDst))); builder.DrawCircle(SkPoint::Make(200, 200), 200, paint); builder.Restore(); @@ -1538,7 +1530,7 @@ TEST_P(AiksTest, MassiveScalingMatrixImageFilter) { } 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); DlPaint paint; diff --git a/impeller/display_list/aiks_dl_blend_unittests.cc b/impeller/display_list/aiks_dl_blend_unittests.cc index 3b3a1bf3c8242..143ef8312eac4 100644 --- a/impeller/display_list/aiks_dl_blend_unittests.cc +++ b/impeller/display_list/aiks_dl_blend_unittests.cc @@ -154,7 +154,7 @@ TEST_P(AiksTest, DrawAdvancedBlendPartlyOffscreen) { std::vector stops = {0.0, 1.0}; DlPaint paint; - SkMatrix matrix = SkMatrix::Scale(0.3, 0.3); + DlMatrix matrix = DlMatrix::MakeScale({0.3, 0.3, 1.0}); paint.setColorSource(DlColorSource::MakeLinear( /*start_point=*/{0, 0}, // /*end_point=*/{100, 100}, // diff --git a/impeller/display_list/aiks_dl_blur_unittests.cc b/impeller/display_list/aiks_dl_blur_unittests.cc index 987f3f1a1d856..00d126560fbc6 100644 --- a/impeller/display_list/aiks_dl_blur_unittests.cc +++ b/impeller/display_list/aiks_dl_blur_unittests.cc @@ -9,7 +9,6 @@ #include "flutter/display_list/dl_paint.h" #include "flutter/display_list/dl_sampling_options.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_source.h" #include "flutter/display_list/effects/dl_image_filter.h" @@ -230,7 +229,7 @@ TEST_P(AiksTest, CanRenderBackdropBlurInteractive) { DlPaint save_paint; 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.Restore(); @@ -262,7 +261,7 @@ TEST_P(AiksTest, CanRenderBackdropBlur) { DlPaint save_paint; 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.Restore(); @@ -285,7 +284,7 @@ TEST_P(AiksTest, CanRenderBackdropBlurWithSingleBackdropId) { DlPaint save_paint; 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(), /*backdrop_id=*/1); builder.Restore(); @@ -311,7 +310,7 @@ TEST_P(AiksTest, CanRenderMultipleBackdropBlurWithSingleBackdropId) { DlPaint save_paint; 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(), /*backdrop_id=*/1); builder.Restore(); @@ -340,7 +339,7 @@ TEST_P(AiksTest, DlPaint save_paint; save_paint.setBlendMode(DlBlendMode::kSrc); 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(), /*backdrop_id=*/1); builder.Restore(); @@ -361,7 +360,7 @@ TEST_P(AiksTest, CanRenderBackdropBlurHugeSigma) { save_paint.setBlendMode(DlBlendMode::kSrc); auto backdrop_filter = - DlBlurImageFilter::Make(999999, 999999, DlTileMode::kClamp); + DlImageFilter::MakeBlur(999999, 999999, DlTileMode::kClamp); builder.SaveLayer(nullptr, &save_paint, backdrop_filter.get()); builder.Restore(); @@ -374,7 +373,7 @@ TEST_P(AiksTest, CanRenderClippedBlur) { DlPaint paint; 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.Restore(); @@ -580,7 +579,7 @@ static const std::map kPaintVariations = { {.style = DlBlurStyle::kSolid, .sigma = 8.0f, .alpha = 0.5f, - .image_filter = DlBlurImageFilter::Make(3, 3, DlTileMode::kClamp), + .image_filter = DlImageFilter::MakeBlur(3, 3, DlTileMode::kClamp), .invert_colors = true}}, // 6. Solid style, translucent, exclusion blended. {"SolidTranslucentExclusionBlend", @@ -596,7 +595,7 @@ static const std::map kPaintVariations = { {.style = DlBlurStyle::kInner, .sigma = 8.0f, .alpha = 0.5f, - .image_filter = DlBlurImageFilter::Make(3, 3, DlTileMode::kClamp)}}, + .image_filter = DlImageFilter::MakeBlur(3, 3, DlTileMode::kClamp)}}, // 9. Outer style, translucent. {"OuterTranslucent", {.style = DlBlurStyle::kOuter, .sigma = 8.0f, .alpha = 0.5f}}, @@ -604,7 +603,7 @@ static const std::map kPaintVariations = { {"OuterOpaqueWithBlurImageFilter", {.style = DlBlurStyle::kOuter, .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) \ @@ -757,7 +756,7 @@ TEST_P(AiksTest, MaskBlurDoesntStretchContents) { builder.Transform(SkMatrix::Translate(100, 100) * SkMatrix::Scale(0.5, 0.5)); - paint.setColorSource(std::make_shared( + paint.setColorSource(DlColorSource::MakeImage( DlImageImpeller::Make(boston), DlTileMode::kRepeat, DlTileMode::kRepeat, DlImageSampling::kMipmapLinear)); paint.setMaskFilter(DlBlurMaskFilter::Make(DlBlurStyle::kNormal, sigma)); @@ -791,7 +790,7 @@ TEST_P(AiksTest, GaussianBlurAtPeripheryVertical) { DlPaint save_paint; 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.Restore(); @@ -821,7 +820,7 @@ TEST_P(AiksTest, GaussianBlurAtPeripheryHorizontal) { DlPaint save_paint; 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.Restore(); @@ -869,7 +868,7 @@ TEST_P(AiksTest, GaussianBlurAnimatedBackdrop) { paint.setBlendMode(DlBlendMode::kSrc); auto backdrop_filter = - DlBlurImageFilter::Make(sigma, sigma, DlTileMode::kClamp); + DlImageFilter::MakeBlur(sigma, sigma, DlTileMode::kClamp); builder.SaveLayer(nullptr, &paint, backdrop_filter.get()); count += 1; return builder.Build(); @@ -995,7 +994,7 @@ TEST_P(AiksTest, GaussianBlurScaledAndClipped) { Vector2 image_center = Vector2(bounds.GetSize() / 2); DlPaint paint; - paint.setImageFilter(DlBlurImageFilter::Make(20, 20, DlTileMode::kDecal)); + paint.setImageFilter(DlImageFilter::MakeBlur(20, 20, DlTileMode::kDecal)); Vector2 clip_size = {150, 75}; Vector2 center = Vector2(1024, 768) / 2; @@ -1047,7 +1046,7 @@ TEST_P(AiksTest, GaussianBlurRotatedAndClippedInteractive) { Vector2 image_center = Vector2(bounds.GetSize() / 2); DlPaint paint; 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_b(Point(662, 459), 20, Color::Red()); @@ -1087,7 +1086,7 @@ TEST_P(AiksTest, GaussianBlurOneDimension) { DlPaint paint; 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.Restore(); ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); @@ -1105,7 +1104,7 @@ TEST_P(AiksTest, GaussianBlurRotatedAndClipped) { Rect::MakeXYWH(0, 0, boston->GetSize().width, boston->GetSize().height); 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 clip_size = {150, 75}; @@ -1158,7 +1157,7 @@ TEST_P(AiksTest, GaussianBlurRotatedNonUniform) { DlPaint paint; paint.setColor(DlColor::kGreen()); 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; builder.Scale(GetContentScale().x, GetContentScale().y); @@ -1211,9 +1210,9 @@ TEST_P(AiksTest, BlurredRectangleWithShader) { auto texture = DisplayListToTexture(recorder_builder.Build(), {100, 100}, renderer); - auto image_source = std::make_shared( + auto image_source = DlColorSource::MakeImage( 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; paint.setColor(DlColor::kDarkGreen()); @@ -1284,7 +1283,7 @@ TEST_P(AiksTest, GaussianBlurWithoutDecalSupport) { paint.setColor(DlColor::kBlack()); 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); builder.DrawImage(texture, SkPoint::Make(200, 200), {}, &paint); ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); @@ -1305,7 +1304,7 @@ TEST_P(AiksTest, GaussianBlurSolidColorTinyMipMap) { DlPaint paint; 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); builder.DrawPath(path, paint); @@ -1330,7 +1329,7 @@ TEST_P(AiksTest, GaussianBlurBackdropTinyMipMap) { DlPaint paint; 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); builder.DrawCircle(SkPoint{400, 400}, 200, paint); @@ -1364,7 +1363,7 @@ TEST_P(AiksTest, DlPaint save_paint; 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(), /*backdrop_id=*/1); builder.Restore(); diff --git a/impeller/display_list/aiks_dl_gradient_unittests.cc b/impeller/display_list/aiks_dl_gradient_unittests.cc index 3d96f941a564a..7e362015441a0 100644 --- a/impeller/display_list/aiks_dl_gradient_unittests.cc +++ b/impeller/display_list/aiks_dl_gradient_unittests.cc @@ -676,23 +676,23 @@ TEST_P(AiksTest, CanRenderConicalGradient) { DlColor(Color::MakeRGBA8(0x4c, 0xAF, 0x50, 0xFF).ToARGB()), DlColor(Color::MakeRGBA8(0x21, 0x96, 0xF3, 0xFF).ToARGB())}; std::vector stops = {0.0, 1.f / 3.f, 2.f / 3.f, 1.0}; - std::array, 8> array{ - std::make_tuple(SkPoint::Make(size / 2.f, size / 2.f), 0.f, - SkPoint::Make(size / 2.f, size / 2.f), size / 2.f), - std::make_tuple(SkPoint::Make(size / 2.f, size / 2.f), size / 4.f, - SkPoint::Make(size / 2.f, size / 2.f), size / 2.f), - std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), 0.f, - SkPoint::Make(size / 2.f, size / 2.f), size / 2.f), - std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), size / 2.f, - SkPoint::Make(size / 2.f, size / 2.f), 0), - std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), size / 4.f, - SkPoint::Make(size / 2.f, size / 2.f), size / 2.f), - std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), size / 16.f, - SkPoint::Make(size / 2.f, size / 2.f), size / 8.f), - std::make_tuple(SkPoint::Make(size / 4.f, size / 4.f), size / 8.f, - SkPoint::Make(size / 2.f, size / 2.f), size / 16.f), - std::make_tuple(SkPoint::Make(size / 8.f, size / 8.f), size / 8.f, - SkPoint::Make(size / 2.f, size / 2.f), size / 8.f), + std::array, 8> array{ + std::make_tuple(DlPoint(size / 2.f, size / 2.f), 0.f, + DlPoint(size / 2.f, size / 2.f), size / 2.f), + std::make_tuple(DlPoint(size / 2.f, size / 2.f), size / 4.f, + DlPoint(size / 2.f, size / 2.f), size / 2.f), + std::make_tuple(DlPoint(size / 4.f, size / 4.f), 0.f, + DlPoint(size / 2.f, size / 2.f), size / 2.f), + std::make_tuple(DlPoint(size / 4.f, size / 4.f), size / 2.f, + DlPoint(size / 2.f, size / 2.f), 0), + std::make_tuple(DlPoint(size / 4.f, size / 4.f), size / 4.f, + DlPoint(size / 2.f, size / 2.f), size / 2.f), + std::make_tuple(DlPoint(size / 4.f, size / 4.f), size / 16.f, + DlPoint(size / 2.f, size / 2.f), size / 8.f), + std::make_tuple(DlPoint(size / 4.f, size / 4.f), size / 8.f, + DlPoint(size / 2.f, size / 2.f), size / 16.f), + std::make_tuple(DlPoint(size / 8.f, size / 8.f), size / 8.f, + DlPoint(size / 2.f, size / 2.f), size / 8.f), }; for (int i = 0; i < 8; i++) { builder.Save(); diff --git a/impeller/display_list/aiks_dl_path_unittests.cc b/impeller/display_list/aiks_dl_path_unittests.cc index ce5806c97c004..1d9d8528365b6 100644 --- a/impeller/display_list/aiks_dl_path_unittests.cc +++ b/impeller/display_list/aiks_dl_path_unittests.cc @@ -368,8 +368,8 @@ TEST_P(AiksTest, DrawLinesRenderCorrectly) { DlTileMode::kMirror)); draw(paint); - SkMatrix matrix = SkMatrix::Translate(-150, 75); - paint.setColorSource(std::make_shared( + DlMatrix matrix = DlMatrix::MakeTranslation({-150, 75}); + paint.setColorSource(DlColorSource::MakeImage( texture, DlTileMode::kRepeat, DlTileMode::kRepeat, DlImageSampling::kMipmapLinear, &matrix)); draw(paint); diff --git a/impeller/display_list/aiks_dl_runtime_effect_unittests.cc b/impeller/display_list/aiks_dl_runtime_effect_unittests.cc index 32c90338aa394..29fc758ea94e8 100644 --- a/impeller/display_list/aiks_dl_runtime_effect_unittests.cc +++ b/impeller/display_list/aiks_dl_runtime_effect_unittests.cc @@ -9,7 +9,6 @@ #include "flutter/display_list/effects/dl_color_source.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_image_filter.h" #include "flutter/impeller/display_list/aiks_unittests.h" #include "include/core/SkPath.h" @@ -21,7 +20,7 @@ namespace testing { using namespace flutter; namespace { -std::shared_ptr MakeRuntimeEffect( +std::shared_ptr MakeRuntimeEffect( AiksTest* test, std::string_view name, const std::shared_ptr>& uniform_data = {}, @@ -34,8 +33,8 @@ std::shared_ptr MakeRuntimeEffect( auto dl_runtime_effect = DlRuntimeEffect::MakeImpeller(runtime_stage); - return std::make_shared(dl_runtime_effect, - samplers, uniform_data); + return DlColorSource::MakeRuntimeEffect(dl_runtime_effect, samplers, + uniform_data); } } // namespace @@ -102,7 +101,7 @@ TEST_P(AiksTest, CanRenderRuntimeEffectFilter) { DlPaint paint; paint.setColor(DlColor::kAqua()); - paint.setImageFilter(DlRuntimeEffectImageFilter::Make( + paint.setImageFilter(DlImageFilter::MakeRuntimeEffect( DlRuntimeEffect::MakeImpeller(runtime_stage), sampler_inputs, uniform_data)); diff --git a/impeller/display_list/aiks_dl_text_unittests.cc b/impeller/display_list/aiks_dl_text_unittests.cc index dbcdd6ac5c116..9c7932c1642db 100644 --- a/impeller/display_list/aiks_dl_text_unittests.cc +++ b/impeller/display_list/aiks_dl_text_unittests.cc @@ -463,8 +463,8 @@ TEST_P(AiksTest, TextForegroundShaderWithTransform) { 1.0, }; text_paint.setColorSource(DlColorSource::MakeLinear( - /*start_point=*/{0, 0}, // - /*end_point=*/{100, 100}, // + /*start_point=*/DlPoint(0, 0), // + /*end_point=*/DlPoint(100, 100), // /*stop_count=*/2, // /*colors=*/colors.data(), // /*stops=*/stops.data(), // diff --git a/impeller/display_list/aiks_dl_unittests.cc b/impeller/display_list/aiks_dl_unittests.cc index 7030ed48ee56f..0849f9b9a057c 100644 --- a/impeller/display_list/aiks_dl_unittests.cc +++ b/impeller/display_list/aiks_dl_unittests.cc @@ -8,7 +8,7 @@ #include "display_list/dl_tile_mode.h" #include "display_list/effects/dl_color_filter.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_path.h" #include "display_list/image/dl_image.h" @@ -68,7 +68,7 @@ TEST_P(AiksTest, CollapsedDrawPaintInSubpassBackdropFilter) { paint.setBlendMode(DlBlendMode::kSrc); 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()); DlPaint draw_paint; @@ -186,7 +186,7 @@ TEST_P(AiksTest, TranslucentSaveLayerWithBlendImageFilterDrawsCorrectly) { DlPaint save_paint; save_paint.setColor(DlColor::kBlack().withAlpha(128)); - save_paint.setImageFilter(DlColorFilterImageFilter::Make( + save_paint.setImageFilter(DlImageFilter::MakeColorFilter( DlBlendColorFilter::Make(DlColor::kRed(), DlBlendMode::kDstOver))); builder.SaveLayer(nullptr, &save_paint); @@ -229,7 +229,7 @@ TEST_P(AiksTest, ImageFilteredUnboundedSaveLayerWithUnboundedContents) { DlPaint save_paint; save_paint.setImageFilter( - DlBlurImageFilter::Make(10.0, 10.0, DlTileMode::kDecal)); + DlImageFilter::MakeBlur(10.0, 10.0, DlTileMode::kDecal)); builder.SaveLayer(nullptr, &save_paint); { @@ -323,7 +323,7 @@ TEST_P(AiksTest, DlPaint paint; paint.setColor(DlColor::kBlack().withAlpha(128)); paint.setImageFilter( - DlColorFilterImageFilter::Make(DlMatrixColorFilter::Make(matrix))); + DlImageFilter::MakeColorFilter(DlMatrixColorFilter::Make(matrix))); paint.setColorFilter( DlBlendColorFilter::Make(DlColor::kGreen(), DlBlendMode::kModulate)); builder.SaveLayer(nullptr, &paint); @@ -454,8 +454,8 @@ TEST_P(AiksTest, CanDrawPointsWithTextureMap) { {52, 52}, // }; - auto image_src = std::make_shared( - texture, DlTileMode::kClamp, DlTileMode::kClamp); + auto image_src = + DlColorSource::MakeImage(texture, DlTileMode::kClamp, DlTileMode::kClamp); DlPaint paint_round; paint_round.setStrokeCap(DlStrokeCap::kRound); @@ -605,7 +605,7 @@ TEST_P(AiksTest, ReleasesTextureOnTeardown) { builder.Translate(100.0f, 100.0f); DlPaint paint; - paint.setColorSource(std::make_shared( + paint.setColorSource(DlColorSource::MakeImage( DlImageImpeller::Make(texture), DlTileMode::kClamp, DlTileMode::kClamp, DlImageSampling::kLinear, nullptr)); @@ -644,7 +644,7 @@ TEST_P(AiksTest, MatrixImageFilterMagnify) { DlMatrix matrix = DlMatrix::MakeScale({scale, scale, 1}); DlPaint paint; paint.setImageFilter( - DlMatrixImageFilter::Make(matrix, DlImageSampling::kLinear)); + DlImageFilter::MakeMatrix(matrix, DlImageSampling::kLinear)); builder.SaveLayer(nullptr, &paint); DlPaint rect_paint; @@ -696,22 +696,22 @@ TEST_P(AiksTest, ImageFilteredSaveLayerWithUnboundedContents) { 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); - test(DlDilateImageFilter::Make(10.0, 10.0)); + test(DlImageFilter::MakeDilate(10.0, 10.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); DlMatrix matrix = DlMatrix::MakeRotationZ(DlDegrees(10)); auto rotate_filter = - DlMatrixImageFilter::Make(matrix, DlImageSampling::kLinear); + DlImageFilter::MakeMatrix(matrix, DlImageSampling::kLinear); test(rotate_filter); builder.Translate(200.0, 0.0); @@ -723,28 +723,27 @@ TEST_P(AiksTest, ImageFilteredSaveLayerWithUnboundedContents) { 0, 0, 0, 1, 0 // }; auto rgb_swap_filter = - DlColorFilterImageFilter::Make(std::make_shared(m)); + DlImageFilter::MakeColorFilter(std::make_shared(m)); test(rgb_swap_filter); 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); - test(DlLocalMatrixImageFilter::Make(DlMatrix::MakeTranslation({25.0, 25.0}), - rotate_filter)); + test(rotate_filter->makeWithLocalMatrix( + DlMatrix::MakeTranslation({25.0, 25.0}))); builder.Translate(200.0, 0.0); - test(DlLocalMatrixImageFilter::Make(DlMatrix::MakeTranslation({25.0, 25.0}), - rgb_swap_filter)); + test(rgb_swap_filter->makeWithLocalMatrix( + DlMatrix::MakeTranslation({25.0, 25.0}))); builder.Translate(200.0, 0.0); - test(DlLocalMatrixImageFilter::Make( - DlMatrix::MakeTranslation({25.0, 25.0}), - DlComposeImageFilter::Make(rotate_filter, rgb_swap_filter))); + test(DlImageFilter::MakeCompose(rotate_filter, rgb_swap_filter) + ->makeWithLocalMatrix(DlMatrix::MakeTranslation({25.0, 25.0}))); ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); } @@ -774,7 +773,7 @@ TEST_P(AiksTest, MatrixBackdropFilter) { DlMatrix::MakeScale({0.5, 0.5, 1}) * DlMatrix::MakeTranslation({-100, -100}); auto backdrop_filter = - DlMatrixImageFilter::Make(matrix, DlImageSampling::kLinear); + DlImageFilter::MakeMatrix(matrix, DlImageSampling::kLinear); builder.SaveLayer(nullptr, nullptr, backdrop_filter.get()); builder.Restore(); } @@ -803,7 +802,7 @@ TEST_P(AiksTest, MatrixSaveLayerFilter) { DlMatrix::MakeTranslation({-200, -200}); DlPaint save_paint; save_paint.setImageFilter( - DlMatrixImageFilter::Make(matrix, DlImageSampling::kLinear)); + DlImageFilter::MakeMatrix(matrix, DlImageSampling::kLinear)); builder.SaveLayer(nullptr, &save_paint); @@ -923,7 +922,7 @@ TEST_P(AiksTest, BackdropRestoreUsesCorrectCoverageForFirstRestoredClip) { { // Create a save layer with a backdrop blur 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()); } } diff --git a/impeller/display_list/aiks_dl_vertices_unittests.cc b/impeller/display_list/aiks_dl_vertices_unittests.cc index d37dec045b6fa..869f137f53b67 100644 --- a/impeller/display_list/aiks_dl_vertices_unittests.cc +++ b/impeller/display_list/aiks_dl_vertices_unittests.cc @@ -52,8 +52,8 @@ TEST_P(AiksTest, VerticesGeometryUVPositionData) { DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png")); auto size = image->impeller_texture()->GetSize(); - paint.setColorSource(std::make_shared( - image, DlTileMode::kClamp, DlTileMode::kClamp)); + paint.setColorSource( + DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp)); std::vector vertex_coordinates = {SkPoint::Make(0, 0), SkPoint::Make(size.width, 0), @@ -73,12 +73,10 @@ TEST_P(AiksTest, VerticesGeometryUVPositionDataWithTranslate) { DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png")); auto size = image->impeller_texture()->GetSize(); - SkMatrix matrix; - matrix.setTranslateX(100); - matrix.setTranslateY(100); - paint.setColorSource(std::make_shared( - image, DlTileMode::kClamp, DlTileMode::kClamp, DlImageSampling::kLinear, - &matrix)); + DlMatrix matrix = DlMatrix::MakeTranslation({100, 100}); + paint.setColorSource( + DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp, + DlImageSampling::kLinear, &matrix)); std::vector positions = {SkPoint::Make(0, 0), SkPoint::Make(size.width, 0), @@ -98,8 +96,8 @@ TEST_P(AiksTest, VerticesGeometryColorUVPositionData) { DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png")); auto size = image->impeller_texture()->GetSize(); - paint.setColorSource(std::make_shared( - image, DlTileMode::kClamp, DlTileMode::kClamp)); + paint.setColorSource( + DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp)); std::vector positions = { SkPoint::Make(0, 0), SkPoint::Make(size.width, 0), @@ -126,8 +124,8 @@ TEST_P(AiksTest, VerticesGeometryColorUVPositionDataAdvancedBlend) { DlImageImpeller::Make(CreateTextureForFixture("table_mountain_nx.png")); auto size = image->impeller_texture()->GetSize(); - paint.setColorSource(std::make_shared( - image, DlTileMode::kClamp, DlTileMode::kClamp)); + paint.setColorSource( + DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp)); std::vector positions = { SkPoint::Make(0, 0), SkPoint::Make(size.width, 0), @@ -273,10 +271,10 @@ TEST_P(AiksTest, DrawVerticesImageSourceWithTextureCoordinates) { flutter::DisplayListBuilder builder; flutter::DlPaint paint; - auto image_source = flutter::DlImageColorSource( + auto image_source = flutter::DlColorSource::MakeImage( dl_image, flutter::DlTileMode::kRepeat, flutter::DlTileMode::kRepeat); - paint.setColorSource(&image_source); + paint.setColorSource(image_source); builder.DrawVertices(vertices, flutter::DlBlendMode::kSrcOver, paint); ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); @@ -302,10 +300,10 @@ TEST_P(AiksTest, flutter::DisplayListBuilder builder; flutter::DlPaint paint; - auto image_source = flutter::DlImageColorSource( + auto image_source = flutter::DlColorSource::MakeImage( dl_image, flutter::DlTileMode::kRepeat, flutter::DlTileMode::kRepeat); - paint.setColorSource(&image_source); + paint.setColorSource(image_source); builder.DrawVertices(vertices, flutter::DlBlendMode::kModulate, paint); ASSERT_TRUE(OpenPlaygroundHere(builder.Build())); diff --git a/impeller/display_list/canvas.cc b/impeller/display_list/canvas.cc index eae343d2fcd2f..7b26f02892904 100644 --- a/impeller/display_list/canvas.cc +++ b/impeller/display_list/canvas.cc @@ -777,8 +777,7 @@ void Canvas::DrawVertices(const std::shared_ptr& vertices, static_cast(image_color_source->vertical_tile_mode()); auto sampler_descriptor = skia_conversions::ToSamplerDescriptor(image_color_source->sampling()); - auto effect_transform = - skia_conversions::ToMatrix(image_color_source->matrix()); + auto effect_transform = image_color_source->matrix(); auto contents = std::make_shared(); contents->SetBlendMode(blend_mode); diff --git a/impeller/display_list/canvas_unittests.cc b/impeller/display_list/canvas_unittests.cc index 73d045ecf7daf..09dad0565d26a 100644 --- a/impeller/display_list/canvas_unittests.cc +++ b/impeller/display_list/canvas_unittests.cc @@ -5,7 +5,7 @@ #include #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/testing/testing.h" #include "gtest/gtest.h" @@ -143,7 +143,7 @@ TEST_P(AiksTest, BackdropCountDownNormal) { canvas->SetBackdropData({}, 3); 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); EXPECT_TRUE(canvas->RequiresReadback()); @@ -180,7 +180,7 @@ TEST_P(AiksTest, BackdropCountDownBackdropId) { canvas->SetBackdropData(data, 3); auto blur = - flutter::DlBlurImageFilter::Make(4, 4, flutter::DlTileMode::kClamp); + flutter::DlImageFilter::MakeBlur(4, 4, flutter::DlTileMode::kClamp); EXPECT_TRUE(canvas->RequiresReadback()); canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50), @@ -220,7 +220,7 @@ TEST_P(AiksTest, BackdropCountDownBackdropIdMixed) { canvas->SetBackdropData(data, 3); auto blur = - flutter::DlBlurImageFilter::Make(4, 4, flutter::DlTileMode::kClamp); + flutter::DlImageFilter::MakeBlur(4, 4, flutter::DlTileMode::kClamp); EXPECT_TRUE(canvas->RequiresReadback()); canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50), @@ -255,7 +255,7 @@ TEST_P(AiksTest, BackdropCountDownWithNestedSaveLayers) { canvas->SetBackdropData({}, 2); auto blur = - flutter::DlBlurImageFilter::Make(4, 4, flutter::DlTileMode::kClamp); + flutter::DlImageFilter::MakeBlur(4, 4, flutter::DlTileMode::kClamp); EXPECT_TRUE(canvas->RequiresReadback()); canvas->DrawRect(flutter::DlRect::MakeLTRB(0, 0, 50, 50), diff --git a/impeller/display_list/dl_golden_blur_unittests.cc b/impeller/display_list/dl_golden_blur_unittests.cc index 64c82add8defd..54784e69d9bf6 100644 --- a/impeller/display_list/dl_golden_blur_unittests.cc +++ b/impeller/display_list/dl_golden_blur_unittests.cc @@ -5,7 +5,6 @@ #include "impeller/display_list/dl_golden_unittests.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/impeller/geometry/round_rect.h" #include "flutter/impeller/golden_tests/screenshot.h" @@ -166,9 +165,9 @@ TEST_P(DlGoldenTest, ShimmerTest) { DlImageSampling::kLinear, &paint); 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->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, &blur); + canvas->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, blur.get()); canvas->Restore(); }; diff --git a/impeller/display_list/dl_golden_unittests.cc b/impeller/display_list/dl_golden_unittests.cc index fdcb0d85490b7..377f77f12c0dd 100644 --- a/impeller/display_list/dl_golden_unittests.cc +++ b/impeller/display_list/dl_golden_unittests.cc @@ -5,7 +5,6 @@ #include "impeller/display_list/dl_golden_unittests.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/testing/testing.h" #include "gtest/gtest.h" @@ -79,12 +78,13 @@ TEST_P(DlGoldenTest, Bug147807) { SkRRect::MakeOval(SkRect::MakeLTRB(201.25, 10, 361.25, 170)), DlCanvas::ClipOp::kIntersect, true); SkRect save_layer_bounds = SkRect::MakeLTRB(201.25, 10, 361.25, 170); - DlMatrixImageFilter backdrop(DlMatrix::MakeRow(3, 0, 0.0, -280, // - 0, 3, 0.0, -920, // - 0, 0, 1.0, 0.0, // - 0, 0, 0.0, 1.0), - DlImageSampling::kLinear); - canvas->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, &backdrop); + auto backdrop = + DlImageFilter::MakeMatrix(DlMatrix::MakeRow(3, 0, 0.0, -280, // + 0, 3, 0.0, -920, // + 0, 0, 1.0, 0.0, // + 0, 0, 0.0, 1.0), + DlImageSampling::kLinear); + canvas->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, backdrop.get()); { canvas->Translate(201.25, 10); auto paint = DlPaint() diff --git a/impeller/display_list/dl_unittests.cc b/impeller/display_list/dl_unittests.cc index be868e5fb7b07..06bb71d7563b3 100644 --- a/impeller/display_list/dl_unittests.cc +++ b/impeller/display_list/dl_unittests.cc @@ -1163,9 +1163,9 @@ TEST_P(DisplayListTest, CanDrawPaintWithColorSource) { builder.Translate(500, 500); builder.ClipRect(clip_bounds, flutter::DlCanvas::ClipOp::kIntersect, false); auto texture = CreateTextureForFixture("table_mountain_nx.png"); - auto image = std::make_shared( - DlImageImpeller::Make(texture), flutter::DlTileMode::kRepeat, - flutter::DlTileMode::kRepeat); + auto image = flutter::DlColorSource::MakeImage(DlImageImpeller::Make(texture), + flutter::DlTileMode::kRepeat, + flutter::DlTileMode::kRepeat); paint.setColorSource(image); builder.DrawPaint(paint); builder.Restore(); @@ -1263,9 +1263,9 @@ TEST_P(DisplayListTest, MaskBlursApplyCorrectlyToColorSources) { flutter::DlColor::kGreen()}; std::array stops = {0, 1}; std::array, 2> color_sources = { - std::make_shared(flutter::DlColor::kWhite()), + flutter::DlColorSource::MakeColor(flutter::DlColor::kWhite()), 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)}; int offset = 100; diff --git a/impeller/display_list/paint.cc b/impeller/display_list/paint.cc index 13bd681fe30fb..6bbdc1a6940cb 100644 --- a/impeller/display_list/paint.cc +++ b/impeller/display_list/paint.cc @@ -6,9 +6,9 @@ #include -#include "display_list/effects/dl_color_filter.h" -#include "display_list/effects/dl_color_source.h" -#include "display_list/geometry/dl_path.h" +#include "flutter/display_list/effects/dl_color_filter.h" +#include "flutter/display_list/effects/dl_color_sources.h" +#include "flutter/display_list/geometry/dl_path.h" #include "fml/logging.h" #include "impeller/display_list/color_filter.h" #include "impeller/display_list/skia_conversions.h" @@ -46,14 +46,14 @@ std::shared_ptr Paint::CreateContents() const { const flutter::DlLinearGradientColorSource* linear = color_source->asLinearGradient(); FML_DCHECK(linear); - auto start_point = skia_conversions::ToPoint(linear->start_point()); - auto end_point = skia_conversions::ToPoint(linear->end_point()); + auto start_point = linear->start_point(); + auto end_point = linear->end_point(); std::vector colors; std::vector stops; skia_conversions::ConvertStops(linear, colors, stops); auto tile_mode = static_cast(linear->tile_mode()); - auto effect_transform = skia_conversions::ToMatrix(linear->matrix()); + auto effect_transform = linear->matrix(); auto contents = std::make_shared(); contents->SetOpacityFactor(color.alpha); @@ -74,7 +74,7 @@ std::shared_ptr Paint::CreateContents() const { const flutter::DlRadialGradientColorSource* radialGradient = color_source->asRadialGradient(); FML_DCHECK(radialGradient); - auto center = skia_conversions::ToPoint(radialGradient->center()); + auto center = radialGradient->center(); auto radius = radialGradient->radius(); std::vector colors; std::vector stops; @@ -82,8 +82,7 @@ std::shared_ptr Paint::CreateContents() const { auto tile_mode = static_cast(radialGradient->tile_mode()); - auto effect_transform = - skia_conversions::ToMatrix(radialGradient->matrix()); + auto effect_transform = radialGradient->matrix(); auto contents = std::make_shared(); contents->SetOpacityFactor(color.alpha); @@ -105,10 +104,9 @@ std::shared_ptr Paint::CreateContents() const { const flutter::DlConicalGradientColorSource* conical_gradient = color_source->asConicalGradient(); 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(); - Point focus_center = - skia_conversions::ToPoint(conical_gradient->start_center()); + Point focus_center = conical_gradient->start_center(); DlScalar focus_radius = conical_gradient->start_radius(); std::vector colors; std::vector stops; @@ -116,8 +114,7 @@ std::shared_ptr Paint::CreateContents() const { auto tile_mode = static_cast(conical_gradient->tile_mode()); - auto effect_transform = - skia_conversions::ToMatrix(conical_gradient->matrix()); + auto effect_transform = conical_gradient->matrix(); std::shared_ptr contents = std::make_shared(); @@ -142,7 +139,7 @@ std::shared_ptr Paint::CreateContents() const { color_source->asSweepGradient(); FML_DCHECK(sweepGradient); - auto center = skia_conversions::ToPoint(sweepGradient->center()); + auto center = sweepGradient->center(); auto start_angle = Degrees(sweepGradient->start()); auto end_angle = Degrees(sweepGradient->end()); std::vector colors; @@ -151,8 +148,7 @@ std::shared_ptr Paint::CreateContents() const { auto tile_mode = static_cast(sweepGradient->tile_mode()); - auto effect_transform = - skia_conversions::ToMatrix(sweepGradient->matrix()); + auto effect_transform = sweepGradient->matrix(); auto contents = std::make_shared(); contents->SetOpacityFactor(color.alpha); @@ -176,8 +172,7 @@ std::shared_ptr Paint::CreateContents() const { image_color_source->vertical_tile_mode()); auto sampler_descriptor = skia_conversions::ToSamplerDescriptor(image_color_source->sampling()); - auto effect_transform = - skia_conversions::ToMatrix(image_color_source->matrix()); + auto effect_transform = image_color_source->matrix(); auto contents = std::make_shared(); contents->SetOpacityFactor(color.alpha); diff --git a/impeller/display_list/skia_conversions.cc b/impeller/display_list/skia_conversions.cc index 9d15c3ffb123a..14047ab964352 100644 --- a/impeller/display_list/skia_conversions.cc +++ b/impeller/display_list/skia_conversions.cc @@ -3,7 +3,8 @@ // found in the LICENSE file. #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" namespace impeller { diff --git a/impeller/display_list/skia_conversions.h b/impeller/display_list/skia_conversions.h index dce1a98f4ebfd..7180da35adc10 100644 --- a/impeller/display_list/skia_conversions.h +++ b/impeller/display_list/skia_conversions.h @@ -5,8 +5,9 @@ #ifndef FLUTTER_IMPELLER_DISPLAY_LIST_SKIA_CONVERSIONS_H_ #define FLUTTER_IMPELLER_DISPLAY_LIST_SKIA_CONVERSIONS_H_ -#include "display_list/dl_color.h" -#include "display_list/effects/dl_color_source.h" +#include "flutter/display_list/dl_blend_mode.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/sampler_descriptor.h" #include "impeller/geometry/color.h" diff --git a/impeller/display_list/skia_conversions_unittests.cc b/impeller/display_list/skia_conversions_unittests.cc index 9e9d9e4876a7c..a06dd7adc80b3 100644 --- a/impeller/display_list/skia_conversions_unittests.cc +++ b/impeller/display_list/skia_conversions_unittests.cc @@ -134,8 +134,8 @@ TEST(SkiaConversionsTest, GradientStopConversion) { flutter::DlColor::kGreen()}; std::vector stops = {0.0, 0.5, 1.0}; const auto gradient = - flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // - SkPoint::Make(1.0, 1.0), // + flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), // + flutter::DlPoint(1.0, 1.0), // 3, // colors.data(), // stops.data(), // @@ -145,7 +145,7 @@ TEST(SkiaConversionsTest, GradientStopConversion) { std::vector converted_colors; std::vector converted_stops; - skia_conversions::ConvertStops(gradient.get(), converted_colors, + skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors, converted_stops); ASSERT_TRUE(ScalarNearlyEqual(converted_stops[0], 0.0f)); @@ -158,8 +158,8 @@ TEST(SkiaConversionsTest, GradientMissing0) { flutter::DlColor::kRed()}; std::vector stops = {0.5, 1.0}; const auto gradient = - flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // - SkPoint::Make(1.0, 1.0), // + flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), // + flutter::DlPoint(1.0, 1.0), // 2, // colors.data(), // stops.data(), // @@ -169,7 +169,7 @@ TEST(SkiaConversionsTest, GradientMissing0) { std::vector converted_colors; std::vector converted_stops; - skia_conversions::ConvertStops(gradient.get(), converted_colors, + skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors, converted_stops); // First color is inserted as blue. @@ -184,8 +184,8 @@ TEST(SkiaConversionsTest, GradientMissingLastValue) { flutter::DlColor::kRed()}; std::vector stops = {0.0, .5}; const auto gradient = - flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // - SkPoint::Make(1.0, 1.0), // + flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), // + flutter::DlPoint(1.0, 1.0), // 2, // colors.data(), // stops.data(), // @@ -195,7 +195,7 @@ TEST(SkiaConversionsTest, GradientMissingLastValue) { std::vector converted_colors; std::vector converted_stops; - skia_conversions::ConvertStops(gradient.get(), converted_colors, + skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors, converted_stops); // Last color is inserted as red. @@ -211,8 +211,8 @@ TEST(SkiaConversionsTest, GradientStopGreaterThan1) { flutter::DlColor::kRed()}; std::vector stops = {0.0, 100, 1.0}; const auto gradient = - flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // - SkPoint::Make(1.0, 1.0), // + flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), // + flutter::DlPoint(1.0, 1.0), // 3, // colors.data(), // stops.data(), // @@ -222,7 +222,7 @@ TEST(SkiaConversionsTest, GradientStopGreaterThan1) { std::vector converted_colors; std::vector converted_stops; - skia_conversions::ConvertStops(gradient.get(), converted_colors, + skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors, converted_stops); // Value is clamped to 1.0 @@ -237,8 +237,8 @@ TEST(SkiaConversionsTest, GradientConversionNonMonotonic) { flutter::DlColor::kGreen(), flutter::DlColor::kRed()}; std::vector stops = {0.0, 0.5, 0.4, 1.0}; const auto gradient = - flutter::DlColorSource::MakeLinear(SkPoint::Make(0, 0), // - SkPoint::Make(1.0, 1.0), // + flutter::DlColorSource::MakeLinear(flutter::DlPoint(0, 0), // + flutter::DlPoint(1.0, 1.0), // 4, // colors.data(), // stops.data(), // @@ -248,7 +248,7 @@ TEST(SkiaConversionsTest, GradientConversionNonMonotonic) { std::vector converted_colors; std::vector converted_stops; - skia_conversions::ConvertStops(gradient.get(), converted_colors, + skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors, converted_stops); // Value is clamped to 0.5 diff --git a/impeller/golden_tests/golden_tests.cc b/impeller/golden_tests/golden_tests.cc index a55e1aba6f89d..c96c093d9a9e7 100644 --- a/impeller/golden_tests/golden_tests.cc +++ b/impeller/golden_tests/golden_tests.cc @@ -82,7 +82,7 @@ TEST_F(GoldenTests, ConicalGradient) { flutter::DlColor::RGBA(0, 0, 1, 1)}; Scalar stops[2] = {0, 1}; - paint.setColorSource(flutter::DlConicalGradientColorSource::MakeConical( + paint.setColorSource(flutter::DlColorSource::MakeConical( /*start_center=*/{125, 125}, // /*start_radius=*/125, {180, 180}, // /*end_radius=*/0, // diff --git a/impeller/toolkit/interop/color_source.cc b/impeller/toolkit/interop/color_source.cc index 11c108a9cacd2..8fff4c16cb42f 100644 --- a/impeller/toolkit/interop/color_source.cc +++ b/impeller/toolkit/interop/color_source.cc @@ -13,16 +13,14 @@ ScopedObject ColorSource::MakeLinearGradient( const std::vector& stops, flutter::DlTileMode tile_mode, const Matrix& transformation) { - const auto sk_transformation = ToSkMatrix(transformation); - auto dl_filter = - flutter::DlColorSource::MakeLinear(ToSkiaType(start_point), // - ToSkiaType(end_point), // - stops.size(), // - colors.data(), // - stops.data(), // - tile_mode, // - &sk_transformation // - ); + auto dl_filter = flutter::DlColorSource::MakeLinear(start_point, // + end_point, // + stops.size(), // + colors.data(), // + stops.data(), // + tile_mode, // + &transformation // + ); if (!dl_filter) { return nullptr; } @@ -36,14 +34,13 @@ ScopedObject ColorSource::MakeRadialGradient( const std::vector& stops, flutter::DlTileMode tile_mode, const Matrix& transformation) { - const auto sk_transformation = ToSkMatrix(transformation); - auto dl_filter = flutter::DlColorSource::MakeRadial(ToSkiaType(center), // - radius, // - stops.size(), // - colors.data(), // - stops.data(), // - tile_mode, // - &sk_transformation // + auto dl_filter = flutter::DlColorSource::MakeRadial(center, // + radius, // + stops.size(), // + colors.data(), // + stops.data(), // + tile_mode, // + &transformation // ); if (!dl_filter) { return nullptr; @@ -60,18 +57,16 @@ ScopedObject ColorSource::MakeConicalGradient( const std::vector& stops, flutter::DlTileMode tile_mode, const Matrix& transformation) { - const auto sk_transformation = ToSkMatrix(transformation); - auto dl_filter = - flutter::DlColorSource::MakeConical(ToSkiaType(start_center), // - start_radius, // - ToSkiaType(end_center), // - end_radius, // - stops.size(), // - colors.data(), // - stops.data(), // - tile_mode, // - &sk_transformation // - ); + auto dl_filter = flutter::DlColorSource::MakeConical(start_center, // + start_radius, // + end_center, // + end_radius, // + stops.size(), // + colors.data(), // + stops.data(), // + tile_mode, // + &transformation // + ); if (!dl_filter) { return nullptr; } @@ -86,15 +81,14 @@ ScopedObject ColorSource::MakeSweepGradient( const std::vector& stops, flutter::DlTileMode tile_mode, const Matrix& transformation) { - const auto sk_transformation = ToSkMatrix(transformation); - auto dl_filter = flutter::DlColorSource::MakeSweep(ToSkiaType(center), // - start, // - end, // - stops.size(), // - colors.data(), // - stops.data(), // - tile_mode, // - &sk_transformation // + auto dl_filter = flutter::DlColorSource::MakeSweep(center, // + start, // + end, // + stops.size(), // + colors.data(), // + stops.data(), // + tile_mode, // + &transformation // ); if (!dl_filter) { return nullptr; @@ -108,14 +102,12 @@ ScopedObject ColorSource::MakeImage( flutter::DlTileMode vertical_tile_mode, flutter::DlImageSampling sampling, const Matrix& transformation) { - const auto sk_transformation = ToSkMatrix(transformation); - auto dl_filter = - std::make_shared(image.MakeImage(), // - horizontal_tile_mode, // - vertical_tile_mode, // - sampling, // - &sk_transformation // - ); + auto dl_filter = flutter::DlColorSource::MakeImage(image.MakeImage(), // + horizontal_tile_mode, // + vertical_tile_mode, // + sampling, // + &transformation // + ); return Create(std::move(dl_filter)); } diff --git a/lib/ui/painting/fragment_program.cc b/lib/ui/painting/fragment_program.cc index 9399fb9c051ac..68a96a15247af 100644 --- a/lib/ui/painting/fragment_program.cc +++ b/lib/ui/painting/fragment_program.cc @@ -6,7 +6,6 @@ #include #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/assets/asset_manager.h" @@ -148,7 +147,7 @@ std::shared_ptr FragmentProgram::MakeDlColorSource( std::shared_ptr FragmentProgram::MakeDlImageFilter( std::shared_ptr> float_uniforms, const std::vector>& children) { - return DlRuntimeEffectImageFilter::Make(runtime_effect_, children, + return DlImageFilter::MakeRuntimeEffect(runtime_effect_, children, std::move(float_uniforms)); } diff --git a/lib/ui/painting/fragment_shader.cc b/lib/ui/painting/fragment_shader.cc index ecf67cafe7be7..c9e88170ec4a4 100644 --- a/lib/ui/painting/fragment_shader.cc +++ b/lib/ui/painting/fragment_shader.cc @@ -73,7 +73,7 @@ void ReusableFragmentShader::SetImageSampler(Dart_Handle index_handle, // TODO(115794): Once the DlImageSampling enum is replaced, expose the // sampling options as a new default parameter for users. - samplers_[index] = std::make_shared( + samplers_[index] = DlColorSource::MakeImage( image->image(), DlTileMode::kClamp, DlTileMode::kClamp, DlImageSampling::kNearestNeighbor, nullptr); // This should be true since we already checked the image above, but diff --git a/lib/ui/painting/gradient.cc b/lib/ui/painting/gradient.cc index 6f3f8b5d60f3d..1b87943e51162 100644 --- a/lib/ui/painting/gradient.cc +++ b/lib/ui/painting/gradient.cc @@ -33,19 +33,17 @@ void CanvasGradient::initLinear(const tonic::Float32List& end_points, color_stops.data() == nullptr); int num_colors = colors.num_elements() / 4; - static_assert(sizeof(SkPoint) == sizeof(float) * 2, - "SkPoint doesn't use floats."); - static_assert(sizeof(SkColor) == sizeof(int32_t), - "SkColor doesn't use int32_t."); + static_assert(sizeof(DlPoint) == sizeof(float) * 2, + "DlPoint doesn't use floats."); - SkMatrix sk_matrix; + DlMatrix dl_matrix; bool has_matrix = matrix4.data() != nullptr; if (has_matrix) { - sk_matrix = ToSkMatrix(matrix4); + dl_matrix = ToDlMatrix(matrix4); } - SkPoint p0 = SkPoint::Make(end_points[0], end_points[1]); - SkPoint p1 = SkPoint::Make(end_points[2], end_points[3]); + DlPoint p0 = DlPoint(end_points[0], end_points[1]); + DlPoint p1 = DlPoint(end_points[2], end_points[3]); std::vector dl_colors; dl_colors.reserve(num_colors); 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(), 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 FML_DCHECK(dl_shader_->isUIThreadSafe()); } @@ -74,13 +72,10 @@ void CanvasGradient::initRadial(double center_x, color_stops.data() == nullptr); int num_colors = colors.num_elements() / 4; - 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; if (has_matrix) { - sk_matrix = ToSkMatrix(matrix4); + dl_matrix = ToDlMatrix(matrix4); } std::vector dl_colors; @@ -94,9 +89,9 @@ void CanvasGradient::initRadial(double center_x, } dl_shader_ = DlColorSource::MakeRadial( - SkPoint::Make(SafeNarrow(center_x), SafeNarrow(center_y)), - SafeNarrow(radius), num_colors, dl_colors.data(), color_stops.data(), - tile_mode, has_matrix ? &sk_matrix : nullptr); + DlPoint(SafeNarrow(center_x), SafeNarrow(center_y)), SafeNarrow(radius), + num_colors, dl_colors.data(), color_stops.data(), tile_mode, + has_matrix ? &dl_matrix : nullptr); // Just a sanity check, all gradient shaders should be thread-safe FML_DCHECK(dl_shader_->isUIThreadSafe()); } @@ -113,13 +108,10 @@ void CanvasGradient::initSweep(double center_x, color_stops.data() == nullptr); int num_colors = colors.num_elements() / 4; - 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; if (has_matrix) { - sk_matrix = ToSkMatrix(matrix4); + dl_matrix = ToDlMatrix(matrix4); } std::vector dl_colors; @@ -133,11 +125,11 @@ void CanvasGradient::initSweep(double center_x, } 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(M_PI), SafeNarrow(end_angle) * 180.0f / static_cast(M_PI), num_colors, 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 FML_DCHECK(dl_shader_->isUIThreadSafe()); } @@ -156,13 +148,10 @@ void CanvasGradient::initTwoPointConical(double start_x, color_stops.data() == nullptr); int num_colors = colors.num_elements() / 4; - 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; if (has_matrix) { - sk_matrix = ToSkMatrix(matrix4); + dl_matrix = ToDlMatrix(matrix4); } std::vector dl_colors; @@ -176,11 +165,10 @@ void CanvasGradient::initTwoPointConical(double start_x, } dl_shader_ = DlColorSource::MakeConical( - SkPoint::Make(SafeNarrow(start_x), SafeNarrow(start_y)), - SafeNarrow(start_radius), - SkPoint::Make(SafeNarrow(end_x), SafeNarrow(end_y)), + DlPoint(SafeNarrow(start_x), SafeNarrow(start_y)), + SafeNarrow(start_radius), DlPoint(SafeNarrow(end_x), SafeNarrow(end_y)), 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 FML_DCHECK(dl_shader_->isUIThreadSafe()); } diff --git a/lib/ui/painting/image_shader.cc b/lib/ui/painting/image_shader.cc index 5093f51433c0e..a55c885d16eeb 100644 --- a/lib/ui/painting/image_shader.cc +++ b/lib/ui/painting/image_shader.cc @@ -5,6 +5,7 @@ #include "flutter/lib/ui/painting/image_shader.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/ui_dart_state.h" #include "third_party/tonic/converter/dart_converter.h" @@ -35,23 +36,25 @@ Dart_Handle ImageShader::initWithImage(CanvasImage* image, image_ = image->image(); tonic::Float64List matrix4(matrix_handle); - SkMatrix local_matrix = ToSkMatrix(matrix4); + DlMatrix local_matrix = ToDlMatrix(matrix4); matrix4.Release(); sampling_is_locked_ = filter_quality_index >= 0; DlImageSampling sampling = sampling_is_locked_ ? ImageFilter::SamplingFromIndex(filter_quality_index) : DlImageSampling::kLinear; - cached_shader_ = std::make_shared( - image_, tmx, tmy, sampling, &local_matrix); + cached_shader_ = + DlColorSource::MakeImage(image_, tmx, tmy, sampling, &local_matrix); FML_DCHECK(cached_shader_->isUIThreadSafe()); return Dart_Null(); } std::shared_ptr 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_->with_sampling(sampling); + return image_shader->WithSampling(sampling); } int ImageShader::width() { diff --git a/lib/ui/painting/image_shader.h b/lib/ui/painting/image_shader.h index 61b4a851ebb15..07042abd1ef8c 100644 --- a/lib/ui/painting/image_shader.h +++ b/lib/ui/painting/image_shader.h @@ -43,7 +43,7 @@ class ImageShader : public Shader { sk_sp image_; bool sampling_is_locked_; - std::shared_ptr cached_shader_; + std::shared_ptr cached_shader_; }; } // namespace flutter diff --git a/shell/common/dl_op_spy.cc b/shell/common/dl_op_spy.cc index 34746ae4698b3..5c109bee314f1 100644 --- a/shell/common/dl_op_spy.cc +++ b/shell/common/dl_op_spy.cc @@ -4,6 +4,8 @@ #include "flutter/shell/common/dl_op_spy.h" +#include "flutter/display_list/effects/color_sources/dl_color_color_source.h" + namespace flutter { bool DlOpSpy::did_draw() { diff --git a/shell/common/shell_unittests.cc b/shell/common/shell_unittests.cc index 0719dee1e261e..4bbfa80e0eaf2 100644 --- a/shell/common/shell_unittests.cc +++ b/shell/common/shell_unittests.cc @@ -21,7 +21,7 @@ #include "assets/asset_resolver.h" #include "assets/directory_asset_bundle.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/clip_rect_layer.h" #include "flutter/flow/layers/display_list_layer.h" @@ -991,7 +991,7 @@ TEST_F(ShellTest, PushBackdropFilterToVisitedPlatformViews) { auto clip_rect_layer = std::make_shared( SkRect::MakeLTRB(0, 0, 30, 30), Clip::kHardEdge); 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 = std::make_shared(filter, DlBlendMode::kSrcOver); clip_rect_layer->Add(backdrop_filter_layer); @@ -1006,10 +1006,10 @@ TEST_F(ShellTest, PushBackdropFilterToVisitedPlatformViews) { ASSERT_TRUE(stack_75.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(); 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) // translation). ASSERT_EQ(mutator->GetFilterMutation().GetFilterRect(), diff --git a/shell/platform/android/surface_texture_external_texture.cc b/shell/platform/android/surface_texture_external_texture.cc index 31a14d37a716b..383823585ce51 100644 --- a/shell/platform/android/surface_texture_external_texture.cc +++ b/shell/platform/android/surface_texture_external_texture.cc @@ -67,7 +67,7 @@ void SurfaceTextureExternalTexture::DrawFrame( PaintContext& context, const SkRect& bounds, const DlImageSampling sampling) const { - auto transform = GetCurrentUVTransformation().asM33(); + auto transform = ToDlMatrix(GetCurrentUVTransformation()); // 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 @@ -76,19 +76,18 @@ void SurfaceTextureExternalTexture::DrawFrame( // 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. - SkMatrix inverted; - if (!transform.invert(&inverted)) { - FML_LOG(FATAL) - << "Invalid (not invertable) SurfaceTexture transformation matrix"; - } - transform = inverted; - - if (transform.isIdentity()) { + if (transform.IsIdentity()) { context.canvas->DrawImage(dl_image_, SkPoint{0, 0}, sampling, context.paint); return; } + if (!transform.IsInvertible()) { + FML_LOG(FATAL) + << "Invalid (not invertable) SurfaceTexture transformation matrix"; + } + transform = transform.Invert(); + DlAutoCanvasRestore autoRestore(context.canvas, true); // 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->Scale(bounds.width(), -bounds.height()); - DlImageColorSource source(dl_image_, DlTileMode::kClamp, DlTileMode::kClamp, - sampling, &transform); + auto source = DlColorSource::MakeImage( + dl_image_, DlTileMode::kClamp, DlTileMode::kClamp, sampling, &transform); DlPaint paintWithShader; if (context.paint) { paintWithShader = *context.paint; } - paintWithShader.setColorSource(&source); + paintWithShader.setColorSource(source); context.canvas->DrawRect(SkRect::MakeWH(1, 1), paintWithShader); } diff --git a/shell/platform/darwin/ios/framework/Source/platform_views_controller.mm b/shell/platform/darwin/ios/framework/Source/platform_views_controller.mm index b95e8f509037f..819a6b8c12124 100644 --- a/shell/platform/darwin/ios/framework/Source/platform_views_controller.mm +++ b/shell/platform/darwin/ios/framework/Source/platform_views_controller.mm @@ -4,7 +4,7 @@ #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/view_slicer.h" #include "flutter/fml/make_copyable.h" diff --git a/testing/display_list_testing.cc b/testing/display_list_testing.cc index 9bf443192e22f..748437341243a 100644 --- a/testing/display_list_testing.cc +++ b/testing/display_list_testing.cc @@ -8,6 +8,7 @@ #include #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" 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) { return os << "SkRSXform(" << "scos: " << xform.fSCos << ", " diff --git a/third_party/txt/tests/paragraph_unittests.cc b/third_party/txt/tests/paragraph_unittests.cc index 66ce7f298a8ea..7a7385db1eefc 100644 --- a/third_party/txt/tests/paragraph_unittests.cc +++ b/third_party/txt/tests/paragraph_unittests.cc @@ -285,7 +285,7 @@ TEST_F(PainterTest, DrawTextWithGradientImpeller) { std::vector colors = {DlColor::kRed(), DlColor::kCyan()}; std::vector stops = {0.0, 1.0}; 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)); style.foreground = foreground; @@ -306,7 +306,7 @@ TEST_F(PainterTest, DrawEmojiTextWithGradientImpeller) { std::vector colors = {DlColor::kRed(), DlColor::kCyan()}; std::vector stops = {0.0, 1.0}; 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)); style.foreground = foreground;