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,
33 "Roboto-Regular.ttf",
DlPoint(101, 101),
35 options.mask_filter =
nullptr;
36 options.color = DlColor::kRed();
38 "Roboto-Regular.ttf",
DlPoint(100, 100),
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,
60 "Roboto-Regular.ttf",
DlPoint(101, 101),
62 options.mask_filter =
nullptr;
63 options.color = DlColor::kRed();
65 "Roboto-Regular.ttf",
DlPoint(100, 100),
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], SkPoint::Make(10.135, 10.36334),
90 DlImageSampling::kLinear, &paint);
92 SkRect save_layer_bounds = SkRect::MakeLTRB(0, 0, 1024, 768);
93 auto blur = DlImageFilter::MakeBlur(sigma, sigma, DlTileMode::kDecal);
94 canvas->ClipRect(SkRect::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;
158 DlRect rect = DlRect::MakeXYWH(50, 50, 100, 100);
159 DlRoundRect rrect = DlRoundRect::MakeRectRadius(rect, 10.0f);
160 DlPaint fill = DlPaint().setColor(DlColor::kBlue());
162 DlPaint(fill).setDrawStyle(DlDrawStyle::kStroke).setStrokeWidth(10.0f);
163 DlPaint blur = DlPaint(fill).setMaskFilter(
164 DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 5.0,
true));
165 DlPaint blur_stroke =
166 DlPaint(blur).setDrawStyle(DlDrawStyle::kStroke).setStrokeWidth(10.0f);
168 DisplayListBuilder builder;
169 builder.DrawColor(DlColor(0xff111111), DlBlendMode::kSrc);
170 builder.Scale(content_scale.
x, content_scale.
y);
171 builder.DrawRoundRect(rrect, fill);
172 builder.DrawRoundRect(rrect.Shift(150, 0), stroke);
173 builder.DrawRoundRect(rrect.Shift(0, 150), blur);
174 builder.DrawRoundRect(rrect.Shift(150, 150), blur_stroke);
176 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={})
flutter::DlRoundRect DlRoundRect