@shopify/react-native-skia 2.2.3 → 2.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/CMakeLists.txt +5 -0
- package/lib/commonjs/sksg/Recorder/commands/Drawing.js +2 -2
- package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -1
- package/lib/module/sksg/Recorder/commands/Drawing.js +2 -2
- package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -1
- package/package.json +2 -2
- package/src/renderer/__tests__/e2e/Drawings.spec.tsx +50 -1
- package/src/sksg/Recorder/commands/Drawing.ts +2 -2
package/android/CMakeLists.txt
CHANGED
@@ -300,6 +300,11 @@ message("-- TURBO : " ${TURBOMODULES_LIB})
|
|
300
300
|
|
301
301
|
add_definitions(-DREACT_NATIVE_VERSION=${REACT_NATIVE_VERSION})
|
302
302
|
|
303
|
+
# Set RN_SERIALIZABLE_STATE and C++ flags for React Native 0.81+
|
304
|
+
if(${REACT_NATIVE_VERSION} GREATER_EQUAL 81)
|
305
|
+
target_compile_reactnative_options(${PACKAGE_NAME} PRIVATE)
|
306
|
+
endif()
|
307
|
+
|
303
308
|
# Link
|
304
309
|
if(${REACT_NATIVE_VERSION} GREATER_EQUAL 76)
|
305
310
|
set(COMMON_LIBS
|
@@ -180,8 +180,8 @@ const drawPath = (ctx, props) => {
|
|
180
180
|
stroke,
|
181
181
|
...pathProps
|
182
182
|
} = props;
|
183
|
-
const start = (0, _processors.saturate)(trimStart);
|
184
|
-
const end = (0, _processors.saturate)(trimEnd);
|
183
|
+
const start = Math.fround((0, _processors.saturate)(trimStart));
|
184
|
+
const end = Math.fround((0, _processors.saturate)(trimEnd));
|
185
185
|
const hasStartOffset = start !== 0;
|
186
186
|
const hasEndOffset = end !== 1;
|
187
187
|
const hasStrokeOptions = stroke !== undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["_nodes","require","_processors","_types","drawLine","ctx","props","p1","p2","canvas","x","y","paint","exports","drawOval","rect","processRect","Skia","drawImage","image","sampling","_props$fit","fit","src","dst","fitRects","width","height","isCubicSampling","drawImageRectCubic","B","C","_sampling$filter","_sampling$mipmap","drawImageRectOptions","filter","FilterMode","Linear","mipmap","MipmapMode","None","drawPoints","points","mode","PointMode","enumKey","drawVertices","textures","colors","indices","blendMode","vertexMode","VertexMode","Triangles","vertices","MakeVertices","map","c","processColor","undefined","defaultBlendMode","BlendMode","DstOver","SrcOver","blend","drawDiffRect","outer","inner","drawDRRect","drawTextPath","path","processPath","font","initialOffset","text","ids","getGlyphIDs","widths","getGlyphWidths","rsx","meas","ContourMeasureIter","cont","next","dist","i","length","substring","p","t","getPosTan","adjustedX","adjustedY","push","RSXform","derived","TextBlob","MakeFromRSXform","drawTextBlob","drawText","drawPatch","texture","patch","pos","c2","c1","drawPath","start","trimStart","end","trimEnd","fillType","stroke","pathProps","saturate","hasStartOffset","hasEndOffset","hasStrokeOptions","hasFillType","willMutatePath","pristinePath","copy","setFillType","FillType","trim","drawRect","drawRRect","processRRect","blob","drawGlyphs","glyphs","reduce","acc","glyph","id","positions","drawImageSVG","svg","save","translate","drawSvg","restore","drawParagraph","paragraph","layout","drawPicture","picture","drawAtlas","sprites","transforms","drawCircle","processCircle","r","drawSkottie","animation","frame","seekFrame","render"],"sources":["Drawing.ts"],"sourcesContent":["import {\n enumKey,\n fitRects,\n processCircle,\n processColor,\n processPath,\n processRect,\n processRRect,\n} from \"../../../dom/nodes\";\nimport type {\n AtlasProps,\n CircleProps,\n DiffRectProps,\n GlyphsProps,\n ImageProps,\n ImageSVGProps,\n LineProps,\n OvalProps,\n ParagraphProps,\n PatchProps,\n PathProps,\n PictureProps,\n PointsProps,\n RectProps,\n RoundedRectProps,\n SkottieProps,\n TextBlobProps,\n TextPathProps,\n TextProps,\n VerticesProps,\n} from \"../../../dom/types\";\nimport { saturate } from \"../../../renderer/processors\";\nimport type { SkPoint, SkRSXform } from \"../../../skia/types\";\nimport {\n BlendMode,\n FillType,\n FilterMode,\n isCubicSampling,\n MipmapMode,\n PointMode,\n VertexMode,\n} from \"../../../skia/types\";\nimport type { DrawingContext } from \"../DrawingContext\";\n\nexport const drawLine = (ctx: DrawingContext, props: LineProps) => {\n \"worklet\";\n const { p1, p2 } = props;\n ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);\n};\n\nexport const drawOval = (ctx: DrawingContext, props: OvalProps) => {\n \"worklet\";\n const rect = processRect(ctx.Skia, props);\n ctx.canvas.drawOval(rect, ctx.paint);\n};\n\nexport const drawImage = (ctx: DrawingContext, props: ImageProps) => {\n \"worklet\";\n const { image, sampling } = props;\n if (image) {\n const fit = props.fit ?? \"contain\";\n const rect = processRect(ctx.Skia, props);\n const { src, dst } = fitRects(\n fit,\n {\n x: 0,\n y: 0,\n width: image.width(),\n height: image.height(),\n },\n rect\n );\n if (sampling && isCubicSampling(sampling)) {\n ctx.canvas.drawImageRectCubic(\n image,\n src,\n dst,\n sampling.B,\n sampling.C,\n ctx.paint\n );\n } else {\n ctx.canvas.drawImageRectOptions(\n image,\n src,\n dst,\n sampling?.filter ?? FilterMode.Linear,\n sampling?.mipmap ?? MipmapMode.None,\n ctx.paint\n );\n }\n }\n};\n\nexport const drawPoints = (ctx: DrawingContext, props: PointsProps) => {\n \"worklet\";\n const { points, mode } = props;\n ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);\n};\n\nexport const drawVertices = (ctx: DrawingContext, props: VerticesProps) => {\n \"worklet\";\n const { mode, textures, colors, indices, blendMode } = props;\n const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;\n const vertices = ctx.Skia.MakeVertices(\n vertexMode,\n props.vertices,\n textures,\n colors ? colors.map((c) => processColor(ctx.Skia, c)) : undefined,\n indices\n );\n const defaultBlendMode = colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n\n ctx.canvas.drawVertices(vertices, blend, ctx.paint);\n};\n\nexport const drawDiffRect = (ctx: DrawingContext, props: DiffRectProps) => {\n \"worklet\";\n const { outer, inner } = props;\n ctx.canvas.drawDRRect(outer, inner, ctx.paint);\n};\n\nexport const drawTextPath = (ctx: DrawingContext, props: TextPathProps) => {\n \"worklet\";\n const path = processPath(ctx.Skia, props.path);\n const { font, initialOffset } = props;\n if (font) {\n let { text } = props;\n const ids = font.getGlyphIDs(text);\n const widths = font.getGlyphWidths(ids);\n const rsx: SkRSXform[] = [];\n const meas = ctx.Skia.ContourMeasureIter(path, false, 1);\n let cont = meas.next();\n let dist = initialOffset;\n for (let i = 0; i < text.length && cont; i++) {\n const width = widths[i];\n dist += width / 2;\n if (dist > cont.length()) {\n // jump to next contour\n cont = meas.next();\n if (!cont) {\n // We have come to the end of the path - terminate the string\n // right here.\n text = text.substring(0, i);\n break;\n }\n dist = width / 2;\n }\n // Gives us the (x, y) coordinates as well as the cos/sin of the tangent\n // line at that position.\n const [p, t] = cont.getPosTan(dist);\n const adjustedX = p.x - (width / 2) * t.x;\n const adjustedY = p.y - (width / 2) * t.y;\n rsx.push(ctx.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));\n dist += width / 2;\n }\n const derived = ctx.Skia.TextBlob.MakeFromRSXform(text, rsx, font);\n ctx.canvas.drawTextBlob(derived, 0, 0, ctx.paint);\n }\n};\n\nexport const drawText = (ctx: DrawingContext, props: TextProps) => {\n \"worklet\";\n const { text, x, y, font } = props;\n if (font != null) {\n ctx.canvas.drawText(text, x, y, ctx.paint, font);\n }\n};\n\nexport const drawPatch = (ctx: DrawingContext, props: PatchProps) => {\n \"worklet\";\n const { texture, blendMode, patch } = props;\n const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const mode = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n // Patch requires a path with the following constraints:\n // M tl\n // C c1 c2 br\n // C c1 c2 bl\n // C c1 c2 tl (the redundant point in the last command is removed)\n\n const points = [\n patch[0].pos,\n patch[0].c2,\n patch[1].c1,\n patch[1].pos,\n patch[1].c2,\n patch[2].c1,\n patch[2].pos,\n patch[2].c2,\n patch[3].c1,\n patch[3].pos,\n patch[3].c2,\n patch[0].c1,\n ];\n const colors = props.colors\n ? props.colors.map((c) => processColor(ctx.Skia, c))\n : undefined;\n ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);\n};\n\nexport const drawPath = (ctx: DrawingContext, props: PathProps) => {\n \"worklet\";\n const {\n start: trimStart,\n end: trimEnd,\n fillType,\n stroke,\n ...pathProps\n } = props;\n const start = saturate(trimStart);\n const end = saturate(trimEnd);\n const hasStartOffset = start !== 0;\n const hasEndOffset = end !== 1;\n const hasStrokeOptions = stroke !== undefined;\n const hasFillType = !!fillType;\n const willMutatePath =\n hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;\n const pristinePath = processPath(ctx.Skia, pathProps.path);\n const path = willMutatePath ? pristinePath.copy() : pristinePath;\n if (hasFillType) {\n path.setFillType(FillType[enumKey(fillType)]);\n }\n if (hasStrokeOptions) {\n path.stroke(stroke);\n }\n if (hasStartOffset || hasEndOffset) {\n path.trim(start, end, false);\n }\n ctx.canvas.drawPath(path, ctx.paint);\n};\n\nexport const drawRect = (ctx: DrawingContext, props: RectProps) => {\n \"worklet\";\n const derived = processRect(ctx.Skia, props);\n ctx.canvas.drawRect(derived, ctx.paint);\n};\n\nexport const drawRRect = (ctx: DrawingContext, props: RoundedRectProps) => {\n \"worklet\";\n const derived = processRRect(ctx.Skia, props);\n ctx.canvas.drawRRect(derived, ctx.paint);\n};\n\nexport const drawTextBlob = (ctx: DrawingContext, props: TextBlobProps) => {\n \"worklet\";\n const { blob, x, y } = props;\n ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);\n};\n\ninterface ProcessedGlyphs {\n glyphs: number[];\n positions: SkPoint[];\n}\n\nexport const drawGlyphs = (ctx: DrawingContext, props: GlyphsProps) => {\n \"worklet\";\n const derived = props.glyphs.reduce<ProcessedGlyphs>(\n (acc, glyph) => {\n const { id, pos } = glyph;\n acc.glyphs.push(id);\n acc.positions.push(pos);\n return acc;\n },\n { glyphs: [], positions: [] }\n );\n const { glyphs, positions } = derived;\n const { x, y, font } = props;\n if (font) {\n ctx.canvas.drawGlyphs(glyphs, positions, x, y, font, ctx.paint);\n }\n};\n\nexport const drawImageSVG = (ctx: DrawingContext, props: ImageSVGProps) => {\n \"worklet\";\n const { canvas } = ctx;\n const { svg } = props;\n const { x, y, width, height } = props.rect\n ? props.rect\n : { x: props.x, y: props.y, width: props.width, height: props.height };\n if (svg === null) {\n return;\n }\n canvas.save();\n if (x && y) {\n canvas.translate(x, y);\n }\n canvas.drawSvg(svg, width, height);\n canvas.restore();\n};\n\nexport const drawParagraph = (ctx: DrawingContext, props: ParagraphProps) => {\n \"worklet\";\n const { paragraph, x, y, width } = props;\n if (paragraph) {\n paragraph.layout(width);\n paragraph.paint(ctx.canvas, x, y);\n }\n};\n\nexport const drawPicture = (ctx: DrawingContext, props: PictureProps) => {\n \"worklet\";\n const { picture } = props;\n ctx.canvas.drawPicture(picture);\n};\n\nexport const drawAtlas = (ctx: DrawingContext, props: AtlasProps) => {\n \"worklet\";\n const { image, sprites, transforms, colors, blendMode, sampling } = props;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : undefined;\n if (image) {\n ctx.canvas.drawAtlas(\n image,\n sprites,\n transforms,\n ctx.paint,\n blend,\n colors,\n sampling\n );\n }\n};\n\nexport const drawCircle = (ctx: DrawingContext, props: CircleProps) => {\n \"worklet\";\n const { c } = processCircle(props);\n const { r } = props;\n ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);\n};\n\nexport const drawSkottie = (ctx: DrawingContext, props: SkottieProps) => {\n \"worklet\";\n const { animation, frame } = props;\n if (animation) {\n props.animation.seekFrame(frame);\n props.animation.render(ctx.canvas);\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["_nodes","require","_processors","_types","drawLine","ctx","props","p1","p2","canvas","x","y","paint","exports","drawOval","rect","processRect","Skia","drawImage","image","sampling","_props$fit","fit","src","dst","fitRects","width","height","isCubicSampling","drawImageRectCubic","B","C","_sampling$filter","_sampling$mipmap","drawImageRectOptions","filter","FilterMode","Linear","mipmap","MipmapMode","None","drawPoints","points","mode","PointMode","enumKey","drawVertices","textures","colors","indices","blendMode","vertexMode","VertexMode","Triangles","vertices","MakeVertices","map","c","processColor","undefined","defaultBlendMode","BlendMode","DstOver","SrcOver","blend","drawDiffRect","outer","inner","drawDRRect","drawTextPath","path","processPath","font","initialOffset","text","ids","getGlyphIDs","widths","getGlyphWidths","rsx","meas","ContourMeasureIter","cont","next","dist","i","length","substring","p","t","getPosTan","adjustedX","adjustedY","push","RSXform","derived","TextBlob","MakeFromRSXform","drawTextBlob","drawText","drawPatch","texture","patch","pos","c2","c1","drawPath","start","trimStart","end","trimEnd","fillType","stroke","pathProps","Math","fround","saturate","hasStartOffset","hasEndOffset","hasStrokeOptions","hasFillType","willMutatePath","pristinePath","copy","setFillType","FillType","trim","drawRect","drawRRect","processRRect","blob","drawGlyphs","glyphs","reduce","acc","glyph","id","positions","drawImageSVG","svg","save","translate","drawSvg","restore","drawParagraph","paragraph","layout","drawPicture","picture","drawAtlas","sprites","transforms","drawCircle","processCircle","r","drawSkottie","animation","frame","seekFrame","render"],"sources":["Drawing.ts"],"sourcesContent":["import {\n enumKey,\n fitRects,\n processCircle,\n processColor,\n processPath,\n processRect,\n processRRect,\n} from \"../../../dom/nodes\";\nimport type {\n AtlasProps,\n CircleProps,\n DiffRectProps,\n GlyphsProps,\n ImageProps,\n ImageSVGProps,\n LineProps,\n OvalProps,\n ParagraphProps,\n PatchProps,\n PathProps,\n PictureProps,\n PointsProps,\n RectProps,\n RoundedRectProps,\n SkottieProps,\n TextBlobProps,\n TextPathProps,\n TextProps,\n VerticesProps,\n} from \"../../../dom/types\";\nimport { saturate } from \"../../../renderer/processors\";\nimport type { SkPoint, SkRSXform } from \"../../../skia/types\";\nimport {\n BlendMode,\n FillType,\n FilterMode,\n isCubicSampling,\n MipmapMode,\n PointMode,\n VertexMode,\n} from \"../../../skia/types\";\nimport type { DrawingContext } from \"../DrawingContext\";\n\nexport const drawLine = (ctx: DrawingContext, props: LineProps) => {\n \"worklet\";\n const { p1, p2 } = props;\n ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);\n};\n\nexport const drawOval = (ctx: DrawingContext, props: OvalProps) => {\n \"worklet\";\n const rect = processRect(ctx.Skia, props);\n ctx.canvas.drawOval(rect, ctx.paint);\n};\n\nexport const drawImage = (ctx: DrawingContext, props: ImageProps) => {\n \"worklet\";\n const { image, sampling } = props;\n if (image) {\n const fit = props.fit ?? \"contain\";\n const rect = processRect(ctx.Skia, props);\n const { src, dst } = fitRects(\n fit,\n {\n x: 0,\n y: 0,\n width: image.width(),\n height: image.height(),\n },\n rect\n );\n if (sampling && isCubicSampling(sampling)) {\n ctx.canvas.drawImageRectCubic(\n image,\n src,\n dst,\n sampling.B,\n sampling.C,\n ctx.paint\n );\n } else {\n ctx.canvas.drawImageRectOptions(\n image,\n src,\n dst,\n sampling?.filter ?? FilterMode.Linear,\n sampling?.mipmap ?? MipmapMode.None,\n ctx.paint\n );\n }\n }\n};\n\nexport const drawPoints = (ctx: DrawingContext, props: PointsProps) => {\n \"worklet\";\n const { points, mode } = props;\n ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);\n};\n\nexport const drawVertices = (ctx: DrawingContext, props: VerticesProps) => {\n \"worklet\";\n const { mode, textures, colors, indices, blendMode } = props;\n const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;\n const vertices = ctx.Skia.MakeVertices(\n vertexMode,\n props.vertices,\n textures,\n colors ? colors.map((c) => processColor(ctx.Skia, c)) : undefined,\n indices\n );\n const defaultBlendMode = colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n\n ctx.canvas.drawVertices(vertices, blend, ctx.paint);\n};\n\nexport const drawDiffRect = (ctx: DrawingContext, props: DiffRectProps) => {\n \"worklet\";\n const { outer, inner } = props;\n ctx.canvas.drawDRRect(outer, inner, ctx.paint);\n};\n\nexport const drawTextPath = (ctx: DrawingContext, props: TextPathProps) => {\n \"worklet\";\n const path = processPath(ctx.Skia, props.path);\n const { font, initialOffset } = props;\n if (font) {\n let { text } = props;\n const ids = font.getGlyphIDs(text);\n const widths = font.getGlyphWidths(ids);\n const rsx: SkRSXform[] = [];\n const meas = ctx.Skia.ContourMeasureIter(path, false, 1);\n let cont = meas.next();\n let dist = initialOffset;\n for (let i = 0; i < text.length && cont; i++) {\n const width = widths[i];\n dist += width / 2;\n if (dist > cont.length()) {\n // jump to next contour\n cont = meas.next();\n if (!cont) {\n // We have come to the end of the path - terminate the string\n // right here.\n text = text.substring(0, i);\n break;\n }\n dist = width / 2;\n }\n // Gives us the (x, y) coordinates as well as the cos/sin of the tangent\n // line at that position.\n const [p, t] = cont.getPosTan(dist);\n const adjustedX = p.x - (width / 2) * t.x;\n const adjustedY = p.y - (width / 2) * t.y;\n rsx.push(ctx.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));\n dist += width / 2;\n }\n const derived = ctx.Skia.TextBlob.MakeFromRSXform(text, rsx, font);\n ctx.canvas.drawTextBlob(derived, 0, 0, ctx.paint);\n }\n};\n\nexport const drawText = (ctx: DrawingContext, props: TextProps) => {\n \"worklet\";\n const { text, x, y, font } = props;\n if (font != null) {\n ctx.canvas.drawText(text, x, y, ctx.paint, font);\n }\n};\n\nexport const drawPatch = (ctx: DrawingContext, props: PatchProps) => {\n \"worklet\";\n const { texture, blendMode, patch } = props;\n const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const mode = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n // Patch requires a path with the following constraints:\n // M tl\n // C c1 c2 br\n // C c1 c2 bl\n // C c1 c2 tl (the redundant point in the last command is removed)\n\n const points = [\n patch[0].pos,\n patch[0].c2,\n patch[1].c1,\n patch[1].pos,\n patch[1].c2,\n patch[2].c1,\n patch[2].pos,\n patch[2].c2,\n patch[3].c1,\n patch[3].pos,\n patch[3].c2,\n patch[0].c1,\n ];\n const colors = props.colors\n ? props.colors.map((c) => processColor(ctx.Skia, c))\n : undefined;\n ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);\n};\n\nexport const drawPath = (ctx: DrawingContext, props: PathProps) => {\n \"worklet\";\n const {\n start: trimStart,\n end: trimEnd,\n fillType,\n stroke,\n ...pathProps\n } = props;\n const start = Math.fround(saturate(trimStart));\n const end = Math.fround(saturate(trimEnd));\n const hasStartOffset = start !== 0;\n const hasEndOffset = end !== 1;\n const hasStrokeOptions = stroke !== undefined;\n const hasFillType = !!fillType;\n const willMutatePath =\n hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;\n const pristinePath = processPath(ctx.Skia, pathProps.path);\n const path = willMutatePath ? pristinePath.copy() : pristinePath;\n if (hasFillType) {\n path.setFillType(FillType[enumKey(fillType)]);\n }\n if (hasStrokeOptions) {\n path.stroke(stroke);\n }\n if (hasStartOffset || hasEndOffset) {\n path.trim(start, end, false);\n }\n ctx.canvas.drawPath(path, ctx.paint);\n};\n\nexport const drawRect = (ctx: DrawingContext, props: RectProps) => {\n \"worklet\";\n const derived = processRect(ctx.Skia, props);\n ctx.canvas.drawRect(derived, ctx.paint);\n};\n\nexport const drawRRect = (ctx: DrawingContext, props: RoundedRectProps) => {\n \"worklet\";\n const derived = processRRect(ctx.Skia, props);\n ctx.canvas.drawRRect(derived, ctx.paint);\n};\n\nexport const drawTextBlob = (ctx: DrawingContext, props: TextBlobProps) => {\n \"worklet\";\n const { blob, x, y } = props;\n ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);\n};\n\ninterface ProcessedGlyphs {\n glyphs: number[];\n positions: SkPoint[];\n}\n\nexport const drawGlyphs = (ctx: DrawingContext, props: GlyphsProps) => {\n \"worklet\";\n const derived = props.glyphs.reduce<ProcessedGlyphs>(\n (acc, glyph) => {\n const { id, pos } = glyph;\n acc.glyphs.push(id);\n acc.positions.push(pos);\n return acc;\n },\n { glyphs: [], positions: [] }\n );\n const { glyphs, positions } = derived;\n const { x, y, font } = props;\n if (font) {\n ctx.canvas.drawGlyphs(glyphs, positions, x, y, font, ctx.paint);\n }\n};\n\nexport const drawImageSVG = (ctx: DrawingContext, props: ImageSVGProps) => {\n \"worklet\";\n const { canvas } = ctx;\n const { svg } = props;\n const { x, y, width, height } = props.rect\n ? props.rect\n : { x: props.x, y: props.y, width: props.width, height: props.height };\n if (svg === null) {\n return;\n }\n canvas.save();\n if (x && y) {\n canvas.translate(x, y);\n }\n canvas.drawSvg(svg, width, height);\n canvas.restore();\n};\n\nexport const drawParagraph = (ctx: DrawingContext, props: ParagraphProps) => {\n \"worklet\";\n const { paragraph, x, y, width } = props;\n if (paragraph) {\n paragraph.layout(width);\n paragraph.paint(ctx.canvas, x, y);\n }\n};\n\nexport const drawPicture = (ctx: DrawingContext, props: PictureProps) => {\n \"worklet\";\n const { picture } = props;\n ctx.canvas.drawPicture(picture);\n};\n\nexport const drawAtlas = (ctx: DrawingContext, props: AtlasProps) => {\n \"worklet\";\n const { image, sprites, transforms, colors, blendMode, sampling } = props;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : undefined;\n if (image) {\n ctx.canvas.drawAtlas(\n image,\n sprites,\n transforms,\n ctx.paint,\n blend,\n colors,\n sampling\n );\n }\n};\n\nexport const drawCircle = (ctx: DrawingContext, props: CircleProps) => {\n \"worklet\";\n const { c } = processCircle(props);\n const { r } = props;\n ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);\n};\n\nexport const drawSkottie = (ctx: DrawingContext, props: SkottieProps) => {\n \"worklet\";\n const { animation, frame } = props;\n if (animation) {\n props.animation.seekFrame(frame);\n props.animation.render(ctx.canvas);\n }\n};\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AA+BA,IAAAC,WAAA,GAAAD,OAAA;AAEA,IAAAE,MAAA,GAAAF,OAAA;AAWO,MAAMG,QAAQ,GAAGA,CAACC,GAAmB,EAAEC,KAAgB,KAAK;EACjE,SAAS;;EACT,MAAM;IAAEC,EAAE;IAAEC;EAAG,CAAC,GAAGF,KAAK;EACxBD,GAAG,CAACI,MAAM,CAACL,QAAQ,CAACG,EAAE,CAACG,CAAC,EAAEH,EAAE,CAACI,CAAC,EAAEH,EAAE,CAACE,CAAC,EAAEF,EAAE,CAACG,CAAC,EAAEN,GAAG,CAACO,KAAK,CAAC;AACxD,CAAC;AAACC,OAAA,CAAAT,QAAA,GAAAA,QAAA;AAEK,MAAMU,QAAQ,GAAGA,CAACT,GAAmB,EAAEC,KAAgB,KAAK;EACjE,SAAS;;EACT,MAAMS,IAAI,GAAG,IAAAC,kBAAW,EAACX,GAAG,CAACY,IAAI,EAAEX,KAAK,CAAC;EACzCD,GAAG,CAACI,MAAM,CAACK,QAAQ,CAACC,IAAI,EAAEV,GAAG,CAACO,KAAK,CAAC;AACtC,CAAC;AAACC,OAAA,CAAAC,QAAA,GAAAA,QAAA;AAEK,MAAMI,SAAS,GAAGA,CAACb,GAAmB,EAAEC,KAAiB,KAAK;EACnE,SAAS;;EACT,MAAM;IAAEa,KAAK;IAAEC;EAAS,CAAC,GAAGd,KAAK;EACjC,IAAIa,KAAK,EAAE;IAAA,IAAAE,UAAA;IACT,MAAMC,GAAG,IAAAD,UAAA,GAAGf,KAAK,CAACgB,GAAG,cAAAD,UAAA,cAAAA,UAAA,GAAI,SAAS;IAClC,MAAMN,IAAI,GAAG,IAAAC,kBAAW,EAACX,GAAG,CAACY,IAAI,EAAEX,KAAK,CAAC;IACzC,MAAM;MAAEiB,GAAG;MAAEC;IAAI,CAAC,GAAG,IAAAC,eAAQ,EAC3BH,GAAG,EACH;MACEZ,CAAC,EAAE,CAAC;MACJC,CAAC,EAAE,CAAC;MACJe,KAAK,EAAEP,KAAK,CAACO,KAAK,CAAC,CAAC;MACpBC,MAAM,EAAER,KAAK,CAACQ,MAAM,CAAC;IACvB,CAAC,EACDZ,IACF,CAAC;IACD,IAAIK,QAAQ,IAAI,IAAAQ,sBAAe,EAACR,QAAQ,CAAC,EAAE;MACzCf,GAAG,CAACI,MAAM,CAACoB,kBAAkB,CAC3BV,KAAK,EACLI,GAAG,EACHC,GAAG,EACHJ,QAAQ,CAACU,CAAC,EACVV,QAAQ,CAACW,CAAC,EACV1B,GAAG,CAACO,KACN,CAAC;IACH,CAAC,MAAM;MAAA,IAAAoB,gBAAA,EAAAC,gBAAA;MACL5B,GAAG,CAACI,MAAM,CAACyB,oBAAoB,CAC7Bf,KAAK,EACLI,GAAG,EACHC,GAAG,GAAAQ,gBAAA,GACHZ,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEe,MAAM,cAAAH,gBAAA,cAAAA,gBAAA,GAAII,iBAAU,CAACC,MAAM,GAAAJ,gBAAA,GACrCb,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEkB,MAAM,cAAAL,gBAAA,cAAAA,gBAAA,GAAIM,iBAAU,CAACC,IAAI,EACnCnC,GAAG,CAACO,KACN,CAAC;IACH;EACF;AACF,CAAC;AAACC,OAAA,CAAAK,SAAA,GAAAA,SAAA;AAEK,MAAMuB,UAAU,GAAGA,CAACpC,GAAmB,EAAEC,KAAkB,KAAK;EACrE,SAAS;;EACT,MAAM;IAAEoC,MAAM;IAAEC;EAAK,CAAC,GAAGrC,KAAK;EAC9BD,GAAG,CAACI,MAAM,CAACgC,UAAU,CAACG,gBAAS,CAAC,IAAAC,cAAO,EAACF,IAAI,CAAC,CAAC,EAAED,MAAM,EAAErC,GAAG,CAACO,KAAK,CAAC;AACpE,CAAC;AAACC,OAAA,CAAA4B,UAAA,GAAAA,UAAA;AAEK,MAAMK,YAAY,GAAGA,CAACzC,GAAmB,EAAEC,KAAoB,KAAK;EACzE,SAAS;;EACT,MAAM;IAAEqC,IAAI;IAAEI,QAAQ;IAAEC,MAAM;IAAEC,OAAO;IAAEC;EAAU,CAAC,GAAG5C,KAAK;EAC5D,MAAM6C,UAAU,GAAGR,IAAI,GAAGS,iBAAU,CAAC,IAAAP,cAAO,EAACF,IAAI,CAAC,CAAC,GAAGS,iBAAU,CAACC,SAAS;EAC1E,MAAMC,QAAQ,GAAGjD,GAAG,CAACY,IAAI,CAACsC,YAAY,CACpCJ,UAAU,EACV7C,KAAK,CAACgD,QAAQ,EACdP,QAAQ,EACRC,MAAM,GAAGA,MAAM,CAACQ,GAAG,CAAEC,CAAC,IAAK,IAAAC,mBAAY,EAACrD,GAAG,CAACY,IAAI,EAAEwC,CAAC,CAAC,CAAC,GAAGE,SAAS,EACjEV,OACF,CAAC;EACD,MAAMW,gBAAgB,GAAGZ,MAAM,GAAGa,gBAAS,CAACC,OAAO,GAAGD,gBAAS,CAACE,OAAO;EACvE,MAAMC,KAAK,GAAGd,SAAS,GAAGW,gBAAS,CAAC,IAAAhB,cAAO,EAACK,SAAS,CAAC,CAAC,GAAGU,gBAAgB;EAE1EvD,GAAG,CAACI,MAAM,CAACqC,YAAY,CAACQ,QAAQ,EAAEU,KAAK,EAAE3D,GAAG,CAACO,KAAK,CAAC;AACrD,CAAC;AAACC,OAAA,CAAAiC,YAAA,GAAAA,YAAA;AAEK,MAAMmB,YAAY,GAAGA,CAAC5D,GAAmB,EAAEC,KAAoB,KAAK;EACzE,SAAS;;EACT,MAAM;IAAE4D,KAAK;IAAEC;EAAM,CAAC,GAAG7D,KAAK;EAC9BD,GAAG,CAACI,MAAM,CAAC2D,UAAU,CAACF,KAAK,EAAEC,KAAK,EAAE9D,GAAG,CAACO,KAAK,CAAC;AAChD,CAAC;AAACC,OAAA,CAAAoD,YAAA,GAAAA,YAAA;AAEK,MAAMI,YAAY,GAAGA,CAAChE,GAAmB,EAAEC,KAAoB,KAAK;EACzE,SAAS;;EACT,MAAMgE,IAAI,GAAG,IAAAC,kBAAW,EAAClE,GAAG,CAACY,IAAI,EAAEX,KAAK,CAACgE,IAAI,CAAC;EAC9C,MAAM;IAAEE,IAAI;IAAEC;EAAc,CAAC,GAAGnE,KAAK;EACrC,IAAIkE,IAAI,EAAE;IACR,IAAI;MAAEE;IAAK,CAAC,GAAGpE,KAAK;IACpB,MAAMqE,GAAG,GAAGH,IAAI,CAACI,WAAW,CAACF,IAAI,CAAC;IAClC,MAAMG,MAAM,GAAGL,IAAI,CAACM,cAAc,CAACH,GAAG,CAAC;IACvC,MAAMI,GAAgB,GAAG,EAAE;IAC3B,MAAMC,IAAI,GAAG3E,GAAG,CAACY,IAAI,CAACgE,kBAAkB,CAACX,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACxD,IAAIY,IAAI,GAAGF,IAAI,CAACG,IAAI,CAAC,CAAC;IACtB,IAAIC,IAAI,GAAGX,aAAa;IACxB,KAAK,IAAIY,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGX,IAAI,CAACY,MAAM,IAAIJ,IAAI,EAAEG,CAAC,EAAE,EAAE;MAC5C,MAAM3D,KAAK,GAAGmD,MAAM,CAACQ,CAAC,CAAC;MACvBD,IAAI,IAAI1D,KAAK,GAAG,CAAC;MACjB,IAAI0D,IAAI,GAAGF,IAAI,CAACI,MAAM,CAAC,CAAC,EAAE;QACxB;QACAJ,IAAI,GAAGF,IAAI,CAACG,IAAI,CAAC,CAAC;QAClB,IAAI,CAACD,IAAI,EAAE;UACT;UACA;UACAR,IAAI,GAAGA,IAAI,CAACa,SAAS,CAAC,CAAC,EAAEF,CAAC,CAAC;UAC3B;QACF;QACAD,IAAI,GAAG1D,KAAK,GAAG,CAAC;MAClB;MACA;MACA;MACA,MAAM,CAAC8D,CAAC,EAAEC,CAAC,CAAC,GAAGP,IAAI,CAACQ,SAAS,CAACN,IAAI,CAAC;MACnC,MAAMO,SAAS,GAAGH,CAAC,CAAC9E,CAAC,GAAIgB,KAAK,GAAG,CAAC,GAAI+D,CAAC,CAAC/E,CAAC;MACzC,MAAMkF,SAAS,GAAGJ,CAAC,CAAC7E,CAAC,GAAIe,KAAK,GAAG,CAAC,GAAI+D,CAAC,CAAC9E,CAAC;MACzCoE,GAAG,CAACc,IAAI,CAACxF,GAAG,CAACY,IAAI,CAAC6E,OAAO,CAACL,CAAC,CAAC/E,CAAC,EAAE+E,CAAC,CAAC9E,CAAC,EAAEgF,SAAS,EAAEC,SAAS,CAAC,CAAC;MAC1DR,IAAI,IAAI1D,KAAK,GAAG,CAAC;IACnB;IACA,MAAMqE,OAAO,GAAG1F,GAAG,CAACY,IAAI,CAAC+E,QAAQ,CAACC,eAAe,CAACvB,IAAI,EAAEK,GAAG,EAAEP,IAAI,CAAC;IAClEnE,GAAG,CAACI,MAAM,CAACyF,YAAY,CAACH,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE1F,GAAG,CAACO,KAAK,CAAC;EACnD;AACF,CAAC;AAACC,OAAA,CAAAwD,YAAA,GAAAA,YAAA;AAEK,MAAM8B,QAAQ,GAAGA,CAAC9F,GAAmB,EAAEC,KAAgB,KAAK;EACjE,SAAS;;EACT,MAAM;IAAEoE,IAAI;IAAEhE,CAAC;IAAEC,CAAC;IAAE6D;EAAK,CAAC,GAAGlE,KAAK;EAClC,IAAIkE,IAAI,IAAI,IAAI,EAAE;IAChBnE,GAAG,CAACI,MAAM,CAAC0F,QAAQ,CAACzB,IAAI,EAAEhE,CAAC,EAAEC,CAAC,EAAEN,GAAG,CAACO,KAAK,EAAE4D,IAAI,CAAC;EAClD;AACF,CAAC;AAAC3D,OAAA,CAAAsF,QAAA,GAAAA,QAAA;AAEK,MAAMC,SAAS,GAAGA,CAAC/F,GAAmB,EAAEC,KAAiB,KAAK;EACnE,SAAS;;EACT,MAAM;IAAE+F,OAAO;IAAEnD,SAAS;IAAEoD;EAAM,CAAC,GAAGhG,KAAK;EAC3C,MAAMsD,gBAAgB,GAAGtD,KAAK,CAAC0C,MAAM,GAAGa,gBAAS,CAACC,OAAO,GAAGD,gBAAS,CAACE,OAAO;EAC7E,MAAMpB,IAAI,GAAGO,SAAS,GAAGW,gBAAS,CAAC,IAAAhB,cAAO,EAACK,SAAS,CAAC,CAAC,GAAGU,gBAAgB;EACzE;EACA;EACA;EACA;EACA;;EAEA,MAAMlB,MAAM,GAAG,CACb4D,KAAK,CAAC,CAAC,CAAC,CAACC,GAAG,EACZD,KAAK,CAAC,CAAC,CAAC,CAACE,EAAE,EACXF,KAAK,CAAC,CAAC,CAAC,CAACG,EAAE,EACXH,KAAK,CAAC,CAAC,CAAC,CAACC,GAAG,EACZD,KAAK,CAAC,CAAC,CAAC,CAACE,EAAE,EACXF,KAAK,CAAC,CAAC,CAAC,CAACG,EAAE,EACXH,KAAK,CAAC,CAAC,CAAC,CAACC,GAAG,EACZD,KAAK,CAAC,CAAC,CAAC,CAACE,EAAE,EACXF,KAAK,CAAC,CAAC,CAAC,CAACG,EAAE,EACXH,KAAK,CAAC,CAAC,CAAC,CAACC,GAAG,EACZD,KAAK,CAAC,CAAC,CAAC,CAACE,EAAE,EACXF,KAAK,CAAC,CAAC,CAAC,CAACG,EAAE,CACZ;EACD,MAAMzD,MAAM,GAAG1C,KAAK,CAAC0C,MAAM,GACvB1C,KAAK,CAAC0C,MAAM,CAACQ,GAAG,CAAEC,CAAC,IAAK,IAAAC,mBAAY,EAACrD,GAAG,CAACY,IAAI,EAAEwC,CAAC,CAAC,CAAC,GAClDE,SAAS;EACbtD,GAAG,CAACI,MAAM,CAAC2F,SAAS,CAAC1D,MAAM,EAAEM,MAAM,EAAEqD,OAAO,EAAE1D,IAAI,EAAEtC,GAAG,CAACO,KAAK,CAAC;AAChE,CAAC;AAACC,OAAA,CAAAuF,SAAA,GAAAA,SAAA;AAEK,MAAMM,QAAQ,GAAGA,CAACrG,GAAmB,EAAEC,KAAgB,KAAK;EACjE,SAAS;;EACT,MAAM;IACJqG,KAAK,EAAEC,SAAS;IAChBC,GAAG,EAAEC,OAAO;IACZC,QAAQ;IACRC,MAAM;IACN,GAAGC;EACL,CAAC,GAAG3G,KAAK;EACT,MAAMqG,KAAK,GAAGO,IAAI,CAACC,MAAM,CAAC,IAAAC,oBAAQ,EAACR,SAAS,CAAC,CAAC;EAC9C,MAAMC,GAAG,GAAGK,IAAI,CAACC,MAAM,CAAC,IAAAC,oBAAQ,EAACN,OAAO,CAAC,CAAC;EAC1C,MAAMO,cAAc,GAAGV,KAAK,KAAK,CAAC;EAClC,MAAMW,YAAY,GAAGT,GAAG,KAAK,CAAC;EAC9B,MAAMU,gBAAgB,GAAGP,MAAM,KAAKrD,SAAS;EAC7C,MAAM6D,WAAW,GAAG,CAAC,CAACT,QAAQ;EAC9B,MAAMU,cAAc,GAClBJ,cAAc,IAAIC,YAAY,IAAIC,gBAAgB,IAAIC,WAAW;EACnE,MAAME,YAAY,GAAG,IAAAnD,kBAAW,EAAClE,GAAG,CAACY,IAAI,EAAEgG,SAAS,CAAC3C,IAAI,CAAC;EAC1D,MAAMA,IAAI,GAAGmD,cAAc,GAAGC,YAAY,CAACC,IAAI,CAAC,CAAC,GAAGD,YAAY;EAChE,IAAIF,WAAW,EAAE;IACflD,IAAI,CAACsD,WAAW,CAACC,eAAQ,CAAC,IAAAhF,cAAO,EAACkE,QAAQ,CAAC,CAAC,CAAC;EAC/C;EACA,IAAIQ,gBAAgB,EAAE;IACpBjD,IAAI,CAAC0C,MAAM,CAACA,MAAM,CAAC;EACrB;EACA,IAAIK,cAAc,IAAIC,YAAY,EAAE;IAClChD,IAAI,CAACwD,IAAI,CAACnB,KAAK,EAAEE,GAAG,EAAE,KAAK,CAAC;EAC9B;EACAxG,GAAG,CAACI,MAAM,CAACiG,QAAQ,CAACpC,IAAI,EAAEjE,GAAG,CAACO,KAAK,CAAC;AACtC,CAAC;AAACC,OAAA,CAAA6F,QAAA,GAAAA,QAAA;AAEK,MAAMqB,QAAQ,GAAGA,CAAC1H,GAAmB,EAAEC,KAAgB,KAAK;EACjE,SAAS;;EACT,MAAMyF,OAAO,GAAG,IAAA/E,kBAAW,EAACX,GAAG,CAACY,IAAI,EAAEX,KAAK,CAAC;EAC5CD,GAAG,CAACI,MAAM,CAACsH,QAAQ,CAAChC,OAAO,EAAE1F,GAAG,CAACO,KAAK,CAAC;AACzC,CAAC;AAACC,OAAA,CAAAkH,QAAA,GAAAA,QAAA;AAEK,MAAMC,SAAS,GAAGA,CAAC3H,GAAmB,EAAEC,KAAuB,KAAK;EACzE,SAAS;;EACT,MAAMyF,OAAO,GAAG,IAAAkC,mBAAY,EAAC5H,GAAG,CAACY,IAAI,EAAEX,KAAK,CAAC;EAC7CD,GAAG,CAACI,MAAM,CAACuH,SAAS,CAACjC,OAAO,EAAE1F,GAAG,CAACO,KAAK,CAAC;AAC1C,CAAC;AAACC,OAAA,CAAAmH,SAAA,GAAAA,SAAA;AAEK,MAAM9B,YAAY,GAAGA,CAAC7F,GAAmB,EAAEC,KAAoB,KAAK;EACzE,SAAS;;EACT,MAAM;IAAE4H,IAAI;IAAExH,CAAC;IAAEC;EAAE,CAAC,GAAGL,KAAK;EAC5BD,GAAG,CAACI,MAAM,CAACyF,YAAY,CAACgC,IAAI,EAAExH,CAAC,EAAEC,CAAC,EAAEN,GAAG,CAACO,KAAK,CAAC;AAChD,CAAC;AAACC,OAAA,CAAAqF,YAAA,GAAAA,YAAA;AAOK,MAAMiC,UAAU,GAAGA,CAAC9H,GAAmB,EAAEC,KAAkB,KAAK;EACrE,SAAS;;EACT,MAAMyF,OAAO,GAAGzF,KAAK,CAAC8H,MAAM,CAACC,MAAM,CACjC,CAACC,GAAG,EAAEC,KAAK,KAAK;IACd,MAAM;MAAEC,EAAE;MAAEjC;IAAI,CAAC,GAAGgC,KAAK;IACzBD,GAAG,CAACF,MAAM,CAACvC,IAAI,CAAC2C,EAAE,CAAC;IACnBF,GAAG,CAACG,SAAS,CAAC5C,IAAI,CAACU,GAAG,CAAC;IACvB,OAAO+B,GAAG;EACZ,CAAC,EACD;IAAEF,MAAM,EAAE,EAAE;IAAEK,SAAS,EAAE;EAAG,CAC9B,CAAC;EACD,MAAM;IAAEL,MAAM;IAAEK;EAAU,CAAC,GAAG1C,OAAO;EACrC,MAAM;IAAErF,CAAC;IAAEC,CAAC;IAAE6D;EAAK,CAAC,GAAGlE,KAAK;EAC5B,IAAIkE,IAAI,EAAE;IACRnE,GAAG,CAACI,MAAM,CAAC0H,UAAU,CAACC,MAAM,EAAEK,SAAS,EAAE/H,CAAC,EAAEC,CAAC,EAAE6D,IAAI,EAAEnE,GAAG,CAACO,KAAK,CAAC;EACjE;AACF,CAAC;AAACC,OAAA,CAAAsH,UAAA,GAAAA,UAAA;AAEK,MAAMO,YAAY,GAAGA,CAACrI,GAAmB,EAAEC,KAAoB,KAAK;EACzE,SAAS;;EACT,MAAM;IAAEG;EAAO,CAAC,GAAGJ,GAAG;EACtB,MAAM;IAAEsI;EAAI,CAAC,GAAGrI,KAAK;EACrB,MAAM;IAAEI,CAAC;IAAEC,CAAC;IAAEe,KAAK;IAAEC;EAAO,CAAC,GAAGrB,KAAK,CAACS,IAAI,GACtCT,KAAK,CAACS,IAAI,GACV;IAAEL,CAAC,EAAEJ,KAAK,CAACI,CAAC;IAAEC,CAAC,EAAEL,KAAK,CAACK,CAAC;IAAEe,KAAK,EAAEpB,KAAK,CAACoB,KAAK;IAAEC,MAAM,EAAErB,KAAK,CAACqB;EAAO,CAAC;EACxE,IAAIgH,GAAG,KAAK,IAAI,EAAE;IAChB;EACF;EACAlI,MAAM,CAACmI,IAAI,CAAC,CAAC;EACb,IAAIlI,CAAC,IAAIC,CAAC,EAAE;IACVF,MAAM,CAACoI,SAAS,CAACnI,CAAC,EAAEC,CAAC,CAAC;EACxB;EACAF,MAAM,CAACqI,OAAO,CAACH,GAAG,EAAEjH,KAAK,EAAEC,MAAM,CAAC;EAClClB,MAAM,CAACsI,OAAO,CAAC,CAAC;AAClB,CAAC;AAAClI,OAAA,CAAA6H,YAAA,GAAAA,YAAA;AAEK,MAAMM,aAAa,GAAGA,CAAC3I,GAAmB,EAAEC,KAAqB,KAAK;EAC3E,SAAS;;EACT,MAAM;IAAE2I,SAAS;IAAEvI,CAAC;IAAEC,CAAC;IAAEe;EAAM,CAAC,GAAGpB,KAAK;EACxC,IAAI2I,SAAS,EAAE;IACbA,SAAS,CAACC,MAAM,CAACxH,KAAK,CAAC;IACvBuH,SAAS,CAACrI,KAAK,CAACP,GAAG,CAACI,MAAM,EAAEC,CAAC,EAAEC,CAAC,CAAC;EACnC;AACF,CAAC;AAACE,OAAA,CAAAmI,aAAA,GAAAA,aAAA;AAEK,MAAMG,WAAW,GAAGA,CAAC9I,GAAmB,EAAEC,KAAmB,KAAK;EACvE,SAAS;;EACT,MAAM;IAAE8I;EAAQ,CAAC,GAAG9I,KAAK;EACzBD,GAAG,CAACI,MAAM,CAAC0I,WAAW,CAACC,OAAO,CAAC;AACjC,CAAC;AAACvI,OAAA,CAAAsI,WAAA,GAAAA,WAAA;AAEK,MAAME,SAAS,GAAGA,CAAChJ,GAAmB,EAAEC,KAAiB,KAAK;EACnE,SAAS;;EACT,MAAM;IAAEa,KAAK;IAAEmI,OAAO;IAAEC,UAAU;IAAEvG,MAAM;IAAEE,SAAS;IAAE9B;EAAS,CAAC,GAAGd,KAAK;EACzE,MAAM0D,KAAK,GAAGd,SAAS,GAAGW,gBAAS,CAAC,IAAAhB,cAAO,EAACK,SAAS,CAAC,CAAC,GAAGS,SAAS;EACnE,IAAIxC,KAAK,EAAE;IACTd,GAAG,CAACI,MAAM,CAAC4I,SAAS,CAClBlI,KAAK,EACLmI,OAAO,EACPC,UAAU,EACVlJ,GAAG,CAACO,KAAK,EACToD,KAAK,EACLhB,MAAM,EACN5B,QACF,CAAC;EACH;AACF,CAAC;AAACP,OAAA,CAAAwI,SAAA,GAAAA,SAAA;AAEK,MAAMG,UAAU,GAAGA,CAACnJ,GAAmB,EAAEC,KAAkB,KAAK;EACrE,SAAS;;EACT,MAAM;IAAEmD;EAAE,CAAC,GAAG,IAAAgG,oBAAa,EAACnJ,KAAK,CAAC;EAClC,MAAM;IAAEoJ;EAAE,CAAC,GAAGpJ,KAAK;EACnBD,GAAG,CAACI,MAAM,CAAC+I,UAAU,CAAC/F,CAAC,CAAC/C,CAAC,EAAE+C,CAAC,CAAC9C,CAAC,EAAE+I,CAAC,EAAErJ,GAAG,CAACO,KAAK,CAAC;AAC/C,CAAC;AAACC,OAAA,CAAA2I,UAAA,GAAAA,UAAA;AAEK,MAAMG,WAAW,GAAGA,CAACtJ,GAAmB,EAAEC,KAAmB,KAAK;EACvE,SAAS;;EACT,MAAM;IAAEsJ,SAAS;IAAEC;EAAM,CAAC,GAAGvJ,KAAK;EAClC,IAAIsJ,SAAS,EAAE;IACbtJ,KAAK,CAACsJ,SAAS,CAACE,SAAS,CAACD,KAAK,CAAC;IAChCvJ,KAAK,CAACsJ,SAAS,CAACG,MAAM,CAAC1J,GAAG,CAACI,MAAM,CAAC;EACpC;AACF,CAAC;AAACI,OAAA,CAAA8I,WAAA,GAAAA,WAAA","ignoreList":[]}
|
@@ -165,8 +165,8 @@ export const drawPath = (ctx, props) => {
|
|
165
165
|
stroke,
|
166
166
|
...pathProps
|
167
167
|
} = props;
|
168
|
-
const start = saturate(trimStart);
|
169
|
-
const end = saturate(trimEnd);
|
168
|
+
const start = Math.fround(saturate(trimStart));
|
169
|
+
const end = Math.fround(saturate(trimEnd));
|
170
170
|
const hasStartOffset = start !== 0;
|
171
171
|
const hasEndOffset = end !== 1;
|
172
172
|
const hasStrokeOptions = stroke !== undefined;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["enumKey","fitRects","processCircle","processColor","processPath","processRect","processRRect","saturate","BlendMode","FillType","FilterMode","isCubicSampling","MipmapMode","PointMode","VertexMode","drawLine","ctx","props","p1","p2","canvas","x","y","paint","drawOval","rect","Skia","drawImage","image","sampling","_props$fit","fit","src","dst","width","height","drawImageRectCubic","B","C","_sampling$filter","_sampling$mipmap","drawImageRectOptions","filter","Linear","mipmap","None","drawPoints","points","mode","drawVertices","textures","colors","indices","blendMode","vertexMode","Triangles","vertices","MakeVertices","map","c","undefined","defaultBlendMode","DstOver","SrcOver","blend","drawDiffRect","outer","inner","drawDRRect","drawTextPath","path","font","initialOffset","text","ids","getGlyphIDs","widths","getGlyphWidths","rsx","meas","ContourMeasureIter","cont","next","dist","i","length","substring","p","t","getPosTan","adjustedX","adjustedY","push","RSXform","derived","TextBlob","MakeFromRSXform","drawTextBlob","drawText","drawPatch","texture","patch","pos","c2","c1","drawPath","start","trimStart","end","trimEnd","fillType","stroke","pathProps","hasStartOffset","hasEndOffset","hasStrokeOptions","hasFillType","willMutatePath","pristinePath","copy","setFillType","trim","drawRect","drawRRect","blob","drawGlyphs","glyphs","reduce","acc","glyph","id","positions","drawImageSVG","svg","save","translate","drawSvg","restore","drawParagraph","paragraph","layout","drawPicture","picture","drawAtlas","sprites","transforms","drawCircle","r","drawSkottie","animation","frame","seekFrame","render"],"sources":["Drawing.ts"],"sourcesContent":["import {\n enumKey,\n fitRects,\n processCircle,\n processColor,\n processPath,\n processRect,\n processRRect,\n} from \"../../../dom/nodes\";\nimport type {\n AtlasProps,\n CircleProps,\n DiffRectProps,\n GlyphsProps,\n ImageProps,\n ImageSVGProps,\n LineProps,\n OvalProps,\n ParagraphProps,\n PatchProps,\n PathProps,\n PictureProps,\n PointsProps,\n RectProps,\n RoundedRectProps,\n SkottieProps,\n TextBlobProps,\n TextPathProps,\n TextProps,\n VerticesProps,\n} from \"../../../dom/types\";\nimport { saturate } from \"../../../renderer/processors\";\nimport type { SkPoint, SkRSXform } from \"../../../skia/types\";\nimport {\n BlendMode,\n FillType,\n FilterMode,\n isCubicSampling,\n MipmapMode,\n PointMode,\n VertexMode,\n} from \"../../../skia/types\";\nimport type { DrawingContext } from \"../DrawingContext\";\n\nexport const drawLine = (ctx: DrawingContext, props: LineProps) => {\n \"worklet\";\n const { p1, p2 } = props;\n ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);\n};\n\nexport const drawOval = (ctx: DrawingContext, props: OvalProps) => {\n \"worklet\";\n const rect = processRect(ctx.Skia, props);\n ctx.canvas.drawOval(rect, ctx.paint);\n};\n\nexport const drawImage = (ctx: DrawingContext, props: ImageProps) => {\n \"worklet\";\n const { image, sampling } = props;\n if (image) {\n const fit = props.fit ?? \"contain\";\n const rect = processRect(ctx.Skia, props);\n const { src, dst } = fitRects(\n fit,\n {\n x: 0,\n y: 0,\n width: image.width(),\n height: image.height(),\n },\n rect\n );\n if (sampling && isCubicSampling(sampling)) {\n ctx.canvas.drawImageRectCubic(\n image,\n src,\n dst,\n sampling.B,\n sampling.C,\n ctx.paint\n );\n } else {\n ctx.canvas.drawImageRectOptions(\n image,\n src,\n dst,\n sampling?.filter ?? FilterMode.Linear,\n sampling?.mipmap ?? MipmapMode.None,\n ctx.paint\n );\n }\n }\n};\n\nexport const drawPoints = (ctx: DrawingContext, props: PointsProps) => {\n \"worklet\";\n const { points, mode } = props;\n ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);\n};\n\nexport const drawVertices = (ctx: DrawingContext, props: VerticesProps) => {\n \"worklet\";\n const { mode, textures, colors, indices, blendMode } = props;\n const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;\n const vertices = ctx.Skia.MakeVertices(\n vertexMode,\n props.vertices,\n textures,\n colors ? colors.map((c) => processColor(ctx.Skia, c)) : undefined,\n indices\n );\n const defaultBlendMode = colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n\n ctx.canvas.drawVertices(vertices, blend, ctx.paint);\n};\n\nexport const drawDiffRect = (ctx: DrawingContext, props: DiffRectProps) => {\n \"worklet\";\n const { outer, inner } = props;\n ctx.canvas.drawDRRect(outer, inner, ctx.paint);\n};\n\nexport const drawTextPath = (ctx: DrawingContext, props: TextPathProps) => {\n \"worklet\";\n const path = processPath(ctx.Skia, props.path);\n const { font, initialOffset } = props;\n if (font) {\n let { text } = props;\n const ids = font.getGlyphIDs(text);\n const widths = font.getGlyphWidths(ids);\n const rsx: SkRSXform[] = [];\n const meas = ctx.Skia.ContourMeasureIter(path, false, 1);\n let cont = meas.next();\n let dist = initialOffset;\n for (let i = 0; i < text.length && cont; i++) {\n const width = widths[i];\n dist += width / 2;\n if (dist > cont.length()) {\n // jump to next contour\n cont = meas.next();\n if (!cont) {\n // We have come to the end of the path - terminate the string\n // right here.\n text = text.substring(0, i);\n break;\n }\n dist = width / 2;\n }\n // Gives us the (x, y) coordinates as well as the cos/sin of the tangent\n // line at that position.\n const [p, t] = cont.getPosTan(dist);\n const adjustedX = p.x - (width / 2) * t.x;\n const adjustedY = p.y - (width / 2) * t.y;\n rsx.push(ctx.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));\n dist += width / 2;\n }\n const derived = ctx.Skia.TextBlob.MakeFromRSXform(text, rsx, font);\n ctx.canvas.drawTextBlob(derived, 0, 0, ctx.paint);\n }\n};\n\nexport const drawText = (ctx: DrawingContext, props: TextProps) => {\n \"worklet\";\n const { text, x, y, font } = props;\n if (font != null) {\n ctx.canvas.drawText(text, x, y, ctx.paint, font);\n }\n};\n\nexport const drawPatch = (ctx: DrawingContext, props: PatchProps) => {\n \"worklet\";\n const { texture, blendMode, patch } = props;\n const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const mode = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n // Patch requires a path with the following constraints:\n // M tl\n // C c1 c2 br\n // C c1 c2 bl\n // C c1 c2 tl (the redundant point in the last command is removed)\n\n const points = [\n patch[0].pos,\n patch[0].c2,\n patch[1].c1,\n patch[1].pos,\n patch[1].c2,\n patch[2].c1,\n patch[2].pos,\n patch[2].c2,\n patch[3].c1,\n patch[3].pos,\n patch[3].c2,\n patch[0].c1,\n ];\n const colors = props.colors\n ? props.colors.map((c) => processColor(ctx.Skia, c))\n : undefined;\n ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);\n};\n\nexport const drawPath = (ctx: DrawingContext, props: PathProps) => {\n \"worklet\";\n const {\n start: trimStart,\n end: trimEnd,\n fillType,\n stroke,\n ...pathProps\n } = props;\n const start = saturate(trimStart);\n const end = saturate(trimEnd);\n const hasStartOffset = start !== 0;\n const hasEndOffset = end !== 1;\n const hasStrokeOptions = stroke !== undefined;\n const hasFillType = !!fillType;\n const willMutatePath =\n hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;\n const pristinePath = processPath(ctx.Skia, pathProps.path);\n const path = willMutatePath ? pristinePath.copy() : pristinePath;\n if (hasFillType) {\n path.setFillType(FillType[enumKey(fillType)]);\n }\n if (hasStrokeOptions) {\n path.stroke(stroke);\n }\n if (hasStartOffset || hasEndOffset) {\n path.trim(start, end, false);\n }\n ctx.canvas.drawPath(path, ctx.paint);\n};\n\nexport const drawRect = (ctx: DrawingContext, props: RectProps) => {\n \"worklet\";\n const derived = processRect(ctx.Skia, props);\n ctx.canvas.drawRect(derived, ctx.paint);\n};\n\nexport const drawRRect = (ctx: DrawingContext, props: RoundedRectProps) => {\n \"worklet\";\n const derived = processRRect(ctx.Skia, props);\n ctx.canvas.drawRRect(derived, ctx.paint);\n};\n\nexport const drawTextBlob = (ctx: DrawingContext, props: TextBlobProps) => {\n \"worklet\";\n const { blob, x, y } = props;\n ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);\n};\n\ninterface ProcessedGlyphs {\n glyphs: number[];\n positions: SkPoint[];\n}\n\nexport const drawGlyphs = (ctx: DrawingContext, props: GlyphsProps) => {\n \"worklet\";\n const derived = props.glyphs.reduce<ProcessedGlyphs>(\n (acc, glyph) => {\n const { id, pos } = glyph;\n acc.glyphs.push(id);\n acc.positions.push(pos);\n return acc;\n },\n { glyphs: [], positions: [] }\n );\n const { glyphs, positions } = derived;\n const { x, y, font } = props;\n if (font) {\n ctx.canvas.drawGlyphs(glyphs, positions, x, y, font, ctx.paint);\n }\n};\n\nexport const drawImageSVG = (ctx: DrawingContext, props: ImageSVGProps) => {\n \"worklet\";\n const { canvas } = ctx;\n const { svg } = props;\n const { x, y, width, height } = props.rect\n ? props.rect\n : { x: props.x, y: props.y, width: props.width, height: props.height };\n if (svg === null) {\n return;\n }\n canvas.save();\n if (x && y) {\n canvas.translate(x, y);\n }\n canvas.drawSvg(svg, width, height);\n canvas.restore();\n};\n\nexport const drawParagraph = (ctx: DrawingContext, props: ParagraphProps) => {\n \"worklet\";\n const { paragraph, x, y, width } = props;\n if (paragraph) {\n paragraph.layout(width);\n paragraph.paint(ctx.canvas, x, y);\n }\n};\n\nexport const drawPicture = (ctx: DrawingContext, props: PictureProps) => {\n \"worklet\";\n const { picture } = props;\n ctx.canvas.drawPicture(picture);\n};\n\nexport const drawAtlas = (ctx: DrawingContext, props: AtlasProps) => {\n \"worklet\";\n const { image, sprites, transforms, colors, blendMode, sampling } = props;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : undefined;\n if (image) {\n ctx.canvas.drawAtlas(\n image,\n sprites,\n transforms,\n ctx.paint,\n blend,\n colors,\n sampling\n );\n }\n};\n\nexport const drawCircle = (ctx: DrawingContext, props: CircleProps) => {\n \"worklet\";\n const { c } = processCircle(props);\n const { r } = props;\n ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);\n};\n\nexport const drawSkottie = (ctx: DrawingContext, props: SkottieProps) => {\n \"worklet\";\n const { animation, frame } = props;\n if (animation) {\n props.animation.seekFrame(frame);\n props.animation.render(ctx.canvas);\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
1
|
+
{"version":3,"names":["enumKey","fitRects","processCircle","processColor","processPath","processRect","processRRect","saturate","BlendMode","FillType","FilterMode","isCubicSampling","MipmapMode","PointMode","VertexMode","drawLine","ctx","props","p1","p2","canvas","x","y","paint","drawOval","rect","Skia","drawImage","image","sampling","_props$fit","fit","src","dst","width","height","drawImageRectCubic","B","C","_sampling$filter","_sampling$mipmap","drawImageRectOptions","filter","Linear","mipmap","None","drawPoints","points","mode","drawVertices","textures","colors","indices","blendMode","vertexMode","Triangles","vertices","MakeVertices","map","c","undefined","defaultBlendMode","DstOver","SrcOver","blend","drawDiffRect","outer","inner","drawDRRect","drawTextPath","path","font","initialOffset","text","ids","getGlyphIDs","widths","getGlyphWidths","rsx","meas","ContourMeasureIter","cont","next","dist","i","length","substring","p","t","getPosTan","adjustedX","adjustedY","push","RSXform","derived","TextBlob","MakeFromRSXform","drawTextBlob","drawText","drawPatch","texture","patch","pos","c2","c1","drawPath","start","trimStart","end","trimEnd","fillType","stroke","pathProps","Math","fround","hasStartOffset","hasEndOffset","hasStrokeOptions","hasFillType","willMutatePath","pristinePath","copy","setFillType","trim","drawRect","drawRRect","blob","drawGlyphs","glyphs","reduce","acc","glyph","id","positions","drawImageSVG","svg","save","translate","drawSvg","restore","drawParagraph","paragraph","layout","drawPicture","picture","drawAtlas","sprites","transforms","drawCircle","r","drawSkottie","animation","frame","seekFrame","render"],"sources":["Drawing.ts"],"sourcesContent":["import {\n enumKey,\n fitRects,\n processCircle,\n processColor,\n processPath,\n processRect,\n processRRect,\n} from \"../../../dom/nodes\";\nimport type {\n AtlasProps,\n CircleProps,\n DiffRectProps,\n GlyphsProps,\n ImageProps,\n ImageSVGProps,\n LineProps,\n OvalProps,\n ParagraphProps,\n PatchProps,\n PathProps,\n PictureProps,\n PointsProps,\n RectProps,\n RoundedRectProps,\n SkottieProps,\n TextBlobProps,\n TextPathProps,\n TextProps,\n VerticesProps,\n} from \"../../../dom/types\";\nimport { saturate } from \"../../../renderer/processors\";\nimport type { SkPoint, SkRSXform } from \"../../../skia/types\";\nimport {\n BlendMode,\n FillType,\n FilterMode,\n isCubicSampling,\n MipmapMode,\n PointMode,\n VertexMode,\n} from \"../../../skia/types\";\nimport type { DrawingContext } from \"../DrawingContext\";\n\nexport const drawLine = (ctx: DrawingContext, props: LineProps) => {\n \"worklet\";\n const { p1, p2 } = props;\n ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);\n};\n\nexport const drawOval = (ctx: DrawingContext, props: OvalProps) => {\n \"worklet\";\n const rect = processRect(ctx.Skia, props);\n ctx.canvas.drawOval(rect, ctx.paint);\n};\n\nexport const drawImage = (ctx: DrawingContext, props: ImageProps) => {\n \"worklet\";\n const { image, sampling } = props;\n if (image) {\n const fit = props.fit ?? \"contain\";\n const rect = processRect(ctx.Skia, props);\n const { src, dst } = fitRects(\n fit,\n {\n x: 0,\n y: 0,\n width: image.width(),\n height: image.height(),\n },\n rect\n );\n if (sampling && isCubicSampling(sampling)) {\n ctx.canvas.drawImageRectCubic(\n image,\n src,\n dst,\n sampling.B,\n sampling.C,\n ctx.paint\n );\n } else {\n ctx.canvas.drawImageRectOptions(\n image,\n src,\n dst,\n sampling?.filter ?? FilterMode.Linear,\n sampling?.mipmap ?? MipmapMode.None,\n ctx.paint\n );\n }\n }\n};\n\nexport const drawPoints = (ctx: DrawingContext, props: PointsProps) => {\n \"worklet\";\n const { points, mode } = props;\n ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);\n};\n\nexport const drawVertices = (ctx: DrawingContext, props: VerticesProps) => {\n \"worklet\";\n const { mode, textures, colors, indices, blendMode } = props;\n const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;\n const vertices = ctx.Skia.MakeVertices(\n vertexMode,\n props.vertices,\n textures,\n colors ? colors.map((c) => processColor(ctx.Skia, c)) : undefined,\n indices\n );\n const defaultBlendMode = colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n\n ctx.canvas.drawVertices(vertices, blend, ctx.paint);\n};\n\nexport const drawDiffRect = (ctx: DrawingContext, props: DiffRectProps) => {\n \"worklet\";\n const { outer, inner } = props;\n ctx.canvas.drawDRRect(outer, inner, ctx.paint);\n};\n\nexport const drawTextPath = (ctx: DrawingContext, props: TextPathProps) => {\n \"worklet\";\n const path = processPath(ctx.Skia, props.path);\n const { font, initialOffset } = props;\n if (font) {\n let { text } = props;\n const ids = font.getGlyphIDs(text);\n const widths = font.getGlyphWidths(ids);\n const rsx: SkRSXform[] = [];\n const meas = ctx.Skia.ContourMeasureIter(path, false, 1);\n let cont = meas.next();\n let dist = initialOffset;\n for (let i = 0; i < text.length && cont; i++) {\n const width = widths[i];\n dist += width / 2;\n if (dist > cont.length()) {\n // jump to next contour\n cont = meas.next();\n if (!cont) {\n // We have come to the end of the path - terminate the string\n // right here.\n text = text.substring(0, i);\n break;\n }\n dist = width / 2;\n }\n // Gives us the (x, y) coordinates as well as the cos/sin of the tangent\n // line at that position.\n const [p, t] = cont.getPosTan(dist);\n const adjustedX = p.x - (width / 2) * t.x;\n const adjustedY = p.y - (width / 2) * t.y;\n rsx.push(ctx.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));\n dist += width / 2;\n }\n const derived = ctx.Skia.TextBlob.MakeFromRSXform(text, rsx, font);\n ctx.canvas.drawTextBlob(derived, 0, 0, ctx.paint);\n }\n};\n\nexport const drawText = (ctx: DrawingContext, props: TextProps) => {\n \"worklet\";\n const { text, x, y, font } = props;\n if (font != null) {\n ctx.canvas.drawText(text, x, y, ctx.paint, font);\n }\n};\n\nexport const drawPatch = (ctx: DrawingContext, props: PatchProps) => {\n \"worklet\";\n const { texture, blendMode, patch } = props;\n const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;\n const mode = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;\n // Patch requires a path with the following constraints:\n // M tl\n // C c1 c2 br\n // C c1 c2 bl\n // C c1 c2 tl (the redundant point in the last command is removed)\n\n const points = [\n patch[0].pos,\n patch[0].c2,\n patch[1].c1,\n patch[1].pos,\n patch[1].c2,\n patch[2].c1,\n patch[2].pos,\n patch[2].c2,\n patch[3].c1,\n patch[3].pos,\n patch[3].c2,\n patch[0].c1,\n ];\n const colors = props.colors\n ? props.colors.map((c) => processColor(ctx.Skia, c))\n : undefined;\n ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);\n};\n\nexport const drawPath = (ctx: DrawingContext, props: PathProps) => {\n \"worklet\";\n const {\n start: trimStart,\n end: trimEnd,\n fillType,\n stroke,\n ...pathProps\n } = props;\n const start = Math.fround(saturate(trimStart));\n const end = Math.fround(saturate(trimEnd));\n const hasStartOffset = start !== 0;\n const hasEndOffset = end !== 1;\n const hasStrokeOptions = stroke !== undefined;\n const hasFillType = !!fillType;\n const willMutatePath =\n hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;\n const pristinePath = processPath(ctx.Skia, pathProps.path);\n const path = willMutatePath ? pristinePath.copy() : pristinePath;\n if (hasFillType) {\n path.setFillType(FillType[enumKey(fillType)]);\n }\n if (hasStrokeOptions) {\n path.stroke(stroke);\n }\n if (hasStartOffset || hasEndOffset) {\n path.trim(start, end, false);\n }\n ctx.canvas.drawPath(path, ctx.paint);\n};\n\nexport const drawRect = (ctx: DrawingContext, props: RectProps) => {\n \"worklet\";\n const derived = processRect(ctx.Skia, props);\n ctx.canvas.drawRect(derived, ctx.paint);\n};\n\nexport const drawRRect = (ctx: DrawingContext, props: RoundedRectProps) => {\n \"worklet\";\n const derived = processRRect(ctx.Skia, props);\n ctx.canvas.drawRRect(derived, ctx.paint);\n};\n\nexport const drawTextBlob = (ctx: DrawingContext, props: TextBlobProps) => {\n \"worklet\";\n const { blob, x, y } = props;\n ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);\n};\n\ninterface ProcessedGlyphs {\n glyphs: number[];\n positions: SkPoint[];\n}\n\nexport const drawGlyphs = (ctx: DrawingContext, props: GlyphsProps) => {\n \"worklet\";\n const derived = props.glyphs.reduce<ProcessedGlyphs>(\n (acc, glyph) => {\n const { id, pos } = glyph;\n acc.glyphs.push(id);\n acc.positions.push(pos);\n return acc;\n },\n { glyphs: [], positions: [] }\n );\n const { glyphs, positions } = derived;\n const { x, y, font } = props;\n if (font) {\n ctx.canvas.drawGlyphs(glyphs, positions, x, y, font, ctx.paint);\n }\n};\n\nexport const drawImageSVG = (ctx: DrawingContext, props: ImageSVGProps) => {\n \"worklet\";\n const { canvas } = ctx;\n const { svg } = props;\n const { x, y, width, height } = props.rect\n ? props.rect\n : { x: props.x, y: props.y, width: props.width, height: props.height };\n if (svg === null) {\n return;\n }\n canvas.save();\n if (x && y) {\n canvas.translate(x, y);\n }\n canvas.drawSvg(svg, width, height);\n canvas.restore();\n};\n\nexport const drawParagraph = (ctx: DrawingContext, props: ParagraphProps) => {\n \"worklet\";\n const { paragraph, x, y, width } = props;\n if (paragraph) {\n paragraph.layout(width);\n paragraph.paint(ctx.canvas, x, y);\n }\n};\n\nexport const drawPicture = (ctx: DrawingContext, props: PictureProps) => {\n \"worklet\";\n const { picture } = props;\n ctx.canvas.drawPicture(picture);\n};\n\nexport const drawAtlas = (ctx: DrawingContext, props: AtlasProps) => {\n \"worklet\";\n const { image, sprites, transforms, colors, blendMode, sampling } = props;\n const blend = blendMode ? BlendMode[enumKey(blendMode)] : undefined;\n if (image) {\n ctx.canvas.drawAtlas(\n image,\n sprites,\n transforms,\n ctx.paint,\n blend,\n colors,\n sampling\n );\n }\n};\n\nexport const drawCircle = (ctx: DrawingContext, props: CircleProps) => {\n \"worklet\";\n const { c } = processCircle(props);\n const { r } = props;\n ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);\n};\n\nexport const drawSkottie = (ctx: DrawingContext, props: SkottieProps) => {\n \"worklet\";\n const { animation, frame } = props;\n if (animation) {\n props.animation.seekFrame(frame);\n props.animation.render(ctx.canvas);\n }\n};\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
"setup-skia-web": "scripts/setup-canvaskit.js"
|
9
9
|
},
|
10
10
|
"title": "React Native Skia",
|
11
|
-
"version": "2.2.
|
11
|
+
"version": "2.2.4",
|
12
12
|
"description": "High-performance React Native Graphics using Skia",
|
13
13
|
"main": "lib/module/index.js",
|
14
14
|
"react-native": "src/index.ts",
|
@@ -78,7 +78,7 @@
|
|
78
78
|
"peerDependencies": {
|
79
79
|
"react": ">=19.0",
|
80
80
|
"react-native": ">=0.78",
|
81
|
-
"react-native-reanimated": "
|
81
|
+
"react-native-reanimated": ">=3.0"
|
82
82
|
},
|
83
83
|
"peerDependenciesMeta": {
|
84
84
|
"react-native": {
|
@@ -142,7 +142,7 @@ describe("Drawings", () => {
|
|
142
142
|
checkImage(image, "snapshots/paths/skia-trimmed.png");
|
143
143
|
});
|
144
144
|
|
145
|
-
it("Should clamp the trim values automatically", async () => {
|
145
|
+
it("Should clamp the trim values automatically (1)", async () => {
|
146
146
|
const { Skia } = importSkia();
|
147
147
|
const { width, height } = surface;
|
148
148
|
const path = Skia.Path.MakeFromSVGString(
|
@@ -186,6 +186,55 @@ describe("Drawings", () => {
|
|
186
186
|
checkImage(image, "snapshots/paths/skia.png");
|
187
187
|
});
|
188
188
|
|
189
|
+
it("Should clamp the trim values automatically (2)", async () => {
|
190
|
+
const { Skia } = importSkia();
|
191
|
+
const { width, height } = surface;
|
192
|
+
const path = Skia.Path.MakeFromSVGString(
|
193
|
+
// eslint-disable-next-line max-len
|
194
|
+
"M512.213 204.005C500.312 185.697 406.758 105.581 332.94 105.581C259.122 105.581 219.088 132 204.638 149.85C157.952 207.52 141.933 264.275 156.579 320.115C175.803 387.854 228.896 449.644 315.859 505.483C415.638 562.238 479.716 626.774 508.093 699.091C518.163 731.13 519.536 762.711 512.213 793.835C504.889 824.959 490.243 853.336 468.273 878.967C449.965 903.683 425.707 921.534 395.499 932.518C365.291 942.588 328.675 950.369 285.651 955.861C182.21 964.1 97.9935 948.538 33 909.176M595.972 733.419C710.397 564.985 795.529 424.47 851.369 311.876C865.1 279.837 875.169 255.579 881.577 239.102C887.985 221.709 894.393 198.824 900.801 170.447C907.208 142.069 909.497 115.98 907.666 92.1797C904.92 68.3793 893.02 51.9021 871.965 40.0019C850.911 28.1016 835.5 31.3101 811.549 44.1212C772.187 65.1754 745.64 101.334 731.909 152.596C723.67 174.566 715.432 200.197 707.193 229.49C699.87 258.783 694.378 281.21 690.716 296.772C687.97 312.334 682.935 340.711 675.612 381.904C668.289 422.182 663.712 445.982 661.881 453.306C643.573 567.731 621.603 733.876 595.972 951.742C624.349 852.878 656.846 774.154 693.462 715.568C706.278 689.937 717.263 669.798 726.417 655.152C735.571 640.505 748.844 624.486 766.237 607.093C784.545 589.701 803.768 576.885 823.907 568.646C892.562 543.015 941.994 545.304 972.202 575.512C990.51 594.735 999.664 618.078 999.664 645.54C1000.58 673.002 990.052 694.514 968.083 710.076C925.059 733.876 859.608 741.657 771.729 733.419C786.375 737.996 797.36 742.115 804.683 745.776C812.922 748.523 822.992 753.1 834.892 759.508C847.707 765.915 857.319 773.696 863.727 782.85C871.05 792.004 875.627 802.531 877.458 814.432C878.373 819.009 879.746 827.705 881.577 840.521C884.323 853.336 886.612 862.948 888.443 869.356C890.273 875.763 892.562 884.002 895.308 894.072C898.97 904.141 903.089 912.837 907.666 920.16C913.159 926.568 919.566 932.976 926.89 939.384C949.775 961.354 987.764 958.607 1040.86 931.145C1056.42 923.822 1070.61 914.668 1083.42 903.683C1097.15 892.698 1109.97 879.425 1121.87 863.863C1134.69 847.386 1144.76 834.113 1152.08 824.043C1159.4 813.058 1169.47 797.039 1182.29 775.985C1195.1 754.931 1204.26 740.742 1209.75 733.419C1239.04 674.833 1268.33 616.247 1297.63 557.661C1252.77 670.256 1223.94 756.304 1211.12 815.805C1205.63 833.197 1203.34 853.336 1204.26 876.221C1205.17 899.106 1212.04 917.414 1224.85 931.145C1234.01 942.13 1245.45 949.453 1259.18 953.115C1273.83 956.777 1287.56 956.319 1300.37 951.742C1356.21 935.265 1401.53 903.226 1436.31 855.625C1456.45 828.163 1483.45 787.427 1517.32 733.419M1360.79 390.143C1347.97 390.143 1340.19 384.193 1337.45 372.293C1335.62 359.477 1336.99 348.492 1341.57 339.338C1345.24 332 1357.13 333.846 1369.03 333.846C1380.93 333.846 1390.5 340.5 1391 348.95M1925.13 697.718C1902.25 633.64 1874.33 593.82 1841.38 578.258C1810.25 559.95 1775.47 551.254 1737.02 552.169C1698.57 552.169 1664.25 562.238 1634.04 582.377C1605.66 598.855 1581.4 620.824 1561.26 648.286C1541.12 674.833 1527.39 704.126 1520.07 736.165C1513.66 767.288 1514.58 798.87 1522.82 830.909C1531.97 862.032 1547.53 888.579 1569.5 910.549C1604.29 939.842 1646.4 954.488 1695.83 954.488C1745.26 954.488 1787.82 939.842 1823.53 910.549C1838.17 895.902 1848.7 885.375 1855.11 878.967C1861.51 872.56 1868.84 863.406 1877.08 851.505C1886.23 839.605 1893.55 827.247 1899.05 814.432M1958.09 556.288C1933.37 657.898 1916.9 746.234 1908.66 821.297C1900.42 878.967 1911.4 918.787 1941.61 940.757C1964.5 959.065 2000.2 956.319 2048.71 932.518C2090.82 912.38 2131.1 873.017 2169.55 814.432"
|
195
|
+
)!;
|
196
|
+
const PADDING = width / 16;
|
197
|
+
const image = await surface.draw(
|
198
|
+
<FitBox
|
199
|
+
src={Skia.XYWHRect(0, 0, 2139, 928)}
|
200
|
+
dst={Skia.XYWHRect(
|
201
|
+
PADDING,
|
202
|
+
PADDING,
|
203
|
+
width - PADDING * 2,
|
204
|
+
height - PADDING * 2
|
205
|
+
)}
|
206
|
+
>
|
207
|
+
<Group strokeJoin="round" strokeCap="round" color="black">
|
208
|
+
<Path
|
209
|
+
path={path}
|
210
|
+
style="stroke"
|
211
|
+
strokeWidth={116}
|
212
|
+
end={0.9999999999999998}
|
213
|
+
>
|
214
|
+
<LinearGradient
|
215
|
+
start={path.getPoint(0)}
|
216
|
+
end={path.getLastPt()}
|
217
|
+
colors={[
|
218
|
+
"#3FCEBC",
|
219
|
+
"#3CBCEB",
|
220
|
+
"#5F96E7",
|
221
|
+
"#816FE3",
|
222
|
+
"#9F5EE2",
|
223
|
+
"#DE589F",
|
224
|
+
"#FF645E",
|
225
|
+
"#FDA859",
|
226
|
+
"#FAEC54",
|
227
|
+
"#9EE671",
|
228
|
+
"#41E08D",
|
229
|
+
]}
|
230
|
+
/>
|
231
|
+
</Path>
|
232
|
+
</Group>
|
233
|
+
</FitBox>
|
234
|
+
);
|
235
|
+
checkImage(image, "snapshots/paths/skia.png");
|
236
|
+
});
|
237
|
+
|
189
238
|
it("should use default props (1)", async () => {
|
190
239
|
const image = await surface.draw(
|
191
240
|
<Group strokeJoin="round" strokeCap="round" color="black">
|
@@ -208,8 +208,8 @@ export const drawPath = (ctx: DrawingContext, props: PathProps) => {
|
|
208
208
|
stroke,
|
209
209
|
...pathProps
|
210
210
|
} = props;
|
211
|
-
const start = saturate(trimStart);
|
212
|
-
const end = saturate(trimEnd);
|
211
|
+
const start = Math.fround(saturate(trimStart));
|
212
|
+
const end = Math.fround(saturate(trimEnd));
|
213
213
|
const hasStartOffset = start !== 0;
|
214
214
|
const hasEndOffset = end !== 1;
|
215
215
|
const hasStrokeOptions = stroke !== undefined;
|