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

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

View File

@ -42532,33 +42532,50 @@ ORIGIN: ../../../flutter/display_list/dl_storage.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/dl_tile_mode.h + ../../../flutter/LICENSE
ORIGIN: ../../../flutter/display_list/dl_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
@ -45432,33 +45449,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

View File

@ -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",

View File

@ -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));

View File

@ -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"

View File

@ -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;

View File

@ -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()));
@ -106,12 +105,11 @@ TEST(DisplayListPaint, ChainingConstructor) {
.setStrokeJoin(DlStrokeJoin::kBevel) //
.setStrokeWidth(42) //
.setStrokeMiter(1.5) //
.setColorSource(DlColorColorSource(DlColor::kMagenta()).shared()) //
.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));

View File

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

View File

@ -0,0 +1,42 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_
#include "flutter/display_list/effects/dl_color_source.h"
namespace flutter {
class DlColorColorSource final : public DlColorSource {
public:
explicit DlColorColorSource(DlColor color) : color_(color) {}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override {
return std::make_shared<DlColorColorSource>(color_);
}
const DlColorColorSource* asColor() const override { return this; }
DlColorSourceType type() const override { return DlColorSourceType::kColor; }
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return color_.getAlpha() == 255; }
DlColor color() const { return color_; }
protected:
bool equals_(DlColorSource const& other) const override;
private:
DlColor color_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlColorColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_COLOR_COLOR_SOURCE_H_

View File

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

View File

@ -0,0 +1,64 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_CONICAL_GRADIENT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_CONICAL_GRADIENT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h"
namespace flutter {
class DlConicalGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlConicalGradientColorSource* asConicalGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override;
DlColorSourceType type() const override {
return DlColorSourceType::kConicalGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
DlPoint start_center() const { return start_center_; }
DlScalar start_radius() const { return start_radius_; }
DlPoint end_center() const { return end_center_; }
DlScalar end_radius() const { return end_radius_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override;
private:
DlConicalGradientColorSource(DlPoint start_center,
DlScalar start_radius,
DlPoint end_center,
DlScalar end_radius,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
explicit DlConicalGradientColorSource(
const DlConicalGradientColorSource* source);
DlPoint start_center_;
DlScalar start_radius_;
DlPoint end_center_;
DlScalar end_radius_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlConicalGradientColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_CONICAL_GRADIENT_COLOR_SOURCE_H_

View File

@ -0,0 +1,54 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_GRADIENT_COLOR_SOURCE_BASE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_GRADIENT_COLOR_SOURCE_BASE_H_
#include "flutter/display_list/effects/color_sources/dl_matrix_color_source_base.h"
namespace flutter {
// Utility base class common to all gradient DlColorSource implementations
class DlGradientColorSourceBase : public DlMatrixColorSourceBase {
public:
bool is_opaque() const override;
bool isGradient() const override { return true; }
DlTileMode tile_mode() const { return mode_; }
int stop_count() const { return stop_count_; }
const DlColor* colors() const {
return reinterpret_cast<const DlColor*>(pod());
}
const float* stops() const {
return reinterpret_cast<const float*>(colors() + stop_count());
}
protected:
DlGradientColorSourceBase(uint32_t stop_count,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
size_t vector_sizes() const {
return stop_count_ * (sizeof(DlColor) + sizeof(float));
}
virtual const void* pod() const = 0;
bool base_equals_(DlGradientColorSourceBase const* other_base) const;
void store_color_stops(void* pod,
const DlColor* color_data,
const float* stop_data);
private:
DlTileMode mode_;
uint32_t stop_count_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlGradientColorSourceBase);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_GRADIENT_COLOR_SOURCE_BASE_H_

View File

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

View File

@ -0,0 +1,56 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_IMAGE_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_IMAGE_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_matrix_color_source_base.h"
namespace flutter {
class DlImageColorSource final : public DlMatrixColorSourceBase {
public:
DlImageColorSource(sk_sp<const DlImage> image,
DlTileMode horizontal_tile_mode,
DlTileMode vertical_tile_mode,
DlImageSampling sampling = DlImageSampling::kLinear,
const DlMatrix* matrix = nullptr);
bool isUIThreadSafe() const override {
return image_ ? image_->isUIThreadSafe() : true;
}
const DlImageColorSource* asImage() const override { return this; }
std::shared_ptr<DlColorSource> shared() const override {
return WithSampling(sampling_);
}
std::shared_ptr<DlColorSource> WithSampling(DlImageSampling sampling) const;
DlColorSourceType type() const override { return DlColorSourceType::kImage; }
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return image_->isOpaque(); }
sk_sp<const DlImage> image() const { return image_; }
DlTileMode horizontal_tile_mode() const { return horizontal_tile_mode_; }
DlTileMode vertical_tile_mode() const { return vertical_tile_mode_; }
DlImageSampling sampling() const { return sampling_; }
protected:
bool equals_(DlColorSource const& other) const override;
private:
sk_sp<const DlImage> image_;
DlTileMode horizontal_tile_mode_;
DlTileMode vertical_tile_mode_;
DlImageSampling sampling_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlImageColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_IMAGE_COLOR_SOURCE_H_

View File

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

View File

@ -0,0 +1,58 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_LINEAR_GRADIENT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_LINEAR_GRADIENT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h"
namespace flutter {
class DlLinearGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlLinearGradientColorSource* asLinearGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
DlColorSourceType type() const override {
return DlColorSourceType::kLinearGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
std::shared_ptr<DlColorSource> shared() const override;
const DlPoint& start_point() const { return start_point_; }
const DlPoint& end_point() const { return end_point_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override;
private:
DlLinearGradientColorSource(const DlPoint start_point,
const DlPoint end_point,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
explicit DlLinearGradientColorSource(
const DlLinearGradientColorSource* source);
DlPoint start_point_;
DlPoint end_point_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlLinearGradientColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_LINEAR_GRADIENT_COLOR_SOURCE_H_

View File

@ -0,0 +1,31 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_MATRIX_COLOR_SOURCE_BASE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_MATRIX_COLOR_SOURCE_BASE_H_
#include "flutter/display_list/effects/dl_color_source.h"
namespace flutter {
// Utility base class common to all DlColorSource implementations that
// hold an optional DlMatrix
class DlMatrixColorSourceBase : public DlColorSource {
public:
const DlMatrix& matrix() const { return matrix_; }
const DlMatrix* matrix_ptr() const {
return matrix_.IsIdentity() ? nullptr : &matrix_;
}
protected:
explicit DlMatrixColorSourceBase(const DlMatrix* matrix)
: matrix_(matrix ? *matrix : DlMatrix()) {}
private:
const DlMatrix matrix_;
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_MATRIX_COLOR_SOURCE_BASE_H_

View File

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

View File

@ -0,0 +1,58 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RADIAL_GRADIENT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RADIAL_GRADIENT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h"
namespace flutter {
class DlRadialGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlRadialGradientColorSource* asRadialGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override;
DlColorSourceType type() const override {
return DlColorSourceType::kRadialGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
DlPoint center() const { return center_; }
DlScalar radius() const { return radius_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override;
private:
DlRadialGradientColorSource(DlPoint center,
DlScalar radius,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
explicit DlRadialGradientColorSource(
const DlRadialGradientColorSource* source);
DlPoint center_;
DlScalar radius_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlRadialGradientColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RADIAL_GRADIENT_COLOR_SOURCE_H_

View File

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

View File

@ -0,0 +1,57 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RUNTIME_EFFECT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RUNTIME_EFFECT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/dl_color_source.h"
namespace flutter {
class DlRuntimeEffectColorSource final : public DlColorSource {
public:
DlRuntimeEffectColorSource(
sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data);
bool isUIThreadSafe() const override;
const DlRuntimeEffectColorSource* asRuntimeEffect() const override {
return this;
}
std::shared_ptr<DlColorSource> shared() const override;
DlColorSourceType type() const override {
return DlColorSourceType::kRuntimeEffect;
}
size_t size() const override { return sizeof(*this); }
bool is_opaque() const override { return false; }
const sk_sp<DlRuntimeEffect> runtime_effect() const {
return runtime_effect_;
}
const std::vector<std::shared_ptr<DlColorSource>> samplers() const {
return samplers_;
}
const std::shared_ptr<std::vector<uint8_t>> uniform_data() const {
return uniform_data_;
}
protected:
bool equals_(DlColorSource const& other) const override;
private:
sk_sp<DlRuntimeEffect> runtime_effect_;
std::vector<std::shared_ptr<DlColorSource>> samplers_;
std::shared_ptr<std::vector<uint8_t>> uniform_data_;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlRuntimeEffectColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_RUNTIME_EFFECT_COLOR_SOURCE_H_

View File

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

View File

@ -0,0 +1,60 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_SWEEP_GRADIENT_COLOR_SOURCE_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_SWEEP_GRADIENT_COLOR_SOURCE_H_
#include "flutter/display_list/effects/color_sources/dl_gradient_color_source_base.h"
namespace flutter {
class DlSweepGradientColorSource final : public DlGradientColorSourceBase {
public:
const DlSweepGradientColorSource* asSweepGradient() const override {
return this;
}
bool isUIThreadSafe() const override { return true; }
std::shared_ptr<DlColorSource> shared() const override;
DlColorSourceType type() const override {
return DlColorSourceType::kSweepGradient;
}
size_t size() const override { return sizeof(*this) + vector_sizes(); }
DlPoint center() const { return center_; }
DlScalar start() const { return start_; }
DlScalar end() const { return end_; }
protected:
virtual const void* pod() const override { return this + 1; }
bool equals_(DlColorSource const& other) const override;
private:
DlSweepGradientColorSource(DlPoint center,
DlScalar start,
DlScalar end,
uint32_t stop_count,
const DlColor* colors,
const float* stops,
DlTileMode tile_mode,
const DlMatrix* matrix = nullptr);
explicit DlSweepGradientColorSource(const DlSweepGradientColorSource* source);
DlPoint center_;
DlScalar start_;
DlScalar end_;
friend class DlColorSource;
friend class DisplayListBuilder;
FML_DISALLOW_COPY_ASSIGN_AND_MOVE(DlSweepGradientColorSource);
};
} // namespace flutter
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_COLOR_SOURCES_DL_SWEEP_GRADIENT_COLOR_SOURCE_H_

View File

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

View File

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

View File

@ -7,7 +7,7 @@
#include "flutter/display_list/dl_color.h"
#include "flutter/display_list/dl_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<DlImage> kTestImage1 = MakeTestImage(10, 10, SK_ColorGREEN);
static const sk_sp<DlImage> 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,14 +731,11 @@ TEST(DisplayListColorSource, SweepGradientNotEquals) {
}
TEST(DisplayListColorSource, RuntimeEffect) {
std::shared_ptr<DlRuntimeEffectColorSource> source1 =
DlColorSource::MakeRuntimeEffect(
std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRuntimeEffect(
kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>());
std::shared_ptr<DlRuntimeEffectColorSource> source2 =
DlColorSource::MakeRuntimeEffect(
std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRuntimeEffect(
kTestRuntimeEffect2, {}, std::make_shared<std::vector<uint8_t>>());
std::shared_ptr<DlRuntimeEffectColorSource> source3 =
DlColorSource::MakeRuntimeEffect(
std::shared_ptr<DlColorSource> source3 = DlColorSource::MakeRuntimeEffect(
nullptr, {}, std::make_shared<std::vector<uint8_t>>());
ASSERT_EQ(source1->type(), DlColorSourceType::kRuntimeEffect);

View File

@ -0,0 +1,16 @@
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCES_H_
#define FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCES_H_
#include "flutter/display_list/effects/color_sources/dl_color_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_conical_gradient_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_image_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_linear_gradient_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_radial_gradient_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_runtime_effect_color_source.h"
#include "flutter/display_list/effects/color_sources/dl_sweep_gradient_color_source.h"
#endif // FLUTTER_DISPLAY_LIST_EFFECTS_DL_COLOR_SOURCES_H_

View File

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

View File

@ -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,
kColorFilter,
kLocalMatrix,
kRuntimeEffect,
kColorFilter,
kCompose,
kLocalMatrix,
};
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<DlImageFilter, DlImageFilterType> {
public:
@ -46,6 +51,31 @@ class DlImageFilter : public DlAttribute<DlImageFilter, DlImageFilterType> {
kComplex,
};
static std::shared_ptr<DlImageFilter> MakeBlur(DlScalar sigma_x,
DlScalar sigma_y,
DlTileMode tile_mode);
static std::shared_ptr<DlImageFilter> MakeDilate(DlScalar radius_x,
DlScalar radius_y);
static std::shared_ptr<DlImageFilter> MakeErode(DlScalar radius_x,
DlScalar radius_y);
static std::shared_ptr<DlImageFilter> MakeMatrix(const DlMatrix& matrix,
DlImageSampling sampling);
static std::shared_ptr<DlImageFilter> MakeRuntimeEffect(
sk_sp<DlRuntimeEffect> runtime_effect,
std::vector<std::shared_ptr<DlColorSource>> samplers,
std::shared_ptr<std::vector<uint8_t>> uniform_data);
static std::shared_ptr<DlImageFilter> MakeColorFilter(
const std::shared_ptr<const DlColorFilter>& filter);
static std::shared_ptr<DlImageFilter> MakeCompose(
const std::shared_ptr<DlImageFilter>& outer,
const std::shared_ptr<DlImageFilter>& inner);
// Return a DlBlurImageFilter pointer to this object iff it is a Blur
// type of ImageFilter, otherwise return nullptr.
virtual const DlBlurImageFilter* asBlur() const { return nullptr; }

View File

@ -237,18 +237,18 @@ TEST(DisplayListImageFilter, BlurBounds) {
TEST(DisplayListImageFilter, BlurZeroSigma) {
std::shared_ptr<DlImageFilter> 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<std::shared_ptr<DlImageFilter>> 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<DlImageColorSource>(
nullptr, DlTileMode::kClamp, DlTileMode::kDecal);
auto image_b = std::make_shared<DlImageColorSource>(
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<std::vector<uint8_t>>());

View File

@ -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_

View File

@ -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 {

View File

@ -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_

View File

@ -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"

View File

@ -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<DlImageFilter> 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_

View File

@ -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"

View File

@ -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_

View File

@ -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 {

View File

@ -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_

View File

@ -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 {

View File

@ -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 <utility>
@ -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_

View File

@ -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"

View File

@ -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_

View File

@ -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 {

View File

@ -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_

View File

@ -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 {

View File

@ -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_

View File

@ -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"

View File

@ -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<SkShader> ToSk(const DlColorSource* source) {
if (!source) {
return nullptr;
}
SkMatrix scratch;
static auto ToSkColors =
[](const DlGradientColorSourceBase* gradient) -> std::vector<SkColor> {
std::vector<SkColor> sk_colors;
@ -95,51 +97,53 @@ sk_sp<SkShader> 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<SkColor> 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 =

View File

@ -111,6 +111,13 @@ inline sk_sp<SkMaskFilter> 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<SkVertices> ToSk(const std::shared_ptr<DlVertices>& vertices);
} // namespace flutter

View File

@ -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,14 +230,11 @@ TEST(DisplayListColorSource, ConvertRuntimeEffect) {
SkRuntimeEffect::MakeForShader(
SkString("vec4 main(vec2 p) { return vec4(1); }"))
.effect);
std::shared_ptr<DlRuntimeEffectColorSource> source1 =
DlColorSource::MakeRuntimeEffect(
std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRuntimeEffect(
kTestRuntimeEffect1, {}, std::make_shared<std::vector<uint8_t>>());
std::shared_ptr<DlRuntimeEffectColorSource> source2 =
DlColorSource::MakeRuntimeEffect(
std::shared_ptr<DlColorSource> source2 = DlColorSource::MakeRuntimeEffect(
kTestRuntimeEffect2, {}, std::make_shared<std::vector<uint8_t>>());
std::shared_ptr<DlRuntimeEffectColorSource> source3 =
DlColorSource::MakeRuntimeEffect(
std::shared_ptr<DlColorSource> source3 = DlColorSource::MakeRuntimeEffect(
nullptr, {}, std::make_shared<std::vector<uint8_t>>());
ASSERT_NE(ToSk(source1), nullptr);
@ -251,10 +247,8 @@ TEST(DisplayListColorSource, ConvertRuntimeEffectWithNullSampler) {
SkRuntimeEffect::MakeForShader(
SkString("vec4 main(vec2 p) { return vec4(0); }"))
.effect);
std::shared_ptr<DlRuntimeEffectColorSource> source1 =
DlColorSource::MakeRuntimeEffect(
kTestRuntimeEffect1, {nullptr},
std::make_shared<std::vector<uint8_t>>());
std::shared_ptr<DlColorSource> source1 = DlColorSource::MakeRuntimeEffect(
kTestRuntimeEffect1, {nullptr}, std::make_shared<std::vector<uint8_t>>());
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);

View File

@ -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"

View File

@ -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());

View File

@ -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<std::shared_ptr<DlImageFilter>> 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) {

View File

@ -136,14 +136,15 @@ std::vector<DisplayListInvocationGroup> 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

View File

@ -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<DisplayList> GetSampleNestedDisplayList();
typedef const std::function<void(DlOpReceiver&)> DlInvoker;
constexpr SkPoint kEndPoints[] = {
constexpr DlPoint kEndPoints[] = {
{0, 0},
{100, 100},
};
@ -89,7 +90,8 @@ 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,
static const std::shared_ptr<DlColorSource> kTestSource1 =
DlColorSource::MakeImage(TestImage1,
DlTileMode::kClamp,
DlTileMode::kMirror,
kLinearSampling);

View File

@ -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<BackdropFilterLayer>(filter.shared(),
DlBlendMode::kSrcOver);
auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto layer =
std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver);
auto parent = std::make_shared<ClipRectLayer>(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<MockLayer>(child_path);
auto filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp);
auto layer = std::make_shared<BackdropFilterLayer>(filter.shared(),
DlBlendMode::kSrcOver);
auto filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto layer =
std::make_shared<BackdropFilterLayer>(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<MockLayer>(child_path, child_paint);
auto layer = std::make_shared<BackdropFilterLayer>(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<MockLayer>(child_path, child_paint);
auto layer =
std::make_shared<BackdropFilterLayer>(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<MockLayer>(child_path1, child_paint1);
auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
auto layer = std::make_shared<BackdropFilterLayer>(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<MockLayer>(child_path1, child_paint1);
auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
auto layer1 = std::make_shared<BackdropFilterLayer>(layer_filter1,
@ -339,11 +338,11 @@ TEST_F(BackdropFilterLayerTest, Nested) {
TEST_F(BackdropFilterLayerTest, Readback) {
std::shared_ptr<DlImageFilter> no_filter;
auto layer_filter = DlBlurImageFilter(5, 5, DlTileMode::kClamp);
auto layer_filter = DlImageFilter::MakeBlur(5, 5, DlTileMode::kClamp);
auto initial_transform = SkMatrix();
// BDF with filter always reads from surface
auto layer1 = std::make_shared<BackdropFilterLayer>(layer_filter.shared(),
auto layer1 = std::make_shared<BackdropFilterLayer>(layer_filter,
DlBlendMode::kSrcOver);
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<ClipRectLayer>(clip_rect, Clip::kHardEdge);
auto parent = std::make_shared<OpacityLayer>(128, SkPoint::Make(0, 0));
auto layer = std::make_shared<BackdropFilterLayer>(backdrop_filter.shared(),
auto layer = std::make_shared<BackdropFilterLayer>(backdrop_filter,
DlBlendMode::kSrcOver);
auto child = std::make_shared<MockLayer>(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),
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<BackdropFilterLayer>(filter.shared(),
DlBlendMode::kSrcOver));
l1.root()->Add(
std::make_shared<BackdropFilterLayer>(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<ClipRectLayer>(SkRect::MakeLTRB(20, 20, 60, 60),
Clip::kHardEdge);
clip->Add(std::make_shared<BackdropFilterLayer>(filter.shared(),
DlBlendMode::kSrcOver));
clip->Add(
std::make_shared<BackdropFilterLayer>(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}),
auto filter = DlImageFilter::MakeMatrix(DlMatrix::MakeTranslation({50, 50}),
DlImageSampling::kLinear);
MockLayerTree l1(SkISize::Make(100, 100));
auto clip = std::make_shared<ClipRectLayer>(SkRect::MakeLTRB(60, 60, 80, 80),
Clip::kHardEdge);
clip->Add(std::make_shared<BackdropFilterLayer>(filter.shared(),
DlBlendMode::kSrcOver));
clip->Add(
std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver));
l1.root()->Add(clip);
auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100)));
@ -503,12 +503,12 @@ 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),
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<TransformLayer>(transform);
l1.root()->Add(transform_layer);
transform_layer->Add(std::make_shared<BackdropFilterLayer>(
filter.shared(), DlBlendMode::kSrcOver));
transform_layer->Add(
std::make_shared<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver));
auto damage = DiffLayerTree(l1, MockLayerTree(SkISize::Make(100, 100)));
EXPECT_EQ(damage.frame_damage, SkIRect::MakeWH(100, 100));

View File

@ -5,8 +5,7 @@
#include "flutter/flow/layers/image_filter_layer.h"
#include "flutter/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<MockLayer>(child_path, child_paint);
auto layer = std::make_shared<ImageFilterLayer>(dl_image_filter);
@ -125,7 +124,7 @@ TEST_F(ImageFilterLayerTest, SimpleFilterWithOffset) {
const SkPath child_path = SkPath().addRect(child_bounds);
const 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<MockLayer>(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<MockLayer>(child_path, child_paint);
auto layer = std::make_shared<ImageFilterLayer>(dl_image_filter);
@ -218,7 +217,7 @@ TEST_F(ImageFilterLayerTest, MultipleChildren) {
SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f));
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<MockLayer>(child_path1, child_paint1);
auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
@ -272,9 +271,9 @@ TEST_F(ImageFilterLayerTest, Nested) {
SkPath().addRect(child_bounds.makeOffset(3.0f, 0.0f));
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<MockLayer>(child_path1, child_paint1);
auto mock_layer2 = std::make_shared<MockLayer>(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

View File

@ -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<DlImageFilter> outer_filter =
DlBlurImageFilter::Make(2.0f, 2.0f, DlTileMode::kClamp);
DlImageFilter::MakeBlur(2.0f, 2.0f, DlTileMode::kClamp);
std::shared_ptr<DlImageFilter> inner_filter =
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<DlImageFilter> 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<DlBlendColorFilter>(DlColor::kYellow(),
DlBlendMode::kColorBurn);
std::shared_ptr<DlImageFilter> image_filter =
DlBlurImageFilter::Make(2.0f, 2.0f, DlTileMode::kClamp);
DlImageFilter::MakeBlur(2.0f, 2.0f, DlTileMode::kClamp);
DisplayListBuilder builder;
LayerStateStack state_stack;

View File

@ -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<OpacityLayer>(128, SkPoint::Make(20, 20));
auto filter_layer = std::make_shared<ImageFilterLayer>(
DlBlurImageFilter::Make(5.0, 5.0, DlTileMode::kClamp));
DlImageFilter::MakeBlur(5.0, 5.0, DlTileMode::kClamp));
auto mock_layer = MockLayer::MakeOpacityCompatible(SkPath());
filter_layer->Add(mock_layer);
opacity_layer->Add(filter_layer);

View File

@ -30,8 +30,8 @@ static std::shared_ptr<DlColorSource> 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

View File

@ -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);

View File

@ -22,8 +22,8 @@ std::shared_ptr<DlColorSource> 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<DlImageColorSource>(
image, DlTileMode::kRepeat, DlTileMode::kRepeat,
return DlColorSource::MakeImage(image, DlTileMode::kRepeat,
DlTileMode::kRepeat,
DlImageSampling::kNearestNeighbor);
}

View File

@ -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<DlImageColorSource>(
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, //
Matrix 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<DlImageColorSource>(
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<DlImageColorSource>(
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<DlImageColorSource>(
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<DlImageColorSource>(
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;

View File

@ -154,7 +154,7 @@ TEST_P(AiksTest, DrawAdvancedBlendPartlyOffscreen) {
std::vector<Scalar> 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}, //

View File

@ -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<std::string, MaskBlurTestConfig> 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<std::string, MaskBlurTestConfig> 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<std::string, MaskBlurTestConfig> 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<DlImageColorSource>(
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<DlImageColorSource>(
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();

View File

@ -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<Scalar> stops = {0.0, 1.f / 3.f, 2.f / 3.f, 1.0};
std::array<std::tuple<SkPoint, float, SkPoint, float>, 8> array{
std::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<std::tuple<DlPoint, float, DlPoint, float>, 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();

View File

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

View File

@ -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<DlRuntimeEffectColorSource> MakeRuntimeEffect(
std::shared_ptr<DlColorSource> MakeRuntimeEffect(
AiksTest* test,
std::string_view name,
const std::shared_ptr<std::vector<uint8_t>>& uniform_data = {},
@ -34,8 +33,8 @@ std::shared_ptr<DlRuntimeEffectColorSource> MakeRuntimeEffect(
auto dl_runtime_effect = DlRuntimeEffect::MakeImpeller(runtime_stage);
return std::make_shared<DlRuntimeEffectColorSource>(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));

View File

@ -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(), //

View File

@ -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<DlImageColorSource>(
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<DlImageColorSource>(
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<DlMatrixColorFilter>(m));
DlImageFilter::MakeColorFilter(std::make_shared<DlMatrixColorFilter>(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());
}
}

View File

@ -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<DlImageColorSource>(
image, DlTileMode::kClamp, DlTileMode::kClamp));
paint.setColorSource(
DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp));
std::vector<SkPoint> 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<DlImageColorSource>(
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<SkPoint> 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<DlImageColorSource>(
image, DlTileMode::kClamp, DlTileMode::kClamp));
paint.setColorSource(
DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp));
std::vector<SkPoint> 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<DlImageColorSource>(
image, DlTileMode::kClamp, DlTileMode::kClamp));
paint.setColorSource(
DlColorSource::MakeImage(image, DlTileMode::kClamp, DlTileMode::kClamp));
std::vector<SkPoint> 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()));

View File

@ -777,8 +777,7 @@ void Canvas::DrawVertices(const std::shared_ptr<VerticesGeometry>& vertices,
static_cast<Entity::TileMode>(image_color_source->vertical_tile_mode());
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<VerticesSimpleBlendContents>();
contents->SetBlendMode(blend_mode);

View File

@ -5,7 +5,7 @@
#include <unordered_map>
#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),

View File

@ -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();
};

View File

@ -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, //
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);
canvas->SaveLayer(&save_layer_bounds, /*paint=*/nullptr, backdrop.get());
{
canvas->Translate(201.25, 10);
auto paint = DlPaint()

View File

@ -1163,8 +1163,8 @@ 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<flutter::DlImageColorSource>(
DlImageImpeller::Make(texture), flutter::DlTileMode::kRepeat,
auto image = flutter::DlColorSource::MakeImage(DlImageImpeller::Make(texture),
flutter::DlTileMode::kRepeat,
flutter::DlTileMode::kRepeat);
paint.setColorSource(image);
builder.DrawPaint(paint);
@ -1263,9 +1263,9 @@ TEST_P(DisplayListTest, MaskBlursApplyCorrectlyToColorSources) {
flutter::DlColor::kGreen()};
std::array<float, 2> stops = {0, 1};
std::array<std::shared_ptr<flutter::DlColorSource>, 2> color_sources = {
std::make_shared<flutter::DlColorColorSource>(flutter::DlColor::kWhite()),
flutter::DlColorSource::MakeColor(flutter::DlColor::kWhite()),
flutter::DlColorSource::MakeLinear(
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;

View File

@ -6,9 +6,9 @@
#include <memory>
#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<ColorSourceContents> 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<Color> colors;
std::vector<float> stops;
skia_conversions::ConvertStops(linear, colors, stops);
auto tile_mode = static_cast<Entity::TileMode>(linear->tile_mode());
auto effect_transform = skia_conversions::ToMatrix(linear->matrix());
auto effect_transform = linear->matrix();
auto contents = std::make_shared<LinearGradientContents>();
contents->SetOpacityFactor(color.alpha);
@ -74,7 +74,7 @@ std::shared_ptr<ColorSourceContents> 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<Color> colors;
std::vector<float> stops;
@ -82,8 +82,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
auto tile_mode =
static_cast<Entity::TileMode>(radialGradient->tile_mode());
auto effect_transform =
skia_conversions::ToMatrix(radialGradient->matrix());
auto effect_transform = radialGradient->matrix();
auto contents = std::make_shared<RadialGradientContents>();
contents->SetOpacityFactor(color.alpha);
@ -105,10 +104,9 @@ std::shared_ptr<ColorSourceContents> 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<Color> colors;
std::vector<float> stops;
@ -116,8 +114,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
auto tile_mode =
static_cast<Entity::TileMode>(conical_gradient->tile_mode());
auto effect_transform =
skia_conversions::ToMatrix(conical_gradient->matrix());
auto effect_transform = conical_gradient->matrix();
std::shared_ptr<ConicalGradientContents> contents =
std::make_shared<ConicalGradientContents>();
@ -142,7 +139,7 @@ std::shared_ptr<ColorSourceContents> 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<Color> colors;
@ -151,8 +148,7 @@ std::shared_ptr<ColorSourceContents> Paint::CreateContents() const {
auto tile_mode =
static_cast<Entity::TileMode>(sweepGradient->tile_mode());
auto effect_transform =
skia_conversions::ToMatrix(sweepGradient->matrix());
auto effect_transform = sweepGradient->matrix();
auto contents = std::make_shared<SweepGradientContents>();
contents->SetOpacityFactor(color.alpha);
@ -176,8 +172,7 @@ std::shared_ptr<ColorSourceContents> 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<TiledTextureContents>();
contents->SetOpacityFactor(color.alpha);

View File

@ -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 {

View File

@ -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"

View File

@ -134,8 +134,8 @@ TEST(SkiaConversionsTest, GradientStopConversion) {
flutter::DlColor::kGreen()};
std::vector<float> 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<Color> converted_colors;
std::vector<Scalar> 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<float> 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<Color> converted_colors;
std::vector<Scalar> 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<float> 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<Color> converted_colors;
std::vector<Scalar> 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<float> 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<Color> converted_colors;
std::vector<Scalar> 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<float> 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<Color> converted_colors;
std::vector<Scalar> converted_stops;
skia_conversions::ConvertStops(gradient.get(), converted_colors,
skia_conversions::ConvertStops(gradient->asLinearGradient(), converted_colors,
converted_stops);
// Value is clamped to 0.5

View File

@ -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, //

View File

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

View File

@ -6,7 +6,6 @@
#include <sstream>
#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<DlColorSource> FragmentProgram::MakeDlColorSource(
std::shared_ptr<DlImageFilter> FragmentProgram::MakeDlImageFilter(
std::shared_ptr<std::vector<uint8_t>> float_uniforms,
const std::vector<std::shared_ptr<DlColorSource>>& children) {
return DlRuntimeEffectImageFilter::Make(runtime_effect_, children,
return DlImageFilter::MakeRuntimeEffect(runtime_effect_, children,
std::move(float_uniforms));
}

View File

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

View File

@ -33,19 +33,17 @@ void CanvasGradient::initLinear(const tonic::Float32List& end_points,
color_stops.data() == nullptr);
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<DlColor> 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<DlColor> 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<DlColor> 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<float>(M_PI),
SafeNarrow(end_angle) * 180.0f / static_cast<float>(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<DlColor> 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());
}

View File

@ -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<DlImageColorSource>(
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<DlColorSource> ImageShader::shader(DlImageSampling sampling) {
if (sampling_is_locked_ || sampling == cached_shader_->sampling()) {
const DlImageColorSource* image_shader = cached_shader_->asImage();
FML_DCHECK(image_shader);
if (sampling_is_locked_ || sampling == image_shader->sampling()) {
return cached_shader_;
}
return cached_shader_->with_sampling(sampling);
return image_shader->WithSampling(sampling);
}
int ImageShader::width() {

View File

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

View File

@ -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() {

View File

@ -19,7 +19,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"
@ -989,7 +989,7 @@ TEST_F(ShellTest, PushBackdropFilterToVisitedPlatformViews) {
auto clip_rect_layer = std::make_shared<ClipRectLayer>(
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<BackdropFilterLayer>(filter, DlBlendMode::kSrcOver);
clip_rect_layer->Add(backdrop_filter_layer);
@ -1004,10 +1004,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(),

View File

@ -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);
}

View File

@ -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"

View File

@ -8,6 +8,7 @@
#include <iomanip>
#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 << ", "

View File

@ -285,7 +285,7 @@ TEST_F(PainterTest, DrawTextWithGradientImpeller) {
std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kCyan()};
std::vector<float> 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<DlColor> colors = {DlColor::kRed(), DlColor::kCyan()};
std::vector<float> 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;