7 #include "flutter/display_list/dl_builder.h"
8 #include "flutter/display_list/effects/dl_mask_filter.h"
9 #include "flutter/impeller/display_list/testing/render_text_in_canvas.h"
10 #include "flutter/impeller/display_list/testing/rmse.h"
13 #include "flutter/testing/testing.h"
14 #include "gtest/gtest.h"
23 auto draw = [&](DlCanvas* canvas,
24 const std::vector<std::unique_ptr<DlImage>>& images) {
25 canvas->DrawColor(DlColor(0xff111111));
26 canvas->Scale(content_scale.
x, content_scale.
y);
28 TextRenderOptions options;
30 DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 10,
35 options.mask_filter =
nullptr;
36 options.color = DlColor::kRed();
42 DisplayListBuilder builder;
45 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
50 auto draw = [&](DlCanvas* canvas,
51 const std::vector<std::unique_ptr<DlImage>>& images) {
52 canvas->DrawColor(DlColor(0xff111111));
53 canvas->Scale(content_scale.
x, content_scale.
y);
55 TextRenderOptions options;
57 DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 10,
62 options.mask_filter =
nullptr;
63 options.color = DlColor::kRed();
69 DisplayListBuilder builder;
72 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
83 auto draw = [&](DlCanvas* canvas,
const std::vector<sk_sp<DlImage>>& images,
85 canvas->DrawColor(DlColor(0xff111111));
86 canvas->Scale(content_scale.
x, content_scale.
y);
89 canvas->DrawImage(images[0],
DlPoint(10.135, 10.36334),
90 DlImageSampling::kLinear, &paint);
92 DlRect save_layer_bounds = DlRect::MakeLTRB(0, 0, 1024, 768);
93 auto blur = DlImageFilter::MakeBlur(sigma, sigma, DlTileMode::kDecal);
94 canvas->ClipRect(DlRect::MakeLTRB(11.125, 10.3737, 911.25, 755.3333));
95 canvas->SaveLayer(save_layer_bounds,
nullptr, blur.get());
99 std::vector<sk_sp<DlImage>> images;
100 images.emplace_back(CreateDlImageForFixture(
"boston.jpg"));
102 auto make_screenshot = [&](
float sigma) {
103 DisplayListBuilder builder;
104 draw(&builder, images, sigma);
106 std::unique_ptr<impeller::testing::Screenshot> screenshot =
107 MakeScreenshot(builder.Build());
111 float start_sigma = 10.0f;
112 std::unique_ptr<impeller::testing::Screenshot> left =
113 make_screenshot(start_sigma);
115 GTEST_SKIP() <<
"making screenshots not supported.";
118 double average_rmse = 0.0;
119 const int32_t sample_count = 200;
120 for (
int i = 1; i <= sample_count; ++i) {
121 float sigma = start_sigma + (i / 2.f);
122 std::unique_ptr<impeller::testing::Screenshot> right =
123 make_screenshot(sigma);
124 double rmse = RMSE(left.get(), right.get());
125 average_rmse += rmse;
140 left = std::move(right);
143 average_rmse = average_rmse / sample_count;
150 EXPECT_TRUE(average_rmse < 1.0) <<
"average_rmse: " << average_rmse;
152 EXPECT_TRUE(average_rmse >= 0.0) <<
"average_rmse: " << average_rmse;
157 DlRect rect = DlRect::MakeXYWH(50, 50, 100, 100);
158 DlRoundRect rrect = DlRoundRect::MakeRectRadius(rect, 10.0f);
159 DlPaint fill = DlPaint().setColor(DlColor::kBlue());
161 DlPaint(fill).setDrawStyle(DlDrawStyle::kStroke).setStrokeWidth(10.0f);
162 DlPaint blur = DlPaint(fill).setMaskFilter(
163 DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 5.0,
true));
164 DlPaint blur_stroke =
165 DlPaint(blur).setDrawStyle(DlDrawStyle::kStroke).setStrokeWidth(10.0f);
167 DisplayListBuilder builder;
168 builder.DrawColor(DlColor(0xff111111), DlBlendMode::kSrc);
169 builder.Scale(content_scale.
x, content_scale.
y);
170 builder.DrawRoundRect(rrect, fill);
171 builder.DrawRoundRect(rrect.Shift(150, 0), stroke);
172 builder.DrawRoundRect(rrect.Shift(0, 150), blur);
173 builder.DrawRoundRect(rrect.Shift(150, 150), blur_stroke);
175 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
183 auto draw = [&](DlCanvas* canvas,
const std::vector<sk_sp<DlImage>>& images) {
184 canvas->Scale(content_scale.
x, content_scale.
y);
185 canvas->DrawColor(DlColor(0xff111111));
188 canvas->Scale(0.25, 0.25);
190 paint.setColor(DlColor::kYellow());
192 DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 1000));
193 canvas->DrawCircle(
DlPoint(0, 0), 1200, paint);
198 paint.setColor(DlColor::kYellow());
200 DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 250));
201 canvas->DrawCircle(
DlPoint(1024, 768), 300, paint);
204 DisplayListBuilder builder;
207 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
Describes a typeface along with any modifications to its intrinsic properties.
TEST_P(DlGoldenTest, TextBlurMaskFilterRespectCTM)
bool RenderTextInCanvasSkia(const std::shared_ptr< Context > &context, DisplayListBuilder &canvas, const std::string &text, const std::string_view &font_fixture, const TextRenderOptions &options={}, const std::optional< SkFont > &font=std::nullopt)
flutter::DlRoundRect DlRoundRect