3
3
// found in the LICENSE file.
4
4
5
5
#include " flutter/flow/layers/backdrop_filter_layer.h"
6
+ #include " flutter/flow/layers/clip_rect_layer.h"
6
7
7
8
#include " flutter/flow/layers/clip_rect_layer.h"
8
9
#include " flutter/flow/layers/transform_layer.h"
@@ -22,8 +23,10 @@ using BackdropFilterLayerTest = LayerTest;
22
23
#ifndef NDEBUG
23
24
TEST_F (BackdropFilterLayerTest, PaintingEmptyLayerDies) {
24
25
auto layer = std::make_shared<BackdropFilterLayer>(sk_sp<SkImageFilter>());
26
+ auto parent = std::make_shared<ClipRectLayer>(kEmptyRect , Clip::hardEdge);
27
+ parent->Add (layer);
25
28
26
- layer ->Preroll (preroll_context (), SkMatrix ());
29
+ parent ->Preroll (preroll_context (), SkMatrix ());
27
30
EXPECT_EQ (layer->paint_bounds (), kEmptyRect );
28
31
EXPECT_FALSE (layer->needs_painting (paint_context ()));
29
32
EXPECT_FALSE (layer->needs_system_composite ());
@@ -53,8 +56,10 @@ TEST_F(BackdropFilterLayerTest, EmptyFilter) {
53
56
auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
54
57
auto layer = std::make_shared<BackdropFilterLayer>(nullptr );
55
58
layer->Add (mock_layer);
59
+ auto parent = std::make_shared<ClipRectLayer>(child_bounds, Clip::hardEdge);
60
+ parent->Add (layer);
56
61
57
- layer ->Preroll (preroll_context (), initial_transform);
62
+ parent ->Preroll (preroll_context (), initial_transform);
58
63
EXPECT_EQ (layer->paint_bounds (), child_bounds);
59
64
EXPECT_TRUE (layer->needs_painting (paint_context ()));
60
65
EXPECT_EQ (mock_layer->parent_matrix (), initial_transform);
@@ -79,8 +84,10 @@ TEST_F(BackdropFilterLayerTest, SimpleFilter) {
79
84
auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
80
85
auto layer = std::make_shared<BackdropFilterLayer>(layer_filter);
81
86
layer->Add (mock_layer);
87
+ auto parent = std::make_shared<ClipRectLayer>(child_bounds, Clip::hardEdge);
88
+ parent->Add (layer);
82
89
83
- layer ->Preroll (preroll_context (), initial_transform);
90
+ parent ->Preroll (preroll_context (), initial_transform);
84
91
EXPECT_EQ (layer->paint_bounds (), child_bounds);
85
92
EXPECT_TRUE (layer->needs_painting (paint_context ()));
86
93
EXPECT_EQ (mock_layer->parent_matrix (), initial_transform);
@@ -104,16 +111,19 @@ TEST_F(BackdropFilterLayerTest, MultipleChildren) {
104
111
SkPath ().addRect (child_bounds.makeOffset (3 .0f , 0 .0f ));
105
112
const SkPaint child_paint1 = SkPaint (SkColors::kYellow );
106
113
const SkPaint child_paint2 = SkPaint (SkColors::kCyan );
114
+ SkRect children_bounds = child_path1.getBounds ();
115
+ children_bounds.join (child_path2.getBounds ());
107
116
auto layer_filter = SkImageFilters::Paint (SkPaint (SkColors::kMagenta ));
108
117
auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1);
109
118
auto mock_layer2 = std::make_shared<MockLayer>(child_path2, child_paint2);
110
119
auto layer = std::make_shared<BackdropFilterLayer>(layer_filter);
111
120
layer->Add (mock_layer1);
112
121
layer->Add (mock_layer2);
122
+ auto parent =
123
+ std::make_shared<ClipRectLayer>(children_bounds, Clip::hardEdge);
124
+ parent->Add (layer);
113
125
114
- SkRect children_bounds = child_path1.getBounds ();
115
- children_bounds.join (child_path2.getBounds ());
116
- layer->Preroll (preroll_context (), initial_transform);
126
+ parent->Preroll (preroll_context (), initial_transform);
117
127
EXPECT_EQ (mock_layer1->paint_bounds (), child_path1.getBounds ());
118
128
EXPECT_EQ (mock_layer2->paint_bounds (), child_path2.getBounds ());
119
129
EXPECT_EQ (layer->paint_bounds (), children_bounds);
@@ -144,6 +154,8 @@ TEST_F(BackdropFilterLayerTest, Nested) {
144
154
SkPath ().addRect (child_bounds.makeOffset (3 .0f , 0 .0f ));
145
155
const SkPaint child_paint1 = SkPaint (SkColors::kYellow );
146
156
const SkPaint child_paint2 = SkPaint (SkColors::kCyan );
157
+ SkRect children_bounds = child_path1.getBounds ();
158
+ children_bounds.join (child_path2.getBounds ());
147
159
auto layer_filter1 = SkImageFilters::Paint (SkPaint (SkColors::kMagenta ));
148
160
auto layer_filter2 = SkImageFilters::Paint (SkPaint (SkColors::kDkGray ));
149
161
auto mock_layer1 = std::make_shared<MockLayer>(child_path1, child_paint1);
@@ -153,14 +165,15 @@ TEST_F(BackdropFilterLayerTest, Nested) {
153
165
layer2->Add (mock_layer2);
154
166
layer1->Add (mock_layer1);
155
167
layer1->Add (layer2);
168
+ auto parent =
169
+ std::make_shared<ClipRectLayer>(children_bounds, Clip::hardEdge);
170
+ parent->Add (layer1);
156
171
157
- SkRect children_bounds = child_path1.getBounds ();
158
- children_bounds.join (child_path2.getBounds ());
159
- layer1->Preroll (preroll_context (), initial_transform);
172
+ parent->Preroll (preroll_context (), initial_transform);
160
173
EXPECT_EQ (mock_layer1->paint_bounds (), child_path1.getBounds ());
161
174
EXPECT_EQ (mock_layer2->paint_bounds (), child_path2.getBounds ());
162
175
EXPECT_EQ (layer1->paint_bounds (), children_bounds);
163
- EXPECT_EQ (layer2->paint_bounds (), mock_layer2-> paint_bounds () );
176
+ EXPECT_EQ (layer2->paint_bounds (), children_bounds );
164
177
EXPECT_TRUE (mock_layer1->needs_painting (paint_context ()));
165
178
EXPECT_TRUE (mock_layer2->needs_painting (paint_context ()));
166
179
EXPECT_TRUE (layer1->needs_painting (paint_context ()));
@@ -169,20 +182,20 @@ TEST_F(BackdropFilterLayerTest, Nested) {
169
182
EXPECT_EQ (mock_layer2->parent_matrix (), initial_transform);
170
183
171
184
layer1->Paint (paint_context ());
172
- EXPECT_EQ (mock_canvas (). draw_calls (),
173
- std::vector (
174
- {MockCanvas::DrawCall{
175
- 0 , MockCanvas::SaveLayerData{children_bounds, SkPaint (),
176
- layer_filter1, 1 }},
177
- MockCanvas::DrawCall{
178
- 1 , MockCanvas::DrawPathData{child_path1, child_paint1}},
179
- MockCanvas::DrawCall{
180
- 1 , MockCanvas::SaveLayerData{child_path2. getBounds (),
181
- SkPaint (), layer_filter2, 2 }},
182
- MockCanvas::DrawCall{
183
- 2 , MockCanvas::DrawPathData{child_path2, child_paint2}},
184
- MockCanvas::DrawCall{2 , MockCanvas::RestoreData{1 }},
185
- MockCanvas::DrawCall{1 , MockCanvas::RestoreData{0 }}}));
185
+ EXPECT_EQ (
186
+ mock_canvas (). draw_calls (),
187
+ std::vector ( {MockCanvas::DrawCall{
188
+ 0 , MockCanvas::SaveLayerData{children_bounds, SkPaint (),
189
+ layer_filter1, 1 }},
190
+ MockCanvas::DrawCall{
191
+ 1 , MockCanvas::DrawPathData{child_path1, child_paint1}},
192
+ MockCanvas::DrawCall{
193
+ 1 , MockCanvas::SaveLayerData{children_bounds, SkPaint (),
194
+ layer_filter2, 2 }},
195
+ MockCanvas::DrawCall{
196
+ 2 , MockCanvas::DrawPathData{child_path2, child_paint2}},
197
+ MockCanvas::DrawCall{2 , MockCanvas::RestoreData{1 }},
198
+ MockCanvas::DrawCall{1 , MockCanvas::RestoreData{0 }}}));
186
199
}
187
200
188
201
TEST_F (BackdropFilterLayerTest, Readback) {
0 commit comments