@@ -83,8 +83,11 @@ TEST_F(ImageFilterLayerTest, SimpleFilter) {
83
83
auto layer = std::make_shared<ImageFilterLayer>(layer_filter);
84
84
layer->Add (mock_layer);
85
85
86
+ const SkRect child_rounded_bounds =
87
+ SkRect::MakeLTRB (5 .0f , 6 .0f , 21 .0f , 22 .0f );
88
+
86
89
layer->Preroll (preroll_context (), initial_transform);
87
- EXPECT_EQ (layer->paint_bounds (), child_bounds );
90
+ EXPECT_EQ (layer->paint_bounds (), child_rounded_bounds );
88
91
EXPECT_TRUE (layer->needs_painting ());
89
92
EXPECT_EQ (mock_layer->parent_matrix (), initial_transform);
90
93
@@ -96,15 +99,35 @@ TEST_F(ImageFilterLayerTest, SimpleFilter) {
96
99
MockCanvas::DrawCall{0 , MockCanvas::SaveData{1 }},
97
100
MockCanvas::DrawCall{1 , MockCanvas::SetMatrixData{SkMatrix ()}},
98
101
MockCanvas::DrawCall{
99
- 1 , MockCanvas::SaveLayerData{child_bounds, filter_paint ,
100
- nullptr , 2 }},
102
+ 1 , MockCanvas::SaveLayerData{child_rounded_bounds ,
103
+ filter_paint, nullptr , 2 }},
101
104
MockCanvas::DrawCall{
102
105
2 , MockCanvas::DrawPathData{child_path, child_paint}},
103
106
MockCanvas::DrawCall{2 , MockCanvas::RestoreData{1 }},
104
107
MockCanvas::DrawCall{1 , MockCanvas::RestoreData{0 }},
105
108
}));
106
109
}
107
110
111
+ TEST_F (ImageFilterLayerTest, SimpleFilterBounds) {
112
+ const SkMatrix initial_transform = SkMatrix::MakeTrans (0 .5f , 1 .0f );
113
+ const SkRect child_bounds = SkRect::MakeLTRB (5 .0f , 6 .0f , 20 .5f , 21 .5f );
114
+ const SkPath child_path = SkPath ().addRect (child_bounds);
115
+ const SkPaint child_paint = SkPaint (SkColors::kYellow );
116
+ const SkMatrix filter_transform = SkMatrix::MakeScale (2.0 , 2.0 );
117
+ auto layer_filter = SkImageFilter::MakeMatrixFilter (
118
+ filter_transform, SkFilterQuality::kMedium_SkFilterQuality , nullptr );
119
+ auto mock_layer = std::make_shared<MockLayer>(child_path, child_paint);
120
+ auto layer = std::make_shared<ImageFilterLayer>(layer_filter);
121
+ layer->Add (mock_layer);
122
+
123
+ const SkRect filter_bounds = SkRect::MakeLTRB (10 .0f , 12 .0f , 42 .0f , 44 .0f );
124
+
125
+ layer->Preroll (preroll_context (), initial_transform);
126
+ EXPECT_EQ (layer->paint_bounds (), filter_bounds);
127
+ EXPECT_TRUE (layer->needs_painting ());
128
+ EXPECT_EQ (mock_layer->parent_matrix (), initial_transform);
129
+ }
130
+
108
131
TEST_F (ImageFilterLayerTest, MultipleChildren) {
109
132
const SkMatrix initial_transform = SkMatrix::MakeTrans (0 .5f , 1 .0f );
110
133
const SkRect child_bounds = SkRect::MakeLTRB (5 .0f , 6 .0f , 2 .5f , 3 .5f );
@@ -123,10 +146,12 @@ TEST_F(ImageFilterLayerTest, MultipleChildren) {
123
146
124
147
SkRect children_bounds = child_path1.getBounds ();
125
148
children_bounds.join (child_path2.getBounds ());
149
+ SkRect children_rounded_bounds = SkRect::Make (children_bounds.roundOut ());
150
+
126
151
layer->Preroll (preroll_context (), initial_transform);
127
152
EXPECT_EQ (mock_layer1->paint_bounds (), child_path1.getBounds ());
128
153
EXPECT_EQ (mock_layer2->paint_bounds (), child_path2.getBounds ());
129
- EXPECT_EQ (layer->paint_bounds (), children_bounds );
154
+ EXPECT_EQ (layer->paint_bounds (), children_rounded_bounds );
130
155
EXPECT_TRUE (mock_layer1->needs_painting ());
131
156
EXPECT_TRUE (mock_layer2->needs_painting ());
132
157
EXPECT_TRUE (layer->needs_painting ());
@@ -141,8 +166,8 @@ TEST_F(ImageFilterLayerTest, MultipleChildren) {
141
166
{MockCanvas::DrawCall{0 , MockCanvas::SaveData{1 }},
142
167
MockCanvas::DrawCall{1 , MockCanvas::SetMatrixData{SkMatrix ()}},
143
168
MockCanvas::DrawCall{
144
- 1 , MockCanvas::SaveLayerData{children_bounds, filter_paint ,
145
- nullptr , 2 }},
169
+ 1 , MockCanvas::SaveLayerData{children_rounded_bounds ,
170
+ filter_paint, nullptr , 2 }},
146
171
MockCanvas::DrawCall{
147
172
2 , MockCanvas::DrawPathData{child_path1, child_paint1}},
148
173
MockCanvas::DrawCall{
@@ -173,11 +198,16 @@ TEST_F(ImageFilterLayerTest, Nested) {
173
198
174
199
SkRect children_bounds = child_path1.getBounds ();
175
200
children_bounds.join (child_path2.getBounds ());
201
+ const SkRect children_rounded_bounds =
202
+ SkRect::Make (children_bounds.roundOut ());
203
+ const SkRect mock_layer2_rounded_bounds =
204
+ SkRect::Make (child_path2.getBounds ().roundOut ());
205
+
176
206
layer1->Preroll (preroll_context (), initial_transform);
177
207
EXPECT_EQ (mock_layer1->paint_bounds (), child_path1.getBounds ());
178
208
EXPECT_EQ (mock_layer2->paint_bounds (), child_path2.getBounds ());
179
- EXPECT_EQ (layer1->paint_bounds (), children_bounds );
180
- EXPECT_EQ (layer2->paint_bounds (), mock_layer2-> paint_bounds () );
209
+ EXPECT_EQ (layer1->paint_bounds (), children_rounded_bounds );
210
+ EXPECT_EQ (layer2->paint_bounds (), mock_layer2_rounded_bounds );
181
211
EXPECT_TRUE (mock_layer1->needs_painting ());
182
212
EXPECT_TRUE (mock_layer2->needs_painting ());
183
213
EXPECT_TRUE (layer1->needs_painting ());
@@ -194,14 +224,14 @@ TEST_F(ImageFilterLayerTest, Nested) {
194
224
MockCanvas::DrawCall{0 , MockCanvas::SaveData{1 }},
195
225
MockCanvas::DrawCall{1 , MockCanvas::SetMatrixData{SkMatrix ()}},
196
226
MockCanvas::DrawCall{
197
- 1 , MockCanvas::SaveLayerData{children_bounds, filter_paint1 ,
198
- nullptr , 2 }},
227
+ 1 , MockCanvas::SaveLayerData{children_rounded_bounds ,
228
+ filter_paint1, nullptr , 2 }},
199
229
MockCanvas::DrawCall{
200
230
2 , MockCanvas::DrawPathData{child_path1, child_paint1}},
201
231
MockCanvas::DrawCall{2 , MockCanvas::SaveData{3 }},
202
232
MockCanvas::DrawCall{3 , MockCanvas::SetMatrixData{SkMatrix ()}},
203
233
MockCanvas::DrawCall{
204
- 3 , MockCanvas::SaveLayerData{child_path2. getBounds () ,
234
+ 3 , MockCanvas::SaveLayerData{mock_layer2_rounded_bounds ,
205
235
filter_paint2, nullptr , 4 }},
206
236
MockCanvas::DrawCall{
207
237
4 , MockCanvas::DrawPathData{child_path2, child_paint2}},
0 commit comments