@shopify/react-native-skia 0.1.120 → 0.1.123
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/android/CMakeLists.txt +33 -17
- package/android/build.gradle +81 -34
- package/android/cpp/jni/JniSkiaDrawView.cpp +14 -71
- package/android/cpp/jni/JniSkiaManager.cpp +1 -1
- package/android/cpp/jni/include/JniSkiaDrawView.h +18 -22
- package/android/cpp/jni/include/JniSkiaManager.h +4 -4
- package/android/cpp/rnskia-android/RNSkDrawViewImpl.cpp +68 -0
- package/android/cpp/rnskia-android/RNSkDrawViewImpl.h +48 -0
- package/android/cpp/{jni/include/JniPlatformContextWrapper.h → rnskia-android/RNSkPlatformContextImpl.h} +4 -4
- package/android/cpp/{jni → rnskia-android}/SkiaOpenGLRenderer.cpp +39 -54
- package/android/cpp/{jni/include → rnskia-android}/SkiaOpenGLRenderer.h +2 -31
- package/android/src/main/java/com/shopify/reactnative/skia/PlatformContext.java +1 -1
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaViewManager.java +1 -1
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java +21 -28
- package/cpp/api/JsiSkApi.h +2 -0
- package/cpp/api/JsiSkColor.h +49 -0
- package/cpp/api/JsiSkPath.h +31 -2
- package/cpp/api/JsiSkPathFactory.h +96 -1
- package/cpp/api/third_party/CSSColorParser.h +324 -0
- package/cpp/rnskia/RNSkAnimation.h +4 -7
- package/cpp/rnskia/RNSkDrawView.cpp +77 -116
- package/cpp/rnskia/RNSkDrawView.h +5 -35
- package/cpp/rnskia/RNSkJsiViewApi.h +8 -5
- package/cpp/rnskia/RNSkManager.cpp +2 -2
- package/cpp/rnskia/RNSkManager.h +2 -2
- package/cpp/rnskia/RNSkPlatformContext.h +1 -1
- package/cpp/rnskia/values/RNSkClockValue.h +19 -11
- package/cpp/rnskia/values/RNSkDerivedValue.h +1 -1
- package/cpp/rnskia/values/RNSkReadonlyValue.h +15 -15
- package/cpp/utils/RNSkTimingInfo.h +13 -1
- package/ios/RNSkia-iOS/RNSkDrawViewImpl.h +5 -7
- package/ios/RNSkia-iOS/RNSkDrawViewImpl.mm +25 -10
- package/ios/RNSkia-iOS/SkiaDrawView.mm +21 -15
- package/lib/commonjs/renderer/Canvas.js +3 -3
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/renderer/components/Paint.js +1 -1
- package/lib/commonjs/renderer/components/Paint.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/Path.js +10 -2
- package/lib/commonjs/renderer/components/shapes/Path.js.map +1 -1
- package/lib/commonjs/renderer/nodes/Node.js +3 -3
- package/lib/commonjs/renderer/nodes/Node.js.map +1 -1
- package/lib/commonjs/renderer/processors/Paint.js +6 -1
- package/lib/commonjs/renderer/processors/Paint.js.map +1 -1
- package/lib/commonjs/skia/Color.js +3 -25
- package/lib/commonjs/skia/Color.js.map +1 -1
- package/lib/commonjs/skia/Image/Image.js.map +1 -1
- package/lib/commonjs/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
- package/lib/commonjs/skia/Paint/Paint.js +13 -1
- package/lib/commonjs/skia/Paint/Paint.js.map +1 -1
- package/lib/commonjs/skia/Paint/usePaint.js +2 -4
- package/lib/commonjs/skia/Paint/usePaint.js.map +1 -1
- package/lib/commonjs/skia/Path/Path.js +13 -1
- package/lib/commonjs/skia/Path/Path.js.map +1 -1
- package/lib/commonjs/skia/Shader/Shader.js.map +1 -1
- package/lib/commonjs/skia/Skia.js +43 -3
- package/lib/commonjs/skia/Skia.js.map +1 -1
- package/lib/module/renderer/Canvas.js +2 -2
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/renderer/components/Paint.js +2 -2
- package/lib/module/renderer/components/Paint.js.map +1 -1
- package/lib/module/renderer/components/shapes/Path.js +10 -3
- package/lib/module/renderer/components/shapes/Path.js.map +1 -1
- package/lib/module/renderer/nodes/Node.js +3 -3
- package/lib/module/renderer/nodes/Node.js.map +1 -1
- package/lib/module/renderer/processors/Paint.js +6 -1
- package/lib/module/renderer/processors/Paint.js.map +1 -1
- package/lib/module/skia/Color.js +2 -21
- package/lib/module/skia/Color.js.map +1 -1
- package/lib/module/skia/Image/Image.js.map +1 -1
- package/lib/module/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
- package/lib/module/skia/Paint/Paint.js +6 -0
- package/lib/module/skia/Paint/Paint.js.map +1 -1
- package/lib/module/skia/Paint/usePaint.js +2 -3
- package/lib/module/skia/Paint/usePaint.js.map +1 -1
- package/lib/module/skia/Path/Path.js +11 -0
- package/lib/module/skia/Path/Path.js.map +1 -1
- package/lib/module/skia/Shader/Shader.js.map +1 -1
- package/lib/module/skia/Skia.js +45 -2
- package/lib/module/skia/Skia.js.map +1 -1
- package/lib/typescript/src/renderer/components/shapes/Path.d.ts +3 -1
- package/lib/typescript/src/renderer/processors/Paint.d.ts +2 -1
- package/lib/typescript/src/skia/Color.d.ts +0 -1
- package/lib/typescript/src/skia/Image/Image.d.ts +3 -3
- package/lib/typescript/src/skia/ImageFilter/ImageFilterFactory.d.ts +2 -2
- package/lib/typescript/src/skia/Paint/Paint.d.ts +3 -2
- package/lib/typescript/src/skia/Path/Path.d.ts +13 -0
- package/lib/typescript/src/skia/Path/PathFactory.d.ts +7 -1
- package/lib/typescript/src/skia/Picture/Picture.d.ts +2 -2
- package/lib/typescript/src/skia/RuntimeEffect/RuntimeEffect.d.ts +3 -3
- package/lib/typescript/src/skia/Shader/Shader.d.ts +2 -2
- package/lib/typescript/src/skia/Shader/ShaderFactory.d.ts +9 -9
- package/lib/typescript/src/skia/Skia.d.ts +5 -3
- package/package.json +1 -1
- package/scripts/install-npm.js +1 -1
- package/src/renderer/Canvas.tsx +2 -2
- package/src/renderer/components/Paint.tsx +2 -2
- package/src/renderer/components/shapes/Path.tsx +12 -4
- package/src/renderer/nodes/Node.ts +3 -3
- package/src/renderer/processors/Paint.ts +5 -0
- package/src/skia/Color.ts +3 -20
- package/src/skia/Image/Image.ts +3 -3
- package/src/skia/ImageFilter/ImageFilterFactory.ts +2 -2
- package/src/skia/Paint/Paint.ts +9 -2
- package/src/skia/Paint/usePaint.ts +2 -4
- package/src/skia/Path/Path.ts +16 -0
- package/src/skia/Path/PathFactory.ts +8 -1
- package/src/skia/Picture/Picture.ts +2 -2
- package/src/skia/RuntimeEffect/RuntimeEffect.ts +4 -4
- package/src/skia/Shader/Shader.ts +2 -2
- package/src/skia/Shader/ShaderFactory.ts +9 -9
- package/src/skia/Skia.ts +47 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Skia.ts"],"names":["processColor","Skia","Typeface","SkiaApi","MaskFilter","RuntimeEffect","Shader","ImageFilter","PathEffect","Data","SVG","FontMgr","TextBlob","Matrix","Font","Point","XYWHRect","RRectXY","Paint","PictureRecorder","Picture","Path","ColorFilter","ContourMeasureIter","Color","
|
|
1
|
+
{"version":3,"sources":["Skia.ts"],"names":["Platform","processColor","SkiaColor","cl","color","Skia","parseColorString","undefined","rnColor","console","warn","BLACK","OS","a","r","g","b","Typeface","SkiaApi","MaskFilter","RuntimeEffect","Shader","ImageFilter","PathEffect","Data","SVG","FontMgr","TextBlob","Matrix","Font","Point","XYWHRect","RRectXY","Paint","PictureRecorder","Picture","Path","ColorFilter","ContourMeasureIter","Color","RSXform","MakeSurface","Surface","Make","MakeImageFromEncoded","Image","MakeImage","MakeVertices"],"mappings":"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","sourcesContent":["import { Platform, processColor } from \"react-native\";\n\n/*global SkiaApi*/\nimport type { ImageFilterFactory } from \"./ImageFilter\";\nimport type { PathFactory } from \"./Path\";\nimport type { ColorFilterFactory } from \"./ColorFilter\";\nimport type { SkFont } from \"./Font\";\nimport type { SkTypeface, TypefaceFactory } from \"./Typeface\";\nimport type { ImageFactory } from \"./Image\";\nimport type { MaskFilterFactory } from \"./MaskFilter\";\nimport type { SkPaint } from \"./Paint\";\nimport type { SkRect } from \"./Rect\";\nimport type { SkRRect } from \"./RRect\";\nimport type { RuntimeEffectFactory } from \"./RuntimeEffect\";\nimport type { ShaderFactory } from \"./Shader\";\nimport type { SkMatrix } from \"./Matrix\";\nimport type { PathEffectFactory } from \"./PathEffect\";\nimport type { SkPoint } from \"./Point\";\nimport type { SkVertices, VertexMode } from \"./Vertices/Vertices\";\nimport type { DataFactory } from \"./Data\";\nimport type { SVGFactory } from \"./SVG\";\nimport type { TextBlobFactory } from \"./TextBlob\";\nimport type { FontMgrFactory } from \"./FontMgr/FontMgrFactory\";\nimport type { SurfaceFactory } from \"./Surface\";\nimport \"./NativeSetup\";\nimport type { SkRSXform } from \"./RSXform\";\nimport type { SkPath } from \"./Path/Path\";\nimport type { SkContourMeasureIter } from \"./ContourMeasure\";\nimport type { PictureFactory, SkPictureRecorder } from \"./Picture\";\nimport type { Color, SkColor } from \"./Color\";\n\n/*\n * Parse CSS colors\n */\nconst SkiaColor = (cl: Color) => {\n if (typeof cl === \"number\") {\n return cl;\n }\n const color = Skia.parseColorString(cl);\n if (color !== undefined) {\n return color;\n } else {\n // If the color is not recognized, we fallback to React Native\n let rnColor = processColor(cl);\n // 1. Neither Skia or RN could parse the color\n if (typeof rnColor !== \"number\") {\n console.warn(\"Skia couldn't parse the following color \" + cl);\n return BLACK;\n // 2. The color is recognized by RN but not by Skia\n } else {\n console.warn(\n \"Skia couldn't parse the following color \" +\n cl +\n \". The color parsing was delegated to React Native. Please file on issue with that color.\"\n );\n // On android we need to move the alpha byte to the start of the structure\n if (Platform.OS === \"android\") {\n rnColor = rnColor >>> 0;\n const a = (rnColor >> 24) & 0xff;\n const r = (rnColor >> 16) & 0xff;\n const g = (rnColor >> 8) & 0xff;\n const b = rnColor & 0xff;\n rnColor = ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;\n }\n return rnColor;\n }\n }\n};\n\n/**\n * Declares the interface for the native Skia API\n */\nexport interface Skia {\n Point: (x: number, y: number) => SkPoint;\n XYWHRect: (x: number, y: number, width: number, height: number) => SkRect;\n RRectXY: (rect: SkRect, rx: number, ry: number) => SkRRect;\n RSXform: (scos: number, ssin: number, tx: number, ty: number) => SkRSXform;\n Color: (color: Color) => SkColor;\n parseColorString: (color: string) => SkColor | undefined;\n ContourMeasureIter: (\n path: SkPath,\n forceClosed: boolean,\n resScale: number\n ) => SkContourMeasureIter;\n Paint: () => SkPaint;\n PictureRecorder: () => SkPictureRecorder;\n Picture: PictureFactory;\n Path: PathFactory;\n Matrix: () => SkMatrix;\n ColorFilter: ColorFilterFactory;\n Font: (typeface?: SkTypeface, size?: number) => SkFont;\n Typeface: TypefaceFactory;\n MaskFilter: MaskFilterFactory;\n RuntimeEffect: RuntimeEffectFactory;\n ImageFilter: ImageFilterFactory;\n Shader: ShaderFactory;\n PathEffect: PathEffectFactory;\n /**\n * Returns an Vertices based on the given positions and optional parameters.\n * See SkVertices.h (especially the Builder) for more details.\n * @param mode\n * @param positions\n * @param textureCoordinates\n * @param colors - either a list of int colors or a flattened color array.\n * @param indices\n * @param isVolatile\n */\n MakeVertices(\n mode: VertexMode,\n positions: SkPoint[],\n textureCoordinates?: SkPoint[] | null,\n colors?: SkColor[],\n indices?: number[] | null,\n isVolatile?: boolean\n ): SkVertices;\n Data: DataFactory;\n Image: ImageFactory;\n SVG: SVGFactory;\n FontMgr: FontMgrFactory;\n TextBlob: TextBlobFactory;\n Surface: SurfaceFactory;\n}\n\n/**\n * Declares the SkiaApi as an available object in the global scope\n */\ndeclare global {\n var SkiaApi: Skia;\n}\n\n/**\n * Declares the implemented API with overrides.\n */\nexport const Skia = {\n // Factories\n Typeface: SkiaApi.Typeface,\n MaskFilter: SkiaApi.MaskFilter,\n RuntimeEffect: SkiaApi.RuntimeEffect,\n Shader: SkiaApi.Shader,\n ImageFilter: SkiaApi.ImageFilter,\n PathEffect: SkiaApi.PathEffect,\n Data: SkiaApi.Data,\n SVG: SkiaApi.SVG,\n FontMgr: SkiaApi.FontMgr,\n TextBlob: SkiaApi.TextBlob,\n // Constructors\n Matrix: SkiaApi.Matrix,\n Font: SkiaApi.Font,\n Point: SkiaApi.Point,\n XYWHRect: SkiaApi.XYWHRect,\n RRectXY: SkiaApi.RRectXY,\n Paint: SkiaApi.Paint,\n PictureRecorder: SkiaApi.PictureRecorder,\n Picture: SkiaApi.Picture,\n Path: SkiaApi.Path,\n ColorFilter: SkiaApi.ColorFilter,\n ContourMeasureIter: SkiaApi.ContourMeasureIter,\n // Here are constructors for data types which are represented as typed arrays in CanvasKit\n Color: SkiaColor,\n parseColorString: SkiaApi.parseColorString,\n RSXform: SkiaApi.RSXform,\n // For the following methods the factory symmetry is broken to be comptatible with CanvasKit\n MakeSurface: SkiaApi.Surface.Make,\n MakeImageFromEncoded: SkiaApi.Image.MakeImageFromEncoded,\n MakeImage: SkiaApi.Image.MakeImage,\n MakeVertices: SkiaApi.MakeVertices,\n};\n\nconst BLACK = Skia.parseColorString(\"black\")!;\n"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type { CustomPaintProps, AnimatedProps, PathDef } from "../../processors";
|
|
2
|
+
import type { CustomPaintProps, AnimatedProps, PathDef, SkEnum } from "../../processors";
|
|
3
|
+
import { FillType } from "../../../skia";
|
|
3
4
|
interface StrokeOpts {
|
|
4
5
|
width?: number;
|
|
5
6
|
strokeMiterlimit?: number;
|
|
@@ -10,6 +11,7 @@ export interface PathProps extends CustomPaintProps {
|
|
|
10
11
|
start: number;
|
|
11
12
|
end: number;
|
|
12
13
|
stroke?: StrokeOpts;
|
|
14
|
+
fillType?: SkEnum<typeof FillType>;
|
|
13
15
|
}
|
|
14
16
|
export declare const Path: {
|
|
15
17
|
(props: AnimatedProps<PathProps>): JSX.Element;
|
|
@@ -16,6 +16,7 @@ export interface CustomPaintProps extends ChildrenProps {
|
|
|
16
16
|
strokeCap?: SkEnum<typeof StrokeCap>;
|
|
17
17
|
strokeMiter?: number;
|
|
18
18
|
opacity?: number;
|
|
19
|
+
antiAlias?: boolean;
|
|
19
20
|
}
|
|
20
21
|
export declare const enumKey: <K extends string>(k: K) => Capitalize<K>;
|
|
21
|
-
export declare const processPaint: (paint: SkPaint, currentOpacity: number, { paint: paintRef, color, blendMode, style, strokeWidth, strokeJoin, strokeCap, strokeMiter, opacity, }: CustomPaintProps, children: DeclarationResult[]) => SkPaint;
|
|
22
|
+
export declare const processPaint: (paint: SkPaint, currentOpacity: number, { paint: paintRef, color, blendMode, style, strokeWidth, strokeJoin, strokeCap, strokeMiter, opacity, antiAlias, }: CustomPaintProps, children: DeclarationResult[]) => SkPaint;
|
|
@@ -5,6 +5,5 @@ export declare const red: (c: number) => number;
|
|
|
5
5
|
export declare const green: (c: number) => number;
|
|
6
6
|
export declare const blue: (c: number) => number;
|
|
7
7
|
export declare const rgbaColor: (r: number, g: number, b: number, af: number) => number;
|
|
8
|
-
export declare const processColorAsInt: (color?: string | number | undefined) => SkColor;
|
|
9
8
|
export declare const processColor: (cl: Color, currentOpacity: number) => number;
|
|
10
9
|
export declare const processColorAsUnitArray: (cl: Color, currentOpacity: number) => readonly [number, number, number, number];
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TileMode } from "../ImageFilter";
|
|
2
|
-
import type {
|
|
2
|
+
import type { SkShader } from "../Shader";
|
|
3
3
|
import type { SkMatrix } from "../Matrix";
|
|
4
4
|
import type { SkJSIInstance } from "../JsiInstance";
|
|
5
5
|
export declare enum FilterMode {
|
|
@@ -34,7 +34,7 @@ export interface SkImage extends SkJSIInstance<"Image"> {
|
|
|
34
34
|
* calculated with makeCopyWithDefaultMipmaps;
|
|
35
35
|
* @param localMatrix
|
|
36
36
|
*/
|
|
37
|
-
makeShaderOptions(tx: TileMode, ty: TileMode, fm: FilterMode, mm: MipmapMode, localMatrix?: SkMatrix):
|
|
37
|
+
makeShaderOptions(tx: TileMode, ty: TileMode, fm: FilterMode, mm: MipmapMode, localMatrix?: SkMatrix): SkShader;
|
|
38
38
|
/**
|
|
39
39
|
* Returns this image as a shader with the specified tiling. It will use cubic sampling.
|
|
40
40
|
* @param tx - tile mode in the x direction.
|
|
@@ -43,7 +43,7 @@ export interface SkImage extends SkJSIInstance<"Image"> {
|
|
|
43
43
|
* @param C - See CubicResampler in SkSamplingOptions.h for more information
|
|
44
44
|
* @param localMatrix
|
|
45
45
|
*/
|
|
46
|
-
makeShaderCubic(tx: TileMode, ty: TileMode, B: number, C: number, localMatrix?: SkMatrix):
|
|
46
|
+
makeShaderCubic(tx: TileMode, ty: TileMode, B: number, C: number, localMatrix?: SkMatrix): SkShader;
|
|
47
47
|
/** Encodes Image pixels, returning result as UInt8Array. Returns existing
|
|
48
48
|
encoded data if present; otherwise, SkImage is encoded with
|
|
49
49
|
SkEncodedImageFormat::kPNG. Skia must be built with SK_ENCODE_PNG to encode
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SkColor } from "../Color";
|
|
2
2
|
import type { SkColorFilter } from "../ColorFilter/ColorFilter";
|
|
3
|
-
import type {
|
|
3
|
+
import type { SkShader } from "../Shader/Shader";
|
|
4
4
|
import type { SkRect } from "../Rect";
|
|
5
5
|
import type { BlendMode } from "../Paint/BlendMode";
|
|
6
6
|
import type { SkImageFilter, TileMode } from "./ImageFilter";
|
|
@@ -35,7 +35,7 @@ export interface ImageFilterFactory {
|
|
|
35
35
|
* @param shader - The Shader to be transformed
|
|
36
36
|
* @param input - if null, it will use the dynamic source image
|
|
37
37
|
*/
|
|
38
|
-
MakeShader(shader:
|
|
38
|
+
MakeShader(shader: SkShader, input: SkImageFilter | null): SkImageFilter;
|
|
39
39
|
/**
|
|
40
40
|
* Create a filter that blurs its input by the separate X and Y sigmas. The provided tile mode
|
|
41
41
|
* is used when the blur kernel goes outside the input image.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { SkImageFilter } from "../ImageFilter";
|
|
2
2
|
import type { IMaskFilter } from "../MaskFilter";
|
|
3
3
|
import type { SkColorFilter } from "../ColorFilter";
|
|
4
|
-
import type {
|
|
4
|
+
import type { SkShader } from "../Shader";
|
|
5
5
|
import type { SkColor } from "../Color";
|
|
6
6
|
import type { IPathEffect } from "../PathEffect";
|
|
7
7
|
import type { SkJSIInstance } from "../JsiInstance";
|
|
@@ -20,6 +20,7 @@ export declare enum StrokeJoin {
|
|
|
20
20
|
Miter = 1,
|
|
21
21
|
Round = 2
|
|
22
22
|
}
|
|
23
|
+
export declare const SkiaPaint: () => SkPaint;
|
|
23
24
|
export declare const isPaint: (obj: SkJSIInstance<string> | null) => obj is SkPaint;
|
|
24
25
|
export interface SkPaint extends SkJSIInstance<"Paint"> {
|
|
25
26
|
/**
|
|
@@ -98,7 +99,7 @@ export interface SkPaint extends SkJSIInstance<"Paint"> {
|
|
|
98
99
|
* Sets the current shader, replacing the existing one if there was one.
|
|
99
100
|
* @param shader
|
|
100
101
|
*/
|
|
101
|
-
setShader(shader:
|
|
102
|
+
setShader(shader: SkShader | null): void;
|
|
102
103
|
/**
|
|
103
104
|
* Sets the geometry drawn at the beginning and end of strokes.
|
|
104
105
|
* @param cap
|
|
@@ -33,6 +33,15 @@ export declare enum PathOp {
|
|
|
33
33
|
XOR = 3,
|
|
34
34
|
ReverseDifference = 4
|
|
35
35
|
}
|
|
36
|
+
export declare enum PathVerb {
|
|
37
|
+
Move = 0,
|
|
38
|
+
Line = 1,
|
|
39
|
+
Quad = 2,
|
|
40
|
+
Conic = 3,
|
|
41
|
+
Cubic = 4,
|
|
42
|
+
Close = 5
|
|
43
|
+
}
|
|
44
|
+
export declare type PathCommand = number[];
|
|
36
45
|
export declare const isPath: (obj: SkJSIInstance<string> | null) => obj is SkPath;
|
|
37
46
|
export interface SkPath extends SkJSIInstance<"Path"> {
|
|
38
47
|
/**
|
|
@@ -440,4 +449,8 @@ export interface SkPath extends SkJSIInstance<"Path"> {
|
|
|
440
449
|
*
|
|
441
450
|
* */
|
|
442
451
|
isInterpolatable(compare: SkPath): boolean;
|
|
452
|
+
/**
|
|
453
|
+
* Serializes the contents of this path as a series of commands.
|
|
454
|
+
*/
|
|
455
|
+
toCmds(): PathCommand[];
|
|
443
456
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { SkPath, PathOp } from "./Path";
|
|
1
|
+
import type { SkPath, PathOp, PathCommand } from "./Path";
|
|
2
2
|
export interface PathFactory {
|
|
3
3
|
Make(): SkPath;
|
|
4
4
|
/**
|
|
@@ -15,4 +15,10 @@ export interface PathFactory {
|
|
|
15
15
|
* @param op
|
|
16
16
|
*/
|
|
17
17
|
MakeFromOp(one: SkPath, two: SkPath, op: PathOp): SkPath | null;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new path from the given list of path commands. If this fails, null will be
|
|
20
|
+
* returned instead.
|
|
21
|
+
* @param cmds
|
|
22
|
+
*/
|
|
23
|
+
MakeFromCmds(cmds: PathCommand[]): SkPath | null;
|
|
18
24
|
}
|
|
@@ -2,7 +2,7 @@ import type { InputColorMatrix } from "../ColorFilter";
|
|
|
2
2
|
import type { FilterMode } from "../Image";
|
|
3
3
|
import type { TileMode } from "../ImageFilter";
|
|
4
4
|
import type { SkRect } from "../Rect";
|
|
5
|
-
import type {
|
|
5
|
+
import type { SkShader } from "../Shader";
|
|
6
6
|
export interface SkPicture {
|
|
7
7
|
/**
|
|
8
8
|
* Returns a new shader that will draw with this picture.
|
|
@@ -17,7 +17,7 @@ export interface SkPicture {
|
|
|
17
17
|
* and cropping). If null, the tile rect is considered equal to the picture
|
|
18
18
|
* bounds.
|
|
19
19
|
*/
|
|
20
|
-
makeShader(tmx: TileMode, tmy: TileMode, mode: FilterMode, localMatrix?: InputColorMatrix, tileRect?: SkRect):
|
|
20
|
+
makeShader(tmx: TileMode, tmy: TileMode, mode: FilterMode, localMatrix?: InputColorMatrix, tileRect?: SkRect): SkShader;
|
|
21
21
|
/**
|
|
22
22
|
* Returns the serialized format of this SkPicture. The format may change at anytime and
|
|
23
23
|
* no promises are made for backwards or forward compatibility.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { SkShader } from "../Shader";
|
|
2
2
|
import type { SkJSIInstance } from "../JsiInstance";
|
|
3
3
|
import type { SkMatrix } from "../Matrix";
|
|
4
4
|
export interface SkSLUniform {
|
|
@@ -15,7 +15,7 @@ export interface IRuntimeEffect extends SkJSIInstance<"RuntimeEffect"> {
|
|
|
15
15
|
* @param isOpaque
|
|
16
16
|
* @param localMatrix
|
|
17
17
|
*/
|
|
18
|
-
makeShader(uniforms: number[], isOpaque?: boolean, localMatrix?: SkMatrix):
|
|
18
|
+
makeShader(uniforms: number[], isOpaque?: boolean, localMatrix?: SkMatrix): SkShader;
|
|
19
19
|
/**
|
|
20
20
|
* Returns a shader executed using the given uniform data and the children as inputs.
|
|
21
21
|
* @param uniforms
|
|
@@ -23,7 +23,7 @@ export interface IRuntimeEffect extends SkJSIInstance<"RuntimeEffect"> {
|
|
|
23
23
|
* @param children
|
|
24
24
|
* @param localMatrix
|
|
25
25
|
*/
|
|
26
|
-
makeShaderWithChildren(uniforms: number[], isOpaque?: boolean, children?:
|
|
26
|
+
makeShaderWithChildren(uniforms: number[], isOpaque?: boolean, children?: SkShader[], localMatrix?: SkMatrix): SkShader;
|
|
27
27
|
/**
|
|
28
28
|
* Returns the nth uniform from the effect.
|
|
29
29
|
* @param index
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import type { SkJSIInstance } from "../JsiInstance";
|
|
2
|
-
export declare const isShader: (obj: SkJSIInstance<string> | null) => obj is
|
|
3
|
-
export declare type
|
|
2
|
+
export declare const isShader: (obj: SkJSIInstance<string> | null) => obj is SkShader;
|
|
3
|
+
export declare type SkShader = SkJSIInstance<"Shader">;
|
|
@@ -3,7 +3,7 @@ import type { SkPoint } from "../Point";
|
|
|
3
3
|
import type { SkMatrix } from "../Matrix";
|
|
4
4
|
import type { SkColor } from "../Color";
|
|
5
5
|
import type { BlendMode } from "../Paint/BlendMode";
|
|
6
|
-
import type {
|
|
6
|
+
import type { SkShader } from "./Shader";
|
|
7
7
|
export interface ShaderFactory {
|
|
8
8
|
/**
|
|
9
9
|
* Returns a shader that generates a linear gradient between the two specified points.
|
|
@@ -20,7 +20,7 @@ export interface ShaderFactory {
|
|
|
20
20
|
* gradients will premultiply their colors first, and then interpolate
|
|
21
21
|
* between them.
|
|
22
22
|
*/
|
|
23
|
-
MakeLinearGradient(start: SkPoint, end: SkPoint, colors: SkColor[], pos: number[] | null, mode: TileMode, localMatrix?: SkMatrix, flags?: number):
|
|
23
|
+
MakeLinearGradient(start: SkPoint, end: SkPoint, colors: SkColor[], pos: number[] | null, mode: TileMode, localMatrix?: SkMatrix, flags?: number): SkShader;
|
|
24
24
|
/**
|
|
25
25
|
* Returns a shader that generates a radial gradient given the center and radius.
|
|
26
26
|
* See SkGradientShader.h for more.
|
|
@@ -33,7 +33,7 @@ export interface ShaderFactory {
|
|
|
33
33
|
* @param localMatrix
|
|
34
34
|
* @param flags - 0 to interpolate colors in unpremul, 1 to interpolate colors in premul.
|
|
35
35
|
*/
|
|
36
|
-
MakeRadialGradient(center: SkPoint, radius: number, colors: SkColor[], pos: number[] | null, mode: TileMode, localMatrix?: SkMatrix, flags?: number):
|
|
36
|
+
MakeRadialGradient(center: SkPoint, radius: number, colors: SkColor[], pos: number[] | null, mode: TileMode, localMatrix?: SkMatrix, flags?: number): SkShader;
|
|
37
37
|
/**
|
|
38
38
|
* Returns a shader that generates a conical gradient given two circles.
|
|
39
39
|
* See SkGradientShader.h for more.
|
|
@@ -47,7 +47,7 @@ export interface ShaderFactory {
|
|
|
47
47
|
* @param localMatrix
|
|
48
48
|
* @param flags
|
|
49
49
|
*/
|
|
50
|
-
MakeTwoPointConicalGradient(start: SkPoint, startRadius: number, end: SkPoint, endRadius: number, colors: SkColor[], pos: number[] | null, mode: TileMode, localMatrix?: SkMatrix, flags?: number):
|
|
50
|
+
MakeTwoPointConicalGradient(start: SkPoint, startRadius: number, end: SkPoint, endRadius: number, colors: SkColor[], pos: number[] | null, mode: TileMode, localMatrix?: SkMatrix, flags?: number): SkShader;
|
|
51
51
|
/**
|
|
52
52
|
* Returns a shader that generates a sweep gradient given a center.
|
|
53
53
|
* See SkGradientShader.h for more.
|
|
@@ -62,7 +62,7 @@ export interface ShaderFactory {
|
|
|
62
62
|
* @param startAngle - angle corresponding to 0.0. Defaults to 0 degrees.
|
|
63
63
|
* @param endAngle - angle corresponding to 1.0. Defaults to 360 degrees.
|
|
64
64
|
*/
|
|
65
|
-
MakeSweepGradient(cx: number, cy: number, colors: SkColor[], pos: number[] | null, mode: TileMode, localMatrix?: SkMatrix | null, flags?: number, startAngleInDegrees?: number, endAngleInDegrees?: number):
|
|
65
|
+
MakeSweepGradient(cx: number, cy: number, colors: SkColor[], pos: number[] | null, mode: TileMode, localMatrix?: SkMatrix | null, flags?: number, startAngleInDegrees?: number, endAngleInDegrees?: number): SkShader;
|
|
66
66
|
/**
|
|
67
67
|
* Returns a shader with Perlin Turbulence.
|
|
68
68
|
* See SkPerlinNoiseShader.h for more details
|
|
@@ -75,7 +75,7 @@ export interface ShaderFactory {
|
|
|
75
75
|
* @param tileH - if this and tileW are non-zero, the frequencies will be modified so that the
|
|
76
76
|
* noise will be tileable for the given size.
|
|
77
77
|
*/
|
|
78
|
-
MakeTurbulence(baseFreqX: number, baseFreqY: number, octaves: number, seed: number, tileW: number, tileH: number):
|
|
78
|
+
MakeTurbulence(baseFreqX: number, baseFreqY: number, octaves: number, seed: number, tileW: number, tileH: number): SkShader;
|
|
79
79
|
/**
|
|
80
80
|
* Returns a shader with Perlin Fractal Noise.
|
|
81
81
|
* See SkPerlinNoiseShader.h for more details
|
|
@@ -88,17 +88,17 @@ export interface ShaderFactory {
|
|
|
88
88
|
* @param tileH - if this and tileW are non-zero, the frequencies will be modified so that the
|
|
89
89
|
* noise will be tileable for the given size.
|
|
90
90
|
*/
|
|
91
|
-
MakeFractalNoise(baseFreqX: number, baseFreqY: number, octaves: number, seed: number, tileW: number, tileH: number):
|
|
91
|
+
MakeFractalNoise(baseFreqX: number, baseFreqY: number, octaves: number, seed: number, tileW: number, tileH: number): SkShader;
|
|
92
92
|
/**
|
|
93
93
|
* Returns a shader that combines the given shaders with a BlendMode.
|
|
94
94
|
* @param mode
|
|
95
95
|
* @param one
|
|
96
96
|
* @param two
|
|
97
97
|
*/
|
|
98
|
-
MakeBlend(mode: BlendMode, one:
|
|
98
|
+
MakeBlend(mode: BlendMode, one: SkShader, two: SkShader): SkShader;
|
|
99
99
|
/**
|
|
100
100
|
* Returns a shader with a given color and colorspace.
|
|
101
101
|
* @param color
|
|
102
102
|
*/
|
|
103
|
-
MakeColor(color: SkColor):
|
|
103
|
+
MakeColor(color: SkColor): SkShader;
|
|
104
104
|
}
|
|
@@ -10,8 +10,6 @@ import type { SkRect } from "./Rect";
|
|
|
10
10
|
import type { SkRRect } from "./RRect";
|
|
11
11
|
import type { RuntimeEffectFactory } from "./RuntimeEffect";
|
|
12
12
|
import type { ShaderFactory } from "./Shader";
|
|
13
|
-
import type { SkColor } from "./Color";
|
|
14
|
-
import { processColor } from "./Color";
|
|
15
13
|
import type { SkMatrix } from "./Matrix";
|
|
16
14
|
import type { PathEffectFactory } from "./PathEffect";
|
|
17
15
|
import type { SkPoint } from "./Point";
|
|
@@ -26,6 +24,7 @@ import type { SkRSXform } from "./RSXform";
|
|
|
26
24
|
import type { SkPath } from "./Path/Path";
|
|
27
25
|
import type { SkContourMeasureIter } from "./ContourMeasure";
|
|
28
26
|
import type { PictureFactory, SkPictureRecorder } from "./Picture";
|
|
27
|
+
import type { Color, SkColor } from "./Color";
|
|
29
28
|
/**
|
|
30
29
|
* Declares the interface for the native Skia API
|
|
31
30
|
*/
|
|
@@ -34,6 +33,8 @@ export interface Skia {
|
|
|
34
33
|
XYWHRect: (x: number, y: number, width: number, height: number) => SkRect;
|
|
35
34
|
RRectXY: (rect: SkRect, rx: number, ry: number) => SkRRect;
|
|
36
35
|
RSXform: (scos: number, ssin: number, tx: number, ty: number) => SkRSXform;
|
|
36
|
+
Color: (color: Color) => SkColor;
|
|
37
|
+
parseColorString: (color: string) => SkColor | undefined;
|
|
37
38
|
ContourMeasureIter: (path: SkPath, forceClosed: boolean, resScale: number) => SkContourMeasureIter;
|
|
38
39
|
Paint: () => SkPaint;
|
|
39
40
|
PictureRecorder: () => SkPictureRecorder;
|
|
@@ -97,7 +98,8 @@ export declare const Skia: {
|
|
|
97
98
|
Path: PathFactory;
|
|
98
99
|
ColorFilter: ColorFilterFactory;
|
|
99
100
|
ContourMeasureIter: (path: SkPath, forceClosed: boolean, resScale: number) => SkContourMeasureIter;
|
|
100
|
-
Color: (
|
|
101
|
+
Color: (cl: Color) => number;
|
|
102
|
+
parseColorString: (color: string) => SkColor | undefined;
|
|
101
103
|
RSXform: (scos: number, ssin: number, tx: number, ty: number) => SkRSXform;
|
|
102
104
|
MakeSurface: (width: number, height: number) => import("./Surface").ISurface | null;
|
|
103
105
|
MakeImageFromEncoded: (encoded: import("./Data").Data) => import("./Image").SkImage | null;
|
package/package.json
CHANGED
package/scripts/install-npm.js
CHANGED
|
@@ -9,7 +9,7 @@ const createSymlink = (p) => {
|
|
|
9
9
|
const dstDir = path.resolve(`./android/cpp/${p}`);
|
|
10
10
|
|
|
11
11
|
if (!fs.existsSync(dstDir) || !fs.lstatSync(dstDir).isSymbolicLink()) {
|
|
12
|
-
fs.symlinkSync(srcDir, dstDir, "
|
|
12
|
+
fs.symlinkSync(srcDir, dstDir, "junction");
|
|
13
13
|
}
|
|
14
14
|
};
|
|
15
15
|
|
package/src/renderer/Canvas.tsx
CHANGED
|
@@ -23,6 +23,7 @@ import { Skia } from "../skia";
|
|
|
23
23
|
import type { FontMgr } from "../skia/FontMgr/FontMgr";
|
|
24
24
|
import { useValue } from "../values/hooks/useValue";
|
|
25
25
|
import type { SkiaReadonlyValue } from "../values/types";
|
|
26
|
+
import { SkiaPaint } from "../skia/Paint/Paint";
|
|
26
27
|
|
|
27
28
|
import { debug as hostDebug, skHostConfig } from "./HostConfig";
|
|
28
29
|
// import { debugTree } from "./nodes";
|
|
@@ -112,8 +113,7 @@ export const Canvas = forwardRef<SkiaView, CanvasProps>(
|
|
|
112
113
|
) {
|
|
113
114
|
canvasCtx.current = { width, height };
|
|
114
115
|
}
|
|
115
|
-
const paint =
|
|
116
|
-
paint.setAntiAlias(true);
|
|
116
|
+
const paint = SkiaPaint();
|
|
117
117
|
const ctx = {
|
|
118
118
|
width,
|
|
119
119
|
height,
|
|
@@ -2,7 +2,7 @@ import type { ReactNode } from "react";
|
|
|
2
2
|
import React, { useRef, useMemo, forwardRef, useImperativeHandle } from "react";
|
|
3
3
|
|
|
4
4
|
import type { SkPaint } from "../../skia";
|
|
5
|
-
import {
|
|
5
|
+
import { SkiaPaint } from "../../skia";
|
|
6
6
|
import type { CustomPaintProps, AnimatedProps } from "../processors";
|
|
7
7
|
import { processPaint } from "../processors";
|
|
8
8
|
import { createDeclaration } from "../nodes";
|
|
@@ -15,7 +15,7 @@ export interface PaintProps extends Omit<CustomPaintProps, "paint"> {
|
|
|
15
15
|
|
|
16
16
|
export const Paint = forwardRef<SkPaint, AnimatedProps<PaintProps>>(
|
|
17
17
|
(props, ref) => {
|
|
18
|
-
const paint = useMemo(() =>
|
|
18
|
+
const paint = useMemo(() => SkiaPaint(), []);
|
|
19
19
|
useImperativeHandle(ref, () => paint, [paint]);
|
|
20
20
|
const onDeclare = useMemo(
|
|
21
21
|
() =>
|
|
@@ -4,9 +4,11 @@ import type {
|
|
|
4
4
|
CustomPaintProps,
|
|
5
5
|
AnimatedProps,
|
|
6
6
|
PathDef,
|
|
7
|
+
SkEnum,
|
|
7
8
|
} from "../../processors";
|
|
8
9
|
import { createDrawing } from "../../nodes";
|
|
9
|
-
import { processPath } from "../../processors";
|
|
10
|
+
import { processPath, enumKey } from "../../processors";
|
|
11
|
+
import { FillType } from "../../../skia";
|
|
10
12
|
|
|
11
13
|
interface StrokeOpts {
|
|
12
14
|
width?: number;
|
|
@@ -19,16 +21,22 @@ export interface PathProps extends CustomPaintProps {
|
|
|
19
21
|
start: number;
|
|
20
22
|
end: number;
|
|
21
23
|
stroke?: StrokeOpts;
|
|
24
|
+
fillType?: SkEnum<typeof FillType>;
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
const onDraw = createDrawing<PathProps>(
|
|
25
|
-
({ canvas, paint }, { start, end, stroke, ...pathProps }) => {
|
|
28
|
+
({ canvas, paint }, { start, end, stroke, fillType, ...pathProps }) => {
|
|
26
29
|
const hasStartOffset = start !== 0;
|
|
27
|
-
const hasEndOffset =
|
|
30
|
+
const hasEndOffset = end !== 1;
|
|
28
31
|
const hasStrokeOptions = stroke !== undefined;
|
|
29
|
-
const
|
|
32
|
+
const hasFillType = !!fillType;
|
|
33
|
+
const willMutatePath =
|
|
34
|
+
hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;
|
|
30
35
|
const pristinePath = processPath(pathProps.path);
|
|
31
36
|
const path = willMutatePath ? pristinePath.copy() : pristinePath;
|
|
37
|
+
if (hasFillType) {
|
|
38
|
+
path.setFillType(FillType[enumKey(fillType)]);
|
|
39
|
+
}
|
|
32
40
|
if (hasStrokeOptions) {
|
|
33
41
|
path.stroke(stroke);
|
|
34
42
|
}
|
|
@@ -40,7 +40,9 @@ export abstract class Node<P = unknown> {
|
|
|
40
40
|
visit(ctx: DrawingContext, children?: Node[]) {
|
|
41
41
|
const returnedValues: Exclude<DeclarationResult, null>[] = [];
|
|
42
42
|
(children ?? this.children).forEach((child) => {
|
|
43
|
-
if (
|
|
43
|
+
if (child.memoized && child.memoizable) {
|
|
44
|
+
returnedValues.push(child.memoized);
|
|
45
|
+
} else {
|
|
44
46
|
const ret = child.draw(ctx);
|
|
45
47
|
if (ret) {
|
|
46
48
|
returnedValues.push(ret);
|
|
@@ -48,8 +50,6 @@ export abstract class Node<P = unknown> {
|
|
|
48
50
|
child.memoized = ret;
|
|
49
51
|
}
|
|
50
52
|
}
|
|
51
|
-
} else {
|
|
52
|
-
returnedValues.push(child.memoized);
|
|
53
53
|
}
|
|
54
54
|
});
|
|
55
55
|
return returnedValues;
|
|
@@ -32,6 +32,7 @@ export interface CustomPaintProps extends ChildrenProps {
|
|
|
32
32
|
strokeCap?: SkEnum<typeof StrokeCap>;
|
|
33
33
|
strokeMiter?: number;
|
|
34
34
|
opacity?: number;
|
|
35
|
+
antiAlias?: boolean;
|
|
35
36
|
}
|
|
36
37
|
|
|
37
38
|
export const enumKey = <K extends string>(k: K) =>
|
|
@@ -50,6 +51,7 @@ export const processPaint = (
|
|
|
50
51
|
strokeCap,
|
|
51
52
|
strokeMiter,
|
|
52
53
|
opacity,
|
|
54
|
+
antiAlias,
|
|
53
55
|
}: CustomPaintProps,
|
|
54
56
|
children: DeclarationResult[]
|
|
55
57
|
) => {
|
|
@@ -85,6 +87,9 @@ export const processPaint = (
|
|
|
85
87
|
if (opacity !== undefined) {
|
|
86
88
|
paint.setAlphaf(opacity);
|
|
87
89
|
}
|
|
90
|
+
if (antiAlias !== undefined) {
|
|
91
|
+
paint.setAntiAlias(antiAlias);
|
|
92
|
+
}
|
|
88
93
|
children.forEach((child) => {
|
|
89
94
|
if (isShader(child)) {
|
|
90
95
|
paint.setShader(child);
|
package/src/skia/Color.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Skia } from "./Skia";
|
|
2
2
|
|
|
3
3
|
// This is the JSI color. Currently a number. This may change.
|
|
4
4
|
export type SkColor = number;
|
|
5
|
-
|
|
5
|
+
// Input colors can be string or number
|
|
6
6
|
export type Color = string | number;
|
|
7
7
|
|
|
8
8
|
export const alphaf = (c: number) => ((c >> 24) & 255) / 255;
|
|
@@ -14,25 +14,8 @@ export const rgbaColor = (r: number, g: number, b: number, af: number) => {
|
|
|
14
14
|
return ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
export const processColorAsInt = (color?: number | string): SkColor => {
|
|
18
|
-
let processedColor = processColorRN(color);
|
|
19
|
-
if (typeof processedColor !== "number") {
|
|
20
|
-
throw new Error(`Couldn't process color: ${color}`);
|
|
21
|
-
}
|
|
22
|
-
// On android we need to move the alpha byte to the start of the structure
|
|
23
|
-
if (Platform.OS === "android") {
|
|
24
|
-
processedColor = processedColor >>> 0;
|
|
25
|
-
const a = (processedColor >> 24) & 0xff;
|
|
26
|
-
const r = (processedColor >> 16) & 0xff;
|
|
27
|
-
const g = (processedColor >> 8) & 0xff;
|
|
28
|
-
const b = processedColor & 0xff;
|
|
29
|
-
processedColor = ((a << 24) | (r << 16) | (g << 8) | b) >>> 0;
|
|
30
|
-
}
|
|
31
|
-
return processedColor;
|
|
32
|
-
};
|
|
33
|
-
|
|
34
17
|
const processColorAsArray = (cl: Color) => {
|
|
35
|
-
const icl = typeof cl === "string" ?
|
|
18
|
+
const icl = typeof cl === "string" ? Skia.Color(cl) : cl;
|
|
36
19
|
const r = red(icl);
|
|
37
20
|
const g = green(icl);
|
|
38
21
|
const b = blue(icl);
|
package/src/skia/Image/Image.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { TileMode } from "../ImageFilter";
|
|
2
|
-
import type {
|
|
2
|
+
import type { SkShader } from "../Shader";
|
|
3
3
|
import type { SkMatrix } from "../Matrix";
|
|
4
4
|
import type { SkJSIInstance } from "../JsiInstance";
|
|
5
5
|
|
|
@@ -46,7 +46,7 @@ export interface SkImage extends SkJSIInstance<"Image"> {
|
|
|
46
46
|
fm: FilterMode,
|
|
47
47
|
mm: MipmapMode,
|
|
48
48
|
localMatrix?: SkMatrix
|
|
49
|
-
):
|
|
49
|
+
): SkShader;
|
|
50
50
|
|
|
51
51
|
/**
|
|
52
52
|
* Returns this image as a shader with the specified tiling. It will use cubic sampling.
|
|
@@ -62,7 +62,7 @@ export interface SkImage extends SkJSIInstance<"Image"> {
|
|
|
62
62
|
B: number,
|
|
63
63
|
C: number,
|
|
64
64
|
localMatrix?: SkMatrix
|
|
65
|
-
):
|
|
65
|
+
): SkShader;
|
|
66
66
|
|
|
67
67
|
/** Encodes Image pixels, returning result as UInt8Array. Returns existing
|
|
68
68
|
encoded data if present; otherwise, SkImage is encoded with
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { SkColor } from "../Color";
|
|
2
2
|
import type { SkColorFilter } from "../ColorFilter/ColorFilter";
|
|
3
|
-
import type {
|
|
3
|
+
import type { SkShader } from "../Shader/Shader";
|
|
4
4
|
import type { SkRect } from "../Rect";
|
|
5
5
|
import type { BlendMode } from "../Paint/BlendMode";
|
|
6
6
|
|
|
@@ -48,7 +48,7 @@ export interface ImageFilterFactory {
|
|
|
48
48
|
* @param shader - The Shader to be transformed
|
|
49
49
|
* @param input - if null, it will use the dynamic source image
|
|
50
50
|
*/
|
|
51
|
-
MakeShader(shader:
|
|
51
|
+
MakeShader(shader: SkShader, input: SkImageFilter | null): SkImageFilter;
|
|
52
52
|
/**
|
|
53
53
|
* Create a filter that blurs its input by the separate X and Y sigmas. The provided tile mode
|
|
54
54
|
* is used when the blur kernel goes outside the input image.
|
package/src/skia/Paint/Paint.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import type { SkImageFilter } from "../ImageFilter";
|
|
2
2
|
import type { IMaskFilter } from "../MaskFilter";
|
|
3
3
|
import type { SkColorFilter } from "../ColorFilter";
|
|
4
|
-
import type {
|
|
4
|
+
import type { SkShader } from "../Shader";
|
|
5
5
|
import type { SkColor } from "../Color";
|
|
6
6
|
import type { IPathEffect } from "../PathEffect";
|
|
7
7
|
import type { SkJSIInstance } from "../JsiInstance";
|
|
8
|
+
import { Skia } from "../Skia";
|
|
8
9
|
|
|
9
10
|
import type { BlendMode } from "./BlendMode";
|
|
10
11
|
|
|
@@ -25,6 +26,12 @@ export enum StrokeJoin {
|
|
|
25
26
|
Round,
|
|
26
27
|
}
|
|
27
28
|
|
|
29
|
+
export const SkiaPaint = () => {
|
|
30
|
+
const paint = Skia.Paint();
|
|
31
|
+
paint.setAntiAlias(true);
|
|
32
|
+
return paint;
|
|
33
|
+
};
|
|
34
|
+
|
|
28
35
|
export const isPaint = (obj: SkJSIInstance<string> | null): obj is SkPaint =>
|
|
29
36
|
obj !== null && obj.__typename__ === "Paint";
|
|
30
37
|
|
|
@@ -119,7 +126,7 @@ export interface SkPaint extends SkJSIInstance<"Paint"> {
|
|
|
119
126
|
* Sets the current shader, replacing the existing one if there was one.
|
|
120
127
|
* @param shader
|
|
121
128
|
*/
|
|
122
|
-
setShader(shader:
|
|
129
|
+
setShader(shader: SkShader | null): void;
|
|
123
130
|
|
|
124
131
|
/**
|
|
125
132
|
* Sets the geometry drawn at the beginning and end of strokes.
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import type { DependencyList } from "react";
|
|
2
2
|
import { useMemo } from "react";
|
|
3
3
|
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import { SkiaPaint } from "./Paint";
|
|
6
5
|
import type { SkPaint } from "./Paint";
|
|
7
6
|
|
|
8
7
|
/**
|
|
@@ -13,8 +12,7 @@ export const usePaint = (
|
|
|
13
12
|
deps?: DependencyList
|
|
14
13
|
) =>
|
|
15
14
|
useMemo(() => {
|
|
16
|
-
const p =
|
|
17
|
-
p.setAntiAlias(true);
|
|
15
|
+
const p = SkiaPaint();
|
|
18
16
|
if (initializer) {
|
|
19
17
|
initializer(p);
|
|
20
18
|
}
|