From b985f58468255c1ddc6cf036a8ecf058a84d1015 Mon Sep 17 00:00:00 2001 From: William Candillon Date: Mon, 13 Jul 2026 18:42:36 +0200 Subject: [PATCH] =?UTF-8?q?feat(=F0=9F=93=9D):=20expose=20Paragraph.getPat?= =?UTF-8?q?h()=20and=20Paragraph.extendedVisit()=20(#3931)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: expose Paragraph.getPath() and Paragraph.extendedVisit() Exposes two skparagraph APIs that make fallback-aware, glyph-tight text measurement possible (Shopify/react-native-skia#3493): - getPath(lineNumber) converts a laid-out line (fallback fonts already applied) into an SkPath; computeTightBounds() on the result gives the exact ink bounds of the rendered text, as opposed to the font-metrics based heights of getHeight()/getRectsForRange(). Returns null for out of bounds line numbers since Paragraph::getPath does not bounds-check. Color glyphs (emojis) cannot be converted and are skipped. - extendedVisit(visitor) walks the computed layout, calling the visitor once per run of glyphs with the resolved font (after fallback), glyph ids, positions and per-glyph tight ink bounds, and once with null to signal the end of each line. utf8Starts exposes count entries (one per glyph) since the underlying cluster buffer only holds count values. Both are iOS/Android only; the web implementation throws (CanvasKit does not expose Paragraph::getPath/extendedVisit). E2E test suites cover ink bounds vs metrics bounds, font fallback, multi-line paths, out of bounds handling and the visitor protocol, plus drawing tests: a trimmed segment of the paragraph path, per-glyph tight ink bounds from extendedVisit under font fallback, a metrics-based getRectsForRange comparison (node baseline included), and a cross-check that the union of positioned glyph bounds from extendedVisit matches computeTightBounds() of getPath(). --- apps/docs/docs/text/paragraph.md | 55 ++ .../img/paragraph/glyph-tight-bounds.png | Bin 0 -> 10453 bytes .../static/img/paragraph/metrics-bounds.png | Bin 0 -> 6668 bytes apps/example/e2e/web.spec.ts | 10 +- apps/example/ios/Podfile.lock | 140 ++--- apps/example/src/Examples/API/GlyphBounds.tsx | 273 +++++++++ apps/example/src/Examples/API/List.tsx | 8 + .../src/Examples/API/ParagraphPath.tsx | 151 +++++ apps/example/src/Examples/API/Routes.ts | 2 + apps/example/src/Examples/API/WebMemory.tsx | 4 +- apps/example/src/Examples/API/index.tsx | 16 + apps/example/src/Examples/API/linking.ts | 2 + packages/skia/cpp/api/JsiSkParagraph.h | 114 ++++ .../paragraph-glyph-bounding-boxes-ios.png | Bin 0 -> 17051 bytes .../paragraph-glyph-tight-bounds-ios.png | Bin 0 -> 24064 bytes .../paragraph-metrics-bounds-ios.png | Bin 0 -> 15228 bytes .../paragraph-metrics-bounds-node.png | Bin 0 -> 13413 bytes .../paragraph/paragraph-path-segment-ios.png | Bin 0 -> 12281 bytes .../__tests__/snapshots/platform-buffer.png | Bin 144440 -> 95379 bytes .../__tests__/e2e/ParagraphGlyphs.spec.tsx | 562 ++++++++++++++++++ .../renderer/__tests__/e2e/setup/Paragraph.ts | 13 +- .../src/skia/types/Paragraph/Paragraph.ts | 67 +++ packages/skia/src/skia/web/JsiSkParagraph.ts | 10 +- 23 files changed, 1352 insertions(+), 75 deletions(-) create mode 100644 apps/docs/static/img/paragraph/glyph-tight-bounds.png create mode 100644 apps/docs/static/img/paragraph/metrics-bounds.png create mode 100644 apps/example/src/Examples/API/GlyphBounds.tsx create mode 100644 apps/example/src/Examples/API/ParagraphPath.tsx create mode 100644 packages/skia/src/__tests__/snapshots/paragraph/paragraph-glyph-bounding-boxes-ios.png create mode 100644 packages/skia/src/__tests__/snapshots/paragraph/paragraph-glyph-tight-bounds-ios.png create mode 100644 packages/skia/src/__tests__/snapshots/paragraph/paragraph-metrics-bounds-ios.png create mode 100644 packages/skia/src/__tests__/snapshots/paragraph/paragraph-metrics-bounds-node.png create mode 100644 packages/skia/src/__tests__/snapshots/paragraph/paragraph-path-segment-ios.png create mode 100644 packages/skia/src/renderer/__tests__/e2e/ParagraphGlyphs.spec.tsx diff --git a/apps/docs/docs/text/paragraph.md b/apps/docs/docs/text/paragraph.md index cd1d1adceb..a0eebc91ec 100644 --- a/apps/docs/docs/text/paragraph.md +++ b/apps/docs/docs/text/paragraph.md @@ -236,6 +236,61 @@ const MyParagraph = () => { +### Glyph-Tight Bounds + +:::info + +`getPath()` and `extendedVisit()` are not available on Web. + +::: + +`getHeight()`, `getLineMetrics()`, and `getRectsForRange()` are all based on font metrics: they reserve the full ascent and descent of the fonts on each line, regardless of the glyphs actually present. For instance, `"Hello"` and `"Typography"` report the same height even though only the latter has descenders. + + + +To measure the exact ink bounds of the rendered text (with font fallbacks already applied), convert a line into a path with `getPath(lineNumber)` and compute its tight bounds. Note that color glyphs (e.g. emojis) cannot be converted to a path and are skipped. + +```tsx twoslash +import { Skia } from "@shopify/react-native-skia"; + +const paragraph = Skia.ParagraphBuilder.Make() + .addText("Hello") + .build(); +paragraph.layout(200); +// The metrics-based height (reserves ascent + descent) +const height = paragraph.getHeight(); +// The exact bounds of the glyphs on the first line +const inkBounds = paragraph.getPath(0)!.computeTightBounds(); +``` + +For full access to the computed layout, `extendedVisit(visitor)` invokes the visitor once for every run of glyphs with the resolved font (after fallback), glyph ids, positions and per-glyph tight ink bounds, and once with a `null` info to signal the end of each line. + +```tsx twoslash +import { Skia } from "@shopify/react-native-skia"; + +const paragraph = Skia.ParagraphBuilder.Make() + .addText("Hello你好") + .build(); +paragraph.layout(200); +paragraph.extendedVisit((lineNumber, info) => { + if (info === null) { + // End of the line + return; + } + // The index of the line this run belongs to + const line = lineNumber; + // The font resolved for this run (e.g. a fallback font for CJK glyphs) + const font = info.font; + // Per-glyph ids, positions and tight ink bounds. + // Positions are relative to the run origin: add info.origin to get + // paragraph coordinates (fallback runs carry their placement in origin). + const { glyphs, positions, bounds } = info; +}); +``` + +Below, the tight ink bounds of every glyph are drawn on top of the paragraph, including the CJK glyphs resolved via font fallback. + + ## Fonts diff --git a/apps/docs/static/img/paragraph/glyph-tight-bounds.png b/apps/docs/static/img/paragraph/glyph-tight-bounds.png new file mode 100644 index 0000000000000000000000000000000000000000..565ade158ab206a798cc7079af0964e2629d02d9 GIT binary patch literal 10453 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 Dl7F~J literal 0 HcmV?d00001 diff --git a/apps/docs/static/img/paragraph/metrics-bounds.png b/apps/docs/static/img/paragraph/metrics-bounds.png new file mode 100644 index 0000000000000000000000000000000000000000..080d750f4a3ba77aa0fb92cda6da1864694fe8e2 GIT binary patch literal 6668 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 literal 0 HcmV?d00001 diff --git a/apps/example/e2e/web.spec.ts b/apps/example/e2e/web.spec.ts index 77da6f48e1..7d208a2529 100644 --- a/apps/example/e2e/web.spec.ts +++ b/apps/example/e2e/web.spec.ts @@ -27,7 +27,15 @@ const skip: Partial> = { }; // Screens that render no canvas by design; they must still load cleanly. -const noCanvas: Screen[] = ["List", "Web", "FirstFrameEmpty"]; +// ParagraphPath and GlyphBounds show a fallback message on web since +// Paragraph.getPath() and Paragraph.extendedVisit() are native-only. +const noCanvas: Screen[] = [ + "List", + "Web", + "FirstFrameEmpty", + "ParagraphPath", + "GlyphBounds", +]; // Expected uncaught errors, e.g. from examples that demo error handling. const allowedErrors: Partial> = { diff --git a/apps/example/ios/Podfile.lock b/apps/example/ios/Podfile.lock index 140748f79b..dba6f8cd75 100644 --- a/apps/example/ios/Podfile.lock +++ b/apps/example/ios/Podfile.lock @@ -3208,88 +3208,88 @@ SPEC CHECKSUMS: fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: 11b010917f5f15150b2c015abddef1573d2bb05d - RCT-Folly: 59ec0ac1f2f39672a0c6e6cecdd39383b764646f + RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: a41bbdd9af30bf2e5715796b313e44ec43eefff1 RCTRequired: 7be34aabb0b77c3cefe644528df0fa0afad4e4d0 RCTSwiftUI: a6c7271c39098bf00dbdad8f8ed997a59bbfbe44 - RCTSwiftUIWrapper: 5ec163e8fde163d3fba714a992b50a266e1ece37 + RCTSwiftUIWrapper: ff9098ccf7727e58218f2f8ea110349863f43438 RCTTypeSafety: 27927d0ca04e419ed9467578b3e6297e37210b5c React: 4bc1f928568ad4bcfd147260f907b4ea5873a03b React-callinvoker: 87f8728235a0dc62e9dc19b3851c829d9347d015 - React-Core: 19e0183e28d7a6613ecacebd7525fe6650efa3b6 - React-CoreModules: 73cc86f2a0ff84b93d6325073ad2e4874d21ad40 - React-cxxreact: 4bf734645c77c9b86e2f3e933e0411cf2f14d1ba + React-Core: 76bed73b02821e5630e7f2cb2e82432ee964695d + React-CoreModules: 752dbfdaeb096658aa0adc4a03ba6214815a08df + React-cxxreact: b6798528aa601c6db66e6adc7e2da2b059c8be74 React-debug: 8978deb306f6f38c28b5091e52b0ac9f942b157e - React-defaultsnativemodule: 724eb9ec388d494f1e2057d83355ee8fe6f1d780 - React-domnativemodule: 9068f41092f725acd09950233d2847364c731947 - React-Fabric: 945cc8abf08d9d0966acef605bffce7b501c49d9 - React-FabricComponents: 4c4ad6f0d16c964a68f945e029505e2eeec6654b - React-FabricImage: a8b628fd98db21b9f8588e06f14a9194dda11b40 - React-featureflags: 0937601c1af1cc125851ec5bbf4654285d47a3e7 - React-featureflagsnativemodule: ac1a3e0353e1a6e15411b17ed6c7122adb0468a4 - React-graphics: cca521e06463608be46207a4aa160f8a7f725f8b - React-hermes: ec50b9fcea2c3bfdd42f8cec845eac3f35888572 - React-idlecallbacksnativemodule: effcae5b7b4473211adb154aaa321d5d9e2fbcc9 - React-ImageManager: b38459e538f1840fa5c3e7612a4bcb0029a3c366 - React-intersectionobservernativemodule: 8d33366661971200cf2e151727f6fe007b62ae7b - React-jserrorhandler: f94c688a0dbe2e045b91b992722b92e97d56f77f - React-jsi: 3216c876cd4c571a57909e22d77c8fd9530aa067 - React-jsiexecutor: 475563c0042841a85930a455d3199f6b1483a5fe - React-jsinspector: bc484fb32bf1b9fed80afe8793e614eba4f7b39e - React-jsinspectorcdp: 5a574d1d35016968a67e78e6b8a7917473ffbb77 - React-jsinspectornetwork: dce3a5a1351b527ee8c28ad4a8bdd211507e1a45 - React-jsinspectortracing: 65f6b166bd67e5adc31eba027e1570bacf7a3cc7 - React-jsitooling: d5463f5489a31640b0fa0ec4e31566ca8aa86c13 - React-jsitracing: 3c7fc18821aba64855acb8658aa857ca6a7fddf6 - React-logger: 6ac901f5c7f7321d2be1a40b203bccc2e23411e3 - React-Mapbuffer: 2e0e7cc5b7064eaed9c8b8afc3a87621cb7ef5cd - React-microtasksnativemodule: dd4d33b251b57e5027c572c6d0b45cbfbcfaa386 - react-native-safe-area-context: 54d812805f3c4e08a4580ad086cbde1d8780c2e4 - react-native-skia: 2c1a5775d1fdf527cfd7ec08bab9c390f5ea7cbe - React-NativeModulesApple: 7f2f2fed3f6c858889eb61d09941be965d52df58 - React-networking: 43e5e6773ac2ca2a93261a1388fed269c9fce092 + React-defaultsnativemodule: 682b77ef4acfb298017be15f4f93c1d998deb174 + React-domnativemodule: 4c4b44f7eb68dbc3a2218db088bef318a7302017 + React-Fabric: b6f82a4d8498ce4475586f71ca8397a771fe292d + React-FabricComponents: c8695f4b11918a127c4560d66f7d3fdb01a17986 + React-FabricImage: d64f48830f63830e8ffaaf69fa487116856fbbf1 + React-featureflags: 2a46b229903e906d33dbaf9207ce57c59306c369 + React-featureflagsnativemodule: cba6c0814051a0934f8bcee4a436ee2a6bcc9754 + React-graphics: 3d0435051e1ab8904d065f8ffbe981a9fc202841 + React-hermes: 32fc9c231c1aa5c2fcfe851b0d19ee9269f88f4c + React-idlecallbacksnativemodule: f8ee42581795c4844d97147596bcc2d824c0f188 + React-ImageManager: e8f7377ef0585fd2df05559a17e01a03e187d5cf + React-intersectionobservernativemodule: b1bea12ca29accdd2eda60c87605a6030b894eb9 + React-jserrorhandler: 1a86df895b4eaf4e771abe8cf34cbb26d821f771 + React-jsi: adf8527fec197ad9d0480cc5b8945eb56de627f0 + React-jsiexecutor: 315fa2f879b43e3a9ca08f5f4b733472f7e4e8a4 + React-jsinspector: b4fd1933666bcb2549b566b40656c1e45e9d7632 + React-jsinspectorcdp: 80141710f2668e5b8f00417298d9b76b4abf90fa + React-jsinspectornetwork: 1d3ea717dbbec316cd8c21a0af53928a7bf74901 + React-jsinspectortracing: 4ce745374d4b2bfbd164cce9f8de8383d3d818a0 + React-jsitooling: fc4ac4c3b1f3f9f7fedf0c777c6ff3f244f568bd + React-jsitracing: bff08a6faeef4a9bd286487da191f5e5329e21a9 + React-logger: b8483fa08e0d62e430c76d864309d90576ca2f68 + React-Mapbuffer: 7b72a669e94662359dad4f42b5af005eb24b4e83 + React-microtasksnativemodule: cdc02da075f2857803ed63f24f5f72fc40e094c0 + react-native-safe-area-context: c00143b4823773bba23f2f19f85663ae89ceb460 + react-native-skia: 82260e6ce556ff33eb29360905eb775383d01a8c + React-NativeModulesApple: a2c3d2cbec893956a5b3e4060322db2984fff75b + React-networking: 3f98bd96893a294376e7e03730947a08d474c380 React-oscompat: 80166b66da22e7af7fad94474e9997bd52d4c8c6 - React-perflogger: 63c90e0d8c24df87ffa14dad01aeafc352847dd0 - React-performancecdpmetrics: 5a9b81c08f75045635127d626440d9ada01e774b - React-performancetimeline: 31cebfff69ec9174b3fb54b0606fcb12ef91cbad + React-perflogger: d6797918d2b1031e91a9d8f5e7fdd2c8728fb390 + React-performancecdpmetrics: 5570be61e2f97c4741c5d432c91570e8e5a39892 + React-performancetimeline: 5763499ae1991fc18dcf416e340ce7bc829bb298 React-RCTActionSheet: 3bd5f5db9f983cf38d51bb9a7a198e2ebea94821 - React-RCTAnimation: 346865a809fa5132f6c594c8b376c6cf46b44e88 - React-RCTAppDelegate: b2d1e0d3663c987f49f45094883b9e36fcbf0181 - React-RCTBlob: 74759ebb7ff9077d19f60c301782c1f8c3eb2813 - React-RCTFabric: 7b4b14dad21ca99333ebcbc0bf5c205647a315a8 - React-RCTFBReactNativeSpec: 39151968adb68b8c59f29a8bd4223d4d7780a793 - React-RCTImage: 60763f56e8a5e45d861d7c4777e428bb820ec52a - React-RCTLinking: 52aee78b0b3163167c7fcf58f80a42943c03a056 - React-RCTNetwork: f5e1e8ae5eff6982efff6289b06ec0a76d0a6ac2 - React-RCTRuntime: 0e99199322afd372e74b95ae5c58f4e074cc2855 - React-RCTSettings: 298bb40d3412bf32e0b4f0797e48416b0b7278a1 - React-RCTText: dfb74800e27d792d1188fa975a3b9807c3362e3e - React-RCTVibration: ffe5fd4f50a835e353a3b6869eb005dab11eea44 + React-RCTAnimation: 46a9978f27dc434dbeed16afa7b82619b690a9af + React-RCTAppDelegate: 62ecd60a2b2a8cae26ce6a066bfa59cfde97af01 + React-RCTBlob: 8285c859513023ee3cc8c806d9b59d4da078c4ba + React-RCTFabric: 05ed09347e938de985052f791a6a0698816d5761 + React-RCTFBReactNativeSpec: 83ba579fca9a51e774ac32578ef5dd3262edd7e2 + React-RCTImage: a5364d0f098692cfbf5bef1e8a63e7712ecb14b7 + React-RCTLinking: 34b63b0aa0e92d30f5d7aa2c255a8f95fa75ee8f + React-RCTNetwork: 1ef88b7a5310b8f915d3556b5b247def113191ed + React-RCTRuntime: ed29cf68a46782fec891e5afe1d8d758ca6ccd9b + React-RCTSettings: 2c45623d6c0f30851a123f621eb9d32298bcbb0c + React-RCTText: 0ee70f5dc18004b4d81b2c214267c6cbec058587 + React-RCTVibration: 88557e21e7cc3fe76b5b174cba28ff45c6def997 React-rendererconsistency: d280314a3e7f0097152f89e815b4de821c2be8b9 - React-renderercss: 8a1a346f3665fd5ea7a7be7b3b9f95d4743e1180 - React-rendererdebug: af74afdfb3d6c5382ebab35562efd8eb9e690473 - React-RuntimeApple: 06e33d291e72fd0c73ac47046c3536d77d5aeedd - React-RuntimeCore: 99273d2af072062eb07f0b2d2d4a0f2de697ea14 - React-runtimeexecutor: 2063c03c18810ee57939d138142e6493333360ef - React-RuntimeHermes: 2253a7f4c8d56b449230b330b0b15383ed4b3df4 - React-runtimescheduler: ff37ac6720a943da91645c06274282ac46b71f23 - React-timing: 831d7e081ba4c332ca5cccf389b88e363f13f2b4 - React-utils: 25db6c17598c4fed22b5956d7551bb8bddf1f95b - React-webperformancenativemodule: 57e41e6193cfb815bde0b5534bef68673f1270eb - ReactAppDependencyProvider: bfb12ead469222b022a2024f32aba47ce50de512 - ReactCodegen: 9ca1bd49eee1eccf6e427e406d2163f49e9c48c0 - ReactCommon: 05ad684db7d88e194272ae26baddf6300e30b8b7 - ReactNativeHost: e7e0a518b0120f0070b3e1f13c7006d3e0e8ee13 - ReactTestApp-DevSupport: 6994b53b5b81139a8ce63e0776c726c95de079a1 + React-renderercss: f8cbf83d95c2c2bbf893d37fe50c73f046584411 + React-rendererdebug: 37216ddfcd38e49d1e92bf9052ea4bc9d7b932e5 + React-RuntimeApple: 1c0e7cb8e1c2c5775585afcaaa666ec151629a8d + React-RuntimeCore: 925fe2ca24cf8e6ed87586dbb92827306b93b83f + React-runtimeexecutor: 962dae024f6df760d029512a7d99e3f73d570935 + React-RuntimeHermes: 19a7c59ec1bc9908516f0bbc29b49425f6ec64ba + React-runtimescheduler: 62f21127cd97f4d8f164eee5150d3ce53dd36f66 + React-timing: 8757bf6fb96227c264f2d1609f4ba5c68217b8ce + React-utils: 8ab26781c2f5c2f7fafb2022c8ab39d39f231b80 + React-webperformancenativemodule: 7953b7fe519f76fa595111fe18ff3d5de131bfe9 + ReactAppDependencyProvider: 0eb286cc274abb059ee601b862ebddac2e681d01 + ReactCodegen: b8e56b780fffe6edd6405be0af4a1e3049a937f7 + ReactCommon: ac934cb340aee91282ecd6f273a26d24d4c55cae + ReactNativeHost: eef98ec49b55d88ad4cabf5a4378a12b42b551ee + ReactTestApp-DevSupport: ea18f446cff64b6c9a3e28788600c82ecf51bde6 ReactTestApp-Resources: 1bd9ff10e4c24f2ad87101a32023721ae923bccf - RNGestureHandler: 77eecab5fd636666ca73a55bb61e2f1a685b7e84 - RNReanimated: d1a7a4c20eefc371e062990ce1debeaff4f1b9be - RNScreens: b2a5c76af24a02a2fd71bfce42780fdd9c79cc6d - RNSVG: ea9cbf6dcdbebdfff5822b0ad9311bbc4510a0b7 - RNWorklets: 5f6e5664c1819eac103ca75cc2f36191f55aa110 + RNGestureHandler: cd4be101cfa17ea6bbd438710caa02e286a84381 + RNReanimated: c26dfcd831add485c2ed93de9d7bfb90b035eeaa + RNScreens: 714e10b6b554f7dc7ad9f78dcf36dc8e3fc73415 + RNSVG: 11354d28dd6cb71a59570b68c91ba6772a2d781d + RNWorklets: b89b501d37972e6419d6f87effe41d6d76157648 SocketRocket: d4aabe649be1e368d1318fdf28a022d714d65748 - Yoga: 5bd0956bf9cb16f75101e78b5e852c7577bc5a45 + Yoga: 5456bb010373068fc92221140921b09d126b116e PODFILE CHECKSUM: dca89d921c9f2a2d3d405a5fca0bfb60b30b5022 -COCOAPODS: 1.15.2 +COCOAPODS: 1.16.2 diff --git a/apps/example/src/Examples/API/GlyphBounds.tsx b/apps/example/src/Examples/API/GlyphBounds.tsx new file mode 100644 index 0000000000..4a0a61462a --- /dev/null +++ b/apps/example/src/Examples/API/GlyphBounds.tsx @@ -0,0 +1,273 @@ +import React, { useEffect, useMemo } from "react"; +import { + Platform, + StyleSheet, + Text, + View, + useWindowDimensions, +} from "react-native"; +import type { + Glyph, + SkFont, + SkPoint, + SkRect, +} from "@shopify/react-native-skia"; +import { + Canvas, + Glyphs, + Group, + Path, + RoundedRect, + Skia, + useFonts, + vec, +} from "@shopify/react-native-skia"; +import type { SharedValue } from "react-native-reanimated"; +import { + Easing, + useDerivedValue, + useSharedValue, + withRepeat, + withTiming, +} from "react-native-reanimated"; + +const PADDING = 32; +const PALETTE = ["#e4667e", "#f5a623", "#61bea2", "#5b8def"]; +// Timeline: center-out reveal, stroke hands over to the fill, short hold, +// then every glyph drops off the canvas under gravity. +const REVEAL_END = 0.45; +const FILL_END = 0.6; +const DROP_START = 0.72; + +// Deterministic pseudo-random in [0, 1) so each glyph falls its own way. +const shuffle = (index: number) => { + "worklet"; + const x = Math.sin((index + 1) * 12.9898) * 43758.5453; + return x - Math.floor(x); +}; + +interface GlyphItem { + // Tight ink bounds of the glyph, in paragraph coordinates. + rect: SkRect; + // Glyph id and baseline position for the Glyphs component. + glyph: Glyph; + // The resolved font of the run (the fallback font, if any). + font: SkFont; + center: SkPoint; +} + +interface FallingGlyphProps { + item: GlyphItem; + index: number; + count: number; + dropHeight: number; + progress: SharedValue; +} + +const FallingGlyph = ({ + item, + index, + count, + dropHeight, + progress, +}: FallingGlyphProps) => { + // The box pops in when the center-out path reveal reaches its glyph. The + // reveal overshoots slightly so the outermost boxes still reach full + // opacity by the end of the sweep. + const boxOpacity = useDerivedValue(() => { + const reveal = Math.min(1, progress.value / REVEAL_END) * 1.2; + const middle = (count - 1) / 2; + const distance = Math.abs(index - middle) / Math.max(1, middle); + return Math.min(1, Math.max(0, (reveal - distance) * 6)); + }); + const glyphOpacity = useDerivedValue(() => + Math.min( + 1, + Math.max(0, (progress.value - REVEAL_END) / (FILL_END - REVEAL_END)) + ) + ); + const transform = useDerivedValue(() => { + const drop = Math.max(0, (progress.value - DROP_START) / (1 - DROP_START)); + const rnd = shuffle(index); + // Staggered release, then a free fall with a little drift and spin. + const t = Math.max(0, drop - rnd * 0.3) / 0.7; + return [ + { translateX: (rnd - 0.5) * 120 * t }, + { translateY: dropHeight * 1.3 * t * t }, + { rotate: (rnd - 0.5) * 3 * t }, + ]; + }); + return ( + + + + + ); +}; + +const GlyphBoundsDemo = () => { + const { width, height } = useWindowDimensions(); + const progress = useSharedValue(0); + + useEffect(() => { + progress.value = withRepeat( + withTiming(1, { duration: 8000, easing: Easing.linear }), + -1, + false + ); + }, [progress]); + + const customFontMgr = useFonts({ + "Roboto": [ + require("../../Tests/assets/Roboto-Medium.ttf"), + require("../../Tests/assets/Roboto-Regular.ttf"), + ], + "Noto Sans SC": [require("../../Tests/assets/NotoSansSC-Regular.otf")], + }); + + const layoutWidth = width - PADDING * 2; + const layout = useMemo(() => { + if (customFontMgr === null) { + return null; + } + const builder = Skia.ParagraphBuilder.Make({}, customFontMgr); + builder.pushStyle({ + fontFamilies: ["Roboto", "Noto Sans SC"], + fontSize: 32, + color: Skia.Color("#1e1e24"), + }); + builder.addText( + "Skia knows the exact ink bounds of every glyph, even 你好 shaped via font fallback" + ); + const paragraph = builder.build(); + paragraph.layout(layoutWidth); + // extendedVisit() exposes the exact glyph layout that gets painted: the + // resolved font, glyph ids, positions and per-glyph tight ink bounds. + // Keeping each glyph separate lets us animate them individually. + const items: GlyphItem[] = []; + paragraph.extendedVisit((_lineNumber, info) => { + if (info === null) { + // end of line + return; + } + for (let i = 0; i < info.glyphs.length; i++) { + const bounds = info.bounds[i]; + if (bounds.width === 0 || bounds.height === 0) { + // whitespace has no ink + continue; + } + // positions are relative to the run origin, bounds to the glyph + // origin: adding all three yields paragraph coordinates. + const x = info.origin.x + info.positions[i].x; + const y = info.origin.y + info.positions[i].y; + const rect = Skia.XYWHRect( + x + bounds.x, + y + bounds.y, + bounds.width, + bounds.height + ); + items.push({ + rect, + glyph: { id: info.glyphs[i], pos: vec(x, y) }, + font: info.font, + center: vec(rect.x + rect.width / 2, rect.y + rect.height / 2), + }); + } + }); + // getPath() turns the same laid out glyphs into an SkPath used for the + // trim reveal below. + const path = Skia.Path.Make(); + paragraph.getLineMetrics().forEach(({ lineNumber }) => { + const line = paragraph.getPath(lineNumber); + if (line) { + path.addPath(line); + } + }); + return { path, items, height: paragraph.getHeight() }; + }, [customFontMgr, layoutWidth]); + + // The stroke reveals the text from the center of the path outwards, going + // from trim (0.5, 0.5) to (0, 1), then hands over to the fill. + const start = useDerivedValue( + () => 0.5 * (1 - Math.min(1, progress.value / REVEAL_END)) + ); + const end = useDerivedValue( + () => 0.5 * (1 + Math.min(1, progress.value / REVEAL_END)) + ); + const strokeOpacity = useDerivedValue( + () => + 1 - + Math.min( + 1, + Math.max(0, (progress.value - REVEAL_END) / (FILL_END - REVEAL_END)) + ) + ); + + if (layout === null) { + return null; + } + return ( + + + {layout.items.map((item, index) => ( + + ))} + + + + ); +}; + +export const GlyphBounds = () => { + if (Platform.OS === "web") { + return ( + + + Paragraph.extendedVisit() is not implemented on React Native Web. + + + ); + } + return ; +}; + +const styles = StyleSheet.create({ + fallback: { + flex: 1, + alignItems: "center", + justifyContent: "center", + padding: PADDING, + }, +}); diff --git a/apps/example/src/Examples/API/List.tsx b/apps/example/src/Examples/API/List.tsx index b72e613ae8..305fa8f203 100644 --- a/apps/example/src/Examples/API/List.tsx +++ b/apps/example/src/Examples/API/List.tsx @@ -34,6 +34,14 @@ export const examples = [ screen: "Paragraphs2", title: "📚 Text & Paragraphs 2", }, + { + screen: "ParagraphPath", + title: "✍️ Paragraph to Path", + }, + { + screen: "GlyphBounds", + title: "🔠 Glyph Bounds", + }, { screen: "Clipping", title: "✂️ & 🎭 Clipping & Masking", diff --git a/apps/example/src/Examples/API/ParagraphPath.tsx b/apps/example/src/Examples/API/ParagraphPath.tsx new file mode 100644 index 0000000000..44cc94b131 --- /dev/null +++ b/apps/example/src/Examples/API/ParagraphPath.tsx @@ -0,0 +1,151 @@ +import React, { useEffect, useMemo } from "react"; +import { + Platform, + ScrollView, + StyleSheet, + Text, + View, + useWindowDimensions, +} from "react-native"; +import { + Canvas, + FontWeight, + Group, + LinearGradient, + Path, + Skia, + TextAlign, + useFonts, + vec, +} from "@shopify/react-native-skia"; +import { + Easing, + useDerivedValue, + useSharedValue, + withRepeat, + withTiming, +} from "react-native-reanimated"; + +const PADDING = 32; +const PALETTE = ["#e4667e", "#f5a623", "#61bea2", "#5b8def"]; + +const ParagraphPathDemo = () => { + const { width } = useWindowDimensions(); + const progress = useSharedValue(0); + + useEffect(() => { + progress.value = withRepeat( + withTiming(1, { duration: 4000, easing: Easing.inOut(Easing.cubic) }), + -1, + true + ); + }, [progress]); + + const customFontMgr = useFonts({ + Roboto: [ + require("../../Tests/assets/Roboto-Medium.ttf"), + require("../../Tests/assets/Roboto-Regular.ttf"), + ], + }); + + const contentWidth = width - PADDING * 2; + const layout = useMemo(() => { + if (customFontMgr === null) { + return null; + } + // The paragraph style is baked into the path: the centered line breaks + // below come from the paragraph layout, not from manual positioning. + const builder = Skia.ParagraphBuilder.Make( + { textAlign: TextAlign.Center }, + customFontMgr + ); + builder.pushStyle({ + fontFamilies: ["Roboto"], + fontSize: 48, + fontStyle: { weight: FontWeight.Bold }, + color: Skia.Color("black"), + }); + builder.addText("Can it be done in React Native?"); + const paragraph = builder.build(); + paragraph.layout(contentWidth); + // getPath() converts the glyphs of a laid out line into an SkPath, with + // all font fallbacks already applied. Merge the lines into a single path. + const path = Skia.Path.Make(); + paragraph.getLineMetrics().forEach(({ lineNumber }) => { + const line = paragraph.getPath(lineNumber); + if (line) { + path.addPath(line); + } + }); + return { path, height: paragraph.getHeight() }; + }, [customFontMgr, contentWidth]); + + // The stroke reveals the text from the center of the path outwards, going + // from trim (0.5, 0.5) to (0, 1); the fill fades in once it completes. + const start = useDerivedValue( + () => 0.5 * (1 - Math.min(1, progress.value / 0.7)) + ); + const end = useDerivedValue( + () => 0.5 * (1 + Math.min(1, progress.value / 0.7)) + ); + const fillOpacity = useDerivedValue(() => + Math.max(0, (progress.value - 0.7) / 0.3) + ); + // The stroke hands over to the fill: at the end only the fill remains. + const strokeOpacity = useDerivedValue(() => 1 - fillOpacity.value); + + if (layout === null) { + return null; + } + return ( + + + + + + + + + + + + + ); +}; + +export const ParagraphPath = () => { + if (Platform.OS === "web") { + return ( + + Paragraph.getPath() is not implemented on React Native Web. + + ); + } + return ; +}; + +const styles = StyleSheet.create({ + fallback: { + flex: 1, + alignItems: "center", + justifyContent: "center", + padding: PADDING, + }, +}); diff --git a/apps/example/src/Examples/API/Routes.ts b/apps/example/src/Examples/API/Routes.ts index 169e13443c..e69add788b 100644 --- a/apps/example/src/Examples/API/Routes.ts +++ b/apps/example/src/Examples/API/Routes.ts @@ -27,6 +27,8 @@ export type Routes = { IconsExample: undefined; Paragraphs: undefined; Paragraphs2: undefined; + ParagraphPath: undefined; + GlyphBounds: undefined; Skottie: undefined; StressTest: undefined; StressTest2: undefined; diff --git a/apps/example/src/Examples/API/WebMemory.tsx b/apps/example/src/Examples/API/WebMemory.tsx index 27690475f2..d994f2a330 100644 --- a/apps/example/src/Examples/API/WebMemory.tsx +++ b/apps/example/src/Examples/API/WebMemory.tsx @@ -130,8 +130,8 @@ export const WebMemory = () => { 196 animated dots allocate short-lived CanvasKit WASM objects on every frame. This used to leak ~4 MB/s until the page crashed; the renderer - now disposes them, so the malloc high-water mark should stay flat. If - it climbs steadily, a disposal regression has been introduced. + now disposes them, so the malloc high-water mark should stay flat. If it + climbs steadily, a disposal regression has been introduced. {Array.from({ length: GRID * GRID }, (_, i) => ( diff --git a/apps/example/src/Examples/API/index.tsx b/apps/example/src/Examples/API/index.tsx index 80267b04f3..6f10aa05f8 100644 --- a/apps/example/src/Examples/API/index.tsx +++ b/apps/example/src/Examples/API/index.tsx @@ -30,6 +30,8 @@ import { FontMgr } from "./FontMgr"; import { AnimatedImages } from "./AnimatedImages"; import { Paragraphs } from "./Paragraphs"; import { Paragraphs2 } from "./Paragraphs2"; +import { ParagraphPath } from "./ParagraphPath"; +import { GlyphBounds } from "./GlyphBounds"; import { Skottie } from "./Skottie"; import { StressTest } from "./StressTest"; import { StressTest2 } from "./StressTest2"; @@ -107,6 +109,20 @@ export const API = () => { title: "📚 Text & Paragraphs 2", }} /> + + = { ImageLoading: "image-loading", Paragraphs: "paragraphs", Paragraphs2: "paragraphs2", + ParagraphPath: "paragraph-path", + GlyphBounds: "glyph-bounds", Clipping: "clipping", Touch: "touch", Snapshot: "snapshot", diff --git a/packages/skia/cpp/api/JsiSkParagraph.h b/packages/skia/cpp/api/JsiSkParagraph.h index 3194109308..2657296ac9 100644 --- a/packages/skia/cpp/api/JsiSkParagraph.h +++ b/packages/skia/cpp/api/JsiSkParagraph.h @@ -8,6 +8,7 @@ #include #include "JsiSkCanvas.h" +#include "JsiSkFont.h" #include "JsiSkHostObjects.h" #include "JsiSkPath.h" #include "JsiSkRect.h" @@ -141,6 +142,117 @@ class JsiSkParagraph return returnValue; } + JSI_HOST_FUNCTION(getPath) { + auto lineNumber = + static_cast(getArgumentAsNumber(runtime, arguments, count, 0)); + auto paragraph = getObject(); + // Paragraph::getPath does not bounds-check the line number. + if (lineNumber < 0 || + static_cast(lineNumber) >= paragraph->lineNumber()) { + return jsi::Value::null(); + } + // Paragraph::getPath resets its path builder after every visual run, so + // for lines shaped as multiple runs (e.g. through font fallback) it only + // returns the glyphs of the last run. Build the path from the per-glyph + // data exposed by extendedVisit instead. + SkPathBuilder builder; + paragraph->extendedVisit( + [lineNumber, &builder]( + int visitedLine, const para::Paragraph::ExtendedVisitorInfo *info) { + if (visitedLine != lineNumber || info == nullptr) { + return; + } + struct Rec { + SkPathBuilder *builder; + SkPoint origin; + const SkPoint *pos; + } rec = {&builder, info->origin, info->positions}; + info->font.getPaths( + {info->glyphs, static_cast(info->count)}, + [](const SkPath *src, const SkMatrix &mx, void *ctx) { + auto *rec = static_cast(ctx); + if (src != nullptr) { + SkMatrix total = mx; + total.postTranslate(rec->origin.fX + rec->pos->fX, + rec->origin.fY + rec->pos->fY); + rec->builder->addPath(*src, total); + } + rec->pos += 1; + }, + &rec); + }); + SkPath path = builder.detach(); + auto hostObjectInstance = + std::make_shared(getContext(), std::move(path)); + return JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE( + runtime, hostObjectInstance, getContext()); + } + + JSI_HOST_FUNCTION(extendedVisit) { + auto visitorObject = getArgumentAsFunction(runtime, arguments, count, 0); + auto visitor = visitorObject.asFunction(runtime); + auto context = getContext(); + getObject()->extendedVisit( + [&runtime, &visitor, &context]( + int lineNumber, const para::Paragraph::ExtendedVisitorInfo *info) { + if (info == nullptr) { + // Signals the end of the line + visitor.call(runtime, static_cast(lineNumber), + jsi::Value::null()); + return; + } + auto value = jsi::Object(runtime); + + auto fontInstance = std::make_shared(context, info->font); + value.setProperty(runtime, "font", + JSI_CREATE_HOST_OBJECT_WITH_MEMORY_PRESSURE( + runtime, fontInstance, context)); + + auto origin = jsi::Object(runtime); + origin.setProperty(runtime, "x", + static_cast(info->origin.x())); + origin.setProperty(runtime, "y", + static_cast(info->origin.y())); + value.setProperty(runtime, "origin", origin); + + auto advance = jsi::Object(runtime); + advance.setProperty(runtime, "width", + static_cast(info->advance.width())); + advance.setProperty(runtime, "height", + static_cast(info->advance.height())); + value.setProperty(runtime, "advance", advance); + + auto size = info->count; + auto glyphs = jsi::Array(runtime, size); + auto positions = jsi::Array(runtime, size); + auto bounds = jsi::Array(runtime, size); + auto utf8Starts = jsi::Array(runtime, size); + for (int i = 0; i < size; ++i) { + glyphs.setValueAtIndex(runtime, i, + static_cast(info->glyphs[i])); + auto position = jsi::Object(runtime); + position.setProperty(runtime, "x", + static_cast(info->positions[i].x())); + position.setProperty(runtime, "y", + static_cast(info->positions[i].y())); + positions.setValueAtIndex(runtime, i, position); + bounds.setValueAtIndex( + runtime, i, + JsiSkRect::toValue(runtime, context, info->bounds[i])); + utf8Starts.setValueAtIndex( + runtime, i, static_cast(info->utf8Starts[i])); + } + value.setProperty(runtime, "glyphs", glyphs); + value.setProperty(runtime, "positions", positions); + value.setProperty(runtime, "bounds", bounds); + value.setProperty(runtime, "utf8Starts", utf8Starts); + value.setProperty(runtime, "flags", static_cast(info->flags)); + + visitor.call(runtime, static_cast(lineNumber), value); + }); + return jsi::Value::undefined(); + } + JSI_HOST_FUNCTION(getRectsForPlaceholders) { std::vector placeholderInfos = getObject()->getRectsForPlaceholders(); @@ -169,6 +281,8 @@ class JsiSkParagraph getGlyphPositionAtCoordinate), JSI_EXPORT_FUNC(JsiSkParagraph, getRectsForRange), JSI_EXPORT_FUNC(JsiSkParagraph, getLineMetrics), + JSI_EXPORT_FUNC(JsiSkParagraph, getPath), + JSI_EXPORT_FUNC(JsiSkParagraph, extendedVisit), JSI_EXPORT_FUNC(JsiSkParagraph, dispose)) size_t getMemoryPressure() const override { return 1024 * 1024; } diff --git a/packages/skia/src/__tests__/snapshots/paragraph/paragraph-glyph-bounding-boxes-ios.png b/packages/skia/src/__tests__/snapshots/paragraph/paragraph-glyph-bounding-boxes-ios.png new file mode 100644 index 0000000000000000000000000000000000000000..2aa3a4ade042290b19aa650a1d5c304deb9aa8be GIT binary patch literal 17051 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 literal 0 HcmV?d00001 diff --git a/packages/skia/src/__tests__/snapshots/paragraph/paragraph-glyph-tight-bounds-ios.png b/packages/skia/src/__tests__/snapshots/paragraph/paragraph-glyph-tight-bounds-ios.png new file mode 100644 index 0000000000000000000000000000000000000000..cb6e1a75790806e4b3e4978271ff76b43b10f19f GIT binary patch literal 24064 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 WU;e08NQYBTQaf>4IYZIR@Baa22zWpM literal 0 HcmV?d00001 diff --git a/packages/skia/src/__tests__/snapshots/paragraph/paragraph-metrics-bounds-ios.png b/packages/skia/src/__tests__/snapshots/paragraph/paragraph-metrics-bounds-ios.png new file mode 100644 index 0000000000000000000000000000000000000000..9be029331fda272c0329520c711db805eb661b46 GIT binary patch literal 15228 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 Z6IyCzu@=AArl8X#=o;yyAOGv-{{Tpnq)-3= literal 0 HcmV?d00001 diff --git a/packages/skia/src/__tests__/snapshots/paragraph/paragraph-metrics-bounds-node.png b/packages/skia/src/__tests__/snapshots/paragraph/paragraph-metrics-bounds-node.png new file mode 100644 index 0000000000000000000000000000000000000000..4787b2898961cc8b14577b4cdbb4fd5ecc0321e4 GIT binary patch literal 13413 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 J9KU$$zX1E?Q;`4w literal 0 HcmV?d00001 diff --git a/packages/skia/src/__tests__/snapshots/paragraph/paragraph-path-segment-ios.png b/packages/skia/src/__tests__/snapshots/paragraph/paragraph-path-segment-ios.png new file mode 100644 index 0000000000000000000000000000000000000000..94266b23587193b6ab333c085bfcebf252c4d491 GIT binary patch literal 12281 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 literal 0 HcmV?d00001 diff --git a/packages/skia/src/__tests__/snapshots/platform-buffer.png b/packages/skia/src/__tests__/snapshots/platform-buffer.png index d932bd16a56a9819dd8e701a1e207f68969319b9..e54a481770c88d9b55a0bbb0c46c46bad7894dc7 100644 GIT binary patch literal 95379 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

Tek`Iu*K=cCQ?j_vBHyxC8_;Z(}1OsHXqG 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¥NOyGI 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

jM zs9iu($H#W5qQ&}(d!_8UykULSy@u(jX@i84?INSW@axp3Pbuw;_8U5j5Xsy=gV9V~V7Bh|uM8dkNO9N~aFD*p^3ng)jCQ^*V*fJ^@!V`=GQZjd0 zzOS06Iw;VQfA0oW4FpjeTbd2lF41-s)8rI?_$k2~?2s#cUGcUUJ!r$P9i+u1^eg|v2205@$lkYd1q;5JJ*dZf{x}t zf2+5u$1k7Uy*9W%t(Y#4tmefkS9JD+cV`1HrSc#Rh==W2CdQDk^!LpU_0it8$|73O=iFk0|t0aMJ zmo@uqdH}wjhQZ4Aj9lg1O68o2NF@6s#}yPJF`}z|- zL;tIz=l|=FWn7}5rJ)qJEit;6f*!V@1lz$bW zER%0PPEhvQ3GI=9d>p}?_-UMO()3BTb zeFK)Q46r|5F<`0vvbYHrrwI6Ezx5Yw^^?~z6FHw}RPoyJDD!xU_W~k_ikqQJB`z+7 zKwlssr(@BSJAK42EN{%B*(h{rsid=dGxOnZ`dfIi0KB?N^TFbsnM2%_0DKK)vm!pg zjPjF?8Rc+)kRb~Tj6WvtQF5xPA?U%F8<~RF(M^1K0G?mv98Q53Xc$&~F+jwlK-OSj zB8qU&CcgB+3UXy7I>r z-rR^tefpGwjyvh8$-)801Fe$l(P<7GR52}9CgSy7Ol~7oZT$S;A$v8U-tI75af>fl zP%5QOOJ()w-IhjV4L7QVM0F)tqDOkqH0saW@#@*1B161vX34q?P;L?QeW6n+1FaS3 z-^YuQVZZU~Hx6)pTv$291s<Y*o#%M2 zCl|A;6uN(nZyiU)3}XCtxWO$y%N)P)hXy*>8c4Z~UGv+VcHhYx3wkg$#XB<063F;@#IE(|_xm2jg%rIDPQ(cz$0mGmtxlr`qlwv?`3 z0KGvUmJLgJLu;mDr=z=^6nMXqj#&CA))zbMZS$H<#Xl_bvcMGc6f+)B|>x`aarcAH*%UsLPsxo?MV` zVIAg?9qHd17j=A$aimIm%$(~_4-%G{Te-5)AVG8<0 z(!Avo-v2W$p}TX&F9WpI|6f~q&uxHZSd?cU5_u%%iac`jKpw%aD~vFmlTqNSsnKPc z8s=9&HeUM88n6BP_l4f*{LGe~=LW+sMV!fn5qUvgQ&aNjx6a4(xXkFv%5E9d8XX;%WQC}dZ_E?_>{$;odUR%2(9qD8q&9x> z^)HHDx2tRCzk>y<fSC_w+Z<_$OsOA literal 144440 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 T5@)=q0nDW+rzTr2jR^T4TFZ>b diff --git a/packages/skia/src/renderer/__tests__/e2e/ParagraphGlyphs.spec.tsx b/packages/skia/src/renderer/__tests__/e2e/ParagraphGlyphs.spec.tsx new file mode 100644 index 0000000000..256fe4eddf --- /dev/null +++ b/packages/skia/src/renderer/__tests__/e2e/ParagraphGlyphs.spec.tsx @@ -0,0 +1,562 @@ +import { resolveFile, surface } from "../setup"; +import { checkImage, itRunsE2eOnly } from "../../../__tests__/setup"; +import { PaintStyle } from "../../../skia/types"; + +const RobotoRegular = Array.from( + resolveFile("skia/__tests__/assets/Roboto-Regular.ttf") +); + +const NotoSansSC = Array.from( + resolveFile("skia/__tests__/assets/NotoSansSC-Regular.otf") +); + +// getPath() and extendedVisit() are implemented on iOS/Android only +// (throwNotImplementedOnRNWeb on React Native Web), so these tests only run +// against a device (E2E). They cover the use case from +// https://github.com/Shopify/react-native-skia/issues/3493: measuring text +// with font fallback while getting bounds tight to the actual glyphs. +describe("Paragraph glyph-level APIs", () => { + describe("getPath", () => { + itRunsE2eOnly( + "should return ink bounds that adapt to the glyphs, unlike getRectsForRange", + async () => { + const result = await surface.eval( + (Skia, ctx) => { + const typeface = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(typeface, "Roboto"); + const measure = (text: string) => { + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto"], + fontSize: 24, + }); + builder.addText(text); + const paragraph = builder.build(); + paragraph.layout(512); + const path = paragraph.getPath(0)!; + const tightBounds = path.computeTightBounds(); + return { + inkHeight: tightBounds.height, + inkWidth: tightBounds.width, + rectHeight: paragraph.getRectsForRange(0, text.length)[0] + .height, + }; + }; + return { + hello: measure("Hello"), + typography: measure("Typography"), + }; + }, + { RobotoRegular } + ); + // The path is tight to the glyph ink: "Hello" has no descenders and + // measures smaller than "Typography"... + expect(result.hello.inkHeight).toBeGreaterThan(0); + expect(result.hello.inkHeight).toBeLessThan( + result.typography.inkHeight + ); + // ...while getRectsForRange returns the same metrics-based height for + // both strings, larger than the ink bounds. + expect(result.hello.rectHeight).toBeCloseTo( + result.typography.rectHeight, + 3 + ); + expect(result.hello.inkHeight).toBeLessThan(result.hello.rectHeight); + expect(result.typography.inkHeight).toBeLessThan( + result.typography.rectHeight + ); + } + ); + + itRunsE2eOnly( + "should include the glyphs resolved through font fallback", + async () => { + const result = await surface.eval( + (Skia, ctx) => { + const roboto = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const noto = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.NotoSansSC)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(roboto, "Roboto"); + provider.registerFont(noto, "Noto Sans SC"); + const measure = (text: string) => { + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto", "Noto Sans SC"], + fontSize: 24, + }); + builder.addText(text); + const paragraph = builder.build(); + paragraph.layout(512); + const tightBounds = paragraph.getPath(0)!.computeTightBounds(); + return { width: tightBounds.width, height: tightBounds.height }; + }; + return { + mixed: measure("Hello你好"), + latinOnly: measure("Hello"), + }; + }, + { RobotoRegular, NotoSansSC } + ); + // The path contains the ink of the CJK glyphs shaped through the + // fallback font, so it is wider than the latin-only text. + expect(result.mixed.width).toBeGreaterThan(result.latinOnly.width); + expect(result.mixed.height).toBeGreaterThanOrEqual( + result.latinOnly.height + ); + } + ); + + itRunsE2eOnly("should return a path for every line", async () => { + const result = await surface.eval( + (Skia, ctx) => { + const typeface = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(typeface, "Roboto"); + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto"], + fontSize: 24, + }); + builder.addText("First line\nSecond line"); + const paragraph = builder.build(); + paragraph.layout(512); + const toPlain = (r: { + x: number; + y: number; + width: number; + height: number; + }) => ({ x: r.x, y: r.y, width: r.width, height: r.height }); + return { + line0: toPlain(paragraph.getPath(0)!.computeTightBounds()), + line1: toPlain(paragraph.getPath(1)!.computeTightBounds()), + }; + }, + { RobotoRegular } + ); + expect(result.line0.width).toBeGreaterThan(0); + expect(result.line1.width).toBeGreaterThan(0); + // The second line is laid out below the first one. + expect(result.line1.y).toBeGreaterThan(result.line0.y); + }); + + itRunsE2eOnly( + "should return null for an out of bounds line number", + async () => { + const result = await surface.eval( + (Skia, ctx) => { + const typeface = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(typeface, "Roboto"); + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto"], + fontSize: 24, + }); + builder.addText("Hello"); + const paragraph = builder.build(); + paragraph.layout(512); + return { + negative: paragraph.getPath(-1) === null, + tooLarge: paragraph.getPath(1) === null, + valid: paragraph.getPath(0) !== null, + }; + }, + { RobotoRegular } + ); + expect(result.negative).toBe(true); + expect(result.tooLarge).toBe(true); + expect(result.valid).toBe(true); + } + ); + }); + + describe("extendedVisit", () => { + itRunsE2eOnly( + "should visit one run per resolved font with per-glyph layout info", + async () => { + const result = await surface.eval( + (Skia, ctx) => { + const roboto = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const noto = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.NotoSansSC)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(roboto, "Roboto"); + provider.registerFont(noto, "Noto Sans SC"); + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto", "Noto Sans SC"], + fontSize: 24, + }); + // "Hello" shapes with Roboto, "你好" with the fallback font: two + // runs on a single line. + builder.addText("Hello你好"); + const paragraph = builder.build(); + paragraph.layout(512); + const runs: Array<{ + lineNumber: number; + fontSize: number; + glyphs: number[]; + positions: Array<{ x: number; y: number }>; + bounds: Array<{ + x: number; + y: number; + width: number; + height: number; + }>; + utf8Starts: number[]; + originX: number; + originY: number; + advanceWidth: number; + flags: number; + }> = []; + let endOfLines = 0; + paragraph.extendedVisit((lineNumber, info) => { + if (info === null) { + endOfLines++; + return; + } + runs.push({ + lineNumber, + fontSize: info.font.getSize(), + glyphs: info.glyphs, + positions: info.positions.map((p) => ({ x: p.x, y: p.y })), + bounds: info.bounds.map((b) => ({ + x: b.x, + y: b.y, + width: b.width, + height: b.height, + })), + utf8Starts: info.utf8Starts, + originX: info.origin.x, + originY: info.origin.y, + advanceWidth: info.advance.width, + flags: info.flags, + }); + }); + return { runs, endOfLines }; + }, + { RobotoRegular, NotoSansSC } + ); + // A single line, ended once, shaped as two runs (Roboto + fallback). + expect(result.endOfLines).toBe(1); + expect(result.runs).toHaveLength(2); + const [latin, cjk] = result.runs; + expect(latin.lineNumber).toBe(0); + expect(cjk.lineNumber).toBe(0); + // The resolved font is exposed for each run. + expect(latin.fontSize).toBe(24); + expect(cjk.fontSize).toBe(24); + // "Hello" is 5 glyphs, "你好" is 2 glyphs, all resolved (no .notdef). + expect(latin.glyphs).toHaveLength(5); + expect(cjk.glyphs).toHaveLength(2); + expect(latin.glyphs.every((g) => g !== 0)).toBe(true); + expect(cjk.glyphs.every((g) => g !== 0)).toBe(true); + for (const run of result.runs) { + // Every glyph comes with a position, tight ink bounds and the + // utf8 index of its cluster. + expect(run.positions).toHaveLength(run.glyphs.length); + expect(run.bounds).toHaveLength(run.glyphs.length); + expect(run.utf8Starts).toHaveLength(run.glyphs.length); + expect(run.bounds.every((b) => b.width > 0 && b.height > 0)).toBe( + true + ); + // "Hello你好" is 11 bytes in utf8 (5 + 2 * 3). + expect(run.utf8Starts.every((u) => u >= 0 && u < 11)).toBe(true); + expect(run.advanceWidth).toBeGreaterThan(0); + expect(run.flags).toBe(0); + } + // The glyph ink bounds adapt to the actual glyphs: "Hello" has no + // descenders, so its tallest glyph ink is smaller than the + // metrics-based line height (~28 for Roboto at fontSize 24). + const maxLatinInk = Math.max(...latin.bounds.map((b) => b.height)); + expect(maxLatinInk).toBeGreaterThan(0); + expect(maxLatinInk).toBeLessThan(24); + // The CJK run starts after the latin run. Glyph positions are + // relative to the run origin, so the run placement is carried by + // origin.x (positions[0].x is 0 for a run shaped through fallback). + expect(cjk.originX + cjk.positions[0].x).toBeGreaterThan( + latin.originX + latin.positions[0].x + ); + } + ); + + itRunsE2eOnly( + "should signal the end of each line with a null info", + async () => { + const result = await surface.eval( + (Skia, ctx) => { + const typeface = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(typeface, "Roboto"); + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto"], + fontSize: 24, + }); + builder.addText("Hello\nWorld"); + const paragraph = builder.build(); + paragraph.layout(512); + const visits: Array<{ lineNumber: number; isEndOfLine: boolean }> = + []; + paragraph.extendedVisit((lineNumber, info) => { + visits.push({ lineNumber, isEndOfLine: info === null }); + }); + return visits; + }, + { RobotoRegular } + ); + // Two lines: each visited with at least one run followed by a null. + expect(result.filter((v) => v.isEndOfLine)).toHaveLength(2); + expect( + result.filter((v) => !v.isEndOfLine && v.lineNumber === 0).length + ).toBeGreaterThan(0); + expect( + result.filter((v) => !v.isEndOfLine && v.lineNumber === 1).length + ).toBeGreaterThan(0); + // Line 0 is visited before line 1, each terminated by its own null. + const lineNumbers = result.map((v) => v.lineNumber); + expect(lineNumbers).toEqual([...lineNumbers].sort((a, b) => a - b)); + } + ); + + itRunsE2eOnly( + "should produce glyph bounds that match the line path", + async () => { + const result = await surface.eval( + (Skia, ctx) => { + const typeface = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(typeface, "Roboto"); + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto"], + fontSize: 72, + }); + builder.addText("Hello"); + const paragraph = builder.build(); + paragraph.layout(512); + // The union of the positioned glyph ink bounds... + let left = Infinity; + let top = Infinity; + let right = -Infinity; + let bottom = -Infinity; + paragraph.extendedVisit((_lineNumber, info) => { + if (info === null) { + return; + } + for (let i = 0; i < info.glyphs.length; i++) { + const x = info.origin.x + info.positions[i].x; + const y = info.origin.y + info.positions[i].y; + left = Math.min(left, x + info.bounds[i].x); + top = Math.min(top, y + info.bounds[i].y); + right = Math.max( + right, + x + info.bounds[i].x + info.bounds[i].width + ); + bottom = Math.max( + bottom, + y + info.bounds[i].y + info.bounds[i].height + ); + } + }); + // ...should match the tight bounds of the line path. + const pathBounds = paragraph.getPath(0)!.computeTightBounds(); + return { + union: { left, top, right, bottom }, + path: { + left: pathBounds.x, + top: pathBounds.y, + right: pathBounds.x + pathBounds.width, + bottom: pathBounds.y + pathBounds.height, + }, + }; + }, + { RobotoRegular } + ); + // Both express the ink bounds of the same glyphs in paragraph + // coordinates; allow a small tolerance for path conversion rounding. + expect(Math.abs(result.union.left - result.path.left)).toBeLessThan(2); + expect(Math.abs(result.union.top - result.path.top)).toBeLessThan(2); + expect(Math.abs(result.union.right - result.path.right)).toBeLessThan( + 2 + ); + expect(Math.abs(result.union.bottom - result.path.bottom)).toBeLessThan( + 2 + ); + } + ); + }); + + describe("drawing", () => { + itRunsE2eOnly("should draw a segment of the paragraph path", async () => { + const img = await surface.drawOffscreen( + (Skia, canvas, ctx) => { + canvas.drawColor(Skia.Color("white")); + const typeface = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(typeface, "Roboto"); + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto"], + fontSize: 72, + }); + builder.addText("Hello"); + const paragraph = builder.build(); + paragraph.layout(ctx.width); + // Draw only the first half of the text outline. + const path = paragraph.getPath(0)!; + const segment = path.trim(0, 0.5, false)!; + const paint = Skia.Paint(); + paint.setColor(Skia.Color("black")); + paint.setStyle(ctx.Stroke); + paint.setStrokeWidth(2); + canvas.drawPath(segment, paint); + }, + { + RobotoRegular, + Stroke: PaintStyle.Stroke, + width: surface.width, + } + ); + checkImage( + img, + `snapshots/paragraph/paragraph-path-segment-${surface.OS}.png`, + { maxPixelDiff: 300 } + ); + }); + + itRunsE2eOnly( + "should draw the tight bounding box of each glyph on top of the paragraph", + async () => { + const img = await surface.drawOffscreen( + (Skia, canvas, ctx) => { + canvas.drawColor(Skia.Color("white")); + const roboto = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const noto = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.NotoSansSC)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(roboto, "Roboto"); + provider.registerFont(noto, "Noto Sans SC"); + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto", "Noto Sans SC"], + fontSize: 54, + }); + builder.addText("Hello你好"); + const paragraph = builder.build(); + paragraph.layout(ctx.width); + paragraph.paint(canvas, 0, 0); + // Draw the tight ink bounds of every glyph on top, including the + // glyphs shaped through the fallback font. + const paint = Skia.Paint(); + paint.setColor(Skia.Color("magenta")); + paint.setStyle(ctx.Stroke); + paint.setStrokeWidth(1); + paragraph.extendedVisit((_lineNumber, info) => { + if (info === null) { + return; + } + for (let i = 0; i < info.glyphs.length; i++) { + canvas.drawRect( + Skia.XYWHRect( + info.origin.x + info.positions[i].x + info.bounds[i].x, + info.origin.y + info.positions[i].y + info.bounds[i].y, + info.bounds[i].width, + info.bounds[i].height + ), + paint + ); + } + }); + }, + { + RobotoRegular, + NotoSansSC, + Stroke: PaintStyle.Stroke, + width: surface.width, + } + ); + checkImage( + img, + `snapshots/paragraph/paragraph-glyph-tight-bounds-${surface.OS}.png` + ); + } + ); + + // This one only uses the pre-existing Paragraph API, so it also runs on + // node/web: the metrics-based bounds are available on every platform. + it("should draw the metrics-based (non-tight) bounding box on top of the paragraph", async () => { + const img = await surface.drawOffscreen( + (Skia, canvas, ctx) => { + canvas.drawColor(Skia.Color("white")); + const typeface = Skia.Typeface.MakeFreeTypeFaceFromData( + Skia.Data.fromBytes(new Uint8Array(ctx.RobotoRegular)) + )!; + const provider = Skia.TypefaceFontProvider.Make(); + provider.registerFont(typeface, "Roboto"); + const builder = Skia.ParagraphBuilder.Make({}, provider); + builder.pushStyle({ + color: Skia.Color("black"), + fontFamilies: ["Roboto"], + fontSize: 72, + }); + builder.addText("Hello"); + const paragraph = builder.build(); + paragraph.layout(ctx.width); + paragraph.paint(canvas, 0, 0); + // The rects returned by getRectsForRange reserve the full + // ascent/descent of the font: the box is visibly taller than the + // glyph ink ("Hello" has no descenders). + const paint = Skia.Paint(); + paint.setColor(Skia.Color("magenta")); + paint.setStyle(ctx.Stroke); + paint.setStrokeWidth(1); + for (const rect of paragraph.getRectsForRange(0, 5)) { + canvas.drawRect(rect, paint); + } + }, + { + RobotoRegular, + Stroke: PaintStyle.Stroke, + width: surface.width, + } + ); + checkImage( + img, + `snapshots/paragraph/paragraph-metrics-bounds-${surface.OS}.png` + ); + }); + }); +}); diff --git a/packages/skia/src/renderer/__tests__/e2e/setup/Paragraph.ts b/packages/skia/src/renderer/__tests__/e2e/setup/Paragraph.ts index f2dcecc792..7e60b87707 100644 --- a/packages/skia/src/renderer/__tests__/e2e/setup/Paragraph.ts +++ b/packages/skia/src/renderer/__tests__/e2e/setup/Paragraph.ts @@ -1,4 +1,9 @@ -import type { SkParagraph, Skia, SkCanvas } from "../../../../skia/types"; +import type { + ParagraphExtendedVisitor, + SkParagraph, + Skia, + SkCanvas, +} from "../../../../skia/types"; import type { EvalContext } from "../../setup"; import { SkiaObject } from "./SkiaObject"; @@ -48,6 +53,12 @@ export class ParagraphAsset getRectsForPlaceholders() { return this.instance.getRectsForPlaceholders(); } + getPath(lineNumber: number) { + return this.instance.getPath(lineNumber); + } + extendedVisit(visitor: ParagraphExtendedVisitor) { + this.instance.extendedVisit(visitor); + } __typename__ = "Paragraph" as const; [Symbol.dispose](): void { diff --git a/packages/skia/src/skia/types/Paragraph/Paragraph.ts b/packages/skia/src/skia/types/Paragraph/Paragraph.ts index f2014dfd6c..834571cf4d 100644 --- a/packages/skia/src/skia/types/Paragraph/Paragraph.ts +++ b/packages/skia/src/skia/types/Paragraph/Paragraph.ts @@ -1,6 +1,10 @@ import type { SkCanvas } from "../Canvas"; +import type { SkFont } from "../Font"; import type { SkJSIInstance } from "../JsiInstance"; +import type { SkPath } from "../Path"; +import type { SkPoint } from "../Point"; import type { SkRect } from "../Rect"; +import type { SkSize } from "../Size"; import type { TextDirection } from "./ParagraphStyle"; @@ -40,6 +44,47 @@ export interface SkRectWithDirection { direction: TextDirection; } +/** + * Information about a run of glyphs passed to the visitor of + * `SkParagraph.extendedVisit`. All glyphs in a run share the same font: for + * text shaped through font fallback, each fallback font produces its own + * run(s). + */ +export interface ParagraphVisitorInfo { + /** The font used to shape this run (the resolved fallback font, if any). */ + font: SkFont; + /** Origin of the run within the paragraph (baseline corrected). */ + origin: SkPoint; + /** Advance of the run. */ + advance: SkSize; + /** The glyph ids of the run. */ + glyphs: number[]; + /** + * The position of each glyph, relative to the run `origin`. Add `origin` + * to obtain paragraph coordinates: for a run shaped through font fallback, + * the run placement is carried by `origin`, not by the positions. + */ + positions: SkPoint[]; + /** + * The tight ink bounds of each glyph, relative to the glyph's origin. + * Combine with `positions` to compute the exact painted bounds of the run. + */ + bounds: SkRect[]; + /** The UTF-8 text index of the cluster each glyph belongs to. */ + utf8Starts: number[]; + /** Reserved flags (currently always 0). */ + flags: number; +} + +/** + * Visitor for `SkParagraph.extendedVisit`. Called once per run of glyphs; + * `info` is null to signal the end of a line. + */ +export type ParagraphExtendedVisitor = ( + lineNumber: number, + info: ParagraphVisitorInfo | null +) => void; + export interface SkParagraph extends SkJSIInstance<"Paragraph"> { /** * Calculates the position of the the glyphs in the paragraph @@ -112,4 +157,26 @@ export interface SkParagraph extends SkJSIInstance<"Paragraph"> { * to the paragraph. */ getRectsForPlaceholders(): SkRectWithDirection[]; + /** + * Converts the glyphs of the given line into an SkPath, with all font + * fallbacks already applied. Use `computeTightBounds()` on the resulting + * path to measure the exact ink bounds of the rendered text (as opposed to + * the font-metrics based bounds returned by `getRectsForRange`). + * Note that color glyphs (e.g. emojis) cannot be converted to a path and + * are skipped. Returns null if the line number is out of bounds. + * This method requires the layout method to have been called first. + * Not implemented on React Native Web. + * @param lineNumber The line number (zero indexed, see `getLineMetrics`) + */ + getPath(lineNumber: number): SkPath | null; + /** + * Visits the laid out paragraph, calling the visitor once for every run of + * glyphs with the resolved font, glyph ids, positions and per-glyph tight + * ink bounds. The visitor is called with a null info to signal the end of + * each line. This exposes the exact layout that would be painted. + * This method requires the layout method to have been called first. + * Not implemented on React Native Web. + * @param visitor Called once per glyph run, and once per line end + */ + extendedVisit(visitor: ParagraphExtendedVisitor): void; } diff --git a/packages/skia/src/skia/web/JsiSkParagraph.ts b/packages/skia/src/skia/web/JsiSkParagraph.ts index ca3daeba49..aaaa8ec04a 100644 --- a/packages/skia/src/skia/web/JsiSkParagraph.ts +++ b/packages/skia/src/skia/web/JsiSkParagraph.ts @@ -4,10 +4,12 @@ import type { SkRect, SkRectWithDirection, SkParagraph, + SkPath, LineMetrics, + ParagraphExtendedVisitor, } from "../types"; -import { HostObject } from "./Host"; +import { HostObject, throwNotImplementedOnRNWeb } from "./Host"; import type { JsiSkCanvas } from "./JsiSkCanvas"; import { JsiSkRect } from "./JsiSkRect"; @@ -64,4 +66,10 @@ export class JsiSkParagraph getLineMetrics(): LineMetrics[] { return this.ref.getLineMetrics(); } + getPath(_lineNumber: number): SkPath | null { + return throwNotImplementedOnRNWeb(); + } + extendedVisit(_visitor: ParagraphExtendedVisitor): void { + return throwNotImplementedOnRNWeb(); + } }