5 #include "flutter/display_list/display_list.h"
6 #include "flutter/display_list/dl_blend_mode.h"
7 #include "flutter/display_list/dl_builder.h"
8 #include "flutter/display_list/dl_color.h"
9 #include "flutter/display_list/dl_paint.h"
10 #include "flutter/display_list/dl_tile_mode.h"
11 #include "flutter/display_list/effects/dl_color_source.h"
12 #include "flutter/display_list/effects/dl_mask_filter.h"
13 #include "flutter/display_list/geometry/dl_path_builder.h"
14 #include "flutter/display_list/testing/dl_test_snippets.h"
15 #include "flutter/fml/build_config.h"
17 #include "flutter/testing/testing.h"
28 #include "txt/platform.h"
40 DlColor color = DlColor::kYellow();
42 std::shared_ptr<DlMaskFilter>
filter;
47 DisplayListBuilder& canvas,
48 const std::string& text,
49 const std::string_view& font_fixture,
51 const std::optional<SkFont>& font = std::nullopt) {
54 paint.setColor(DlColor::kAqua().withAlpha(255 * 0.25));
56 DlRect::MakeXYWH(options.position.x - 50, options.position.y, 900, 10),
60 paint.setColor(DlColor::kRed().withAlpha(255 * 0.25));
61 canvas.DrawCircle(options.position, 5.0, paint);
65 if (!font.has_value()) {
66 auto c_font_fixture = std::string(font_fixture);
68 flutter::testing::OpenFixtureAsSkData(c_font_fixture.c_str());
72 sk_sp<SkFontMgr> font_mgr = txt::GetDefaultFontManager();
73 selected_font = SkFont(font_mgr->makeFromData(mapping), options.font_size);
74 if (options.is_subpixel) {
75 selected_font.setSubpixel(
true);
78 selected_font = font.value();
80 auto blob = SkTextBlob::MakeFromString(text.c_str(), selected_font);
89 text_paint.setColor(options.color);
90 text_paint.setMaskFilter(options.filter);
91 text_paint.setStrokeWidth(options.stroke_width);
92 text_paint.setDrawStyle(options.stroke ? DlDrawStyle::kStroke
93 : DlDrawStyle::kFill);
95 options.position.y, text_paint);
100 DisplayListBuilder builder;
103 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
104 builder.DrawPaint(paint);
106 GetContext(), builder,
"the quick brown fox jumped over the lazy dog!.?",
107 "Roboto-Regular.ttf"));
109 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
113 DisplayListBuilder builder;
116 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
117 builder.DrawPaint(paint);
118 builder.Translate(1000, 0);
119 builder.Scale(-1, 1);
122 GetContext(), builder,
"the quick brown fox jumped over the lazy dog!.?",
123 "Roboto-Regular.ttf"));
125 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
129 DisplayListBuilder builder;
132 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
133 builder.DrawPaint(paint);
136 GetContext(), builder,
"the quick brown fox jumped over the lazy dog!.?",
137 "Roboto-Regular.ttf",
141 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
145 DisplayListBuilder builder;
148 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
149 builder.DrawPaint(paint);
157 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
161 DisplayListBuilder builder;
164 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
165 builder.DrawPaint(paint);
166 builder.Scale(0.5, 0.5);
169 GetContext(), builder,
"the quick brown fox jumped over the lazy dog!.?",
170 "Roboto-Regular.ttf"));
171 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
176 DisplayListBuilder builder;
178 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
179 builder.DrawPaint(paint);
180 for (
int i = 0; i < 6; ++i) {
182 builder.Translate(300 * i, 0);
183 Scalar scale = 0.445 - (i / 1000.f);
184 builder.Scale(scale, scale);
186 GetContext(), builder,
"k",
"Roboto-Regular.ttf",
189 GetContext(), builder,
"k",
"Roboto-Regular.ttf",
193 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
199 auto callback = [&]() -> sk_sp<DisplayList> {
200 if (AiksTest::ImGuiBegin(
"Controls",
nullptr,
201 ImGuiWindowFlags_AlwaysAutoResize)) {
202 ImGui::SliderFloat(
"Scale", &scale, 4, 20);
206 DisplayListBuilder builder;
208 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
209 builder.DrawPaint(paint);
211 builder.Scale(scale, scale);
213 GetContext(), builder,
"HELLO",
"Roboto-Regular.ttf",
215 .color = (16 * scale >= 250) ? DlColor::kYellow()
216 : DlColor::kOrange(),
218 return builder.Build();
221 ASSERT_TRUE(OpenPlaygroundHere(callback));
228 auto callback = [&]() -> sk_sp<DisplayList> {
229 if (AiksTest::ImGuiBegin(
"Controls",
nullptr,
230 ImGuiWindowFlags_AlwaysAutoResize)) {
231 ImGui::SliderFloat(
"scale", &scale, 1.f, 300.f);
232 ImGui::SliderFloat(
"offsetx", &offsetx, -600.f, 100.f);
233 ImGui::SliderFloat(
"offsety", &offsety, 600.f, 2048.f);
236 DisplayListBuilder builder;
237 builder.Scale(GetContentScale().
x, GetContentScale().y);
239 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
240 builder.DrawPaint(paint);
241 builder.Scale(scale, scale);
244 GetContext(), builder,
"test",
"Roboto-Regular.ttf",
248 return builder.Build();
250 ASSERT_TRUE(OpenPlaygroundHere(callback));
256 auto callback = [&]() -> sk_sp<DisplayList> {
257 if (AiksTest::ImGuiBegin(
"Controls",
nullptr,
258 ImGuiWindowFlags_AlwaysAutoResize)) {
259 ImGui::SliderFloat(
"Fine Scale", &fine_scale, -1, 1);
264 DisplayListBuilder builder;
266 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
267 builder.DrawPaint(paint);
268 Scalar scale = 2.625 + fine_scale;
269 builder.Scale(scale, scale);
271 "the quick brown fox jumped over the lazy dog!.?",
272 "Roboto-Regular.ttf",
274 return builder.Build();
277 ASSERT_TRUE(OpenPlaygroundHere(callback));
282 float fpivot[2] = {200 + 30, 200 - 20};
283 float rotation = 180;
284 float foffset[2] = {200, 200};
286 auto callback = [&]() -> sk_sp<DisplayList> {
287 if (AiksTest::ImGuiBegin(
"Controls",
nullptr,
288 ImGuiWindowFlags_AlwaysAutoResize)) {
289 ImGui::SliderFloat(
"pivotx", &fpivot[0], 0, 300);
290 ImGui::SliderFloat(
"pivoty", &fpivot[1], 0, 300);
291 ImGui::SliderFloat(
"rotation", &rotation, 0, 360);
292 ImGui::SliderFloat(
"foffsetx", &foffset[0], 0, 300);
293 ImGui::SliderFloat(
"foffsety", &foffset[1], 0, 300);
296 DisplayListBuilder builder;
297 builder.Scale(GetContentScale().
x, GetContentScale().y);
298 builder.DrawPaint(DlPaint().setColor(DlColor(0xffffeeff)));
302 builder.Translate(pivot.x, pivot.y);
303 builder.Rotate(rotation);
304 builder.Translate(-pivot.x, -pivot.y);
308 .
color = DlColor::kBlack(),
309 .position =
DlPoint(foffset[0], foffset[1]),
313 return builder.Build();
315 ASSERT_TRUE(OpenPlaygroundHere(callback));
320 std::array<Scalar, 20> phase_offsets = {
321 7.82637e-06, 0.131538, 0.755605, 0.45865, 0.532767,
322 0.218959, 0.0470446, 0.678865, 0.679296, 0.934693,
323 0.383502, 0.519416, 0.830965, 0.0345721, 0.0534616,
324 0.5297, 0.671149, 0.00769819, 0.383416, 0.0668422};
325 auto callback = [&]() -> sk_sp<DisplayList> {
327 static float phase_variation = 0.2;
328 static float speed = 0.5;
329 static float magnitude = 100;
330 if (AiksTest::ImGuiBegin(
"Controls",
nullptr,
331 ImGuiWindowFlags_AlwaysAutoResize)) {
332 ImGui::SliderFloat(
"Font size", &
font_size, 5, 50);
333 ImGui::SliderFloat(
"Phase variation", &phase_variation, 0, 1);
334 ImGui::SliderFloat(
"Oscillation speed", &speed, 0, 2);
335 ImGui::SliderFloat(
"Oscillation magnitude", &magnitude, 0, 300);
339 DisplayListBuilder builder;
340 builder.Scale(GetContentScale().
x, GetContentScale().y);
342 for (
size_t i = 0; i < phase_offsets.size(); i++) {
345 magnitude * std::sin((-phase_offsets[i] *
k2Pi * phase_variation +
346 GetSecondsElapsed() * speed)),
350 GetContext(), builder,
351 "the quick brown fox jumped over "
353 "Roboto-Regular.ttf",
354 {.font_size =
font_size, .position = position})) {
358 return builder.Build();
361 ASSERT_TRUE(OpenPlaygroundHere(callback));
365 DisplayListBuilder builder;
368 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
369 builder.DrawPaint(paint);
372 GetContext(), builder,
"the quick brown fox jumped over the lazy dog!.?",
373 "HomemadeApple.ttf"));
374 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
379 "Apple Color Emoji.ttc";
381 "NotoColorEmoji.ttf";
385 DisplayListBuilder builder;
388 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
389 builder.DrawPaint(paint);
392 GetContext(), builder,
"😀 😃 😄 😁 😆 😅 😂 🤣 🥲 😊",
kFontFixture));
393 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
397 DisplayListBuilder builder;
399 builder.Scale(GetContentScale().
x, GetContentScale().y);
401 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
402 builder.DrawPaint(paint);
405 GetContext(), builder,
"😀 😃 😄 😁 😆 😅 😂 🤣 🥲 😊",
kFontFixture,
407 .
color = DlColor::kBlue(),
408 .filter = DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 4)}));
409 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
413 DisplayListBuilder builder;
416 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
417 builder.DrawPaint(paint);
420 GetContext(), builder,
"😀 😃 😄 😁 😆 😅 😂 🤣 🥲 😊",
kFontFixture,
421 {.color = DlColor::kBlack().modulateOpacity(0.5)}));
422 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
426 DisplayListBuilder builder;
429 paint.setColor(DlColor::ARGB(0.1, 0.1, 0.1, 0.1));
430 builder.DrawPaint(paint);
432 builder.Translate(100, 100);
433 builder.Scale(0.5, 0.5);
436 paint.setBlendMode(DlBlendMode::kClear);
437 builder.SaveLayer(std::nullopt, &paint);
439 GetContext(), builder,
"the quick brown fox jumped over the lazy dog!.?",
440 "Roboto-Regular.ttf"));
445 GetContext(), builder,
"the quick brown fox jumped over the lazy dog!.?",
446 "Roboto-Regular.ttf"));
448 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
452 DisplayListBuilder builder;
453 builder.Translate(200, 150);
456 auto mapping = flutter::testing::OpenFixtureAsSkData(
"wtf.otf");
457 ASSERT_NE(mapping,
nullptr);
460 sk_sp<SkFontMgr> font_mgr = txt::GetDefaultFontManager();
461 SkFont sk_font(font_mgr->makeFromData(mapping),
font_size);
464 text_paint.setColor(DlColor::kBlue().withAlpha(255 * 0.8));
469 } text[] = {{
DlPoint(0, 0),
"0F0F0F0"},
474 for (
auto& t : text) {
476 builder.Translate(t.position.x *
font_size * 2,
479 auto blob = SkTextBlob::MakeFromString(t.text, sk_font);
480 ASSERT_NE(blob,
nullptr);
487 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
491 DisplayListBuilder builder;
493 builder.Scale(GetContentScale().
x, GetContentScale().y);
495 paint.setColor(DlColor::ARGB(0.1, 0.1, 0.1, 1.0));
496 builder.DrawPaint(paint);
498 builder.Transform(
Matrix(0.25, -0.3, 0, -0.002,
503 GetContext(), builder,
"the quick brown fox jumped over the lazy dog!.?",
504 "Roboto-Regular.ttf"));
506 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
510 DisplayListBuilder builder;
515 0.0, 0.0, 0.0, 1.0) *
516 Matrix::MakeRotationY({
Degrees{10}});
521 "Roboto-Regular.ttf"));
522 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
526 DisplayListBuilder builder;
531 0.0, 0.0, 0.0, 1.0) *
532 Matrix::MakeRotationY({
Degrees{10}});
536 DlRect::MakeXYWH(0, 0, GetWindowSize().width, GetWindowSize().height);
538 builder.SaveLayer(window_bounds, &save_paint);
539 builder.Transform(matrix);
542 "Roboto-Regular.ttf"));
545 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
552 DisplayListBuilder builder;
555 builder.SaveLayer(std::nullopt, &save_paint);
556 builder.Transform(
Matrix(2000, 0, 0, 0,
563 "Roboto-Regular.ttf"));
564 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
568 DisplayListBuilder text_builder;
570 "Roboto-Regular.ttf"));
571 auto text_display_list = text_builder.Build();
573 DisplayListBuilder builder;
575 Matrix matrix = Matrix::MakeRow(2.0, 0.0, 0.0, 0.0,
578 0.0, 0.002, 0.0, 1.0);
582 DlRect::MakeXYWH(0, 0, GetWindowSize().width, GetWindowSize().height);
583 builder.SaveLayer(window_bounds, &save_paint);
584 builder.Transform(matrix);
585 builder.DrawDisplayList(text_display_list, 1.0f);
588 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
595 auto mapping = flutter::testing::OpenFixtureAsSkData(
"Roboto-Regular.ttf");
596 ASSERT_NE(mapping,
nullptr);
599 sk_sp<SkFontMgr> font_mgr = txt::GetDefaultFontManager();
600 SkFont sk_font(font_mgr->makeFromData(mapping),
font_size);
603 text_paint.setColor(DlColor::kBlue());
605 std::vector<DlColor> colors = {DlColor::RGBA(0.9568, 0.2627, 0.2118, 1.0),
606 DlColor::RGBA(0.1294, 0.5882, 0.9529, 1.0)};
607 std::vector<Scalar> stops = {
611 text_paint.setColorSource(DlColorSource::MakeLinear(
620 DisplayListBuilder builder;
621 builder.Translate(100, 100);
624 auto blob = SkTextBlob::MakeFromString(
"Hello", sk_font);
625 ASSERT_NE(blob,
nullptr);
629 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
634 DisplayListBuilder builder;
637 DlColor clear_color(1.0, 0.5, 0.5, 0.5, DlColorSpace::kSRGB);
638 paint.setColor(clear_color);
639 builder.DrawPaint(paint);
641 DlMatrix identity = {
642 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0,
643 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0,
646 builder.Transform(identity);
648 DlRect frame = DlRect::MakeLTRB(1.0, 1.0, 1278.0, 763.0);
649 DlColor white(1.0, 1.0, 1.0, 1.0, DlColorSpace::kSRGB);
650 paint.setColor(white);
651 builder.DrawRect(frame, paint);
654 builder.ClipRect(frame, DlClipOp::kIntersect);
656 DlMatrix rect_xform = {
657 0.8241262, 0.56640625, 0.0, 0.0, -0.56640625, 0.8241262, 0.0, 0.0,
658 0.0, 0.0, 1.0, 0.0, 271.1137, 489.4733, 0.0, 1.0,
661 builder.Transform(rect_xform);
663 DlRect rect = DlRect::MakeLTRB(0.0, 0.0, 100.0, 100.0);
664 DlColor bluish(1.0, 0.184, 0.501, 0.929, DlColorSpace::kSRGB);
665 paint.setColor(bluish);
666 DlRoundRect rrect = DlRoundRect::MakeRectRadius(rect, 18.0);
667 builder.DrawRoundRect(rrect, paint);
670 builder.ClipRect(rect, DlClipOp::kIntersect);
675 DlMatrix path_xform = {
676 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0,
677 0.0, 0.0, 1.0, 0.0, 675.0, 279.5, 0.0, 1.0,
680 builder.Transform(path_xform);
682 DlPathBuilder path_builder;
683 path_builder.MoveTo(
DlPoint(87.5, 349.5));
684 path_builder.LineTo(
DlPoint(25.0, 29.5));
685 path_builder.LineTo(
DlPoint(150.0, 118.0));
686 path_builder.LineTo(
DlPoint(25.0, 118.0));
687 path_builder.LineTo(
DlPoint(150.0, 29.5));
688 path_builder.Close();
689 DlPath path = path_builder.TakePath();
691 DlColor fill_color(1.0, 1.0, 0.0, 0.0, DlColorSpace::kSRGB);
692 DlColor stroke_color(1.0, 0.0, 0.0, 0.0, DlColorSpace::kSRGB);
693 paint.setColor(fill_color);
694 paint.setDrawStyle(DlDrawStyle::kFill);
695 builder.DrawPath(path, paint);
697 paint.setColor(stroke_color);
698 paint.setStrokeWidth(2.0);
699 paint.setDrawStyle(DlDrawStyle::kStroke);
700 builder.DrawPath(path, paint);
706 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
711 std::make_shared<TypographerContextSkia>());
715 constexpr
const char* font_fixture =
"Roboto-Regular.ttf";
718 auto c_font_fixture = std::string(font_fixture);
719 auto mapping = flutter::testing::OpenFixtureAsSkData(c_font_fixture.c_str());
720 ASSERT_TRUE(mapping);
722 sk_sp<SkFontMgr> font_mgr = txt::GetDefaultFontManager();
723 SkFont sk_font(font_mgr->makeFromData(mapping), 16);
725 auto blob = SkTextBlob::MakeFromString(
"Hello World", sk_font);
732 Matrix::MakeTranslateScale({1.5, 1.5, 1}, {100, 50, 0});
735 auto scale = TextFrame::RoundScaledFontSize(
736 (preroll_matrix * Matrix::MakeTranslation(preroll_point))
737 .GetMaxBasisLengthXY());
752 ->CreateOffscreenMSAA(*aiks_context.
GetContext(), {100, 100}, 1);
758 text_contents.
SetColor(Color::Aqua());
760 Matrix not_preroll_matrix =
761 Matrix::MakeTranslateScale({1.5, 1.5, 1}, {100, 50, 0});
766 std::shared_ptr<CommandBuffer> command_buffer =
767 aiks_context.
GetContext()->CreateCommandBuffer();
768 std::shared_ptr<RenderPass> render_pass =
769 command_buffer->CreateRenderPass(render_target);
776 DisplayListBuilder builder;
777 builder.Scale(GetContentScale().
x, GetContentScale().y);
779 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
780 builder.DrawPaint(paint);
783 std::make_shared<TypographerContextSkia>());
793 .
color = DlColor::kBlue(),
794 .filter = DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 4)}));
806 DisplayListBuilder builder;
807 builder.Scale(GetContentScale().
x, GetContentScale().y);
809 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
810 builder.DrawPaint(paint);
813 std::make_shared<TypographerContextSkia>());
820 for (
auto i = 0; i < 5; i++) {
824 .
color = DlColor::kBlue(),
825 .filter = DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 4)}));
839 DisplayListBuilder builder;
840 builder.Scale(GetContentScale().
x, GetContentScale().y);
842 paint.setColor(DlColor::kWhite());
843 builder.DrawPaint(paint);
846 std::make_shared<TypographerContextSkia>());
853 SkFont sk_font = flutter::testing::CreateTestFontOfSize(12);
855 std::array<DlColor, 4> colors{DlColor::kRed(), DlColor::kGreen(),
856 DlColor::kBlue(), DlColor::kRed()};
857 for (
const auto& color : colors) {
862 .filter = DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 4)},
877 DisplayListBuilder builder;
878 builder.Scale(GetContentScale().
x, GetContentScale().y);
880 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
881 builder.DrawPaint(paint);
884 std::make_shared<TypographerContextSkia>());
893 auto mapping = flutter::testing::OpenFixtureAsSkData(c_font_fixture.c_str());
894 ASSERT_TRUE(mapping);
895 sk_sp<SkFontMgr> font_mgr = txt::GetDefaultFontManager();
896 SkFont sk_font(font_mgr->makeFromData(mapping), 50);
898 for (
auto i = 0; i < 10; i++) {
902 .
color = DlColor::kBlue(),
903 .filter = DlBlurMaskFilter::Make(DlBlurStyle::kNormal, 4)},
917 DisplayListBuilder builder;
919 paint.setColor(DlColor::ARGB(1, 0.1, 0.1, 0.1));
920 builder.DrawPaint(paint);
921 builder.Scale(GetContentScale().
x, GetContentScale().y);
923 std::vector<Scalar> scales = {4, 8, 16, 24, 32};
924 std::vector<Scalar> spacing = {8, 8, 8, 8, 8};
927 for (
auto i = 0u; i < scales.size(); i++) {
929 builder.Scale(scales[i], scales[i]);
931 GetContext(), builder,
"lo",
"Roboto-Regular.ttf",
940 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
static std::shared_ptr< DlTextImpeller > Make(const std::shared_ptr< impeller::TextFrame > &frame)
ContentContext & GetContentContext() const
std::shared_ptr< Context > GetContext() const
const std::shared_ptr< LazyGlyphAtlas > & GetLazyGlyphAtlas() const
const std::shared_ptr< RenderTargetAllocator > & GetRenderTargetCache() const
TextShadowCache & GetTextShadowCache() const
void SetTransform(const Matrix &transform)
Set the global transform matrix for this Entity.
void SetOffset(Vector2 offset)
bool Render(const ContentContext &renderer, const Entity &entity, RenderPass &pass) const override
void SetTextFrame(const std::shared_ptr< TextFrame > &frame)
void SetScale(Scalar scale)
void SetColor(Color color)
size_t GetCacheSizeForTesting() const
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)
TEST_P(AiksTest, VarietyOfTextScalesShowingRasterAndPath)
static constexpr std::string_view kFontFixture
std::shared_ptr< Texture > DisplayListToTexture(const sk_sp< flutter::DisplayList > &display_list, ISize size, AiksContext &context, bool reset_host_buffer, bool generate_mips, std::optional< PixelFormat > target_pixel_format)
Render the provided display list to a texture with the given size.
flutter::DlRoundRect DlRoundRect
std::shared_ptr< TextFrame > MakeTextFrameFromTextBlobSkia(const sk_sp< SkTextBlob > &blob)
A 4x4 matrix using column-major storage.
constexpr Quad Transform(const Quad &quad) const
std::shared_ptr< DlMaskFilter > filter