@shopify/react-native-skia 2.5.0 → 2.5.2

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.
Files changed (41) hide show
  1. package/android/CMakeLists.txt +4 -6
  2. package/android/build.gradle +5 -32
  3. package/android/cpp/rnskia-android/OpenGLContext.h +9 -2
  4. package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +6 -3
  5. package/apple/MetalContext.h +10 -2
  6. package/apple/MetalWindowContext.h +1 -0
  7. package/apple/MetalWindowContext.mm +8 -1
  8. package/apple/RNSkApplePlatformContext.h +2 -1
  9. package/apple/RNSkApplePlatformContext.mm +6 -4
  10. package/apple/SkiaPictureView.mm +3 -0
  11. package/cpp/api/JsiSkImage.h +76 -0
  12. package/cpp/api/JsiSkSurfaceFactory.h +12 -1
  13. package/cpp/api/recorder/Drawings.h +1 -1
  14. package/cpp/rnskia/RNDawnContext.h +24 -16
  15. package/cpp/rnskia/RNDawnUtils.h +12 -0
  16. package/cpp/rnskia/RNSkPlatformContext.h +3 -1
  17. package/lib/commonjs/dom/types/Drawings.d.ts +1 -0
  18. package/lib/commonjs/dom/types/Drawings.js.map +1 -1
  19. package/lib/commonjs/skia/types/Surface/SurfaceFactory.d.ts +10 -1
  20. package/lib/commonjs/skia/types/Surface/SurfaceFactory.js +5 -0
  21. package/lib/commonjs/skia/types/Surface/SurfaceFactory.js.map +1 -1
  22. package/lib/commonjs/sksg/Recorder/commands/Drawing.js +2 -2
  23. package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -1
  24. package/lib/module/dom/types/Drawings.d.ts +1 -0
  25. package/lib/module/dom/types/Drawings.js.map +1 -1
  26. package/lib/module/skia/types/Surface/SurfaceFactory.d.ts +10 -1
  27. package/lib/module/skia/types/Surface/SurfaceFactory.js +4 -1
  28. package/lib/module/skia/types/Surface/SurfaceFactory.js.map +1 -1
  29. package/lib/module/sksg/Recorder/commands/Drawing.js +2 -2
  30. package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -1
  31. package/lib/typescript/lib/commonjs/skia/types/Surface/SurfaceFactory.d.ts +4 -0
  32. package/lib/typescript/lib/module/mock/index.d.ts +4 -0
  33. package/lib/typescript/lib/module/skia/types/Surface/SurfaceFactory.d.ts +4 -1
  34. package/lib/typescript/src/dom/types/Drawings.d.ts +1 -0
  35. package/lib/typescript/src/skia/types/Surface/SurfaceFactory.d.ts +10 -1
  36. package/package.json +5 -2
  37. package/react-native-skia.podspec +20 -104
  38. package/scripts/install-libs.js +131 -0
  39. package/src/dom/types/Drawings.ts +1 -0
  40. package/src/skia/types/Surface/SurfaceFactory.ts +13 -1
  41. package/src/sksg/Recorder/commands/Drawing.ts +3 -2
@@ -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","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":"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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","colorBlendMode","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, colorBlendMode, sampling } =\n props;\n const blend = colorBlendMode ? BlendMode[enumKey(colorBlendMode)] : 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;IAAEwG,cAAc;IAAEpI;EAAS,CAAC,GACpEd,KAAK;EACP,MAAM0D,KAAK,GAAGwF,cAAc,GAAG3F,gBAAS,CAAC,IAAAhB,cAAO,EAAC2G,cAAc,CAAC,CAAC,GAAG7F,SAAS;EAC7E,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,MAAMI,UAAU,GAAGA,CAACpJ,GAAmB,EAAEC,KAAkB,KAAK;EACrE,SAAS;;EACT,MAAM;IAAEmD;EAAE,CAAC,GAAG,IAAAiG,oBAAa,EAACpJ,KAAK,CAAC;EAClC,MAAM;IAAEqJ;EAAE,CAAC,GAAGrJ,KAAK;EACnBD,GAAG,CAACI,MAAM,CAACgJ,UAAU,CAAChG,CAAC,CAAC/C,CAAC,EAAE+C,CAAC,CAAC9C,CAAC,EAAEgJ,CAAC,EAAEtJ,GAAG,CAACO,KAAK,CAAC;AAC/C,CAAC;AAACC,OAAA,CAAA4I,UAAA,GAAAA,UAAA;AAEK,MAAMG,WAAW,GAAGA,CAACvJ,GAAmB,EAAEC,KAAmB,KAAK;EACvE,SAAS;;EACT,MAAM;IAAEuJ,SAAS;IAAEC;EAAM,CAAC,GAAGxJ,KAAK;EAClC,IAAIuJ,SAAS,EAAE;IACbvJ,KAAK,CAACuJ,SAAS,CAACE,SAAS,CAACD,KAAK,CAAC;IAChCxJ,KAAK,CAACuJ,SAAS,CAACG,MAAM,CAAC3J,GAAG,CAACI,MAAM,CAAC;EACpC;AACF,CAAC;AAACI,OAAA,CAAA+I,WAAA,GAAAA,WAAA","ignoreList":[]}
@@ -28,6 +28,7 @@ export interface AtlasProps extends DrawingNodeProps {
28
28
  sprites: SkRect[];
29
29
  transforms: SkRSXform[];
30
30
  colors?: SkColor[];
31
+ colorBlendMode?: SkEnum<typeof BlendMode>;
31
32
  sampling?: SamplingOptions;
32
33
  }
33
34
  export interface CubicBezierHandle {
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["Drawings.ts"],"sourcesContent":["import type {\n FillType,\n SkImage,\n StrokeOpts,\n Vector,\n Color,\n SkPoint,\n BlendMode,\n PointMode,\n VertexMode,\n SkFont,\n SkRRect,\n SkTextBlob,\n SkPicture,\n SkSVG,\n SkPaint,\n SkRect,\n SkRSXform,\n SkColor,\n SamplingOptions,\n SkSkottieAnimation,\n SkImageFilter,\n} from \"../../skia/types\";\n\nimport type {\n CircleDef,\n Fit,\n GroupProps,\n PathDef,\n RectDef,\n RRectDef,\n SkEnum,\n} from \"./Common\";\n\nexport interface DrawingNodeProps extends GroupProps {\n paint?: SkPaint;\n}\n\nexport type ImageProps = DrawingNodeProps &\n RectDef & {\n fit?: Fit;\n image: SkImage | null;\n sampling?: SamplingOptions;\n };\n\nexport type CircleProps = CircleDef & DrawingNodeProps;\n\nexport interface PathProps extends DrawingNodeProps {\n path: PathDef;\n start: number;\n end: number;\n stroke?: StrokeOpts;\n fillType?: SkEnum<typeof FillType>;\n}\n\nexport interface LineProps extends DrawingNodeProps {\n p1: Vector;\n p2: Vector;\n}\n\nexport type OvalProps = RectDef & DrawingNodeProps;\n\nexport type RectProps = RectDef & DrawingNodeProps;\n\nexport type RoundedRectProps = RRectDef & DrawingNodeProps;\n\nexport interface AtlasProps extends DrawingNodeProps {\n image: SkImage | null;\n sprites: SkRect[];\n transforms: SkRSXform[];\n colors?: SkColor[];\n sampling?: SamplingOptions;\n}\n\nexport interface CubicBezierHandle {\n pos: Vector;\n c1: Vector;\n c2: Vector;\n}\n\nexport interface PatchProps extends DrawingNodeProps {\n colors?: Color[];\n patch: [\n CubicBezierHandle,\n CubicBezierHandle,\n CubicBezierHandle,\n CubicBezierHandle,\n ];\n texture?: readonly [SkPoint, SkPoint, SkPoint, SkPoint];\n blendMode?: SkEnum<typeof BlendMode>;\n}\n\nexport interface VerticesProps extends DrawingNodeProps {\n colors?: string[];\n vertices: SkPoint[];\n textures?: SkPoint[];\n mode: SkEnum<typeof VertexMode>;\n blendMode?: SkEnum<typeof BlendMode>;\n indices?: number[];\n}\n\nexport interface ImageSVGProps extends DrawingNodeProps {\n svg: SkSVG | null;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n rect?: SkRect;\n}\n\nexport interface SkottieProps extends DrawingNodeProps {\n animation: SkSkottieAnimation;\n frame: number;\n}\n\nexport interface PictureProps extends DrawingNodeProps {\n picture: SkPicture;\n}\n\nexport interface PointsProps extends DrawingNodeProps {\n points: SkPoint[];\n mode: SkEnum<typeof PointMode>;\n}\n\nexport interface DiffRectProps extends DrawingNodeProps {\n inner: SkRRect;\n outer: SkRRect;\n}\n\nexport interface TextProps extends DrawingNodeProps {\n font: SkFont | null;\n text: string;\n x: number;\n y: number;\n}\n\nexport interface TextPathProps extends DrawingNodeProps {\n font: SkFont | null;\n text: string;\n path: PathDef;\n initialOffset: number;\n}\n\nexport interface TextBlobProps extends DrawingNodeProps {\n blob: SkTextBlob;\n x: number;\n y: number;\n}\n\nexport interface Glyph {\n id: number;\n pos: SkPoint;\n}\n\nexport interface GlyphsProps extends DrawingNodeProps {\n font: SkFont | null;\n x: number;\n y: number;\n glyphs: Glyph[];\n}\n\nexport interface BoxProps extends DrawingNodeProps {\n box: SkRRect | SkRect;\n}\n\nexport interface BoxShadowProps {\n dx?: number;\n dy?: number;\n spread?: number;\n blur: number;\n color?: Color;\n inner?: boolean;\n}\n\nexport interface ImageFilterProps extends GroupProps {\n filter: SkImageFilter;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":[],"sources":["Drawings.ts"],"sourcesContent":["import type {\n FillType,\n SkImage,\n StrokeOpts,\n Vector,\n Color,\n SkPoint,\n BlendMode,\n PointMode,\n VertexMode,\n SkFont,\n SkRRect,\n SkTextBlob,\n SkPicture,\n SkSVG,\n SkPaint,\n SkRect,\n SkRSXform,\n SkColor,\n SamplingOptions,\n SkSkottieAnimation,\n SkImageFilter,\n} from \"../../skia/types\";\n\nimport type {\n CircleDef,\n Fit,\n GroupProps,\n PathDef,\n RectDef,\n RRectDef,\n SkEnum,\n} from \"./Common\";\n\nexport interface DrawingNodeProps extends GroupProps {\n paint?: SkPaint;\n}\n\nexport type ImageProps = DrawingNodeProps &\n RectDef & {\n fit?: Fit;\n image: SkImage | null;\n sampling?: SamplingOptions;\n };\n\nexport type CircleProps = CircleDef & DrawingNodeProps;\n\nexport interface PathProps extends DrawingNodeProps {\n path: PathDef;\n start: number;\n end: number;\n stroke?: StrokeOpts;\n fillType?: SkEnum<typeof FillType>;\n}\n\nexport interface LineProps extends DrawingNodeProps {\n p1: Vector;\n p2: Vector;\n}\n\nexport type OvalProps = RectDef & DrawingNodeProps;\n\nexport type RectProps = RectDef & DrawingNodeProps;\n\nexport type RoundedRectProps = RRectDef & DrawingNodeProps;\n\nexport interface AtlasProps extends DrawingNodeProps {\n image: SkImage | null;\n sprites: SkRect[];\n transforms: SkRSXform[];\n colors?: SkColor[];\n colorBlendMode?: SkEnum<typeof BlendMode>;\n sampling?: SamplingOptions;\n}\n\nexport interface CubicBezierHandle {\n pos: Vector;\n c1: Vector;\n c2: Vector;\n}\n\nexport interface PatchProps extends DrawingNodeProps {\n colors?: Color[];\n patch: [\n CubicBezierHandle,\n CubicBezierHandle,\n CubicBezierHandle,\n CubicBezierHandle,\n ];\n texture?: readonly [SkPoint, SkPoint, SkPoint, SkPoint];\n blendMode?: SkEnum<typeof BlendMode>;\n}\n\nexport interface VerticesProps extends DrawingNodeProps {\n colors?: string[];\n vertices: SkPoint[];\n textures?: SkPoint[];\n mode: SkEnum<typeof VertexMode>;\n blendMode?: SkEnum<typeof BlendMode>;\n indices?: number[];\n}\n\nexport interface ImageSVGProps extends DrawingNodeProps {\n svg: SkSVG | null;\n x?: number;\n y?: number;\n width?: number;\n height?: number;\n rect?: SkRect;\n}\n\nexport interface SkottieProps extends DrawingNodeProps {\n animation: SkSkottieAnimation;\n frame: number;\n}\n\nexport interface PictureProps extends DrawingNodeProps {\n picture: SkPicture;\n}\n\nexport interface PointsProps extends DrawingNodeProps {\n points: SkPoint[];\n mode: SkEnum<typeof PointMode>;\n}\n\nexport interface DiffRectProps extends DrawingNodeProps {\n inner: SkRRect;\n outer: SkRRect;\n}\n\nexport interface TextProps extends DrawingNodeProps {\n font: SkFont | null;\n text: string;\n x: number;\n y: number;\n}\n\nexport interface TextPathProps extends DrawingNodeProps {\n font: SkFont | null;\n text: string;\n path: PathDef;\n initialOffset: number;\n}\n\nexport interface TextBlobProps extends DrawingNodeProps {\n blob: SkTextBlob;\n x: number;\n y: number;\n}\n\nexport interface Glyph {\n id: number;\n pos: SkPoint;\n}\n\nexport interface GlyphsProps extends DrawingNodeProps {\n font: SkFont | null;\n x: number;\n y: number;\n glyphs: Glyph[];\n}\n\nexport interface BoxProps extends DrawingNodeProps {\n box: SkRRect | SkRect;\n}\n\nexport interface BoxShadowProps {\n dx?: number;\n dy?: number;\n spread?: number;\n blur: number;\n color?: Color;\n inner?: boolean;\n}\n\nexport interface ImageFilterProps extends GroupProps {\n filter: SkImageFilter;\n}\n"],"mappings":"","ignoreList":[]}
@@ -1,4 +1,12 @@
1
1
  import type { SkSurface } from "./Surface";
2
+ export declare const ColorSpace: {
3
+ readonly SRGB: "srgb";
4
+ readonly DisplayP3: "display-p3";
5
+ };
6
+ export type ColorSpaceValue = (typeof ColorSpace)[keyof typeof ColorSpace];
7
+ export interface SurfaceOptions {
8
+ colorSpace: ColorSpaceValue;
9
+ }
2
10
  export interface SurfaceFactory {
3
11
  /**
4
12
  * Returns a CPU backed surface with the given dimensions, an SRGB colorspace, Unpremul
@@ -12,6 +20,7 @@ export interface SurfaceFactory {
12
20
  * Creates a GPU backed surface.
13
21
  * @param width - number of pixels of the width of the drawable area.
14
22
  * @param height - number of pixels of the height of the drawable area.
23
+ * @param opts - optional surface options (e.g. colorSpace: "display-p3" | "srgb").
15
24
  */
16
- MakeOffscreen: (width: number, height: number) => SkSurface | null;
25
+ MakeOffscreen: (width: number, height: number, opts?: SurfaceOptions) => SkSurface | null;
17
26
  }
@@ -1,2 +1,5 @@
1
- export {};
1
+ export const ColorSpace = {
2
+ SRGB: "srgb",
3
+ DisplayP3: "display-p3"
4
+ };
2
5
  //# sourceMappingURL=SurfaceFactory.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["SurfaceFactory.ts"],"sourcesContent":["import type { SkSurface } from \"./Surface\";\n\nexport interface SurfaceFactory {\n /**\n * Returns a CPU backed surface with the given dimensions, an SRGB colorspace, Unpremul\n * alphaType and 8888 color type. The pixels belonging to this surface will be in memory and\n * not visible.\n * @param width - number of pixels of the width of the drawable area.\n * @param height - number of pixels of the height of the drawable area.\n */\n Make: (width: number, height: number) => SkSurface | null;\n\n /**\n * Creates a GPU backed surface.\n * @param width - number of pixels of the width of the drawable area.\n * @param height - number of pixels of the height of the drawable area.\n */\n MakeOffscreen: (width: number, height: number) => SkSurface | null;\n}\n"],"mappings":"","ignoreList":[]}
1
+ {"version":3,"names":["ColorSpace","SRGB","DisplayP3"],"sources":["SurfaceFactory.ts"],"sourcesContent":["import type { SkSurface } from \"./Surface\";\n\nexport const ColorSpace = {\n SRGB: \"srgb\",\n DisplayP3: \"display-p3\",\n} as const;\n\nexport type ColorSpaceValue = (typeof ColorSpace)[keyof typeof ColorSpace];\n\nexport interface SurfaceOptions {\n colorSpace: ColorSpaceValue;\n}\n\nexport interface SurfaceFactory {\n /**\n * Returns a CPU backed surface with the given dimensions, an SRGB colorspace, Unpremul\n * alphaType and 8888 color type. The pixels belonging to this surface will be in memory and\n * not visible.\n * @param width - number of pixels of the width of the drawable area.\n * @param height - number of pixels of the height of the drawable area.\n */\n Make: (width: number, height: number) => SkSurface | null;\n\n /**\n * Creates a GPU backed surface.\n * @param width - number of pixels of the width of the drawable area.\n * @param height - number of pixels of the height of the drawable area.\n * @param opts - optional surface options (e.g. colorSpace: \"display-p3\" | \"srgb\").\n */\n MakeOffscreen: (width: number, height: number, opts?: SurfaceOptions) => SkSurface | null;\n}\n"],"mappings":"AAEA,OAAO,MAAMA,UAAU,GAAG;EACxBC,IAAI,EAAE,MAAM;EACZC,SAAS,EAAE;AACb,CAAU","ignoreList":[]}
@@ -295,10 +295,10 @@ export const drawAtlas = (ctx, props) => {
295
295
  sprites,
296
296
  transforms,
297
297
  colors,
298
- blendMode,
298
+ colorBlendMode,
299
299
  sampling
300
300
  } = props;
301
- const blend = blendMode ? BlendMode[enumKey(blendMode)] : undefined;
301
+ const blend = colorBlendMode ? BlendMode[enumKey(colorBlendMode)] : undefined;
302
302
  if (image) {
303
303
  ctx.canvas.drawAtlas(image, sprites, transforms, ctx.paint, blend, colors, sampling);
304
304
  }
@@ -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","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":[]}
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","colorBlendMode","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, colorBlendMode, sampling } =\n props;\n const blend = colorBlendMode ? BlendMode[enumKey(colorBlendMode)] : 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 +1,5 @@
1
1
  export const __esModule: boolean;
2
+ export namespace ColorSpace {
3
+ let SRGB: string;
4
+ let DisplayP3: string;
5
+ }
@@ -193,6 +193,10 @@ export function Mock(CanvasKit: any): {
193
193
  rrect: (r: any, rx: any, ry: any) => import("../../..").SkRRect;
194
194
  processTransform2d: (transforms: any) => any;
195
195
  isRNModule: (mod: any) => mod is number;
196
+ ColorSpace: {
197
+ SRGB: string;
198
+ DisplayP3: string;
199
+ };
196
200
  VertexMode: {};
197
201
  isShader: (obj: any) => boolean;
198
202
  processUniforms: (source: any, uniforms: any, builder: any) => any[];
@@ -1 +1,4 @@
1
- export {};
1
+ export namespace ColorSpace {
2
+ let SRGB: string;
3
+ let DisplayP3: string;
4
+ }
@@ -28,6 +28,7 @@ export interface AtlasProps extends DrawingNodeProps {
28
28
  sprites: SkRect[];
29
29
  transforms: SkRSXform[];
30
30
  colors?: SkColor[];
31
+ colorBlendMode?: SkEnum<typeof BlendMode>;
31
32
  sampling?: SamplingOptions;
32
33
  }
33
34
  export interface CubicBezierHandle {
@@ -1,4 +1,12 @@
1
1
  import type { SkSurface } from "./Surface";
2
+ export declare const ColorSpace: {
3
+ readonly SRGB: "srgb";
4
+ readonly DisplayP3: "display-p3";
5
+ };
6
+ export type ColorSpaceValue = (typeof ColorSpace)[keyof typeof ColorSpace];
7
+ export interface SurfaceOptions {
8
+ colorSpace: ColorSpaceValue;
9
+ }
2
10
  export interface SurfaceFactory {
3
11
  /**
4
12
  * Returns a CPU backed surface with the given dimensions, an SRGB colorspace, Unpremul
@@ -12,6 +20,7 @@ export interface SurfaceFactory {
12
20
  * Creates a GPU backed surface.
13
21
  * @param width - number of pixels of the width of the drawable area.
14
22
  * @param height - number of pixels of the height of the drawable area.
23
+ * @param opts - optional surface options (e.g. colorSpace: "display-p3" | "srgb").
15
24
  */
16
- MakeOffscreen: (width: number, height: number) => SkSurface | null;
25
+ MakeOffscreen: (width: number, height: number, opts?: SurfaceOptions) => SkSurface | null;
17
26
  }
package/package.json CHANGED
@@ -5,10 +5,11 @@
5
5
  "provenance": true
6
6
  },
7
7
  "bin": {
8
+ "install-skia": "scripts/install-libs.js",
8
9
  "setup-skia-web": "scripts/setup-canvaskit.js"
9
10
  },
10
11
  "title": "React Native Skia",
11
- "version": "2.5.0",
12
+ "version": "2.5.2",
12
13
  "description": "High-performance React Native Graphics using Skia",
13
14
  "main": "lib/module/index.js",
14
15
  "react-native": "src/index.ts",
@@ -16,6 +17,7 @@
16
17
  "types": "lib/typescript/index.d.ts",
17
18
  "files": [
18
19
  "scripts/setup-canvaskit.js",
20
+ "scripts/install-libs.js",
19
21
  "src/**",
20
22
  "lib/**",
21
23
  "!**/__tests__/**",
@@ -35,6 +37,7 @@
35
37
  "dist/**"
36
38
  ],
37
39
  "scripts": {
40
+ "postinstall": "node scripts/install-libs.js",
38
41
  "lint": "eslint . --ext .ts,.tsx --max-warnings 0 --cache --fix",
39
42
  "tsc": "tsc --noEmit",
40
43
  "test": "jest",
@@ -117,7 +120,7 @@
117
120
  "rimraf": "3.0.2",
118
121
  "semantic-release": "^24.1.0",
119
122
  "semantic-release-yarn": "^3.0.2",
120
- "tar": "^7.5.9",
123
+ "tar": "^7.5.11",
121
124
  "ts-jest": "29.4.3",
122
125
  "tsx": "^4.21.0",
123
126
  "typescript": "^5.2.2",
@@ -4,93 +4,9 @@ require "json"
4
4
 
5
5
  package = JSON.parse(File.read(File.join(__dir__, "package.json")))
6
6
 
7
- # Resolve npm package path using Node.js resolution (handles monorepos, pnpm, etc.)
8
- resolve_skia_package = lambda do |package_name, required: true|
9
- begin
10
- # Use node to resolve the package - this handles all edge cases:
11
- # - Hoisted packages in monorepos
12
- # - pnpm symlinked packages
13
- # - Yarn PnP
14
- # - Different node_modules structures
15
- result = `node -e "console.log(require.resolve('#{package_name}/package.json'))" 2>/dev/null`.strip
16
- if $?.success? && !result.empty?
17
- return File.dirname(result)
18
- end
19
- rescue => e
20
- # Node resolution failed
21
- end
22
-
23
- # Fallback: walk up directories looking for node_modules
24
- current = __dir__
25
- while current != "/"
26
- candidate = File.join(current, "node_modules", package_name)
27
- if File.exist?(File.join(candidate, "package.json"))
28
- return candidate
29
- end
30
- current = File.dirname(current)
31
- end
32
-
33
- if required
34
- Pod::UI.puts "\n"
35
- Pod::UI.puts "ERROR: Could not find #{package_name}".red
36
- Pod::UI.puts "Make sure you have run 'yarn install' or 'npm install'".red
37
- Pod::UI.puts "\n"
38
- raise "#{package_name} not found. Please install dependencies."
39
- end
40
-
41
- nil
42
- end
43
-
44
- # Check if Graphite is enabled
45
- use_graphite = false
46
- if ENV['SK_GRAPHITE']
47
- use_graphite = ENV['SK_GRAPHITE'] == '1' || ENV['SK_GRAPHITE'].downcase == 'true'
48
- puts "-- SK_GRAPHITE: using environment variable (#{use_graphite ? 'ON' : 'OFF'})"
49
- else
50
- puts "-- SK_GRAPHITE: OFF (set SK_GRAPHITE=1 to enable)"
51
- end
52
-
53
- # Check if xcframeworks already exist (e.g., from install-skia-graphite script)
54
- local_ios_libs = File.join(__dir__, "libs/ios")
55
- local_macos_libs = File.join(__dir__, "libs/macos")
56
- xcframeworks_preinstalled = File.exist?(local_ios_libs) &&
57
- Dir.glob(File.join(local_ios_libs, "*.xcframework")).any? &&
58
- File.exist?(local_macos_libs) &&
59
- Dir.glob(File.join(local_macos_libs, "*.xcframework")).any?
60
-
61
- if xcframeworks_preinstalled
62
- puts "-- Using pre-installed xcframeworks from libs/"
63
- ios_package = nil
64
- macos_package = nil
65
- tvos_package = nil
66
- else
67
- # Resolve Skia binary packages from npm
68
- prefix = use_graphite ? "react-native-skia-graphite" : "react-native-skia"
69
-
70
- ios_package = resolve_skia_package.call("#{prefix}-apple-ios")
71
- macos_package = resolve_skia_package.call("#{prefix}-apple-macos")
72
- tvos_package = use_graphite ? nil : resolve_skia_package.call("#{prefix}-apple-tvos", required: false)
73
-
74
- puts "-- Skia iOS package: #{ios_package}"
75
- puts "-- Skia macOS package: #{macos_package}"
76
- puts "-- Skia tvOS package: #{tvos_package}" if tvos_package
77
-
78
- # Verify the packages contain the expected files
79
- ios_libs_path = File.join(ios_package, "libs")
80
- unless File.exist?(ios_libs_path) && Dir.glob(File.join(ios_libs_path, "*.xcframework")).any?
81
- Pod::UI.puts "\n"
82
- Pod::UI.puts "┌─────────────────────────────────────────────────────────────────────────────┐".red
83
- Pod::UI.puts "│ │".red
84
- Pod::UI.puts "│ ERROR: Skia prebuilt binaries not found in #{prefix}-apple-ios! │".red
85
- Pod::UI.puts "│ │".red
86
- Pod::UI.puts "│ The package was found but doesn't contain the expected xcframeworks. │".red
87
- Pod::UI.puts "│ Try reinstalling: yarn add #{prefix}-apple-ios │".red
88
- Pod::UI.puts "│ │".red
89
- Pod::UI.puts "└─────────────────────────────────────────────────────────────────────────────┘".red
90
- Pod::UI.puts "\n"
91
- raise "Skia xcframeworks not found in #{ios_libs_path}"
92
- end
93
- end
7
+ # Check if Graphite is enabled via marker file (created by install-skia-graphite)
8
+ use_graphite = File.exist?(File.join(__dir__, 'libs', '.graphite'))
9
+ puts "-- SK_GRAPHITE: #{use_graphite ? 'ON' : 'OFF'} (detected via libs/.graphite marker file)"
94
10
 
95
11
  # Set preprocessor definitions based on GRAPHITE flag
96
12
  preprocessor_defs = use_graphite ?
@@ -102,23 +18,26 @@ framework_names = ['libskia', 'libsvg', 'libskshaper', 'libskparagraph',
102
18
  'libskunicode_core', 'libskunicode_libgrapheme',
103
19
  'libskottie', 'libsksg']
104
20
 
21
+ # Verify that prebuilt binaries have been installed by the postinstall script
22
+ unless Dir.exist?(File.join(__dir__, 'libs', 'ios')) && Dir.exist?(File.join(__dir__, 'libs', 'macos'))
23
+ Pod::UI.warn "#{'-' * 72}"
24
+ Pod::UI.warn "react-native-skia: Skia prebuilt binaries not found in libs/!"
25
+ Pod::UI.warn ""
26
+ Pod::UI.warn "Run the following command to install them:"
27
+ Pod::UI.warn " npx install-skia"
28
+ Pod::UI.warn "#{'-' * 72}"
29
+ raise "react-native-skia: Skia prebuilt binaries not found. Run `npx install-skia` to fix this."
30
+ end
31
+
105
32
  # Build platform-specific framework paths (relative to pod's libs directory)
33
+ # xcframeworks are copied into libs/ by the npm postinstall script (scripts/install-libs.js)
106
34
  ios_frameworks = framework_names.map { |f| "libs/ios/#{f}.xcframework" }
107
35
  osx_frameworks = framework_names.map { |f| "libs/macos/#{f}.xcframework" }
108
- tvos_frameworks = tvos_package ? framework_names.map { |f| "libs/tvos/#{f}.xcframework" } : []
109
-
110
- # Prepare command to copy xcframeworks from npm packages into pod directory
111
- # (skipped if xcframeworks are already preinstalled)
112
- prepare_commands = []
113
- unless xcframeworks_preinstalled
114
- prepare_commands << "rm -rf libs/ios libs/macos libs/tvos"
115
- prepare_commands << "mkdir -p libs/ios libs/macos"
116
- prepare_commands << "cp -R '#{ios_package}/libs/'*.xcframework libs/ios/"
117
- prepare_commands << "cp -R '#{macos_package}/libs/'*.xcframework libs/macos/"
118
- if tvos_package
119
- prepare_commands << "mkdir -p libs/tvos"
120
- prepare_commands << "cp -R '#{tvos_package}/libs/'*.xcframework libs/tvos/"
121
- end
36
+ # tvOS frameworks - check if libs/tvos/ exists (populated by postinstall before pod install runs)
37
+ tvos_frameworks = if use_graphite || !Dir.exist?(File.join(__dir__, 'libs', 'tvos'))
38
+ []
39
+ else
40
+ framework_names.map { |f| "libs/tvos/#{f}.xcframework" }
122
41
  end
123
42
 
124
43
  Pod::Spec.new do |s|
@@ -138,9 +57,6 @@ Pod::Spec.new do |s|
138
57
  s.platforms = { :ios => "14.0", :tvos => "13.0", :osx => "11" }
139
58
  s.source = { :git => "https://github.com/shopify/react-native-skia/react-native-skia.git", :tag => "#{s.version}" }
140
59
 
141
- # Copy xcframeworks from npm packages into pod directory structure
142
- s.prepare_command = prepare_commands.join(" && ")
143
-
144
60
  s.requires_arc = true
145
61
  s.pod_target_xcconfig = {
146
62
  'GCC_PREPROCESSOR_DEFINITIONS' => preprocessor_defs,