@shopify/react-native-skia 1.9.1 → 1.10.0
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/lib/commonjs/index.d.ts +1 -1
- package/lib/commonjs/index.js +8 -8
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/renderer/Canvas.d.ts +9 -10
- package/lib/commonjs/renderer/Canvas.js +67 -59
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/renderer/CanvasOld.d.ts +11 -0
- package/lib/commonjs/renderer/CanvasOld.js +96 -0
- package/lib/commonjs/renderer/CanvasOld.js.map +1 -0
- package/lib/commonjs/sksg/Container.js +11 -6
- package/lib/commonjs/sksg/Container.js.map +1 -1
- package/lib/commonjs/sksg/HostConfig2.d.ts +19 -0
- package/lib/commonjs/sksg/HostConfig2.js +159 -0
- package/lib/commonjs/sksg/HostConfig2.js.map +1 -0
- package/lib/commonjs/sksg/Recorder/Core.js +1 -0
- package/lib/commonjs/sksg/Recorder/Core.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/Player.js +2 -2
- package/lib/commonjs/sksg/Recorder/Player.js.map +1 -1
- package/lib/commonjs/sksg/Recorder/Recorder.js +0 -1
- package/lib/commonjs/sksg/Recorder/Recorder.js.map +1 -1
- package/lib/module/index.d.ts +1 -1
- package/lib/module/index.js +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/renderer/Canvas.d.ts +9 -10
- package/lib/module/renderer/Canvas.js +65 -55
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/renderer/CanvasOld.d.ts +11 -0
- package/lib/module/renderer/CanvasOld.js +87 -0
- package/lib/module/renderer/CanvasOld.js.map +1 -0
- package/lib/module/sksg/Container.js +11 -6
- package/lib/module/sksg/Container.js.map +1 -1
- package/lib/module/sksg/HostConfig2.d.ts +19 -0
- package/lib/module/sksg/HostConfig2.js +152 -0
- package/lib/module/sksg/HostConfig2.js.map +1 -0
- package/lib/module/sksg/Recorder/Core.js +1 -0
- package/lib/module/sksg/Recorder/Core.js.map +1 -1
- package/lib/module/sksg/Recorder/Player.js +2 -2
- package/lib/module/sksg/Recorder/Player.js.map +1 -1
- package/lib/module/sksg/Recorder/Recorder.js +0 -1
- package/lib/module/sksg/Recorder/Recorder.js.map +1 -1
- package/lib/typescript/lib/commonjs/renderer/Canvas.d.ts +2 -2
- package/lib/typescript/lib/commonjs/renderer/CanvasOld.d.ts +3 -0
- package/lib/typescript/lib/commonjs/sksg/HostConfig2.d.ts +44 -0
- package/lib/typescript/lib/module/index.d.ts +1 -1
- package/lib/typescript/lib/module/renderer/Canvas.d.ts +1 -3
- package/lib/typescript/lib/module/renderer/CanvasOld.d.ts +3 -0
- package/lib/typescript/lib/module/sksg/HostConfig2.d.ts +43 -0
- package/lib/typescript/src/index.d.ts +1 -1
- package/lib/typescript/src/renderer/Canvas.d.ts +9 -10
- package/lib/typescript/src/renderer/CanvasOld.d.ts +11 -0
- package/lib/typescript/src/sksg/HostConfig2.d.ts +19 -0
- package/package.json +1 -1
- package/src/index.ts +1 -1
- package/src/renderer/Canvas.tsx +80 -78
- package/src/renderer/CanvasOld.tsx +126 -0
- package/src/sksg/Container.ts +6 -2
- package/src/sksg/HostConfig2.ts +247 -0
- package/src/sksg/Recorder/Core.ts +1 -0
- package/src/sksg/Recorder/Player.ts +2 -2
- package/src/sksg/Recorder/Recorder.ts +0 -1
- package/lib/commonjs/renderer/Canvas2.d.ts +0 -10
- package/lib/commonjs/renderer/Canvas2.js +0 -104
- package/lib/commonjs/renderer/Canvas2.js.map +0 -1
- package/lib/commonjs/renderer/Canvas2.web.d.ts +0 -3
- package/lib/commonjs/renderer/Canvas2.web.js +0 -9
- package/lib/commonjs/renderer/Canvas2.web.js.map +0 -1
- package/lib/module/renderer/Canvas2.d.ts +0 -10
- package/lib/module/renderer/Canvas2.js +0 -97
- package/lib/module/renderer/Canvas2.js.map +0 -1
- package/lib/module/renderer/Canvas2.web.d.ts +0 -3
- package/lib/module/renderer/Canvas2.web.js +0 -3
- package/lib/module/renderer/Canvas2.web.js.map +0 -1
- package/lib/typescript/lib/commonjs/renderer/Canvas2.d.ts +0 -3
- package/lib/typescript/lib/commonjs/renderer/Canvas2.web.d.ts +0 -2
- package/lib/typescript/lib/module/renderer/Canvas2.d.ts +0 -1
- package/lib/typescript/lib/module/renderer/Canvas2.web.d.ts +0 -1
- package/lib/typescript/src/renderer/Canvas2.d.ts +0 -10
- package/lib/typescript/src/renderer/Canvas2.web.d.ts +0 -3
- package/src/renderer/Canvas2.tsx +0 -128
- package/src/renderer/Canvas2.web.tsx +0 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NodeType","isSharedValue","isColorFilter","isImageFilter","isPathEffect","isShader","CommandType","Recorder","constructor","_defineProperty","Set","cursors","push","commands","getRecording","paintPool","animationValues","processProps","props","animatedProps","hasAnimatedProps","key","prop","add","value","undefined","command","length","saveGroup","children","type","Group","restoreGroup","pop","savePaint","SavePaint","restorePaint","RestorePaint","restorePaintDeclaration","RestorePaintDeclaration","materializePaint","MaterializePaint","pushPathEffect","pathEffectType","Error","PushPathEffect","pushImageFilter","imageFilterType","PushImageFilter","pushColorFilter","colorFilterType","PushColorFilter","pushShader","shaderType","Blend","PushShader","pushBlurMaskFilter","PushBlurMaskFilter","composePathEffect","ComposePathEffect","composeColorFilter","ComposeColorFilter","composeImageFilter","ComposeImageFilter","saveCTM","SaveCTM","restoreCTM","RestoreCTM","drawPaint","DrawPaint","saveLayer","SaveLayer","saveBackdropFilter","SaveBackdropFilter","drawBox","boxProps","shadows","forEach","shadow","DrawBox","drawImage","DrawImage","drawCircle","DrawCircle","drawPoints","DrawPoints","drawPath","DrawPath","drawRect","DrawRect","drawRRect","DrawRRect","drawOval","DrawOval","drawLine","DrawLine","drawPatch","DrawPatch","drawVertices","DrawVertices","drawDiffRect","DrawDiffRect","drawText","DrawText","drawTextPath","DrawTextPath","drawTextBlob","DrawTextBlob","drawGlyphs","DrawGlyphs","drawPicture","DrawPicture","drawImageSVG","DrawImageSVG","drawParagraph","DrawParagraph","drawAtlas","DrawAtlas"],"sources":["Recorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport { NodeType } from \"../../dom/types\";\nimport type {\n BlurMaskFilterProps,\n CircleProps,\n CTMProps,\n ImageProps,\n PaintProps,\n PointsProps,\n PathProps,\n RectProps,\n RoundedRectProps,\n OvalProps,\n LineProps,\n PatchProps,\n VerticesProps,\n DiffRectProps,\n TextProps,\n TextPathProps,\n TextBlobProps,\n GlyphsProps,\n PictureProps,\n ImageSVGProps,\n ParagraphProps,\n AtlasProps,\n BoxProps,\n BoxShadowProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer\";\nimport { isSharedValue } from \"../utils\";\nimport { isColorFilter, isImageFilter, isPathEffect, isShader } from \"../Node\";\nimport type { SkPaint } from \"../../skia/types\";\n\nimport { CommandType } from \"./Core\";\nimport type { Command } from \"./Core\";\n\nexport interface Recording {\n commands: Command[];\n paintPool: SkPaint[];\n}\n\ninterface AnimationValues {\n animationValues: Set<SharedValue<unknown>>;\n}\n\nexport class Recorder {\n commands: Command[] = [];\n cursors: Command[][] = [];\n animationValues: Set<SharedValue<unknown>> = new Set();\n\n constructor() {\n this.cursors.push(this.commands);\n }\n\n getRecording(): Recording & AnimationValues {\n return {\n commands: this.commands,\n paintPool: [],\n animationValues: this.animationValues,\n };\n }\n\n private processProps(props: Record<string, unknown>) {\n const animatedProps: Record<string, SharedValue<unknown>> = {};\n let hasAnimatedProps = false;\n\n for (const key in props) {\n const prop = props[key];\n if (isSharedValue(prop)) {\n this.animationValues.add(prop);\n props[key] = prop.value;\n animatedProps[key] = prop;\n hasAnimatedProps = true;\n }\n }\n\n return {\n props,\n animatedProps: hasAnimatedProps ? animatedProps : undefined,\n };\n }\n\n private add(command: Command) {\n if (command.props) {\n const { animatedProps } = this.processProps(\n command.props as Record<string, unknown>\n );\n if (animatedProps) {\n command.animatedProps = animatedProps;\n }\n }\n this.cursors[this.cursors.length - 1].push(command);\n }\n\n saveGroup() {\n const children: Command[] = [];\n this.add({ type: CommandType.Group, children });\n this.cursors.push(children);\n }\n\n restoreGroup() {\n this.cursors.pop();\n }\n\n savePaint(props: AnimatedProps<PaintProps>) {\n this.add({ type: CommandType.SavePaint, props });\n }\n\n restorePaint() {\n this.add({ type: CommandType.RestorePaint });\n }\n\n restorePaintDeclaration() {\n this.add({ type: CommandType.RestorePaintDeclaration });\n }\n\n materializePaint() {\n this.add({ type: CommandType.MaterializePaint });\n }\n\n pushPathEffect(pathEffectType: NodeType, props: AnimatedProps<unknown>) {\n if (!isPathEffect(pathEffectType)) {\n throw new Error(\"Invalid color filter type: \" + pathEffectType);\n }\n this.add({\n type: CommandType.PushPathEffect,\n pathEffectType,\n props,\n });\n }\n\n pushImageFilter(imageFilterType: NodeType, props: AnimatedProps<unknown>) {\n if (!isImageFilter(imageFilterType)) {\n throw new Error(\"Invalid color filter type: \" + imageFilterType);\n }\n this.add({\n type: CommandType.PushImageFilter,\n imageFilterType,\n props,\n });\n }\n\n pushColorFilter(colorFilterType: NodeType, props: AnimatedProps<unknown>) {\n if (!isColorFilter(colorFilterType)) {\n throw new Error(\"Invalid color filter type: \" + colorFilterType);\n }\n this.add({\n type: CommandType.PushColorFilter,\n colorFilterType,\n props,\n });\n }\n\n pushShader(shaderType: NodeType, props: AnimatedProps<unknown>) {\n if (!isShader(shaderType) && !(shaderType === NodeType.Blend)) {\n throw new Error(\"Invalid color filter type: \" + shaderType);\n }\n this.add({ type: CommandType.PushShader, shaderType, props });\n }\n\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>) {\n this.add({ type: CommandType.PushBlurMaskFilter, props });\n }\n\n composePathEffect() {\n this.add({ type: CommandType.ComposePathEffect });\n }\n\n composeColorFilter() {\n this.add({ type: CommandType.ComposeColorFilter });\n }\n\n composeImageFilter() {\n this.add({ type: CommandType.ComposeImageFilter });\n }\n\n saveCTM(props: AnimatedProps<CTMProps>) {\n this.add({ type: CommandType.SaveCTM, props });\n }\n\n restoreCTM() {\n this.add({ type: CommandType.RestoreCTM });\n }\n\n drawPaint() {\n this.add({ type: CommandType.DrawPaint });\n }\n\n saveLayer() {\n this.add({ type: CommandType.SaveLayer });\n }\n\n saveBackdropFilter() {\n this.add({ type: CommandType.SaveBackdropFilter });\n }\n\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n animatedProps?: Record<string, SharedValue<unknown>>;\n }[]\n ) {\n shadows.forEach((shadow) => {\n if (shadow.props) {\n if (shadow.props) {\n const { animatedProps } = this.processProps(\n shadow.props as unknown as Record<string, unknown>\n );\n if (animatedProps) {\n shadow.animatedProps = animatedProps;\n }\n }\n }\n });\n this.add({ type: CommandType.DrawBox, props: boxProps, shadows });\n }\n\n drawImage(props: AnimatedProps<ImageProps>) {\n this.add({ type: CommandType.DrawImage, props });\n }\n\n drawCircle(props: AnimatedProps<CircleProps>) {\n this.add({ type: CommandType.DrawCircle, props });\n }\n drawPoints(props: AnimatedProps<PointsProps>) {\n this.add({ type: CommandType.DrawPoints, props });\n }\n\n drawPath(props: AnimatedProps<PathProps>) {\n this.add({ type: CommandType.DrawPath, props });\n }\n\n drawRect(props: AnimatedProps<RectProps>) {\n this.add({ type: CommandType.DrawRect, props });\n }\n\n drawRRect(props: AnimatedProps<RoundedRectProps>) {\n this.add({ type: CommandType.DrawRRect, props });\n }\n\n drawOval(props: AnimatedProps<OvalProps>) {\n this.add({ type: CommandType.DrawOval, props });\n }\n\n drawLine(props: AnimatedProps<LineProps>) {\n this.add({ type: CommandType.DrawLine, props });\n }\n\n drawPatch(props: AnimatedProps<PatchProps>) {\n this.add({ type: CommandType.DrawPatch, props });\n }\n\n drawVertices(props: AnimatedProps<VerticesProps>) {\n this.add({ type: CommandType.DrawVertices, props });\n }\n\n drawDiffRect(props: AnimatedProps<DiffRectProps>) {\n this.add({ type: CommandType.DrawDiffRect, props });\n }\n\n drawText(props: AnimatedProps<TextProps>) {\n this.add({ type: CommandType.DrawText, props });\n }\n\n drawTextPath(props: AnimatedProps<TextPathProps>) {\n this.add({ type: CommandType.DrawTextPath, props });\n }\n\n drawTextBlob(props: AnimatedProps<TextBlobProps>) {\n this.add({ type: CommandType.DrawTextBlob, props });\n }\n\n drawGlyphs(props: AnimatedProps<GlyphsProps>) {\n this.add({ type: CommandType.DrawGlyphs, props });\n }\n\n drawPicture(props: AnimatedProps<PictureProps>) {\n this.add({ type: CommandType.DrawPicture, props });\n }\n\n drawImageSVG(props: AnimatedProps<ImageSVGProps>) {\n this.add({ type: CommandType.DrawImageSVG, props });\n }\n\n drawParagraph(props: AnimatedProps<ParagraphProps>) {\n this.add({ type: CommandType.DrawParagraph, props });\n }\n\n drawAtlas(props: AnimatedProps<AtlasProps>) {\n this.add({ type: CommandType.DrawAtlas, props });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"names":["NodeType","isSharedValue","isColorFilter","isImageFilter","isPathEffect","isShader","CommandType","Recorder","constructor","_defineProperty","Set","cursors","push","commands","getRecording","paintPool","animationValues","processProps","props","animatedProps","hasAnimatedProps","key","prop","add","undefined","command","length","saveGroup","children","type","Group","restoreGroup","pop","savePaint","SavePaint","restorePaint","RestorePaint","restorePaintDeclaration","RestorePaintDeclaration","materializePaint","MaterializePaint","pushPathEffect","pathEffectType","Error","PushPathEffect","pushImageFilter","imageFilterType","PushImageFilter","pushColorFilter","colorFilterType","PushColorFilter","pushShader","shaderType","Blend","PushShader","pushBlurMaskFilter","PushBlurMaskFilter","composePathEffect","ComposePathEffect","composeColorFilter","ComposeColorFilter","composeImageFilter","ComposeImageFilter","saveCTM","SaveCTM","restoreCTM","RestoreCTM","drawPaint","DrawPaint","saveLayer","SaveLayer","saveBackdropFilter","SaveBackdropFilter","drawBox","boxProps","shadows","forEach","shadow","DrawBox","drawImage","DrawImage","drawCircle","DrawCircle","drawPoints","DrawPoints","drawPath","DrawPath","drawRect","DrawRect","drawRRect","DrawRRect","drawOval","DrawOval","drawLine","DrawLine","drawPatch","DrawPatch","drawVertices","DrawVertices","drawDiffRect","DrawDiffRect","drawText","DrawText","drawTextPath","DrawTextPath","drawTextBlob","DrawTextBlob","drawGlyphs","DrawGlyphs","drawPicture","DrawPicture","drawImageSVG","DrawImageSVG","drawParagraph","DrawParagraph","drawAtlas","DrawAtlas"],"sources":["Recorder.ts"],"sourcesContent":["import type { SharedValue } from \"react-native-reanimated\";\n\nimport { NodeType } from \"../../dom/types\";\nimport type {\n BlurMaskFilterProps,\n CircleProps,\n CTMProps,\n ImageProps,\n PaintProps,\n PointsProps,\n PathProps,\n RectProps,\n RoundedRectProps,\n OvalProps,\n LineProps,\n PatchProps,\n VerticesProps,\n DiffRectProps,\n TextProps,\n TextPathProps,\n TextBlobProps,\n GlyphsProps,\n PictureProps,\n ImageSVGProps,\n ParagraphProps,\n AtlasProps,\n BoxProps,\n BoxShadowProps,\n} from \"../../dom/types\";\nimport type { AnimatedProps } from \"../../renderer\";\nimport { isSharedValue } from \"../utils\";\nimport { isColorFilter, isImageFilter, isPathEffect, isShader } from \"../Node\";\nimport type { SkPaint } from \"../../skia/types\";\n\nimport { CommandType } from \"./Core\";\nimport type { Command } from \"./Core\";\n\nexport interface Recording {\n commands: Command[];\n paintPool: SkPaint[];\n}\n\ninterface AnimationValues {\n animationValues: Set<SharedValue<unknown>>;\n}\n\nexport class Recorder {\n commands: Command[] = [];\n cursors: Command[][] = [];\n animationValues: Set<SharedValue<unknown>> = new Set();\n\n constructor() {\n this.cursors.push(this.commands);\n }\n\n getRecording(): Recording & AnimationValues {\n return {\n commands: this.commands,\n paintPool: [],\n animationValues: this.animationValues,\n };\n }\n\n private processProps(props: Record<string, unknown>) {\n const animatedProps: Record<string, SharedValue<unknown>> = {};\n let hasAnimatedProps = false;\n\n for (const key in props) {\n const prop = props[key];\n if (isSharedValue(prop)) {\n this.animationValues.add(prop);\n animatedProps[key] = prop;\n hasAnimatedProps = true;\n }\n }\n\n return {\n props,\n animatedProps: hasAnimatedProps ? animatedProps : undefined,\n };\n }\n\n private add(command: Command) {\n if (command.props) {\n const { animatedProps } = this.processProps(\n command.props as Record<string, unknown>\n );\n if (animatedProps) {\n command.animatedProps = animatedProps;\n }\n }\n this.cursors[this.cursors.length - 1].push(command);\n }\n\n saveGroup() {\n const children: Command[] = [];\n this.add({ type: CommandType.Group, children });\n this.cursors.push(children);\n }\n\n restoreGroup() {\n this.cursors.pop();\n }\n\n savePaint(props: AnimatedProps<PaintProps>) {\n this.add({ type: CommandType.SavePaint, props });\n }\n\n restorePaint() {\n this.add({ type: CommandType.RestorePaint });\n }\n\n restorePaintDeclaration() {\n this.add({ type: CommandType.RestorePaintDeclaration });\n }\n\n materializePaint() {\n this.add({ type: CommandType.MaterializePaint });\n }\n\n pushPathEffect(pathEffectType: NodeType, props: AnimatedProps<unknown>) {\n if (!isPathEffect(pathEffectType)) {\n throw new Error(\"Invalid color filter type: \" + pathEffectType);\n }\n this.add({\n type: CommandType.PushPathEffect,\n pathEffectType,\n props,\n });\n }\n\n pushImageFilter(imageFilterType: NodeType, props: AnimatedProps<unknown>) {\n if (!isImageFilter(imageFilterType)) {\n throw new Error(\"Invalid color filter type: \" + imageFilterType);\n }\n this.add({\n type: CommandType.PushImageFilter,\n imageFilterType,\n props,\n });\n }\n\n pushColorFilter(colorFilterType: NodeType, props: AnimatedProps<unknown>) {\n if (!isColorFilter(colorFilterType)) {\n throw new Error(\"Invalid color filter type: \" + colorFilterType);\n }\n this.add({\n type: CommandType.PushColorFilter,\n colorFilterType,\n props,\n });\n }\n\n pushShader(shaderType: NodeType, props: AnimatedProps<unknown>) {\n if (!isShader(shaderType) && !(shaderType === NodeType.Blend)) {\n throw new Error(\"Invalid color filter type: \" + shaderType);\n }\n this.add({ type: CommandType.PushShader, shaderType, props });\n }\n\n pushBlurMaskFilter(props: AnimatedProps<BlurMaskFilterProps>) {\n this.add({ type: CommandType.PushBlurMaskFilter, props });\n }\n\n composePathEffect() {\n this.add({ type: CommandType.ComposePathEffect });\n }\n\n composeColorFilter() {\n this.add({ type: CommandType.ComposeColorFilter });\n }\n\n composeImageFilter() {\n this.add({ type: CommandType.ComposeImageFilter });\n }\n\n saveCTM(props: AnimatedProps<CTMProps>) {\n this.add({ type: CommandType.SaveCTM, props });\n }\n\n restoreCTM() {\n this.add({ type: CommandType.RestoreCTM });\n }\n\n drawPaint() {\n this.add({ type: CommandType.DrawPaint });\n }\n\n saveLayer() {\n this.add({ type: CommandType.SaveLayer });\n }\n\n saveBackdropFilter() {\n this.add({ type: CommandType.SaveBackdropFilter });\n }\n\n drawBox(\n boxProps: AnimatedProps<BoxProps>,\n shadows: {\n props: BoxShadowProps;\n animatedProps?: Record<string, SharedValue<unknown>>;\n }[]\n ) {\n shadows.forEach((shadow) => {\n if (shadow.props) {\n if (shadow.props) {\n const { animatedProps } = this.processProps(\n shadow.props as unknown as Record<string, unknown>\n );\n if (animatedProps) {\n shadow.animatedProps = animatedProps;\n }\n }\n }\n });\n this.add({ type: CommandType.DrawBox, props: boxProps, shadows });\n }\n\n drawImage(props: AnimatedProps<ImageProps>) {\n this.add({ type: CommandType.DrawImage, props });\n }\n\n drawCircle(props: AnimatedProps<CircleProps>) {\n this.add({ type: CommandType.DrawCircle, props });\n }\n drawPoints(props: AnimatedProps<PointsProps>) {\n this.add({ type: CommandType.DrawPoints, props });\n }\n\n drawPath(props: AnimatedProps<PathProps>) {\n this.add({ type: CommandType.DrawPath, props });\n }\n\n drawRect(props: AnimatedProps<RectProps>) {\n this.add({ type: CommandType.DrawRect, props });\n }\n\n drawRRect(props: AnimatedProps<RoundedRectProps>) {\n this.add({ type: CommandType.DrawRRect, props });\n }\n\n drawOval(props: AnimatedProps<OvalProps>) {\n this.add({ type: CommandType.DrawOval, props });\n }\n\n drawLine(props: AnimatedProps<LineProps>) {\n this.add({ type: CommandType.DrawLine, props });\n }\n\n drawPatch(props: AnimatedProps<PatchProps>) {\n this.add({ type: CommandType.DrawPatch, props });\n }\n\n drawVertices(props: AnimatedProps<VerticesProps>) {\n this.add({ type: CommandType.DrawVertices, props });\n }\n\n drawDiffRect(props: AnimatedProps<DiffRectProps>) {\n this.add({ type: CommandType.DrawDiffRect, props });\n }\n\n drawText(props: AnimatedProps<TextProps>) {\n this.add({ type: CommandType.DrawText, props });\n }\n\n drawTextPath(props: AnimatedProps<TextPathProps>) {\n this.add({ type: CommandType.DrawTextPath, props });\n }\n\n drawTextBlob(props: AnimatedProps<TextBlobProps>) {\n this.add({ type: CommandType.DrawTextBlob, props });\n }\n\n drawGlyphs(props: AnimatedProps<GlyphsProps>) {\n this.add({ type: CommandType.DrawGlyphs, props });\n }\n\n drawPicture(props: AnimatedProps<PictureProps>) {\n this.add({ type: CommandType.DrawPicture, props });\n }\n\n drawImageSVG(props: AnimatedProps<ImageSVGProps>) {\n this.add({ type: CommandType.DrawImageSVG, props });\n }\n\n drawParagraph(props: AnimatedProps<ParagraphProps>) {\n this.add({ type: CommandType.DrawParagraph, props });\n }\n\n drawAtlas(props: AnimatedProps<AtlasProps>) {\n this.add({ type: CommandType.DrawAtlas, props });\n }\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
export const __esModule: boolean;
|
|
2
|
-
export const Canvas: any
|
|
3
|
-
|
|
2
|
+
export const Canvas: _react.ForwardRefExoticComponent<_react.RefAttributes<any>>;
|
|
3
|
+
import _react = require("react");
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
export const __esModule: boolean;
|
|
2
|
+
export namespace sksgHostConfig {
|
|
3
|
+
let supportsMutation: boolean;
|
|
4
|
+
let isPrimaryRenderer: boolean;
|
|
5
|
+
let supportsPersistence: boolean;
|
|
6
|
+
let supportsHydration: boolean;
|
|
7
|
+
let scheduleTimeout: typeof setTimeout;
|
|
8
|
+
let cancelTimeout: typeof clearTimeout;
|
|
9
|
+
let noTimeout: number;
|
|
10
|
+
function appendChildToContainer(container: any, child: any): void;
|
|
11
|
+
function appendChild(parent: any, child: any): void;
|
|
12
|
+
function getRootHostContext(_rootContainerInstance: any): null;
|
|
13
|
+
function getChildHostContext(_parentHostContext: any, _type: any, _rootContainerInstance: any): null;
|
|
14
|
+
function shouldSetTextContent(_type: any, _props: any): boolean;
|
|
15
|
+
function createTextInstance(_text: any, _rootContainerInstance: any, _hostContext: any, _internalInstanceHandle: any): never;
|
|
16
|
+
function createInstance(type: any, propsWithChildren: any, _container: any, _hostContext: any, _internalInstanceHandle: any): {
|
|
17
|
+
type: any;
|
|
18
|
+
props: any;
|
|
19
|
+
children: never[];
|
|
20
|
+
};
|
|
21
|
+
function appendInitialChild(parentInstance: any, child: any): void;
|
|
22
|
+
function finalizeInitialChildren(parentInstance: any, _type: any, _props: any, _rootContainerInstance: any, _hostContext: any): boolean;
|
|
23
|
+
function commitMount(): void;
|
|
24
|
+
function prepareForCommit(_containerInfo: any): null;
|
|
25
|
+
function resetAfterCommit(container: any): void;
|
|
26
|
+
function getPublicInstance(node: any): any;
|
|
27
|
+
function prepareUpdate(_instance: any, type: any, oldProps: any, newProps: any, rootContainerInstance: any, _hostContext: any): any;
|
|
28
|
+
function commitUpdate(instance: any, _updatePayload: any, type: any, prevProps: any, nextProps: any, _internalHandle: any): void;
|
|
29
|
+
function commitTextUpdate(_textInstance: any, _oldText: any, _newText: any): void;
|
|
30
|
+
function clearContainer(container: any): void;
|
|
31
|
+
function preparePortalMount(): void;
|
|
32
|
+
function removeChild(parent: any, child: any): void;
|
|
33
|
+
function removeChildFromContainer(container: any, child: any): void;
|
|
34
|
+
function insertInContainerBefore(container: any, child: any, before: any): void;
|
|
35
|
+
function insertBefore(parent: any, child: any, before: any): void;
|
|
36
|
+
function getCurrentEventPriority(): number;
|
|
37
|
+
function beforeActiveInstanceBlur(): void;
|
|
38
|
+
function afterActiveInstanceBlur(): void;
|
|
39
|
+
function detachDeletedInstance(): void;
|
|
40
|
+
function getInstanceFromNode(_node: any): null;
|
|
41
|
+
function prepareScopeUpdate(_scopeInstance: any, _instance: any): void;
|
|
42
|
+
function getInstanceFromScope(_scopeInstance: any): null;
|
|
43
|
+
}
|
|
44
|
+
export function debug(...args: any[]): void;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { JsiSkImage } from "./skia/web/JsiSkImage";
|
|
2
2
|
export * from "./renderer";
|
|
3
|
+
export * from "./renderer/CanvasOld";
|
|
3
4
|
export * from "./renderer/Canvas";
|
|
4
|
-
export * from "./renderer/Canvas2";
|
|
5
5
|
export * from "./renderer/Offscreen";
|
|
6
6
|
export * from "./views";
|
|
7
7
|
export * from "./skia";
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
export function debug(...args: any[]): void;
|
|
2
|
+
export namespace sksgHostConfig {
|
|
3
|
+
let supportsMutation: boolean;
|
|
4
|
+
let isPrimaryRenderer: boolean;
|
|
5
|
+
let supportsPersistence: boolean;
|
|
6
|
+
let supportsHydration: boolean;
|
|
7
|
+
let scheduleTimeout: typeof setTimeout;
|
|
8
|
+
let cancelTimeout: typeof clearTimeout;
|
|
9
|
+
let noTimeout: number;
|
|
10
|
+
function appendChildToContainer(container: any, child: any): void;
|
|
11
|
+
function appendChild(parent: any, child: any): void;
|
|
12
|
+
function getRootHostContext(_rootContainerInstance: any): null;
|
|
13
|
+
function getChildHostContext(_parentHostContext: any, _type: any, _rootContainerInstance: any): null;
|
|
14
|
+
function shouldSetTextContent(_type: any, _props: any): boolean;
|
|
15
|
+
function createTextInstance(_text: any, _rootContainerInstance: any, _hostContext: any, _internalInstanceHandle: any): never;
|
|
16
|
+
function createInstance(type: any, propsWithChildren: any, _container: any, _hostContext: any, _internalInstanceHandle: any): {
|
|
17
|
+
type: any;
|
|
18
|
+
props: any;
|
|
19
|
+
children: never[];
|
|
20
|
+
};
|
|
21
|
+
function appendInitialChild(parentInstance: any, child: any): void;
|
|
22
|
+
function finalizeInitialChildren(parentInstance: any, _type: any, _props: any, _rootContainerInstance: any, _hostContext: any): boolean;
|
|
23
|
+
function commitMount(): void;
|
|
24
|
+
function prepareForCommit(_containerInfo: any): null;
|
|
25
|
+
function resetAfterCommit(container: any): void;
|
|
26
|
+
function getPublicInstance(node: any): any;
|
|
27
|
+
function prepareUpdate(_instance: any, type: any, oldProps: any, newProps: any, rootContainerInstance: any, _hostContext: any): any;
|
|
28
|
+
function commitUpdate(instance: any, _updatePayload: any, type: any, prevProps: any, nextProps: any, _internalHandle: any): void;
|
|
29
|
+
function commitTextUpdate(_textInstance: any, _oldText: any, _newText: any): void;
|
|
30
|
+
function clearContainer(container: any): void;
|
|
31
|
+
function preparePortalMount(): void;
|
|
32
|
+
function removeChild(parent: any, child: any): void;
|
|
33
|
+
function removeChildFromContainer(container: any, child: any): void;
|
|
34
|
+
function insertInContainerBefore(container: any, child: any, before: any): void;
|
|
35
|
+
function insertBefore(parent: any, child: any, before: any): void;
|
|
36
|
+
function getCurrentEventPriority(): number;
|
|
37
|
+
function beforeActiveInstanceBlur(): void;
|
|
38
|
+
function afterActiveInstanceBlur(): void;
|
|
39
|
+
function detachDeletedInstance(): void;
|
|
40
|
+
function getInstanceFromNode(_node: any): null;
|
|
41
|
+
function prepareScopeUpdate(_scopeInstance: any, _instance: any): void;
|
|
42
|
+
function getInstanceFromScope(_scopeInstance: any): null;
|
|
43
|
+
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "./skia/NativeSetup";
|
|
2
2
|
export { JsiSkImage } from "./skia/web/JsiSkImage";
|
|
3
3
|
export * from "./renderer";
|
|
4
|
+
export * from "./renderer/CanvasOld";
|
|
4
5
|
export * from "./renderer/Canvas";
|
|
5
|
-
export * from "./renderer/Canvas2";
|
|
6
6
|
export * from "./renderer/Offscreen";
|
|
7
7
|
export * from "./views";
|
|
8
8
|
export * from "./skia";
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import
|
|
2
|
-
import type {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
mode?: "default" | "continuous";
|
|
1
|
+
import type { ViewProps } from "react-native";
|
|
2
|
+
import type { SharedValue } from "react-native-reanimated";
|
|
3
|
+
import type { SkSize } from "../skia/types";
|
|
4
|
+
export interface CanvasProps extends ViewProps {
|
|
5
|
+
debug?: boolean;
|
|
6
|
+
opaque?: boolean;
|
|
7
|
+
onSize?: SharedValue<SkSize>;
|
|
8
|
+
mode?: "continuous" | "default";
|
|
10
9
|
}
|
|
11
|
-
export declare const Canvas:
|
|
10
|
+
export declare const Canvas: import("react").ForwardRefExoticComponent<CanvasProps & import("react").RefAttributes<unknown>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { RefObject, ReactNode, FunctionComponent } from "react";
|
|
3
|
+
import { SkiaDomView } from "../views";
|
|
4
|
+
import type { SkiaBaseViewProps } from "../views";
|
|
5
|
+
export declare const useCanvasRef: () => React.RefObject<SkiaDomView>;
|
|
6
|
+
export interface CanvasOldProps extends SkiaBaseViewProps {
|
|
7
|
+
ref?: RefObject<SkiaDomView>;
|
|
8
|
+
children: ReactNode;
|
|
9
|
+
mode?: "default" | "continuous";
|
|
10
|
+
}
|
|
11
|
+
export declare const CanvasOld: FunctionComponent<CanvasOldProps & React.RefAttributes<SkiaDomView>>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { HostConfig } from "react-reconciler";
|
|
2
|
+
import type { NodeType } from "../dom/types";
|
|
3
|
+
import type { Container } from "./Container";
|
|
4
|
+
import type { Node } from "./Node";
|
|
5
|
+
export declare const debug: (message?: any, ...optionalParams: any[]) => void;
|
|
6
|
+
type Instance = Node<unknown>;
|
|
7
|
+
type Props = object;
|
|
8
|
+
type TextInstance = Node<unknown>;
|
|
9
|
+
type SuspenseInstance = Instance;
|
|
10
|
+
type HydratableInstance = Instance;
|
|
11
|
+
type PublicInstance = Instance;
|
|
12
|
+
type HostContext = null;
|
|
13
|
+
type UpdatePayload = Container;
|
|
14
|
+
type ChildSet = unknown;
|
|
15
|
+
type TimeoutHandle = NodeJS.Timeout;
|
|
16
|
+
type NoTimeout = -1;
|
|
17
|
+
type SkiaHostConfig = HostConfig<NodeType, Props, Container, Instance, TextInstance, SuspenseInstance, HydratableInstance, PublicInstance, HostContext, UpdatePayload, ChildSet, TimeoutHandle, NoTimeout>;
|
|
18
|
+
export declare const sksgHostConfig: SkiaHostConfig;
|
|
19
|
+
export {};
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"setup-skia-web": "./scripts/setup-canvaskit.js"
|
|
8
8
|
},
|
|
9
9
|
"title": "React Native Skia",
|
|
10
|
-
"version": "1.
|
|
10
|
+
"version": "1.10.0",
|
|
11
11
|
"description": "High-performance React Native Graphics using Skia",
|
|
12
12
|
"main": "lib/module/index.js",
|
|
13
13
|
"react-native": "src/index.ts",
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import "./skia/NativeSetup";
|
|
2
2
|
export { JsiSkImage } from "./skia/web/JsiSkImage";
|
|
3
3
|
export * from "./renderer";
|
|
4
|
+
export * from "./renderer/CanvasOld";
|
|
4
5
|
export * from "./renderer/Canvas";
|
|
5
|
-
export * from "./renderer/Canvas2";
|
|
6
6
|
export * from "./renderer/Offscreen";
|
|
7
7
|
export * from "./views";
|
|
8
8
|
export * from "./skia";
|
package/src/renderer/Canvas.tsx
CHANGED
|
@@ -1,32 +1,24 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import {
|
|
2
|
+
forwardRef,
|
|
3
3
|
useCallback,
|
|
4
|
+
useEffect,
|
|
5
|
+
useImperativeHandle,
|
|
4
6
|
useMemo,
|
|
5
|
-
forwardRef,
|
|
6
7
|
useRef,
|
|
7
8
|
} from "react";
|
|
8
|
-
import type {
|
|
9
|
-
|
|
10
|
-
ReactNode,
|
|
11
|
-
MutableRefObject,
|
|
12
|
-
ForwardedRef,
|
|
13
|
-
FunctionComponent,
|
|
14
|
-
} from "react";
|
|
15
|
-
import type { LayoutChangeEvent } from "react-native";
|
|
9
|
+
import type { LayoutChangeEvent, ViewProps } from "react-native";
|
|
10
|
+
import type { SharedValue } from "react-native-reanimated";
|
|
16
11
|
|
|
17
|
-
import {
|
|
12
|
+
import { SkiaViewNativeId } from "../views/SkiaViewNativeId";
|
|
13
|
+
import SkiaPictureViewNativeComponent from "../specs/SkiaPictureViewNativeComponent";
|
|
14
|
+
import type { SkRect, SkSize } from "../skia/types";
|
|
15
|
+
import { SkiaSGRoot } from "../sksg/Reconciler";
|
|
16
|
+
import { Skia } from "../skia";
|
|
18
17
|
import type { SkiaBaseViewProps } from "../views";
|
|
19
18
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
export const useCanvasRef = () => useRef<SkiaDomView>(null);
|
|
23
|
-
|
|
24
|
-
export interface CanvasProps extends SkiaBaseViewProps {
|
|
25
|
-
ref?: RefObject<SkiaDomView>;
|
|
26
|
-
children: ReactNode;
|
|
27
|
-
mode?: "default" | "continuous";
|
|
28
|
-
}
|
|
19
|
+
const NativeSkiaPictureView = SkiaPictureViewNativeComponent;
|
|
29
20
|
|
|
21
|
+
// TODO: no need to go through the JS thread for this
|
|
30
22
|
const useOnSizeEvent = (
|
|
31
23
|
resultValue: SkiaBaseViewProps["onSize"],
|
|
32
24
|
onLayout?: (event: LayoutChangeEvent) => void
|
|
@@ -46,39 +38,40 @@ const useOnSizeEvent = (
|
|
|
46
38
|
);
|
|
47
39
|
};
|
|
48
40
|
|
|
49
|
-
export
|
|
41
|
+
export interface CanvasProps extends ViewProps {
|
|
42
|
+
debug?: boolean;
|
|
43
|
+
opaque?: boolean;
|
|
44
|
+
onSize?: SharedValue<SkSize>;
|
|
45
|
+
mode?: "continuous" | "default";
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const Canvas = forwardRef(
|
|
50
49
|
(
|
|
51
50
|
{
|
|
52
|
-
|
|
53
|
-
style,
|
|
51
|
+
mode,
|
|
54
52
|
debug,
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
opaque,
|
|
54
|
+
children,
|
|
55
|
+
onSize,
|
|
57
56
|
onLayout: _onLayout,
|
|
58
|
-
...
|
|
59
|
-
},
|
|
60
|
-
|
|
57
|
+
...viewProps
|
|
58
|
+
}: CanvasProps,
|
|
59
|
+
ref
|
|
61
60
|
) => {
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
const
|
|
66
|
-
|
|
67
|
-
}, [
|
|
68
|
-
const getNativeId = useCallback(() => {
|
|
69
|
-
const id = innerRef.current?.nativeId ?? -1;
|
|
70
|
-
return id;
|
|
71
|
-
}, [innerRef]);
|
|
61
|
+
const rafId = useRef<number | null>(null);
|
|
62
|
+
const onLayout = useOnSizeEvent(onSize, _onLayout);
|
|
63
|
+
// Native ID
|
|
64
|
+
const nativeId = useMemo(() => {
|
|
65
|
+
return SkiaViewNativeId.current++;
|
|
66
|
+
}, []);
|
|
72
67
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
[redraw, getNativeId]
|
|
76
|
-
);
|
|
68
|
+
// Root
|
|
69
|
+
const root = useMemo(() => new SkiaSGRoot(Skia, nativeId), [nativeId]);
|
|
77
70
|
|
|
78
|
-
// Render
|
|
71
|
+
// Render effects
|
|
79
72
|
useEffect(() => {
|
|
80
73
|
root.render(children);
|
|
81
|
-
}, [children, root
|
|
74
|
+
}, [children, root]);
|
|
82
75
|
|
|
83
76
|
useEffect(() => {
|
|
84
77
|
return () => {
|
|
@@ -86,41 +79,50 @@ export const Canvas = forwardRef<SkiaDomView, CanvasProps>(
|
|
|
86
79
|
};
|
|
87
80
|
}, [root]);
|
|
88
81
|
|
|
82
|
+
const requestRedraw = useCallback(() => {
|
|
83
|
+
rafId.current = requestAnimationFrame(() => {
|
|
84
|
+
root.render(children);
|
|
85
|
+
if (mode === "continuous") {
|
|
86
|
+
requestRedraw();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}, [children, mode, root]);
|
|
90
|
+
|
|
91
|
+
useEffect(() => {
|
|
92
|
+
if (mode === "continuous") {
|
|
93
|
+
console.warn("The `mode` property in `Canvas` is deprecated.");
|
|
94
|
+
requestRedraw();
|
|
95
|
+
}
|
|
96
|
+
return () => {
|
|
97
|
+
if (rafId.current !== null) {
|
|
98
|
+
cancelAnimationFrame(rafId.current);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
}, [mode, requestRedraw]);
|
|
102
|
+
// Component methods
|
|
103
|
+
useImperativeHandle(ref, () => ({
|
|
104
|
+
makeImageSnapshot: (rect?: SkRect) => {
|
|
105
|
+
return SkiaViewApi.makeImageSnapshot(nativeId, rect);
|
|
106
|
+
},
|
|
107
|
+
makeImageSnapshotAsync: (rect?: SkRect) => {
|
|
108
|
+
return SkiaViewApi.makeImageSnapshotAsync(nativeId, rect);
|
|
109
|
+
},
|
|
110
|
+
redraw: () => {
|
|
111
|
+
SkiaViewApi.requestRedraw(nativeId);
|
|
112
|
+
},
|
|
113
|
+
getNativeId: () => {
|
|
114
|
+
return nativeId;
|
|
115
|
+
},
|
|
116
|
+
}));
|
|
89
117
|
return (
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
root={root.dom}
|
|
94
|
-
onLayout={onLayout}
|
|
118
|
+
<NativeSkiaPictureView
|
|
119
|
+
collapsable={false}
|
|
120
|
+
nativeID={`${nativeId}`}
|
|
95
121
|
debug={debug}
|
|
96
|
-
|
|
97
|
-
{
|
|
122
|
+
opaque={opaque}
|
|
123
|
+
onLayout={onLayout}
|
|
124
|
+
{...viewProps}
|
|
98
125
|
/>
|
|
99
126
|
);
|
|
100
127
|
}
|
|
101
|
-
)
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Combines a list of refs into a single ref. This can be used to provide
|
|
105
|
-
* both a forwarded ref and an internal ref keeping the same functionality
|
|
106
|
-
* on both of the refs.
|
|
107
|
-
* @param refs Array of refs to combine
|
|
108
|
-
* @returns A single ref that can be used in a ref prop.
|
|
109
|
-
*/
|
|
110
|
-
const useCombinedRefs = <T,>(
|
|
111
|
-
...refs: Array<MutableRefObject<T> | ForwardedRef<T>>
|
|
112
|
-
) => {
|
|
113
|
-
const targetRef = React.useRef<T>(null);
|
|
114
|
-
React.useEffect(() => {
|
|
115
|
-
refs.forEach((ref) => {
|
|
116
|
-
if (ref) {
|
|
117
|
-
if (typeof ref === "function") {
|
|
118
|
-
ref(targetRef.current);
|
|
119
|
-
} else {
|
|
120
|
-
ref.current = targetRef.current;
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
});
|
|
124
|
-
}, [refs]);
|
|
125
|
-
return targetRef;
|
|
126
|
-
};
|
|
128
|
+
);
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import React, {
|
|
2
|
+
useEffect,
|
|
3
|
+
useCallback,
|
|
4
|
+
useMemo,
|
|
5
|
+
forwardRef,
|
|
6
|
+
useRef,
|
|
7
|
+
} from "react";
|
|
8
|
+
import type {
|
|
9
|
+
RefObject,
|
|
10
|
+
ReactNode,
|
|
11
|
+
MutableRefObject,
|
|
12
|
+
ForwardedRef,
|
|
13
|
+
FunctionComponent,
|
|
14
|
+
} from "react";
|
|
15
|
+
import type { LayoutChangeEvent } from "react-native";
|
|
16
|
+
|
|
17
|
+
import { SkiaDomView } from "../views";
|
|
18
|
+
import type { SkiaBaseViewProps } from "../views";
|
|
19
|
+
|
|
20
|
+
import { SkiaRoot } from "./Reconciler";
|
|
21
|
+
|
|
22
|
+
export const useCanvasRef = () => useRef<SkiaDomView>(null);
|
|
23
|
+
|
|
24
|
+
export interface CanvasOldProps extends SkiaBaseViewProps {
|
|
25
|
+
ref?: RefObject<SkiaDomView>;
|
|
26
|
+
children: ReactNode;
|
|
27
|
+
mode?: "default" | "continuous";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const useOnSizeEvent = (
|
|
31
|
+
resultValue: SkiaBaseViewProps["onSize"],
|
|
32
|
+
onLayout?: (event: LayoutChangeEvent) => void
|
|
33
|
+
) => {
|
|
34
|
+
return useCallback(
|
|
35
|
+
(event: LayoutChangeEvent) => {
|
|
36
|
+
if (onLayout) {
|
|
37
|
+
onLayout(event);
|
|
38
|
+
}
|
|
39
|
+
const { width, height } = event.nativeEvent.layout;
|
|
40
|
+
|
|
41
|
+
if (resultValue) {
|
|
42
|
+
resultValue.value = { width, height };
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
[onLayout, resultValue]
|
|
46
|
+
);
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export const CanvasOld = forwardRef<SkiaDomView, CanvasOldProps>(
|
|
50
|
+
(
|
|
51
|
+
{
|
|
52
|
+
children,
|
|
53
|
+
style,
|
|
54
|
+
debug,
|
|
55
|
+
mode = "default",
|
|
56
|
+
onSize: _onSize,
|
|
57
|
+
onLayout: _onLayout,
|
|
58
|
+
...props
|
|
59
|
+
},
|
|
60
|
+
forwardedRef
|
|
61
|
+
) => {
|
|
62
|
+
const onLayout = useOnSizeEvent(_onSize, _onLayout);
|
|
63
|
+
const innerRef = useCanvasRef();
|
|
64
|
+
const ref = useCombinedRefs(forwardedRef, innerRef);
|
|
65
|
+
const redraw = useCallback(() => {
|
|
66
|
+
innerRef.current?.redraw();
|
|
67
|
+
}, [innerRef]);
|
|
68
|
+
const getNativeId = useCallback(() => {
|
|
69
|
+
const id = innerRef.current?.nativeId ?? -1;
|
|
70
|
+
return id;
|
|
71
|
+
}, [innerRef]);
|
|
72
|
+
|
|
73
|
+
const root = useMemo(
|
|
74
|
+
() => new SkiaRoot(redraw, getNativeId),
|
|
75
|
+
[redraw, getNativeId]
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
// Render effect
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
root.render(children);
|
|
81
|
+
}, [children, root, redraw]);
|
|
82
|
+
|
|
83
|
+
useEffect(() => {
|
|
84
|
+
return () => {
|
|
85
|
+
root.unmount();
|
|
86
|
+
};
|
|
87
|
+
}, [root]);
|
|
88
|
+
|
|
89
|
+
return (
|
|
90
|
+
<SkiaDomView
|
|
91
|
+
ref={ref}
|
|
92
|
+
style={style}
|
|
93
|
+
root={root.dom}
|
|
94
|
+
onLayout={onLayout}
|
|
95
|
+
debug={debug}
|
|
96
|
+
mode={mode}
|
|
97
|
+
{...props}
|
|
98
|
+
/>
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
) as FunctionComponent<CanvasOldProps & React.RefAttributes<SkiaDomView>>;
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Combines a list of refs into a single ref. This can be used to provide
|
|
105
|
+
* both a forwarded ref and an internal ref keeping the same functionality
|
|
106
|
+
* on both of the refs.
|
|
107
|
+
* @param refs Array of refs to combine
|
|
108
|
+
* @returns A single ref that can be used in a ref prop.
|
|
109
|
+
*/
|
|
110
|
+
const useCombinedRefs = <T,>(
|
|
111
|
+
...refs: Array<MutableRefObject<T> | ForwardedRef<T>>
|
|
112
|
+
) => {
|
|
113
|
+
const targetRef = React.useRef<T>(null);
|
|
114
|
+
React.useEffect(() => {
|
|
115
|
+
refs.forEach((ref) => {
|
|
116
|
+
if (ref) {
|
|
117
|
+
if (typeof ref === "function") {
|
|
118
|
+
ref(targetRef.current);
|
|
119
|
+
} else {
|
|
120
|
+
ref.current = targetRef.current;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
}, [refs]);
|
|
125
|
+
return targetRef;
|
|
126
|
+
};
|
package/src/sksg/Container.ts
CHANGED
|
@@ -14,7 +14,7 @@ const drawOnscreen = (Skia: Skia, nativeId: number, recording: Recording) => {
|
|
|
14
14
|
|
|
15
15
|
const rec = Skia.PictureRecorder();
|
|
16
16
|
const canvas = rec.beginRecording();
|
|
17
|
-
//
|
|
17
|
+
//const start = performance.now();
|
|
18
18
|
|
|
19
19
|
const ctx = createDrawingContext(Skia, recording.paintPool, canvas);
|
|
20
20
|
replay(ctx, recording.commands);
|
|
@@ -87,13 +87,17 @@ class ReanimatedContainer extends Container {
|
|
|
87
87
|
commands: record.commands,
|
|
88
88
|
paintPool: record.paintPool,
|
|
89
89
|
};
|
|
90
|
+
const { nativeId, Skia, recording } = this;
|
|
90
91
|
if (animationValues.size > 0) {
|
|
91
|
-
const { nativeId, Skia, recording } = this;
|
|
92
92
|
this.mapperId = Rea.startMapper(() => {
|
|
93
93
|
"worklet";
|
|
94
94
|
drawOnscreen(Skia, nativeId, recording!);
|
|
95
95
|
}, Array.from(animationValues));
|
|
96
96
|
}
|
|
97
|
+
Rea.runOnUI(() => {
|
|
98
|
+
"worklet";
|
|
99
|
+
drawOnscreen(Skia, nativeId, recording!);
|
|
100
|
+
})();
|
|
97
101
|
}
|
|
98
102
|
}
|
|
99
103
|
|