@shopify/react-native-skia 0.1.165 → 0.1.167
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +11 -5
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +34 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomViewManager.java +2 -47
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawViewManager.java +2 -44
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureViewManager.java +2 -47
- package/cpp/api/JsiSkPath.h +20 -3
- package/cpp/rnskia/dom/base/DerivedNodeProp.h +4 -4
- package/cpp/rnskia/dom/nodes/JsiBoxNode.h +8 -16
- package/cpp/rnskia/dom/nodes/JsiPathNode.h +12 -5
- package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +44 -13
- package/cpp/rnskia/dom/props/ClipProp.h +6 -6
- package/cpp/rnskia/dom/props/ImageProps.h +13 -8
- package/cpp/rnskia/dom/props/PaintProps.h +0 -16
- package/cpp/rnskia/dom/props/PointProp.h +4 -13
- package/cpp/rnskia/dom/props/PointsProp.h +1 -7
- package/cpp/rnskia/dom/props/RRectProp.h +53 -0
- package/cpp/rnskia/dom/props/RadiusProp.h +7 -9
- package/cpp/rnskia/dom/props/TransformProp.h +2 -2
- package/cpp/rnskia/dom/props/VerticesProps.h +2 -2
- package/lib/commonjs/dom/nodes/datatypes/Transform.js +0 -3
- package/lib/commonjs/dom/nodes/datatypes/Transform.js.map +1 -1
- package/lib/commonjs/dom/nodes/drawings/Box.js +1 -1
- package/lib/commonjs/dom/nodes/drawings/Box.js.map +1 -1
- package/lib/commonjs/dom/nodes/paint/ImageFilters.js +1 -1
- package/lib/commonjs/dom/nodes/paint/ImageFilters.js.map +1 -1
- package/lib/commonjs/dom/nodes/paint/Shaders.js +5 -2
- package/lib/commonjs/dom/nodes/paint/Shaders.js.map +1 -1
- package/lib/commonjs/renderer/Canvas.js +8 -39
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/renderer/DrawingContext.js.map +1 -1
- package/lib/commonjs/renderer/Reconciler.js +64 -0
- package/lib/commonjs/renderer/Reconciler.js.map +1 -0
- package/lib/commonjs/skia/types/Path/Path.js.map +1 -1
- package/lib/commonjs/skia/types/Shader/Shader.js +26 -27
- package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkPath.js +7 -0
- package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkRRect.js +14 -1
- package/lib/commonjs/skia/web/JsiSkRRect.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js +1 -1
- package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Transform.js +0 -3
- package/lib/module/dom/nodes/datatypes/Transform.js.map +1 -1
- package/lib/module/dom/nodes/drawings/Box.js +1 -1
- package/lib/module/dom/nodes/drawings/Box.js.map +1 -1
- package/lib/module/dom/nodes/paint/ImageFilters.js +1 -1
- package/lib/module/dom/nodes/paint/ImageFilters.js.map +1 -1
- package/lib/module/dom/nodes/paint/Shaders.js +5 -4
- package/lib/module/dom/nodes/paint/Shaders.js.map +1 -1
- package/lib/module/renderer/Canvas.js +7 -33
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/renderer/DrawingContext.js.map +1 -1
- package/lib/module/renderer/Reconciler.js +48 -0
- package/lib/module/renderer/Reconciler.js.map +1 -0
- package/lib/module/skia/types/Path/Path.js.map +1 -1
- package/lib/module/skia/types/Shader/Shader.js +26 -27
- package/lib/module/skia/types/Shader/Shader.js.map +1 -1
- package/lib/module/skia/web/JsiSkPath.js +7 -0
- package/lib/module/skia/web/JsiSkPath.js.map +1 -1
- package/lib/module/skia/web/JsiSkRRect.js +14 -1
- package/lib/module/skia/web/JsiSkRRect.js.map +1 -1
- package/lib/module/skia/web/JsiSkia.js +1 -1
- package/lib/module/skia/web/JsiSkia.js.map +1 -1
- package/lib/typescript/src/renderer/Canvas.d.ts +4 -7
- package/lib/typescript/src/renderer/DrawingContext.d.ts +2 -5
- package/lib/typescript/src/renderer/Reconciler.d.ts +13 -0
- package/lib/typescript/src/skia/types/Path/Path.d.ts +13 -0
- package/lib/typescript/src/skia/types/Shader/Shader.d.ts +1 -2
- package/lib/typescript/src/skia/web/JsiSkPath.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkRRect.d.ts +2 -2
- package/package.json +1 -1
- package/src/dom/nodes/datatypes/Transform.ts +0 -2
- package/src/dom/nodes/drawings/Box.ts +1 -1
- package/src/dom/nodes/paint/ImageFilters.ts +1 -1
- package/src/dom/nodes/paint/Shaders.ts +5 -5
- package/src/renderer/Canvas.tsx +12 -61
- package/src/renderer/DrawingContext.ts +2 -6
- package/src/renderer/Reconciler.tsx +66 -0
- package/src/skia/types/Path/Path.ts +14 -0
- package/src/skia/types/Shader/Shader.ts +30 -38
- package/src/skia/web/JsiSkPath.ts +10 -0
- package/src/skia/web/JsiSkRRect.ts +13 -2
- package/src/skia/web/JsiSkia.ts +1 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["BaseHostObject","JsiSkRect","JsiSkRRect","fromValue","CanvasKit","rect","ref","RRectXY","rx","ry","constructor","Float32Array","of"],"sources":["JsiSkRRect.ts"],"sourcesContent":["import type { CanvasKit, RRect } from \"canvaskit-wasm\";\n\nimport type { SkRRect } from \"../types\";\n\nimport { BaseHostObject } from \"./Host\";\nimport { JsiSkRect } from \"./JsiSkRect\";\n\nexport class JsiSkRRect\n extends BaseHostObject<RRect, \"RRect\">\n implements SkRRect\n{\n static fromValue(CanvasKit: CanvasKit, rect: SkRRect) {\n if (rect instanceof JsiSkRect) {\n return rect.ref;\n }\n return CanvasKit.RRectXY(\n JsiSkRect.fromValue(CanvasKit, rect.rect),\n rect.rx,\n rect.ry\n );\n }\n\n constructor(CanvasKit: CanvasKit,
|
|
1
|
+
{"version":3,"names":["BaseHostObject","JsiSkRect","JsiSkRRect","fromValue","CanvasKit","rect","ref","RRectXY","rx","ry","constructor","Infinity","width","height","scale","Math","min","Float32Array","of"],"sources":["JsiSkRRect.ts"],"sourcesContent":["import type { CanvasKit, RRect } from \"canvaskit-wasm\";\n\nimport type { SkRect, SkRRect } from \"../types\";\n\nimport { BaseHostObject } from \"./Host\";\nimport { JsiSkRect } from \"./JsiSkRect\";\n\nexport class JsiSkRRect\n extends BaseHostObject<RRect, \"RRect\">\n implements SkRRect\n{\n static fromValue(CanvasKit: CanvasKit, rect: SkRRect) {\n if (rect instanceof JsiSkRect) {\n return rect.ref;\n }\n return CanvasKit.RRectXY(\n JsiSkRect.fromValue(CanvasKit, rect.rect),\n rect.rx,\n rect.ry\n );\n }\n\n constructor(CanvasKit: CanvasKit, rect: SkRect, rx: number, ry: number) {\n // based on https://github.com/google/skia/blob/main/src/core/SkRRect.cpp#L51\n if (rx === Infinity || ry === Infinity) {\n rx = ry = 0;\n }\n if (rect.width < rx + rx || rect.height < ry + ry) {\n // At most one of these two divides will be by zero, and neither numerator is zero.\n const scale = Math.min(rect.width / (rx + rx), rect.height / (ry + ry));\n rx *= scale;\n ry *= scale;\n }\n const ref = CanvasKit.RRectXY(JsiSkRect.fromValue(CanvasKit, rect), rx, ry);\n super(CanvasKit, ref, \"RRect\");\n }\n\n get rx() {\n return this.ref[4];\n }\n\n get ry() {\n return this.ref[5];\n }\n\n get rect() {\n return new JsiSkRect(\n this.CanvasKit,\n Float32Array.of(this.ref[0], this.ref[1], this.ref[2], this.ref[3])\n );\n }\n}\n"],"mappings":"AAIA,SAASA,cAAT,QAA+B,QAA/B;AACA,SAASC,SAAT,QAA0B,aAA1B;AAEA,OAAO,MAAMC,UAAN,SACGF,cADH,CAGP;EACkB,OAATG,SAAS,CAACC,SAAD,EAAuBC,IAAvB,EAAsC;IACpD,IAAIA,IAAI,YAAYJ,SAApB,EAA+B;MAC7B,OAAOI,IAAI,CAACC,GAAZ;IACD;;IACD,OAAOF,SAAS,CAACG,OAAV,CACLN,SAAS,CAACE,SAAV,CAAoBC,SAApB,EAA+BC,IAAI,CAACA,IAApC,CADK,EAELA,IAAI,CAACG,EAFA,EAGLH,IAAI,CAACI,EAHA,CAAP;EAKD;;EAEDC,WAAW,CAACN,SAAD,EAAuBC,IAAvB,EAAqCG,EAArC,EAAiDC,EAAjD,EAA6D;IACtE;IACA,IAAID,EAAE,KAAKG,QAAP,IAAmBF,EAAE,KAAKE,QAA9B,EAAwC;MACtCH,EAAE,GAAGC,EAAE,GAAG,CAAV;IACD;;IACD,IAAIJ,IAAI,CAACO,KAAL,GAAaJ,EAAE,GAAGA,EAAlB,IAAwBH,IAAI,CAACQ,MAAL,GAAcJ,EAAE,GAAGA,EAA/C,EAAmD;MACjD;MACA,MAAMK,KAAK,GAAGC,IAAI,CAACC,GAAL,CAASX,IAAI,CAACO,KAAL,IAAcJ,EAAE,GAAGA,EAAnB,CAAT,EAAiCH,IAAI,CAACQ,MAAL,IAAeJ,EAAE,GAAGA,EAApB,CAAjC,CAAd;MACAD,EAAE,IAAIM,KAAN;MACAL,EAAE,IAAIK,KAAN;IACD;;IACD,MAAMR,GAAG,GAAGF,SAAS,CAACG,OAAV,CAAkBN,SAAS,CAACE,SAAV,CAAoBC,SAApB,EAA+BC,IAA/B,CAAlB,EAAwDG,EAAxD,EAA4DC,EAA5D,CAAZ;IACA,MAAML,SAAN,EAAiBE,GAAjB,EAAsB,OAAtB;EACD;;EAEK,IAAFE,EAAE,GAAG;IACP,OAAO,KAAKF,GAAL,CAAS,CAAT,CAAP;EACD;;EAEK,IAAFG,EAAE,GAAG;IACP,OAAO,KAAKH,GAAL,CAAS,CAAT,CAAP;EACD;;EAEO,IAAJD,IAAI,GAAG;IACT,OAAO,IAAIJ,SAAJ,CACL,KAAKG,SADA,EAELa,YAAY,CAACC,EAAb,CAAgB,KAAKZ,GAAL,CAAS,CAAT,CAAhB,EAA6B,KAAKA,GAAL,CAAS,CAAT,CAA7B,EAA0C,KAAKA,GAAL,CAAS,CAAT,CAA1C,EAAuD,KAAKA,GAAL,CAAS,CAAT,CAAvD,CAFK,CAAP;EAID;;AAxCH"}
|
|
@@ -30,7 +30,7 @@ export const JsiSkApi = CanvasKit => ({
|
|
|
30
30
|
RuntimeShaderBuilder: _ => {
|
|
31
31
|
throw new Error("Not implemented on React Native Web");
|
|
32
32
|
},
|
|
33
|
-
RRectXY: (rect, rx, ry) => new JsiSkRRect(CanvasKit,
|
|
33
|
+
RRectXY: (rect, rx, ry) => new JsiSkRRect(CanvasKit, rect, rx, ry),
|
|
34
34
|
RSXform: (scos, ssin, tx, ty) => new JsiSkRSXform(CanvasKit, Float32Array.of(scos, ssin, tx, ty)),
|
|
35
35
|
Color,
|
|
36
36
|
ContourMeasureIter: (path, forceClosed, resScale) => new JsiSkContourMeasureIter(CanvasKit, new CanvasKit.ContourMeasureIter(JsiSkPath.fromValue(path), forceClosed, resScale)),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["JsiSkPoint","JsiSkPaint","JsiSkRect","Color","JsiSkSurfaceFactory","JsiSkRRect","JsiSkRSXform","JsiSkContourMeasureIter","JsiSkPictureRecorder","JsiSkPictureFactory","JsiSkPathFactory","JsiSkMatrix","JsiSkColorFilterFactory","JsiSkTypefaceFactory","JsiSkMaskFilterFactory","JsiSkRuntimeEffectFactory","JsiSkImageFilterFactory","JsiSkShaderFactory","JsiSkPathEffectFactory","JsiSkDataFactory","JsiSkImageFactory","JsiSkSVGFactory","JsiSkTextBlobFactory","JsiSkFont","MakeVertices","JsiSkPath","JsiSkTypeface","JsiSkApi","CanvasKit","Point","x","y","Float32Array","of","RuntimeShaderBuilder","_","Error","RRectXY","rect","rx","ry","
|
|
1
|
+
{"version":3,"names":["JsiSkPoint","JsiSkPaint","JsiSkRect","Color","JsiSkSurfaceFactory","JsiSkRRect","JsiSkRSXform","JsiSkContourMeasureIter","JsiSkPictureRecorder","JsiSkPictureFactory","JsiSkPathFactory","JsiSkMatrix","JsiSkColorFilterFactory","JsiSkTypefaceFactory","JsiSkMaskFilterFactory","JsiSkRuntimeEffectFactory","JsiSkImageFilterFactory","JsiSkShaderFactory","JsiSkPathEffectFactory","JsiSkDataFactory","JsiSkImageFactory","JsiSkSVGFactory","JsiSkTextBlobFactory","JsiSkFont","MakeVertices","JsiSkPath","JsiSkTypeface","JsiSkApi","CanvasKit","Point","x","y","Float32Array","of","RuntimeShaderBuilder","_","Error","RRectXY","rect","rx","ry","RSXform","scos","ssin","tx","ty","ContourMeasureIter","path","forceClosed","resScale","fromValue","Paint","paint","setAntiAlias","PictureRecorder","Picture","Path","Matrix","matrix","identity","ColorFilter","Font","typeface","size","undefined","Typeface","MaskFilter","RuntimeEffect","ImageFilter","Shader","PathEffect","bind","Data","Image","SVG","TextBlob","XYWHRect","width","height","Surface"],"sources":["JsiSkia.ts"],"sourcesContent":["import type { CanvasKit } from \"canvaskit-wasm\";\n\nimport type {\n SkContourMeasureIter,\n Skia,\n SkPath,\n SkRect,\n SkRuntimeEffect,\n SkRuntimeShaderBuilder,\n SkTypeface,\n} from \"../types\";\n\nimport { JsiSkPoint } from \"./JsiSkPoint\";\nimport { JsiSkPaint } from \"./JsiSkPaint\";\nimport { JsiSkRect } from \"./JsiSkRect\";\nimport { Color } from \"./JsiSkColor\";\nimport { JsiSkSurfaceFactory } from \"./JsiSkSurfaceFactory\";\nimport { JsiSkRRect } from \"./JsiSkRRect\";\nimport { JsiSkRSXform } from \"./JsiSkRSXform\";\nimport { JsiSkContourMeasureIter } from \"./JsiSkContourMeasureIter\";\nimport { JsiSkPictureRecorder } from \"./JsiSkPictureRecorder\";\nimport { JsiSkPictureFactory } from \"./JsiSkPictureFactory\";\nimport { JsiSkPathFactory } from \"./JsiSkPathFactory\";\nimport { JsiSkMatrix } from \"./JsiSkMatrix\";\nimport { JsiSkColorFilterFactory } from \"./JsiSkColorFilterFactory\";\nimport { JsiSkTypefaceFactory } from \"./JsiSkTypefaceFactory\";\nimport { JsiSkMaskFilterFactory } from \"./JsiSkMaskFilterFactory\";\nimport { JsiSkRuntimeEffectFactory } from \"./JsiSkRuntimeEffectFactory\";\nimport { JsiSkImageFilterFactory } from \"./JsiSkImageFilterFactory\";\nimport { JsiSkShaderFactory } from \"./JsiSkShaderFactory\";\nimport { JsiSkPathEffectFactory } from \"./JsiSkPathEffectFactory\";\nimport { JsiSkDataFactory } from \"./JsiSkDataFactory\";\nimport { JsiSkImageFactory } from \"./JsiSkImageFactory\";\nimport { JsiSkSVGFactory } from \"./JsiSkSVGFactory\";\nimport { JsiSkTextBlobFactory } from \"./JsiSkTextBlobFactory\";\nimport { JsiSkFont } from \"./JsiSkFont\";\nimport { MakeVertices } from \"./JsiSkVerticesFactory\";\nimport { JsiSkPath } from \"./JsiSkPath\";\nimport { JsiSkTypeface } from \"./JsiSkTypeface\";\n\nexport const JsiSkApi = (CanvasKit: CanvasKit): Skia => ({\n Point: (x: number, y: number) =>\n new JsiSkPoint(CanvasKit, Float32Array.of(x, y)),\n RuntimeShaderBuilder: (_: SkRuntimeEffect): SkRuntimeShaderBuilder => {\n throw new Error(\"Not implemented on React Native Web\");\n },\n RRectXY: (rect: SkRect, rx: number, ry: number) =>\n new JsiSkRRect(CanvasKit, rect, rx, ry),\n RSXform: (scos: number, ssin: number, tx: number, ty: number) =>\n new JsiSkRSXform(CanvasKit, Float32Array.of(scos, ssin, tx, ty)),\n Color,\n ContourMeasureIter: (\n path: SkPath,\n forceClosed: boolean,\n resScale: number\n ): SkContourMeasureIter =>\n new JsiSkContourMeasureIter(\n CanvasKit,\n new CanvasKit.ContourMeasureIter(\n JsiSkPath.fromValue(path),\n forceClosed,\n resScale\n )\n ),\n Paint: () => {\n const paint = new JsiSkPaint(CanvasKit, new CanvasKit.Paint());\n paint.setAntiAlias(true);\n return paint;\n },\n PictureRecorder: () =>\n new JsiSkPictureRecorder(CanvasKit, new CanvasKit.PictureRecorder()),\n Picture: new JsiSkPictureFactory(CanvasKit),\n Path: new JsiSkPathFactory(CanvasKit),\n Matrix: (matrix?: readonly number[]) =>\n new JsiSkMatrix(\n CanvasKit,\n matrix\n ? Float32Array.of(...matrix)\n : Float32Array.of(...CanvasKit.Matrix.identity())\n ),\n ColorFilter: new JsiSkColorFilterFactory(CanvasKit),\n Font: (typeface?: SkTypeface, size?: number) =>\n new JsiSkFont(\n CanvasKit,\n new CanvasKit.Font(\n typeface === undefined ? null : JsiSkTypeface.fromValue(typeface),\n size\n )\n ),\n Typeface: new JsiSkTypefaceFactory(CanvasKit),\n MaskFilter: new JsiSkMaskFilterFactory(CanvasKit),\n RuntimeEffect: new JsiSkRuntimeEffectFactory(CanvasKit),\n ImageFilter: new JsiSkImageFilterFactory(CanvasKit),\n Shader: new JsiSkShaderFactory(CanvasKit),\n PathEffect: new JsiSkPathEffectFactory(CanvasKit),\n MakeVertices: MakeVertices.bind(null, CanvasKit),\n Data: new JsiSkDataFactory(CanvasKit),\n Image: new JsiSkImageFactory(CanvasKit),\n SVG: new JsiSkSVGFactory(CanvasKit),\n TextBlob: new JsiSkTextBlobFactory(CanvasKit),\n XYWHRect: (x: number, y: number, width: number, height: number) => {\n return new JsiSkRect(CanvasKit, CanvasKit.XYWHRect(x, y, width, height));\n },\n Surface: new JsiSkSurfaceFactory(CanvasKit),\n});\n"],"mappings":"AAYA,SAASA,UAAT,QAA2B,cAA3B;AACA,SAASC,UAAT,QAA2B,cAA3B;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,KAAT,QAAsB,cAAtB;AACA,SAASC,mBAAT,QAAoC,uBAApC;AACA,SAASC,UAAT,QAA2B,cAA3B;AACA,SAASC,YAAT,QAA6B,gBAA7B;AACA,SAASC,uBAAT,QAAwC,2BAAxC;AACA,SAASC,oBAAT,QAAqC,wBAArC;AACA,SAASC,mBAAT,QAAoC,uBAApC;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,WAAT,QAA4B,eAA5B;AACA,SAASC,uBAAT,QAAwC,2BAAxC;AACA,SAASC,oBAAT,QAAqC,wBAArC;AACA,SAASC,sBAAT,QAAuC,0BAAvC;AACA,SAASC,yBAAT,QAA0C,6BAA1C;AACA,SAASC,uBAAT,QAAwC,2BAAxC;AACA,SAASC,kBAAT,QAAmC,sBAAnC;AACA,SAASC,sBAAT,QAAuC,0BAAvC;AACA,SAASC,gBAAT,QAAiC,oBAAjC;AACA,SAASC,iBAAT,QAAkC,qBAAlC;AACA,SAASC,eAAT,QAAgC,mBAAhC;AACA,SAASC,oBAAT,QAAqC,wBAArC;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,YAAT,QAA6B,wBAA7B;AACA,SAASC,SAAT,QAA0B,aAA1B;AACA,SAASC,aAAT,QAA8B,iBAA9B;AAEA,OAAO,MAAMC,QAAQ,GAAIC,SAAD,KAAiC;EACvDC,KAAK,EAAE,CAACC,CAAD,EAAYC,CAAZ,KACL,IAAI/B,UAAJ,CAAe4B,SAAf,EAA0BI,YAAY,CAACC,EAAb,CAAgBH,CAAhB,EAAmBC,CAAnB,CAA1B,CAFqD;EAGvDG,oBAAoB,EAAGC,CAAD,IAAgD;IACpE,MAAM,IAAIC,KAAJ,CAAU,qCAAV,CAAN;EACD,CALsD;EAMvDC,OAAO,EAAE,CAACC,IAAD,EAAeC,EAAf,EAA2BC,EAA3B,KACP,IAAInC,UAAJ,CAAeuB,SAAf,EAA0BU,IAA1B,EAAgCC,EAAhC,EAAoCC,EAApC,CAPqD;EAQvDC,OAAO,EAAE,CAACC,IAAD,EAAeC,IAAf,EAA6BC,EAA7B,EAAyCC,EAAzC,KACP,IAAIvC,YAAJ,CAAiBsB,SAAjB,EAA4BI,YAAY,CAACC,EAAb,CAAgBS,IAAhB,EAAsBC,IAAtB,EAA4BC,EAA5B,EAAgCC,EAAhC,CAA5B,CATqD;EAUvD1C,KAVuD;EAWvD2C,kBAAkB,EAAE,CAClBC,IADkB,EAElBC,WAFkB,EAGlBC,QAHkB,KAKlB,IAAI1C,uBAAJ,CACEqB,SADF,EAEE,IAAIA,SAAS,CAACkB,kBAAd,CACErB,SAAS,CAACyB,SAAV,CAAoBH,IAApB,CADF,EAEEC,WAFF,EAGEC,QAHF,CAFF,CAhBqD;EAwBvDE,KAAK,EAAE,MAAM;IACX,MAAMC,KAAK,GAAG,IAAInD,UAAJ,CAAe2B,SAAf,EAA0B,IAAIA,SAAS,CAACuB,KAAd,EAA1B,CAAd;IACAC,KAAK,CAACC,YAAN,CAAmB,IAAnB;IACA,OAAOD,KAAP;EACD,CA5BsD;EA6BvDE,eAAe,EAAE,MACf,IAAI9C,oBAAJ,CAAyBoB,SAAzB,EAAoC,IAAIA,SAAS,CAAC0B,eAAd,EAApC,CA9BqD;EA+BvDC,OAAO,EAAE,IAAI9C,mBAAJ,CAAwBmB,SAAxB,CA/B8C;EAgCvD4B,IAAI,EAAE,IAAI9C,gBAAJ,CAAqBkB,SAArB,CAhCiD;EAiCvD6B,MAAM,EAAGC,MAAD,IACN,IAAI/C,WAAJ,CACEiB,SADF,EAEE8B,MAAM,GACF1B,YAAY,CAACC,EAAb,CAAgB,GAAGyB,MAAnB,CADE,GAEF1B,YAAY,CAACC,EAAb,CAAgB,GAAGL,SAAS,CAAC6B,MAAV,CAAiBE,QAAjB,EAAnB,CAJN,CAlCqD;EAwCvDC,WAAW,EAAE,IAAIhD,uBAAJ,CAA4BgB,SAA5B,CAxC0C;EAyCvDiC,IAAI,EAAE,CAACC,QAAD,EAAwBC,IAAxB,KACJ,IAAIxC,SAAJ,CACEK,SADF,EAEE,IAAIA,SAAS,CAACiC,IAAd,CACEC,QAAQ,KAAKE,SAAb,GAAyB,IAAzB,GAAgCtC,aAAa,CAACwB,SAAd,CAAwBY,QAAxB,CADlC,EAEEC,IAFF,CAFF,CA1CqD;EAiDvDE,QAAQ,EAAE,IAAIpD,oBAAJ,CAAyBe,SAAzB,CAjD6C;EAkDvDsC,UAAU,EAAE,IAAIpD,sBAAJ,CAA2Bc,SAA3B,CAlD2C;EAmDvDuC,aAAa,EAAE,IAAIpD,yBAAJ,CAA8Ba,SAA9B,CAnDwC;EAoDvDwC,WAAW,EAAE,IAAIpD,uBAAJ,CAA4BY,SAA5B,CApD0C;EAqDvDyC,MAAM,EAAE,IAAIpD,kBAAJ,CAAuBW,SAAvB,CArD+C;EAsDvD0C,UAAU,EAAE,IAAIpD,sBAAJ,CAA2BU,SAA3B,CAtD2C;EAuDvDJ,YAAY,EAAEA,YAAY,CAAC+C,IAAb,CAAkB,IAAlB,EAAwB3C,SAAxB,CAvDyC;EAwDvD4C,IAAI,EAAE,IAAIrD,gBAAJ,CAAqBS,SAArB,CAxDiD;EAyDvD6C,KAAK,EAAE,IAAIrD,iBAAJ,CAAsBQ,SAAtB,CAzDgD;EA0DvD8C,GAAG,EAAE,IAAIrD,eAAJ,CAAoBO,SAApB,CA1DkD;EA2DvD+C,QAAQ,EAAE,IAAIrD,oBAAJ,CAAyBM,SAAzB,CA3D6C;EA4DvDgD,QAAQ,EAAE,CAAC9C,CAAD,EAAYC,CAAZ,EAAuB8C,KAAvB,EAAsCC,MAAtC,KAAyD;IACjE,OAAO,IAAI5E,SAAJ,CAAc0B,SAAd,EAAyBA,SAAS,CAACgD,QAAV,CAAmB9C,CAAnB,EAAsBC,CAAtB,EAAyB8C,KAAzB,EAAgCC,MAAhC,CAAzB,CAAP;EACD,CA9DsD;EA+DvDC,OAAO,EAAE,IAAI3E,mBAAJ,CAAwBwB,SAAxB;AA/D8C,CAAjC,CAAjB"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
-
import type { RefObject, ReactNode
|
|
3
|
-
import ReactReconciler from "react-reconciler";
|
|
2
|
+
import type { RefObject, ReactNode } from "react";
|
|
4
3
|
import { SkiaDomView } from "../views";
|
|
5
|
-
import type { TouchHandler } from "../views";
|
|
6
|
-
import { Container } from "./Container";
|
|
7
|
-
export declare const skiaReconciler: ReactReconciler.Reconciler<Container, import("..").Node<unknown>, import("..").Node<unknown>, import("..").Node<unknown>, import("..").Node<unknown>>;
|
|
4
|
+
import type { TouchHandler, SkiaBaseViewProps } from "../views";
|
|
8
5
|
export declare const useCanvasRef: () => React.RefObject<SkiaDomView>;
|
|
9
|
-
export interface CanvasProps extends
|
|
6
|
+
export interface CanvasProps extends SkiaBaseViewProps {
|
|
10
7
|
ref?: RefObject<SkiaDomView>;
|
|
11
8
|
children: ReactNode;
|
|
12
9
|
onTouch?: TouchHandler;
|
|
13
10
|
}
|
|
14
|
-
export declare const Canvas: React.
|
|
11
|
+
export declare const Canvas: React.FC<CanvasProps & React.RefAttributes<SkiaDomView>>;
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type { Skia, Vector } from "../skia/types";
|
|
1
|
+
import type { DrawingInfo } from "../views";
|
|
2
|
+
import type { Skia } from "../skia/types";
|
|
4
3
|
import type { DrawingContext as DOMDrawingContext } from "../dom/types";
|
|
5
4
|
export interface DrawingContext extends Omit<DrawingInfo, "touches">, DOMDrawingContext {
|
|
6
|
-
center: Vector;
|
|
7
|
-
ref: RefObject<SkiaView>;
|
|
8
5
|
Skia: Skia;
|
|
9
6
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { Skia } from "../skia/types";
|
|
3
|
+
import type { SkiaValue } from "../values/types";
|
|
4
|
+
declare type RegisterValues = (values: Array<SkiaValue<unknown>>) => () => void;
|
|
5
|
+
export declare class SkiaRoot {
|
|
6
|
+
private root;
|
|
7
|
+
private container;
|
|
8
|
+
constructor(Skia: Skia, registerValues?: RegisterValues, redraw?: () => void);
|
|
9
|
+
render(element: ReactNode): void;
|
|
10
|
+
unmount(): void;
|
|
11
|
+
get dom(): import("..").RenderNode<import("..").GroupProps>;
|
|
12
|
+
}
|
|
13
|
+
export {};
|
|
@@ -348,6 +348,19 @@ export interface SkPath extends SkJSIInstance<"Path"> {
|
|
|
348
348
|
* @param isCCW
|
|
349
349
|
*/
|
|
350
350
|
addRRect(rrect: SkRRect, isCCW?: boolean): SkPath;
|
|
351
|
+
/** Appends src to SkPath, transformed by matrix. Transformed curves may have
|
|
352
|
+
different verbs, SkPoint, and conic weights.
|
|
353
|
+
|
|
354
|
+
If mode is kAppend_AddPathMode, src verb array, SkPoint array, and conic
|
|
355
|
+
weights are added unaltered. If mode is kExtend_AddPathMode, add line
|
|
356
|
+
before appending verbs, SkPoint, and conic weights.
|
|
357
|
+
|
|
358
|
+
@param src SkPath verbs, SkPoint, and conic weights to add
|
|
359
|
+
@param matrix transform applied to src
|
|
360
|
+
@param extend extends path with line if true
|
|
361
|
+
@return reference to SkPath
|
|
362
|
+
*/
|
|
363
|
+
addPath(src: SkPath, matrix?: SkMatrix, extend?: boolean): SkPath;
|
|
351
364
|
/**
|
|
352
365
|
* Returns the Point at index in Point array. Valid range for index is
|
|
353
366
|
* 0 to countPoints() - 1.
|
|
@@ -3,8 +3,7 @@ import type { Vector } from "../Point";
|
|
|
3
3
|
import type { SkRuntimeEffect, SkRuntimeShaderBuilder } from "../RuntimeEffect";
|
|
4
4
|
export declare const isShader: (obj: SkJSIInstance<string> | null) => obj is SkShader;
|
|
5
5
|
export declare type SkShader = SkJSIInstance<"Shader">;
|
|
6
|
-
export declare type
|
|
7
|
-
export declare type Uniform = UniformValue | readonly UniformValue[] | Float32Array;
|
|
6
|
+
export declare type Uniform = number | Vector | Float32Array | Uniform[];
|
|
8
7
|
export interface Uniforms {
|
|
9
8
|
[name: string]: Uniform;
|
|
10
9
|
}
|
|
@@ -5,6 +5,7 @@ import { JsiSkPoint } from "./JsiSkPoint";
|
|
|
5
5
|
import { JsiSkRect } from "./JsiSkRect";
|
|
6
6
|
export declare class JsiSkPath extends HostObject<Path, "Path"> implements SkPath {
|
|
7
7
|
constructor(CanvasKit: CanvasKit, ref: Path);
|
|
8
|
+
addPath(src: SkPath, matrix?: SkMatrix, extend?: boolean): this;
|
|
8
9
|
addArc(oval: SkRect, startAngleInDegrees: number, sweepAngleInDegrees: number): this;
|
|
9
10
|
addOval(oval: SkRect, isCCW?: boolean, startIndex?: number): this;
|
|
10
11
|
countPoints(): number;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import type { CanvasKit, RRect } from "canvaskit-wasm";
|
|
2
|
-
import type { SkRRect } from "../types";
|
|
2
|
+
import type { SkRect, SkRRect } from "../types";
|
|
3
3
|
import { BaseHostObject } from "./Host";
|
|
4
4
|
import { JsiSkRect } from "./JsiSkRect";
|
|
5
5
|
export declare class JsiSkRRect extends BaseHostObject<RRect, "RRect"> implements SkRRect {
|
|
6
6
|
static fromValue(CanvasKit: CanvasKit, rect: SkRRect): Float32Array;
|
|
7
|
-
constructor(CanvasKit: CanvasKit,
|
|
7
|
+
constructor(CanvasKit: CanvasKit, rect: SkRect, rx: number, ry: number);
|
|
8
8
|
get rx(): number;
|
|
9
9
|
get ry(): number;
|
|
10
10
|
get rect(): JsiSkRect;
|
package/package.json
CHANGED
|
@@ -10,11 +10,9 @@ export const processTransformProps = (m3: SkMatrix, props: TransformProps) => {
|
|
|
10
10
|
m3.concat(matrix);
|
|
11
11
|
m3.translate(-origin.x, -origin.y);
|
|
12
12
|
} else {
|
|
13
|
-
m3.identity();
|
|
14
13
|
m3.concat(matrix);
|
|
15
14
|
}
|
|
16
15
|
} else if (transform) {
|
|
17
|
-
m3.identity();
|
|
18
16
|
if (origin) {
|
|
19
17
|
m3.translate(origin.x, origin.y);
|
|
20
18
|
}
|
|
@@ -40,7 +40,7 @@ export class BoxShadowNode extends JsiDeclarationNode<
|
|
|
40
40
|
BoxShadowProps
|
|
41
41
|
> {
|
|
42
42
|
constructor(ctx: NodeContext, props: BoxShadowProps) {
|
|
43
|
-
super(ctx, DeclarationType.Unknown, NodeType.
|
|
43
|
+
super(ctx, DeclarationType.Unknown, NodeType.BoxShadow, props);
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
materialize() {
|
|
@@ -140,7 +140,7 @@ export class BlurImageFilterNode extends ImageFilterDeclaration<BlurImageFilterP
|
|
|
140
140
|
|
|
141
141
|
export class DropShadowImageFilterNode extends ImageFilterDeclaration<DropShadowImageFilterProps> {
|
|
142
142
|
constructor(ctx: NodeContext, props: DropShadowImageFilterProps) {
|
|
143
|
-
super(ctx, NodeType.
|
|
143
|
+
super(ctx, NodeType.DropShadowImageFilter, props);
|
|
144
144
|
}
|
|
145
145
|
|
|
146
146
|
materialize() {
|
|
@@ -67,19 +67,19 @@ export class ImageShaderNode extends ShaderDeclaration<ImageShaderProps> {
|
|
|
67
67
|
materialize() {
|
|
68
68
|
const { fit, image, tx, ty, fm, mm, ...imageShaderProps } = this.props;
|
|
69
69
|
const rct = getRect(this.Skia, imageShaderProps);
|
|
70
|
+
const m3 = this.Skia.Matrix();
|
|
70
71
|
if (rct) {
|
|
71
72
|
const rects = fitRects(
|
|
72
73
|
fit,
|
|
73
74
|
{ x: 0, y: 0, width: image.width(), height: image.height() },
|
|
74
75
|
rct
|
|
75
76
|
);
|
|
76
|
-
const
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
...m3,
|
|
80
|
-
];
|
|
77
|
+
const [x, y, sx, sy] = rect2rect(rects.src, rects.dst);
|
|
78
|
+
m3.translate(x.translateX, y.translateY);
|
|
79
|
+
m3.scale(sx.scaleX, sy.scaleY);
|
|
81
80
|
}
|
|
82
81
|
const lm = this.Skia.Matrix();
|
|
82
|
+
lm.concat(m3);
|
|
83
83
|
processTransformProps(lm, imageShaderProps);
|
|
84
84
|
return image.makeShaderOptions(
|
|
85
85
|
TileMode[enumKey(tx)],
|
package/src/renderer/Canvas.tsx
CHANGED
|
@@ -8,48 +8,20 @@ import React, {
|
|
|
8
8
|
import type {
|
|
9
9
|
RefObject,
|
|
10
10
|
ReactNode,
|
|
11
|
-
ComponentProps,
|
|
12
11
|
MutableRefObject,
|
|
13
12
|
ForwardedRef,
|
|
14
13
|
} from "react";
|
|
15
|
-
import type { OpaqueRoot } from "react-reconciler";
|
|
16
|
-
import ReactReconciler from "react-reconciler";
|
|
17
14
|
|
|
18
15
|
import { SkiaDomView } from "../views";
|
|
19
|
-
import type { TouchHandler } from "../views";
|
|
20
16
|
import { Skia } from "../skia/Skia";
|
|
21
|
-
import type {
|
|
17
|
+
import type { TouchHandler, SkiaBaseViewProps } from "../views";
|
|
18
|
+
import type { SkiaValue } from "../values/types";
|
|
22
19
|
|
|
23
|
-
import {
|
|
24
|
-
// import { debugTree } from "./nodes";
|
|
25
|
-
import { Container } from "./Container";
|
|
26
|
-
import { DependencyManager } from "./DependencyManager";
|
|
27
|
-
|
|
28
|
-
export const skiaReconciler = ReactReconciler(skHostConfig);
|
|
29
|
-
|
|
30
|
-
skiaReconciler.injectIntoDevTools({
|
|
31
|
-
bundleType: 1,
|
|
32
|
-
version: "0.0.1",
|
|
33
|
-
rendererPackageName: "react-native-skia",
|
|
34
|
-
});
|
|
35
|
-
|
|
36
|
-
const render = (element: ReactNode, root: OpaqueRoot, container: Container) => {
|
|
37
|
-
skiaReconciler.updateContainer(element, root, null, () => {
|
|
38
|
-
hostDebug("updateContainer");
|
|
39
|
-
container.depMgr.update();
|
|
40
|
-
});
|
|
41
|
-
};
|
|
20
|
+
import { SkiaRoot } from "./Reconciler";
|
|
42
21
|
|
|
43
22
|
export const useCanvasRef = () => useRef<SkiaDomView>(null);
|
|
44
23
|
|
|
45
|
-
|
|
46
|
-
registerValues: (values: Array<SkiaValue<unknown>>) => () => void
|
|
47
|
-
) =>
|
|
48
|
-
global.SkiaDomApi && global.SkiaDomApi.DependencyManager
|
|
49
|
-
? global.SkiaDomApi.DependencyManager(registerValues)
|
|
50
|
-
: new DependencyManager(registerValues);
|
|
51
|
-
|
|
52
|
-
export interface CanvasProps extends ComponentProps<typeof SkiaDomView> {
|
|
24
|
+
export interface CanvasProps extends SkiaBaseViewProps {
|
|
53
25
|
ref?: RefObject<SkiaDomView>;
|
|
54
26
|
children: ReactNode;
|
|
55
27
|
onTouch?: TouchHandler;
|
|
@@ -75,48 +47,27 @@ export const Canvas = forwardRef<SkiaDomView, CanvasProps>(
|
|
|
75
47
|
},
|
|
76
48
|
[ref]
|
|
77
49
|
);
|
|
78
|
-
|
|
79
|
-
const container = useMemo(() => {
|
|
80
|
-
return new Container(
|
|
81
|
-
Skia,
|
|
82
|
-
createDependencyManager(registerValues),
|
|
83
|
-
redraw
|
|
84
|
-
);
|
|
85
|
-
}, [redraw, registerValues]);
|
|
86
|
-
|
|
87
50
|
const root = useMemo(
|
|
88
|
-
() =>
|
|
89
|
-
|
|
90
|
-
container,
|
|
91
|
-
0,
|
|
92
|
-
null,
|
|
93
|
-
true,
|
|
94
|
-
null,
|
|
95
|
-
"",
|
|
96
|
-
console.error,
|
|
97
|
-
null
|
|
98
|
-
),
|
|
99
|
-
[container]
|
|
51
|
+
() => new SkiaRoot(Skia, registerValues, redraw),
|
|
52
|
+
[redraw, registerValues]
|
|
100
53
|
);
|
|
101
54
|
|
|
102
55
|
// Render effect
|
|
103
56
|
useEffect(() => {
|
|
104
|
-
render(children
|
|
105
|
-
}, [children, root, redraw
|
|
57
|
+
root.render(children);
|
|
58
|
+
}, [children, root, redraw]);
|
|
106
59
|
|
|
107
60
|
useEffect(() => {
|
|
108
61
|
return () => {
|
|
109
|
-
|
|
110
|
-
container.depMgr.remove();
|
|
111
|
-
});
|
|
62
|
+
root.unmount();
|
|
112
63
|
};
|
|
113
|
-
}, [
|
|
64
|
+
}, [root]);
|
|
114
65
|
|
|
115
66
|
return (
|
|
116
67
|
<SkiaDomView
|
|
117
68
|
ref={ref}
|
|
118
69
|
style={style}
|
|
119
|
-
root={
|
|
70
|
+
root={root.dom}
|
|
120
71
|
onTouch={onTouch}
|
|
121
72
|
onSize={onSize}
|
|
122
73
|
mode={mode}
|
|
@@ -125,7 +76,7 @@ export const Canvas = forwardRef<SkiaDomView, CanvasProps>(
|
|
|
125
76
|
/>
|
|
126
77
|
);
|
|
127
78
|
}
|
|
128
|
-
)
|
|
79
|
+
) as React.FC<CanvasProps & React.RefAttributes<SkiaDomView>>;
|
|
129
80
|
|
|
130
81
|
/**
|
|
131
82
|
* Combines a list of refs into a single ref. This can be used to provide
|
|
@@ -1,13 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
import type { DrawingInfo, SkiaView } from "../views";
|
|
4
|
-
import type { Skia, Vector } from "../skia/types";
|
|
1
|
+
import type { DrawingInfo } from "../views";
|
|
2
|
+
import type { Skia } from "../skia/types";
|
|
5
3
|
import type { DrawingContext as DOMDrawingContext } from "../dom/types";
|
|
6
4
|
|
|
7
5
|
export interface DrawingContext
|
|
8
6
|
extends Omit<DrawingInfo, "touches">,
|
|
9
7
|
DOMDrawingContext {
|
|
10
|
-
center: Vector;
|
|
11
|
-
ref: RefObject<SkiaView>;
|
|
12
8
|
Skia: Skia;
|
|
13
9
|
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
import type { OpaqueRoot } from "react-reconciler";
|
|
3
|
+
import ReactReconciler from "react-reconciler";
|
|
4
|
+
|
|
5
|
+
import type { Skia } from "../skia/types";
|
|
6
|
+
import type { SkiaValue } from "../values/types";
|
|
7
|
+
|
|
8
|
+
import { DependencyManager } from "./DependencyManager";
|
|
9
|
+
import { skHostConfig, debug as hostDebug } from "./HostConfig";
|
|
10
|
+
import { Container } from "./Container";
|
|
11
|
+
|
|
12
|
+
const skiaReconciler = ReactReconciler(skHostConfig);
|
|
13
|
+
|
|
14
|
+
type RegisterValues = (values: Array<SkiaValue<unknown>>) => () => void;
|
|
15
|
+
|
|
16
|
+
const createDependencyManager = (registerValues: RegisterValues) =>
|
|
17
|
+
global.SkiaDomApi && global.SkiaDomApi.DependencyManager
|
|
18
|
+
? global.SkiaDomApi.DependencyManager(registerValues)
|
|
19
|
+
: new DependencyManager(registerValues);
|
|
20
|
+
|
|
21
|
+
skiaReconciler.injectIntoDevTools({
|
|
22
|
+
bundleType: 1,
|
|
23
|
+
version: "0.0.1",
|
|
24
|
+
rendererPackageName: "react-native-skia",
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
export class SkiaRoot {
|
|
28
|
+
private root: OpaqueRoot;
|
|
29
|
+
private container: Container;
|
|
30
|
+
|
|
31
|
+
constructor(
|
|
32
|
+
Skia: Skia,
|
|
33
|
+
registerValues: RegisterValues = () => () => {},
|
|
34
|
+
redraw: () => void = () => {}
|
|
35
|
+
) {
|
|
36
|
+
const depMgr = createDependencyManager(registerValues);
|
|
37
|
+
this.container = new Container(Skia, depMgr, redraw);
|
|
38
|
+
this.root = skiaReconciler.createContainer(
|
|
39
|
+
this.container,
|
|
40
|
+
0,
|
|
41
|
+
null,
|
|
42
|
+
true,
|
|
43
|
+
null,
|
|
44
|
+
"",
|
|
45
|
+
console.error,
|
|
46
|
+
null
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
render(element: ReactNode) {
|
|
51
|
+
skiaReconciler.updateContainer(element, this.root, null, () => {
|
|
52
|
+
hostDebug("updateContainer");
|
|
53
|
+
this.container.depMgr.update();
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
unmount() {
|
|
58
|
+
skiaReconciler.updateContainer(null, this.root, null, () => {
|
|
59
|
+
this.container.depMgr.remove();
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
get dom() {
|
|
64
|
+
return this.container.root;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
@@ -441,6 +441,20 @@ export interface SkPath extends SkJSIInstance<"Path"> {
|
|
|
441
441
|
*/
|
|
442
442
|
addRRect(rrect: SkRRect, isCCW?: boolean): SkPath;
|
|
443
443
|
|
|
444
|
+
/** Appends src to SkPath, transformed by matrix. Transformed curves may have
|
|
445
|
+
different verbs, SkPoint, and conic weights.
|
|
446
|
+
|
|
447
|
+
If mode is kAppend_AddPathMode, src verb array, SkPoint array, and conic
|
|
448
|
+
weights are added unaltered. If mode is kExtend_AddPathMode, add line
|
|
449
|
+
before appending verbs, SkPoint, and conic weights.
|
|
450
|
+
|
|
451
|
+
@param src SkPath verbs, SkPoint, and conic weights to add
|
|
452
|
+
@param matrix transform applied to src
|
|
453
|
+
@param extend extends path with line if true
|
|
454
|
+
@return reference to SkPath
|
|
455
|
+
*/
|
|
456
|
+
addPath(src: SkPath, matrix?: SkMatrix, extend?: boolean): SkPath;
|
|
457
|
+
|
|
444
458
|
/**
|
|
445
459
|
* Returns the Point at index in Point array. Valid range for index is
|
|
446
460
|
* 0 to countPoints() - 1.
|
|
@@ -7,9 +7,7 @@ export const isShader = (obj: SkJSIInstance<string> | null): obj is SkShader =>
|
|
|
7
7
|
|
|
8
8
|
export type SkShader = SkJSIInstance<"Shader">;
|
|
9
9
|
|
|
10
|
-
export type
|
|
11
|
-
|
|
12
|
-
export type Uniform = UniformValue | readonly UniformValue[] | Float32Array;
|
|
10
|
+
export type Uniform = number | Vector | Float32Array | Uniform[];
|
|
13
11
|
|
|
14
12
|
export interface Uniforms {
|
|
15
13
|
[name: string]: Uniform;
|
|
@@ -20,11 +18,16 @@ const isVector = (obj: unknown): obj is Vector =>
|
|
|
20
18
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
21
19
|
(obj as any).x !== undefined && (obj as any).y !== undefined;
|
|
22
20
|
|
|
23
|
-
const processValue = (
|
|
24
|
-
if (
|
|
25
|
-
|
|
21
|
+
const processValue = (values: number[], value: Uniform) => {
|
|
22
|
+
if (typeof value === "number") {
|
|
23
|
+
values.push(value);
|
|
24
|
+
} else if (Array.isArray(value)) {
|
|
25
|
+
value.forEach((v) => processValue(values, v));
|
|
26
|
+
} else if (isVector(value)) {
|
|
27
|
+
values.push(value.x, value.y);
|
|
28
|
+
} else if (value instanceof Float32Array) {
|
|
29
|
+
values.push(...value);
|
|
26
30
|
}
|
|
27
|
-
return value;
|
|
28
31
|
};
|
|
29
32
|
|
|
30
33
|
export const processUniforms = (
|
|
@@ -32,36 +35,25 @@ export const processUniforms = (
|
|
|
32
35
|
uniforms: Uniforms,
|
|
33
36
|
builder?: SkRuntimeShaderBuilder
|
|
34
37
|
) => {
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
.fill(0)
|
|
55
|
-
.map((_, i) => source.getUniformName(i));
|
|
56
|
-
const unusedUniform = names
|
|
57
|
-
.map((name) => {
|
|
58
|
-
if (usedUniforms.indexOf(name) === -1) {
|
|
59
|
-
return name;
|
|
60
|
-
}
|
|
61
|
-
return null;
|
|
62
|
-
})
|
|
63
|
-
.filter((n) => n !== null);
|
|
64
|
-
console.warn("Unused uniforms were provided: " + unusedUniform.join(", "));
|
|
38
|
+
const result: number[] = [];
|
|
39
|
+
const uniformsCount = source.getUniformCount();
|
|
40
|
+
for (let i = 0; i < uniformsCount; i++) {
|
|
41
|
+
const name = source.getUniformName(i);
|
|
42
|
+
const value = uniforms[name];
|
|
43
|
+
if (!value === undefined) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
// eslint-disable-next-line max-len
|
|
46
|
+
`The runtime effect has the uniform value "${name}" declared, but it is missing from the uniforms property of the Runtime effect.`
|
|
47
|
+
);
|
|
48
|
+
}
|
|
49
|
+
if (builder === undefined) {
|
|
50
|
+
processValue(result, value);
|
|
51
|
+
} else {
|
|
52
|
+
const uniformValue: number[] = [];
|
|
53
|
+
processValue(uniformValue, value);
|
|
54
|
+
builder.setUniform(name, uniformValue);
|
|
55
|
+
result.push(...uniformValue);
|
|
56
|
+
}
|
|
65
57
|
}
|
|
66
|
-
return
|
|
58
|
+
return result;
|
|
67
59
|
};
|
|
@@ -33,6 +33,16 @@ export class JsiSkPath extends HostObject<Path, "Path"> implements SkPath {
|
|
|
33
33
|
super(CanvasKit, ref, "Path");
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
+
addPath(src: SkPath, matrix?: SkMatrix, extend = false) {
|
|
37
|
+
const args = [
|
|
38
|
+
JsiSkPath.fromValue(src),
|
|
39
|
+
...(matrix ? JsiSkMatrix.fromValue<Float32Array>(matrix) : []),
|
|
40
|
+
extend,
|
|
41
|
+
];
|
|
42
|
+
this.ref.addPath(...args);
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
|
|
36
46
|
addArc(
|
|
37
47
|
oval: SkRect,
|
|
38
48
|
startAngleInDegrees: number,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { CanvasKit, RRect } from "canvaskit-wasm";
|
|
2
2
|
|
|
3
|
-
import type { SkRRect } from "../types";
|
|
3
|
+
import type { SkRect, SkRRect } from "../types";
|
|
4
4
|
|
|
5
5
|
import { BaseHostObject } from "./Host";
|
|
6
6
|
import { JsiSkRect } from "./JsiSkRect";
|
|
@@ -20,7 +20,18 @@ export class JsiSkRRect
|
|
|
20
20
|
);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
constructor(CanvasKit: CanvasKit,
|
|
23
|
+
constructor(CanvasKit: CanvasKit, rect: SkRect, rx: number, ry: number) {
|
|
24
|
+
// based on https://github.com/google/skia/blob/main/src/core/SkRRect.cpp#L51
|
|
25
|
+
if (rx === Infinity || ry === Infinity) {
|
|
26
|
+
rx = ry = 0;
|
|
27
|
+
}
|
|
28
|
+
if (rect.width < rx + rx || rect.height < ry + ry) {
|
|
29
|
+
// At most one of these two divides will be by zero, and neither numerator is zero.
|
|
30
|
+
const scale = Math.min(rect.width / (rx + rx), rect.height / (ry + ry));
|
|
31
|
+
rx *= scale;
|
|
32
|
+
ry *= scale;
|
|
33
|
+
}
|
|
34
|
+
const ref = CanvasKit.RRectXY(JsiSkRect.fromValue(CanvasKit, rect), rx, ry);
|
|
24
35
|
super(CanvasKit, ref, "RRect");
|
|
25
36
|
}
|
|
26
37
|
|
package/src/skia/web/JsiSkia.ts
CHANGED
|
@@ -45,10 +45,7 @@ export const JsiSkApi = (CanvasKit: CanvasKit): Skia => ({
|
|
|
45
45
|
throw new Error("Not implemented on React Native Web");
|
|
46
46
|
},
|
|
47
47
|
RRectXY: (rect: SkRect, rx: number, ry: number) =>
|
|
48
|
-
new JsiSkRRect(
|
|
49
|
-
CanvasKit,
|
|
50
|
-
CanvasKit.RRectXY(JsiSkRect.fromValue(CanvasKit, rect), rx, ry)
|
|
51
|
-
),
|
|
48
|
+
new JsiSkRRect(CanvasKit, rect, rx, ry),
|
|
52
49
|
RSXform: (scos: number, ssin: number, tx: number, ty: number) =>
|
|
53
50
|
new JsiSkRSXform(CanvasKit, Float32Array.of(scos, ssin, tx, ty)),
|
|
54
51
|
Color,
|