Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit 10ac36c

Browse files
Implement text rendering in Skwasm (#41832)
This implements full text rendering with the Skwasm renderer. The font fallback logic has been refactored to decouple the font fallback manager from any CanvasKit-specific types and functions. A chunk of CanvasKit text rendering tests have been ported over to the renderer-agnostic `ui` tests. Fixes flutter/flutter#126339
1 parent e616cc6 commit 10ac36c

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+3419
-1731
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,21 +1867,17 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/canvaskit_canvas.da
18671867
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/color_filter.dart + ../../../flutter/LICENSE
18681868
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views.dart + ../../../flutter/LICENSE
18691869
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views_diff.dart + ../../../flutter/LICENSE
1870-
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/font_fallback_data.dart + ../../../flutter/LICENSE
1871-
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/font_fallbacks.dart + ../../../flutter/LICENSE
18721870
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/fonts.dart + ../../../flutter/LICENSE
18731871
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/image.dart + ../../../flutter/LICENSE
18741872
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/image_filter.dart + ../../../flutter/LICENSE
18751873
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/image_wasm_codecs.dart + ../../../flutter/LICENSE
18761874
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart + ../../../flutter/LICENSE
1877-
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/interval_tree.dart + ../../../flutter/LICENSE
18781875
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/layer.dart + ../../../flutter/LICENSE
18791876
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/layer_scene_builder.dart + ../../../flutter/LICENSE
18801877
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/layer_tree.dart + ../../../flutter/LICENSE
18811878
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/mask_filter.dart + ../../../flutter/LICENSE
18821879
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/n_way_canvas.dart + ../../../flutter/LICENSE
18831880
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/native_memory.dart + ../../../flutter/LICENSE
1884-
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/noto_font.dart + ../../../flutter/LICENSE
18851881
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/painting.dart + ../../../flutter/LICENSE
18861882
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/path.dart + ../../../flutter/LICENSE
18871883
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/path_metrics.dart + ../../../flutter/LICENSE
@@ -1905,6 +1901,8 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/dom.dart + ../../../flutter/L
19051901
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/embedder.dart + ../../../flutter/LICENSE
19061902
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/engine_canvas.dart + ../../../flutter/LICENSE
19071903
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/font_change_util.dart + ../../../flutter/LICENSE
1904+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/font_fallback_data.dart + ../../../flutter/LICENSE
1905+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/font_fallbacks.dart + ../../../flutter/LICENSE
19081906
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/fonts.dart + ../../../flutter/LICENSE
19091907
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/frame_reference.dart + ../../../flutter/LICENSE
19101908
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/global_styles.dart + ../../../flutter/LICENSE
@@ -1948,6 +1946,7 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/html/surface_stats.dart + ../
19481946
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/html/transform.dart + ../../../flutter/LICENSE
19491947
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/html_image_codec.dart + ../../../flutter/LICENSE
19501948
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/initialization.dart + ../../../flutter/LICENSE
1949+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/interval_tree.dart + ../../../flutter/LICENSE
19511950
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_loader.dart + ../../../flutter/LICENSE
19521951
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_promise.dart + ../../../flutter/LICENSE
19531952
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_typed_data.dart + ../../../flutter/LICENSE
@@ -1958,6 +1957,7 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/navigation.dart + ../../../fl
19581957
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/navigation/history.dart + ../../../flutter/LICENSE
19591958
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/navigation/js_url_strategy.dart + ../../../flutter/LICENSE
19601959
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/navigation/url_strategy.dart + ../../../flutter/LICENSE
1960+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/noto_font.dart + ../../../flutter/LICENSE
19611961
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/onscreen_logging.dart + ../../../flutter/LICENSE
19621962
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/picture.dart + ../../../flutter/LICENSE
19631963
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart + ../../../flutter/LICENSE
@@ -2016,6 +2016,12 @@ ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_sk
20162016
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_skstring.dart + ../../../flutter/LICENSE
20172017
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_surface.dart + ../../../flutter/LICENSE
20182018
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/skwasm_module.dart + ../../../flutter/LICENSE
2019+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_line_metrics.dart + ../../../flutter/LICENSE
2020+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_paragraph.dart + ../../../flutter/LICENSE
2021+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_paragraph_builder.dart + ../../../flutter/LICENSE
2022+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_paragraph_style.dart + ../../../flutter/LICENSE
2023+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_strut_style.dart + ../../../flutter/LICENSE
2024+
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_text_style.dart + ../../../flutter/LICENSE
20192025
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/renderer.dart + ../../../flutter/LICENSE
20202026
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/scene_builder.dart + ../../../flutter/LICENSE
20212027
ORIGIN: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/shaders.dart + ../../../flutter/LICENSE
@@ -2075,6 +2081,12 @@ ORIGIN: ../../../flutter/lib/web_ui/skwasm/picture.cpp + ../../../flutter/LICENS
20752081
ORIGIN: ../../../flutter/lib/web_ui/skwasm/shaders.cpp + ../../../flutter/LICENSE
20762082
ORIGIN: ../../../flutter/lib/web_ui/skwasm/string.cpp + ../../../flutter/LICENSE
20772083
ORIGIN: ../../../flutter/lib/web_ui/skwasm/surface.cpp + ../../../flutter/LICENSE
2084+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/line_metrics.cpp + ../../../flutter/LICENSE
2085+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/paragraph.cpp + ../../../flutter/LICENSE
2086+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/paragraph_builder.cpp + ../../../flutter/LICENSE
2087+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/paragraph_style.cpp + ../../../flutter/LICENSE
2088+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/strut_style.cpp + ../../../flutter/LICENSE
2089+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/text_style.cpp + ../../../flutter/LICENSE
20782090
ORIGIN: ../../../flutter/lib/web_ui/skwasm/wrappers.h + ../../../flutter/LICENSE
20792091
ORIGIN: ../../../flutter/runtime/dart_isolate.cc + ../../../flutter/LICENSE
20802092
ORIGIN: ../../../flutter/runtime/dart_isolate.h + ../../../flutter/LICENSE
@@ -4470,21 +4482,17 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/canvaskit_canvas.dart
44704482
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/color_filter.dart
44714483
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views.dart
44724484
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/embedded_views_diff.dart
4473-
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/font_fallback_data.dart
4474-
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/font_fallbacks.dart
44754485
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/fonts.dart
44764486
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/image.dart
44774487
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/image_filter.dart
44784488
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/image_wasm_codecs.dart
44794489
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/image_web_codecs.dart
4480-
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/interval_tree.dart
44814490
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/layer.dart
44824491
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/layer_scene_builder.dart
44834492
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/layer_tree.dart
44844493
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/mask_filter.dart
44854494
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/n_way_canvas.dart
44864495
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/native_memory.dart
4487-
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/noto_font.dart
44884496
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/painting.dart
44894497
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/path.dart
44904498
FILE: ../../../flutter/lib/web_ui/lib/src/engine/canvaskit/path_metrics.dart
@@ -4508,6 +4516,8 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/dom.dart
45084516
FILE: ../../../flutter/lib/web_ui/lib/src/engine/embedder.dart
45094517
FILE: ../../../flutter/lib/web_ui/lib/src/engine/engine_canvas.dart
45104518
FILE: ../../../flutter/lib/web_ui/lib/src/engine/font_change_util.dart
4519+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/font_fallback_data.dart
4520+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/font_fallbacks.dart
45114521
FILE: ../../../flutter/lib/web_ui/lib/src/engine/fonts.dart
45124522
FILE: ../../../flutter/lib/web_ui/lib/src/engine/frame_reference.dart
45134523
FILE: ../../../flutter/lib/web_ui/lib/src/engine/global_styles.dart
@@ -4551,6 +4561,7 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/surface_stats.dart
45514561
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html/transform.dart
45524562
FILE: ../../../flutter/lib/web_ui/lib/src/engine/html_image_codec.dart
45534563
FILE: ../../../flutter/lib/web_ui/lib/src/engine/initialization.dart
4564+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/interval_tree.dart
45544565
FILE: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_loader.dart
45554566
FILE: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_promise.dart
45564567
FILE: ../../../flutter/lib/web_ui/lib/src/engine/js_interop/js_typed_data.dart
@@ -4561,6 +4572,7 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/navigation.dart
45614572
FILE: ../../../flutter/lib/web_ui/lib/src/engine/navigation/history.dart
45624573
FILE: ../../../flutter/lib/web_ui/lib/src/engine/navigation/js_url_strategy.dart
45634574
FILE: ../../../flutter/lib/web_ui/lib/src/engine/navigation/url_strategy.dart
4575+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/noto_font.dart
45644576
FILE: ../../../flutter/lib/web_ui/lib/src/engine/onscreen_logging.dart
45654577
FILE: ../../../flutter/lib/web_ui/lib/src/engine/picture.dart
45664578
FILE: ../../../flutter/lib/web_ui/lib/src/engine/platform_dispatcher.dart
@@ -4619,6 +4631,12 @@ FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_skda
46194631
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_skstring.dart
46204632
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/raw_surface.dart
46214633
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/skwasm_module.dart
4634+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_line_metrics.dart
4635+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_paragraph.dart
4636+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_paragraph_builder.dart
4637+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_paragraph_style.dart
4638+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_strut_style.dart
4639+
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/raw/text/raw_text_style.dart
46224640
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/renderer.dart
46234641
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/scene_builder.dart
46244642
FILE: ../../../flutter/lib/web_ui/lib/src/engine/skwasm/skwasm_impl/shaders.dart
@@ -4678,6 +4696,12 @@ FILE: ../../../flutter/lib/web_ui/skwasm/picture.cpp
46784696
FILE: ../../../flutter/lib/web_ui/skwasm/shaders.cpp
46794697
FILE: ../../../flutter/lib/web_ui/skwasm/string.cpp
46804698
FILE: ../../../flutter/lib/web_ui/skwasm/surface.cpp
4699+
FILE: ../../../flutter/lib/web_ui/skwasm/text/line_metrics.cpp
4700+
FILE: ../../../flutter/lib/web_ui/skwasm/text/paragraph.cpp
4701+
FILE: ../../../flutter/lib/web_ui/skwasm/text/paragraph_builder.cpp
4702+
FILE: ../../../flutter/lib/web_ui/skwasm/text/paragraph_style.cpp
4703+
FILE: ../../../flutter/lib/web_ui/skwasm/text/strut_style.cpp
4704+
FILE: ../../../flutter/lib/web_ui/skwasm/text/text_style.cpp
46814705
FILE: ../../../flutter/lib/web_ui/skwasm/wrappers.h
46824706
FILE: ../../../flutter/runtime/dart_isolate.cc
46834707
FILE: ../../../flutter/runtime/dart_isolate.h

lib/web_ui/dev/roll_fallback_fonts.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -182,7 +182,6 @@ class RollFallbackFontsCommand extends Command<bool>
182182
'lib',
183183
'src',
184184
'engine',
185-
'canvaskit',
186185
'font_fallback_data.dart',
187186
));
188187
await fontDataFile.writeAsString(sb.toString());

lib/web_ui/lib/src/engine.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,17 @@ export 'engine/canvaskit/canvaskit_canvas.dart';
2626
export 'engine/canvaskit/color_filter.dart';
2727
export 'engine/canvaskit/embedded_views.dart';
2828
export 'engine/canvaskit/embedded_views_diff.dart';
29-
export 'engine/canvaskit/font_fallback_data.dart';
30-
export 'engine/canvaskit/font_fallbacks.dart';
3129
export 'engine/canvaskit/fonts.dart';
3230
export 'engine/canvaskit/image.dart';
3331
export 'engine/canvaskit/image_filter.dart';
3432
export 'engine/canvaskit/image_wasm_codecs.dart';
3533
export 'engine/canvaskit/image_web_codecs.dart';
36-
export 'engine/canvaskit/interval_tree.dart';
3734
export 'engine/canvaskit/layer.dart';
3835
export 'engine/canvaskit/layer_scene_builder.dart';
3936
export 'engine/canvaskit/layer_tree.dart';
4037
export 'engine/canvaskit/mask_filter.dart';
4138
export 'engine/canvaskit/n_way_canvas.dart';
4239
export 'engine/canvaskit/native_memory.dart';
43-
export 'engine/canvaskit/noto_font.dart';
4440
export 'engine/canvaskit/painting.dart';
4541
export 'engine/canvaskit/path.dart';
4642
export 'engine/canvaskit/path_metrics.dart';
@@ -63,6 +59,8 @@ export 'engine/dom.dart';
6359
export 'engine/embedder.dart';
6460
export 'engine/engine_canvas.dart';
6561
export 'engine/font_change_util.dart';
62+
export 'engine/font_fallback_data.dart';
63+
export 'engine/font_fallbacks.dart';
6664
export 'engine/fonts.dart';
6765
export 'engine/frame_reference.dart';
6866
export 'engine/global_styles.dart';
@@ -106,6 +104,7 @@ export 'engine/html/surface_stats.dart';
106104
export 'engine/html/transform.dart';
107105
export 'engine/html_image_codec.dart';
108106
export 'engine/initialization.dart';
107+
export 'engine/interval_tree.dart';
109108
export 'engine/js_interop/js_loader.dart';
110109
export 'engine/js_interop/js_promise.dart';
111110
export 'engine/js_interop/js_typed_data.dart';
@@ -115,6 +114,7 @@ export 'engine/mouse_cursor.dart';
115114
export 'engine/navigation/history.dart';
116115
export 'engine/navigation/js_url_strategy.dart';
117116
export 'engine/navigation/url_strategy.dart';
117+
export 'engine/noto_font.dart';
118118
export 'engine/onscreen_logging.dart';
119119
export 'engine/picture.dart';
120120
export 'engine/platform_dispatcher.dart';

0 commit comments

Comments
 (0)