@shopify/react-native-skia 1.5.10 → 1.7.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/android/cpp/jni/include/JniSkiaBaseView.h +6 -5
- package/android/cpp/jni/include/JniSkiaDomView.h +6 -4
- package/android/cpp/jni/include/JniSkiaManager.h +2 -2
- package/android/cpp/jni/include/JniSkiaPictureView.h +6 -4
- package/android/cpp/rnskia-android/MainThreadDispatcher.h +3 -0
- package/android/cpp/rnskia-android/OpenGLContext.h +44 -9
- package/android/cpp/rnskia-android/OpenGLWindowContext.cpp +0 -1
- package/android/cpp/rnskia-android/OpenGLWindowContext.h +2 -2
- package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +61 -3
- package/android/cpp/rnskia-android/RNSkAndroidView.h +10 -13
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +42 -36
- package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.h +2 -2
- package/android/cpp/rnskia-android/gl/Display.h +2 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaAHBView.java +113 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +45 -54
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +5 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +2 -2
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +2 -2
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaSurfaceView.java +42 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaTextureView.java +90 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaViewAPI.java +16 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerDelegate.java +3 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerInterface.java +1 -0
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerDelegate.java +3 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerInterface.java +1 -0
- package/cpp/api/JsiSkContourMeasure.h +1 -5
- package/cpp/api/JsiSkImage.h +11 -0
- package/cpp/api/JsiSkImageFactory.h +14 -0
- package/cpp/api/JsiSkPicture.h +2 -0
- package/cpp/api/JsiSkSurface.h +7 -0
- package/cpp/api/JsiTextureInfo.h +53 -0
- package/cpp/jsi/ViewProperty.h +48 -0
- package/cpp/rnskia/RNSkDomView.cpp +0 -20
- package/cpp/rnskia/RNSkDomView.h +4 -9
- package/cpp/rnskia/RNSkJsiViewApi.h +3 -3
- package/cpp/rnskia/RNSkPictureView.h +11 -28
- package/cpp/rnskia/RNSkPlatformContext.h +18 -12
- package/cpp/rnskia/RNSkView.h +5 -29
- package/ios/RNSkia-iOS/MetalContext.h +101 -15
- package/ios/RNSkia-iOS/MetalContext.mm +9 -8
- package/ios/RNSkia-iOS/MetalWindowContext.h +39 -0
- package/ios/RNSkia-iOS/MetalWindowContext.mm +60 -0
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +13 -25
- package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +88 -2
- package/ios/RNSkia-iOS/SkiaCVPixelBufferUtils.mm +9 -2
- package/ios/RNSkia-iOS/SkiaDomViewManager.mm +5 -0
- package/ios/RNSkia-iOS/SkiaManager.mm +1 -2
- package/ios/RNSkia-iOS/SkiaPictureView.mm +1 -0
- package/ios/RNSkia-iOS/SkiaPictureViewManager.mm +5 -0
- package/ios/RNSkia-iOS/SkiaUIView.h +1 -0
- package/ios/RNSkia-iOS/SkiaUIView.mm +21 -14
- package/lib/commonjs/skia/types/Image/ColorType.d.ts +21 -0
- package/lib/commonjs/skia/types/Image/ColorType.js +29 -0
- package/lib/commonjs/skia/types/Image/ColorType.js.map +1 -0
- package/lib/commonjs/skia/types/Image/ColorType.web.d.ts +19 -0
- package/lib/commonjs/skia/types/Image/ColorType.web.js +27 -0
- package/lib/commonjs/skia/types/Image/ColorType.web.js.map +1 -0
- package/lib/commonjs/skia/types/Image/Image.d.ts +10 -0
- package/lib/commonjs/skia/types/Image/Image.js.map +1 -1
- package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +19 -19
- package/lib/commonjs/skia/types/Image/ImageFactory.js +1 -21
- package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/commonjs/skia/types/Image/index.d.ts +1 -0
- package/lib/commonjs/skia/types/Image/index.js +11 -0
- package/lib/commonjs/skia/types/Image/index.js.map +1 -1
- package/lib/commonjs/skia/types/Matrix4.d.ts +6 -0
- package/lib/commonjs/skia/types/Matrix4.js +69 -1
- package/lib/commonjs/skia/types/Matrix4.js.map +1 -1
- package/lib/commonjs/skia/types/Surface/Surface.d.ts +11 -0
- package/lib/commonjs/skia/types/Surface/Surface.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkImage.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkImage.js +4 -0
- package/lib/commonjs/skia/web/JsiSkImage.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkImageFactory.js +3 -0
- package/lib/commonjs/skia/web/JsiSkImageFactory.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkSurface.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkSurface.js +4 -0
- package/lib/commonjs/skia/web/JsiSkSurface.js.map +1 -1
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
- package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
- package/lib/commonjs/views/SkiaDomView.js +3 -1
- package/lib/commonjs/views/SkiaDomView.js.map +1 -1
- package/lib/commonjs/views/SkiaPictureView.js +5 -1
- package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
- package/lib/commonjs/views/types.d.ts +2 -0
- package/lib/commonjs/views/types.js.map +1 -1
- package/lib/module/skia/types/Image/ColorType.d.ts +21 -0
- package/lib/module/skia/types/Image/ColorType.js +23 -0
- package/lib/module/skia/types/Image/ColorType.js.map +1 -0
- package/lib/module/skia/types/Image/ColorType.web.d.ts +19 -0
- package/lib/module/skia/types/Image/ColorType.web.js +21 -0
- package/lib/module/skia/types/Image/ColorType.web.js.map +1 -0
- package/lib/module/skia/types/Image/Image.d.ts +10 -0
- package/lib/module/skia/types/Image/Image.js.map +1 -1
- package/lib/module/skia/types/Image/ImageFactory.d.ts +19 -19
- package/lib/module/skia/types/Image/ImageFactory.js +0 -20
- package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/module/skia/types/Image/index.d.ts +1 -0
- package/lib/module/skia/types/Image/index.js +1 -0
- package/lib/module/skia/types/Image/index.js.map +1 -1
- package/lib/module/skia/types/Matrix4.d.ts +6 -0
- package/lib/module/skia/types/Matrix4.js +67 -0
- package/lib/module/skia/types/Matrix4.js.map +1 -1
- package/lib/module/skia/types/Surface/Surface.d.ts +11 -0
- package/lib/module/skia/types/Surface/Surface.js.map +1 -1
- package/lib/module/skia/web/JsiSkImage.d.ts +1 -0
- package/lib/module/skia/web/JsiSkImage.js +4 -0
- package/lib/module/skia/web/JsiSkImage.js.map +1 -1
- package/lib/module/skia/web/JsiSkImageFactory.d.ts +1 -0
- package/lib/module/skia/web/JsiSkImageFactory.js +3 -0
- package/lib/module/skia/web/JsiSkImageFactory.js.map +1 -1
- package/lib/module/skia/web/JsiSkSurface.d.ts +1 -0
- package/lib/module/skia/web/JsiSkSurface.js +4 -0
- package/lib/module/skia/web/JsiSkSurface.js.map +1 -1
- package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
- package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
- package/lib/module/views/SkiaDomView.js +3 -1
- package/lib/module/views/SkiaDomView.js.map +1 -1
- package/lib/module/views/SkiaPictureView.js +5 -1
- package/lib/module/views/SkiaPictureView.js.map +1 -1
- package/lib/module/views/types.d.ts +2 -0
- package/lib/module/views/types.js.map +1 -1
- package/lib/typescript/lib/commonjs/skia/types/Image/ColorType.d.ts +2 -0
- package/lib/typescript/lib/commonjs/skia/types/Image/ColorType.web.d.ts +2 -0
- package/lib/typescript/lib/commonjs/skia/types/Image/ImageFactory.d.ts +0 -1
- package/lib/typescript/lib/commonjs/skia/types/Matrix4.d.ts +6 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkImage.d.ts +1 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFactory.d.ts +1 -0
- package/lib/typescript/lib/commonjs/skia/web/JsiSkSurface.d.ts +1 -0
- package/lib/typescript/lib/module/mock/index.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/Image/ColorType.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/Image/ColorType.web.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/Image/ImageFactory.d.ts +0 -1
- package/lib/typescript/lib/module/skia/types/Image/index.d.ts +1 -0
- package/lib/typescript/lib/module/skia/types/Matrix4.d.ts +1 -0
- package/lib/typescript/lib/module/skia/web/JsiSkImage.d.ts +1 -0
- package/lib/typescript/lib/module/skia/web/JsiSkImageFactory.d.ts +1 -0
- package/lib/typescript/lib/module/skia/web/JsiSkSurface.d.ts +1 -0
- package/lib/typescript/src/skia/types/Image/ColorType.d.ts +21 -0
- package/lib/typescript/src/skia/types/Image/ColorType.web.d.ts +19 -0
- package/lib/typescript/src/skia/types/Image/Image.d.ts +10 -0
- package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +19 -19
- package/lib/typescript/src/skia/types/Image/index.d.ts +1 -0
- package/lib/typescript/src/skia/types/Matrix4.d.ts +6 -0
- package/lib/typescript/src/skia/types/Surface/Surface.d.ts +11 -0
- package/lib/typescript/src/skia/web/JsiSkImage.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkImageFactory.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkSurface.d.ts +1 -0
- package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +1 -0
- package/lib/typescript/src/views/types.d.ts +2 -0
- package/package.json +1 -1
- package/src/renderer/__tests__/e2e/Matrix4.spec.tsx +93 -0
- package/src/skia/__tests__/Enums.spec.ts +2 -2
- package/src/skia/types/Image/ColorType.ts +21 -0
- package/src/skia/types/Image/ColorType.web.ts +19 -0
- package/src/skia/types/Image/Image.ts +11 -0
- package/src/skia/types/Image/ImageFactory.ts +25 -20
- package/src/skia/types/Image/index.ts +1 -0
- package/src/skia/types/Matrix4.ts +101 -0
- package/src/skia/types/Surface/Surface.ts +12 -0
- package/src/skia/web/JsiSkImage.ts +5 -0
- package/src/skia/web/JsiSkImageFactory.ts +4 -0
- package/src/skia/web/JsiSkSurface.ts +5 -0
- package/src/specs/SkiaPictureViewNativeComponent.ts +1 -0
- package/src/views/SkiaDomView.tsx +2 -1
- package/src/views/SkiaPictureView.tsx +4 -1
- package/src/views/types.ts +3 -0
- package/cpp/jsi/JsiValueWrapper.h +0 -164
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.h +0 -128
- package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +0 -92
|
@@ -12,6 +12,9 @@ import {
|
|
|
12
12
|
toMatrix3,
|
|
13
13
|
Matrix4,
|
|
14
14
|
mapPoint3d,
|
|
15
|
+
invert4,
|
|
16
|
+
scale,
|
|
17
|
+
rotateZ,
|
|
15
18
|
} from "../../../skia/types";
|
|
16
19
|
|
|
17
20
|
const ckPerspective = (d: number) => [
|
|
@@ -272,4 +275,94 @@ describe("Matrix4", () => {
|
|
|
272
275
|
const result = mapPoint3d(translationMatrix, point);
|
|
273
276
|
expect(result).toEqual(expectedResult);
|
|
274
277
|
});
|
|
278
|
+
|
|
279
|
+
const almostEqual = (
|
|
280
|
+
a: number[] | Matrix4 | readonly [number, number, number],
|
|
281
|
+
b: number[] | Matrix4 | readonly [number, number, number],
|
|
282
|
+
epsilon = 1e-10
|
|
283
|
+
) => {
|
|
284
|
+
expect(a.length).toBe(b.length);
|
|
285
|
+
a.forEach((val, idx) => {
|
|
286
|
+
expect(Math.abs(val - b[idx])).toBeLessThan(epsilon);
|
|
287
|
+
});
|
|
288
|
+
};
|
|
289
|
+
|
|
290
|
+
const matrixEqual = (a: number[] | Matrix4, b: number[] | Matrix4) => {
|
|
291
|
+
expect(a.length).toBe(b.length);
|
|
292
|
+
a.forEach((val, idx) => {
|
|
293
|
+
// Object.is will distinguish -0 from 0, so we use === instead
|
|
294
|
+
const equal = val === b[idx] || (val === 0 && b[idx] === 0);
|
|
295
|
+
expect(equal).toBe(true);
|
|
296
|
+
});
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
it("should return the identity matrix when inverting the identity matrix", () => {
|
|
300
|
+
const identityMatrix = Matrix4();
|
|
301
|
+
const result = invert4(identityMatrix);
|
|
302
|
+
matrixEqual(result, identityMatrix);
|
|
303
|
+
});
|
|
304
|
+
|
|
305
|
+
it("should correctly invert a translation matrix", () => {
|
|
306
|
+
const translationMatrix = translate(100, -50, 25);
|
|
307
|
+
const inverse = invert4(translationMatrix);
|
|
308
|
+
// Inverse of translation(x,y,z) should be translation(-x,-y,-z)
|
|
309
|
+
const expectedInverse = translate(-100, 50, -25);
|
|
310
|
+
matrixEqual(inverse, expectedInverse);
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
it("should correctly invert a scale matrix", () => {
|
|
314
|
+
const scaleMatrix = scale(2, 4, 8);
|
|
315
|
+
const inverse = invert4(scaleMatrix);
|
|
316
|
+
// Inverse of scale(x,y,z) should be scale(1/x,1/y,1/z)
|
|
317
|
+
const expectedInverse = scale(1 / 2, 1 / 4, 1 / 8);
|
|
318
|
+
matrixEqual(inverse, expectedInverse);
|
|
319
|
+
});
|
|
320
|
+
|
|
321
|
+
it("should return identity matrix for non-invertible matrix", () => {
|
|
322
|
+
// A matrix of all zeros is not invertible
|
|
323
|
+
const nonInvertibleMatrix = [
|
|
324
|
+
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
|
325
|
+
] as Matrix4;
|
|
326
|
+
const result = invert4(nonInvertibleMatrix);
|
|
327
|
+
matrixEqual(result, Matrix4());
|
|
328
|
+
});
|
|
329
|
+
|
|
330
|
+
it("multiplying a matrix by its inverse should give the identity matrix", () => {
|
|
331
|
+
// Create a complex transformation matrix
|
|
332
|
+
const complexMatrix = processTransform3d([
|
|
333
|
+
{ scale: 2 },
|
|
334
|
+
{ rotateZ: Math.PI / 4 },
|
|
335
|
+
{ translate: [100, 100, 50] as const },
|
|
336
|
+
]);
|
|
337
|
+
|
|
338
|
+
const inverse = invert4(complexMatrix);
|
|
339
|
+
const result = multiply4(complexMatrix, inverse);
|
|
340
|
+
|
|
341
|
+
// Due to floating point arithmetic, we use almostEqual instead of exact equality
|
|
342
|
+
almostEqual(result, Matrix4());
|
|
343
|
+
});
|
|
344
|
+
|
|
345
|
+
it("should correctly transform points when using inverse matrix", () => {
|
|
346
|
+
const transformMatrix = translate(100, 100, 100);
|
|
347
|
+
const inverse = invert4(transformMatrix);
|
|
348
|
+
|
|
349
|
+
const point = [200, 0, 300] as const;
|
|
350
|
+
const transformedPoint = mapPoint3d(inverse, point);
|
|
351
|
+
const expectedPoint = [100, -100, 200] as const;
|
|
352
|
+
|
|
353
|
+
// Using almostEqual for floating point comparison
|
|
354
|
+
almostEqual(transformedPoint, expectedPoint);
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
it("should maintain inverse relationship for rotations", () => {
|
|
358
|
+
const rotationMatrix = rotateZ(Math.PI / 3); // 60 degrees rotation
|
|
359
|
+
const inverse = invert4(rotationMatrix);
|
|
360
|
+
const point = [100, 100, 0] as const;
|
|
361
|
+
|
|
362
|
+
// Transform point forward then backward should give original point
|
|
363
|
+
const transformed = mapPoint3d(rotationMatrix, point);
|
|
364
|
+
const backTransformed = mapPoint3d(inverse, transformed);
|
|
365
|
+
|
|
366
|
+
almostEqual(backTransformed, point);
|
|
367
|
+
});
|
|
275
368
|
});
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
AlphaType,
|
|
5
5
|
BlurStyle,
|
|
6
6
|
ClipOp,
|
|
7
|
-
ColorType,
|
|
8
7
|
FillType,
|
|
9
8
|
FilterMode,
|
|
10
9
|
FontEdging,
|
|
@@ -27,6 +26,7 @@ import {
|
|
|
27
26
|
import { Path1DEffectStyle } from "../types/PathEffect";
|
|
28
27
|
import { BlendMode } from "../types/Paint/BlendMode";
|
|
29
28
|
import { mapKeys } from "../../renderer/typeddash";
|
|
29
|
+
import { ColorTypeCanvasKit } from "../types/Image/ColorType.web";
|
|
30
30
|
|
|
31
31
|
import { setupSkia } from "./setup";
|
|
32
32
|
|
|
@@ -71,7 +71,7 @@ describe("Enums", () => {
|
|
|
71
71
|
});
|
|
72
72
|
it("Should match Image enums values with CanvasKit", () => {
|
|
73
73
|
const { CanvasKit } = setupSkia();
|
|
74
|
-
checkEnum(
|
|
74
|
+
checkEnum(ColorTypeCanvasKit, CanvasKit.ColorType);
|
|
75
75
|
checkEnum(AlphaType, CanvasKit.AlphaType);
|
|
76
76
|
checkEnum(ImageFormat, CanvasKit.ImageFormat);
|
|
77
77
|
checkEnum(MipmapMode, CanvasKit.MipmapMode);
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export enum ColorType {
|
|
2
|
+
Unknown, // uninitialized
|
|
3
|
+
Alpha_8, // pixel with alpha in 8-bit byte
|
|
4
|
+
RGB_565, // pixel with 5 bits red, 6 bits green, 5 bits blue, in 16-bit word
|
|
5
|
+
ARGB_4444, // pixel with 4 bits for alpha, red, green, blue; in 16-bit word
|
|
6
|
+
RGBA_8888, // pixel with 8 bits for red, green, blue, alpha; in 32-bit word
|
|
7
|
+
RGB_888x, // pixel with 8 bits each for red, green, blue; in 32-bit word
|
|
8
|
+
BGRA_8888, // pixel with 8 bits for blue, green, red, alpha; in 32-bit word
|
|
9
|
+
RGBA_1010102, // 10 bits for red, green, blue; 2 bits for alpha; in 32-bit word
|
|
10
|
+
BGRA_1010102, // 10 bits for blue, green, red; 2 bits for alpha; in 32-bit word
|
|
11
|
+
RGB_101010x, // pixel with 10 bits each for red, green, blue; in 32-bit word
|
|
12
|
+
BGR_101010x, // pixel with 10 bits each for blue, green, red; in 32-bit word
|
|
13
|
+
BGR_101010x_XR, // pixel with 10 bits each for blue, green, red; in 32-bit word, extended range
|
|
14
|
+
BGRA_10101010_XR, // pixel with 10 bits each for blue, green, red, alpha; in 64-bit word, extended range
|
|
15
|
+
RGBA_10x6, // pixel with 10 used bits (most significant) followed by 6 unused
|
|
16
|
+
Gray_8, // pixel with grayscale level in 8-bit byte
|
|
17
|
+
RGBA_F16Norm, // pixel with half floats in [0,1] for red, green, blue, alpha; in 64-bit word
|
|
18
|
+
RGBA_F16, // pixel with half floats for red, green, blue, alpha; in 64-bit word
|
|
19
|
+
RGB_F16F16F16x, // pixel with half floats for red, green, blue; in 64-bit word
|
|
20
|
+
RGBA_F32, // pixel using C float for red, green, blue, alpha; in 128-bit word
|
|
21
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export enum ColorTypeCanvasKit {
|
|
2
|
+
Unknown, // uninitialized
|
|
3
|
+
Alpha_8, // pixel with alpha in 8-bit byte
|
|
4
|
+
RGB_565, // pixel with 5 bits red, 6 bits green, 5 bits blue, in 16-bit word
|
|
5
|
+
ARGB_4444, // pixel with 4 bits for alpha, red, green, blue; in 16-bit word
|
|
6
|
+
RGBA_8888, // pixel with 8 bits for red, green, blue, alpha; in 32-bit word
|
|
7
|
+
RGB_888x, // pixel with 8 bits each for red, green, blue; in 32-bit word
|
|
8
|
+
BGRA_8888, // pixel with 8 bits for blue, green, red, alpha; in 32-bit word
|
|
9
|
+
RGBA_1010102, // 10 bits for red, green, blue; 2 bits for alpha; in 32-bit word
|
|
10
|
+
BGRA_1010102, // 10 bits for blue, green, red; 2 bits for alpha; in 32-bit word
|
|
11
|
+
RGB_101010x, // pixel with 10 bits each for red, green, blue; in 32-bit word
|
|
12
|
+
BGR_101010x, // pixel with 10 bits each for blue, green, red; in 32-bit word
|
|
13
|
+
BGR_101010x_XR, // pixel with 10 bits each for blue, green, red; in 32-bit word, extended range
|
|
14
|
+
RGBA_10x6, // pixel with 10 used bits (most significant) followed by 6 unused
|
|
15
|
+
Gray_8, // pixel with grayscale level in 8-bit byte
|
|
16
|
+
RGBA_F16Norm, // pixel with half floats in [0,1] for red, green, blue, alpha; in 64-bit word
|
|
17
|
+
RGBA_F16, // pixel with half floats for red, green, blue, alpha; in 64-bit word
|
|
18
|
+
RGBA_F32, // pixel using C float for red, green, blue, alpha; in 128-bit word
|
|
19
|
+
}
|
|
@@ -48,6 +48,17 @@ export interface SkImage extends SkJSIInstance<"Image"> {
|
|
|
48
48
|
*/
|
|
49
49
|
getImageInfo(): ImageInfo;
|
|
50
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Returns the backend texture of the image.
|
|
53
|
+
* The returned object can be used to create a Skia Image object.
|
|
54
|
+
* The returned object is backend specific and should be used with caution.
|
|
55
|
+
* It is the caller's responsibility to ensure that the texture is not used after the image is deleted.
|
|
56
|
+
* The returned object may be null if the image does not have a backend texture.
|
|
57
|
+
*
|
|
58
|
+
* @return backend texture of the image or null
|
|
59
|
+
*/
|
|
60
|
+
getNativeTextureUnstable(): unknown;
|
|
61
|
+
|
|
51
62
|
/**
|
|
52
63
|
* Returns this image as a shader with the specified tiling. It will use cubic sampling.
|
|
53
64
|
* @param tx - tile mode in the x direction.
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { SkData } from "../Data";
|
|
2
2
|
import type { NativeBuffer } from "../NativeBuffer";
|
|
3
3
|
|
|
4
|
+
import type { ColorType } from "./ColorType";
|
|
4
5
|
import type { SkImage } from "./Image";
|
|
5
6
|
|
|
6
7
|
export enum AlphaType {
|
|
@@ -10,26 +11,6 @@ export enum AlphaType {
|
|
|
10
11
|
Unpremul,
|
|
11
12
|
}
|
|
12
13
|
|
|
13
|
-
export enum ColorType {
|
|
14
|
-
Unknown, // uninitialized
|
|
15
|
-
Alpha_8, // pixel with alpha in 8-bit byte
|
|
16
|
-
RGB_565, // pixel with 5 bits red, 6 bits green, 5 bits blue, in 16-bit word
|
|
17
|
-
ARGB_4444, // pixel with 4 bits for alpha, red, green, blue; in 16-bit word
|
|
18
|
-
RGBA_8888, // pixel with 8 bits for red, green, blue, alpha; in 32-bit word
|
|
19
|
-
RGB_888x, // pixel with 8 bits each for red, green, blue; in 32-bit word
|
|
20
|
-
BGRA_8888, // pixel with 8 bits for blue, green, red, alpha; in 32-bit word
|
|
21
|
-
RGBA_1010102, // 10 bits for red, green, blue; 2 bits for alpha; in 32-bit word
|
|
22
|
-
BGRA_1010102, // 10 bits for blue, green, red; 2 bits for alpha; in 32-bit word
|
|
23
|
-
RGB_101010x, // pixel with 10 bits each for red, green, blue; in 32-bit word
|
|
24
|
-
BGR_101010x, // pixel with 10 bits each for blue, green, red; in 32-bit word
|
|
25
|
-
BGR_101010x_XR, // pixel with 10 bits each for blue, green, red; in 32-bit word, extended range
|
|
26
|
-
RGBA_10x6, // pixel with 10 used bits (most significant) followed by 6 unused
|
|
27
|
-
Gray_8, // pixel with grayscale level in 8-bit byte
|
|
28
|
-
RGBA_F16Norm, // pixel with half floats in [0,1] for red, green, blue, alpha; in 64-bit word
|
|
29
|
-
RGBA_F16, // pixel with half floats for red, green, blue, alpha; in 64-bit word
|
|
30
|
-
RGBA_F32, // pixel using C float for red, green, blue, alpha; in 128-bit word
|
|
31
|
-
}
|
|
32
|
-
|
|
33
14
|
export interface ImageInfo {
|
|
34
15
|
alphaType: AlphaType;
|
|
35
16
|
// TODO: add support for color space
|
|
@@ -68,6 +49,30 @@ export interface ImageFactory {
|
|
|
68
49
|
*/
|
|
69
50
|
MakeImageFromNativeBuffer: (nativeBuffer: NativeBuffer) => SkImage;
|
|
70
51
|
|
|
52
|
+
/**
|
|
53
|
+
*
|
|
54
|
+
* Return an Image backed by a given native texture.
|
|
55
|
+
*
|
|
56
|
+
* The native texture must be a valid owning reference.
|
|
57
|
+
*
|
|
58
|
+
* This API might be used to integrate with other libraries using gpu textures,
|
|
59
|
+
* or to transfer images between different threads.
|
|
60
|
+
*
|
|
61
|
+
* @param texture A native texture handle
|
|
62
|
+
* @param width The width of the texture
|
|
63
|
+
* @param height The height of the texture
|
|
64
|
+
* @param mipmapped Whether the texture is mipmapped
|
|
65
|
+
* @throws Throws an error if the Image could not be created, for example when the given native texture is invalid.
|
|
66
|
+
*
|
|
67
|
+
* @returns Returns a valid SkImage, if the texture is invalid, an error is thrown.
|
|
68
|
+
*/
|
|
69
|
+
MakeImageFromNativeTextureUnstable: (
|
|
70
|
+
texture: unknown,
|
|
71
|
+
width: number,
|
|
72
|
+
height: number,
|
|
73
|
+
mipmapped?: boolean
|
|
74
|
+
) => SkImage;
|
|
75
|
+
|
|
71
76
|
/**
|
|
72
77
|
* Returns an image that will be a screenshot of the view represented by
|
|
73
78
|
* the view tag
|
|
@@ -370,3 +370,104 @@ export const convertToAffineMatrix = (m4: Matrix4) => {
|
|
|
370
370
|
// Returning the 6-element affine transformation matrix
|
|
371
371
|
return [a, b, c, d, tx, ty];
|
|
372
372
|
};
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* Calculates the determinant of a 3x3 matrix
|
|
376
|
+
* @worklet
|
|
377
|
+
*/
|
|
378
|
+
const det3x3 = (
|
|
379
|
+
a00: number,
|
|
380
|
+
a01: number,
|
|
381
|
+
a02: number,
|
|
382
|
+
a10: number,
|
|
383
|
+
a11: number,
|
|
384
|
+
a12: number,
|
|
385
|
+
a20: number,
|
|
386
|
+
a21: number,
|
|
387
|
+
a22: number
|
|
388
|
+
): number => {
|
|
389
|
+
"worklet";
|
|
390
|
+
return (
|
|
391
|
+
a00 * (a11 * a22 - a12 * a21) +
|
|
392
|
+
a01 * (a12 * a20 - a10 * a22) +
|
|
393
|
+
a02 * (a10 * a21 - a11 * a20)
|
|
394
|
+
);
|
|
395
|
+
};
|
|
396
|
+
|
|
397
|
+
/**
|
|
398
|
+
* Inverts a 4x4 matrix
|
|
399
|
+
* @worklet
|
|
400
|
+
* @returns The inverted matrix, or the identity matrix if the input is not invertible
|
|
401
|
+
*/
|
|
402
|
+
export const invert4 = (m: Matrix4): Matrix4 => {
|
|
403
|
+
"worklet";
|
|
404
|
+
|
|
405
|
+
const a00 = m[0],
|
|
406
|
+
a01 = m[1],
|
|
407
|
+
a02 = m[2],
|
|
408
|
+
a03 = m[3];
|
|
409
|
+
const a10 = m[4],
|
|
410
|
+
a11 = m[5],
|
|
411
|
+
a12 = m[6],
|
|
412
|
+
a13 = m[7];
|
|
413
|
+
const a20 = m[8],
|
|
414
|
+
a21 = m[9],
|
|
415
|
+
a22 = m[10],
|
|
416
|
+
a23 = m[11];
|
|
417
|
+
const a30 = m[12],
|
|
418
|
+
a31 = m[13],
|
|
419
|
+
a32 = m[14],
|
|
420
|
+
a33 = m[15];
|
|
421
|
+
|
|
422
|
+
// Calculate cofactors
|
|
423
|
+
const b00 = det3x3(a11, a12, a13, a21, a22, a23, a31, a32, a33);
|
|
424
|
+
const b01 = -det3x3(a10, a12, a13, a20, a22, a23, a30, a32, a33);
|
|
425
|
+
const b02 = det3x3(a10, a11, a13, a20, a21, a23, a30, a31, a33);
|
|
426
|
+
const b03 = -det3x3(a10, a11, a12, a20, a21, a22, a30, a31, a32);
|
|
427
|
+
|
|
428
|
+
const b10 = -det3x3(a01, a02, a03, a21, a22, a23, a31, a32, a33);
|
|
429
|
+
const b11 = det3x3(a00, a02, a03, a20, a22, a23, a30, a32, a33);
|
|
430
|
+
const b12 = -det3x3(a00, a01, a03, a20, a21, a23, a30, a31, a33);
|
|
431
|
+
const b13 = det3x3(a00, a01, a02, a20, a21, a22, a30, a31, a32);
|
|
432
|
+
|
|
433
|
+
const b20 = det3x3(a01, a02, a03, a11, a12, a13, a31, a32, a33);
|
|
434
|
+
const b21 = -det3x3(a00, a02, a03, a10, a12, a13, a30, a32, a33);
|
|
435
|
+
const b22 = det3x3(a00, a01, a03, a10, a11, a13, a30, a31, a33);
|
|
436
|
+
const b23 = -det3x3(a00, a01, a02, a10, a11, a12, a30, a31, a32);
|
|
437
|
+
|
|
438
|
+
const b30 = -det3x3(a01, a02, a03, a11, a12, a13, a21, a22, a23);
|
|
439
|
+
const b31 = det3x3(a00, a02, a03, a10, a12, a13, a20, a22, a23);
|
|
440
|
+
const b32 = -det3x3(a00, a01, a03, a10, a11, a13, a20, a21, a23);
|
|
441
|
+
const b33 = det3x3(a00, a01, a02, a10, a11, a12, a20, a21, a22);
|
|
442
|
+
|
|
443
|
+
// Calculate determinant
|
|
444
|
+
const det = a00 * b00 + a01 * b01 + a02 * b02 + a03 * b03;
|
|
445
|
+
|
|
446
|
+
// Check if matrix is invertible
|
|
447
|
+
if (Math.abs(det) < 1e-8) {
|
|
448
|
+
// Return identity matrix if not invertible
|
|
449
|
+
return Matrix4();
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const invDet = 1.0 / det;
|
|
453
|
+
|
|
454
|
+
// Calculate inverse matrix
|
|
455
|
+
return [
|
|
456
|
+
b00 * invDet,
|
|
457
|
+
b10 * invDet,
|
|
458
|
+
b20 * invDet,
|
|
459
|
+
b30 * invDet,
|
|
460
|
+
b01 * invDet,
|
|
461
|
+
b11 * invDet,
|
|
462
|
+
b21 * invDet,
|
|
463
|
+
b31 * invDet,
|
|
464
|
+
b02 * invDet,
|
|
465
|
+
b12 * invDet,
|
|
466
|
+
b22 * invDet,
|
|
467
|
+
b32 * invDet,
|
|
468
|
+
b03 * invDet,
|
|
469
|
+
b13 * invDet,
|
|
470
|
+
b23 * invDet,
|
|
471
|
+
b33 * invDet,
|
|
472
|
+
] as Matrix4;
|
|
473
|
+
};
|
|
@@ -14,6 +14,18 @@ export interface SkSurface extends SkJSIInstance<"Surface"> {
|
|
|
14
14
|
*/
|
|
15
15
|
getCanvas(): SkCanvas;
|
|
16
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Returns the backend texture of the surface.
|
|
19
|
+
* The returned object can be used to create a Skia Image object.
|
|
20
|
+
* The returned object is backend specific and should be used with caution.
|
|
21
|
+
* It is the caller's responsibility to ensure that the texture is not used after the surface is deleted
|
|
22
|
+
* or draw operations are performed on the surface.
|
|
23
|
+
* The returned object may be null if the surface does not have a backend texture.
|
|
24
|
+
*
|
|
25
|
+
* @return backend texture of the surface or null
|
|
26
|
+
*/
|
|
27
|
+
getNativeTextureUnstable(): unknown;
|
|
28
|
+
|
|
17
29
|
/** Returns Image capturing Surface contents. Subsequent drawing to
|
|
18
30
|
Surface contents are not captured.
|
|
19
31
|
|
|
@@ -170,4 +170,9 @@ export class JsiSkImage extends HostObject<Image, "Image"> implements SkImage {
|
|
|
170
170
|
}
|
|
171
171
|
return new JsiSkImage(this.CanvasKit, img);
|
|
172
172
|
}
|
|
173
|
+
|
|
174
|
+
getNativeTextureUnstable(): unknown {
|
|
175
|
+
console.warn("getBackendTexture is not implemented on Web");
|
|
176
|
+
return null;
|
|
177
|
+
}
|
|
173
178
|
}
|
|
@@ -75,6 +75,10 @@ export class JsiSkImageFactory extends Host implements ImageFactory {
|
|
|
75
75
|
return new JsiSkImage(this.CanvasKit, image);
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
+
MakeImageFromNativeTextureUnstable(): SkImage {
|
|
79
|
+
throw new Error("MakeImageFromNativeTexture is not implemented on web");
|
|
80
|
+
}
|
|
81
|
+
|
|
78
82
|
MakeImage(info: ImageInfo, data: SkData, bytesPerRow: number) {
|
|
79
83
|
// see toSkImageInfo() from canvaskit
|
|
80
84
|
const image = this.CanvasKit.MakeImage(
|
|
@@ -97,12 +97,13 @@ export class SkiaDomView extends React.Component<SkiaDomViewProps> {
|
|
|
97
97
|
}
|
|
98
98
|
|
|
99
99
|
render() {
|
|
100
|
-
const { debug = false, ...viewProps } = this.props;
|
|
100
|
+
const { debug = false, opaque = false, ...viewProps } = this.props;
|
|
101
101
|
return (
|
|
102
102
|
<NativeSkiaDomView
|
|
103
103
|
collapsable={false}
|
|
104
104
|
nativeID={`${this._nativeId}`}
|
|
105
105
|
debug={debug}
|
|
106
|
+
opaque={opaque}
|
|
106
107
|
{...viewProps}
|
|
107
108
|
/>
|
|
108
109
|
);
|
|
@@ -38,6 +38,7 @@ export class SkiaPictureView extends React.Component<SkiaPictureViewProps> {
|
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
componentDidUpdate(prevProps: SkiaPictureViewProps) {
|
|
41
|
+
console.log("componentDidUpdate");
|
|
41
42
|
const { picture, onSize } = this.props;
|
|
42
43
|
if (picture !== prevProps.picture) {
|
|
43
44
|
assertSkiaViewApi();
|
|
@@ -78,16 +79,18 @@ export class SkiaPictureView extends React.Component<SkiaPictureViewProps> {
|
|
|
78
79
|
*/
|
|
79
80
|
public redraw() {
|
|
80
81
|
assertSkiaViewApi();
|
|
82
|
+
console.log("Request redraw: ", this._nativeId);
|
|
81
83
|
SkiaViewApi.requestRedraw(this._nativeId);
|
|
82
84
|
}
|
|
83
85
|
|
|
84
86
|
render() {
|
|
85
|
-
const { mode, debug = false, ...viewProps } = this.props;
|
|
87
|
+
const { mode, debug = false, opaque = false, ...viewProps } = this.props;
|
|
86
88
|
return (
|
|
87
89
|
<NativeSkiaPictureView
|
|
88
90
|
collapsable={false}
|
|
89
91
|
nativeID={`${this._nativeId}`}
|
|
90
92
|
debug={debug}
|
|
93
|
+
opaque={opaque}
|
|
91
94
|
{...viewProps}
|
|
92
95
|
/>
|
|
93
96
|
);
|
package/src/views/types.ts
CHANGED
|
@@ -6,6 +6,7 @@ import type { SharedValueType } from "../renderer/processors/Animations/Animatio
|
|
|
6
6
|
|
|
7
7
|
export type NativeSkiaViewProps = ViewProps & {
|
|
8
8
|
debug?: boolean;
|
|
9
|
+
opaque?: boolean;
|
|
9
10
|
};
|
|
10
11
|
|
|
11
12
|
export interface DrawingInfo {
|
|
@@ -32,6 +33,8 @@ export interface SkiaBaseViewProps extends ViewProps {
|
|
|
32
33
|
* the Skia view is resized.
|
|
33
34
|
*/
|
|
34
35
|
onSize?: SharedValueType<SkSize>;
|
|
36
|
+
|
|
37
|
+
opaque?: boolean;
|
|
35
38
|
}
|
|
36
39
|
|
|
37
40
|
export interface SkiaPictureViewNativeProps extends SkiaBaseViewProps {
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include <jsi/jsi.h>
|
|
4
|
-
#include <memory>
|
|
5
|
-
#include <string>
|
|
6
|
-
|
|
7
|
-
namespace RNJsi {
|
|
8
|
-
namespace jsi = facebook::jsi;
|
|
9
|
-
|
|
10
|
-
enum JsiWrapperValueType {
|
|
11
|
-
NonInitialized,
|
|
12
|
-
Undefined,
|
|
13
|
-
Null,
|
|
14
|
-
Bool,
|
|
15
|
-
Number,
|
|
16
|
-
String,
|
|
17
|
-
Object,
|
|
18
|
-
Function,
|
|
19
|
-
Array,
|
|
20
|
-
HostObject,
|
|
21
|
-
Unknown
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
Implements a simple wrapper class for JSI values where the value can be read
|
|
26
|
-
without asking the runtime for any assistance Meaning that we can access
|
|
27
|
-
members without being on the JS thread.
|
|
28
|
-
*/
|
|
29
|
-
class JsiValueWrapper {
|
|
30
|
-
public:
|
|
31
|
-
explicit JsiValueWrapper(jsi::Runtime &runtime)
|
|
32
|
-
: _type(JsiWrapperValueType::Undefined) {}
|
|
33
|
-
|
|
34
|
-
JsiValueWrapper(jsi::Runtime &runtime, const jsi::Value &value)
|
|
35
|
-
: JsiValueWrapper(runtime) {
|
|
36
|
-
setCurrent(runtime, value);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
void setCurrent(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
40
|
-
if (value.isNumber()) {
|
|
41
|
-
_type = JsiWrapperValueType::Number;
|
|
42
|
-
_numberValue = value.asNumber();
|
|
43
|
-
} else if (value.isBool()) {
|
|
44
|
-
_type = JsiWrapperValueType::Bool;
|
|
45
|
-
_boolValue = value.getBool();
|
|
46
|
-
} else if (value.isString()) {
|
|
47
|
-
_type = JsiWrapperValueType::String;
|
|
48
|
-
_stringValue = value.asString(runtime).utf8(runtime);
|
|
49
|
-
} else if (value.isUndefined()) {
|
|
50
|
-
_type = JsiWrapperValueType::Undefined;
|
|
51
|
-
} else if (value.isNull()) {
|
|
52
|
-
_type = JsiWrapperValueType::Null;
|
|
53
|
-
} else if (value.isObject()) {
|
|
54
|
-
_type = JsiWrapperValueType::Object;
|
|
55
|
-
_objectValue = std::make_shared<jsi::Object>(value.asObject(runtime));
|
|
56
|
-
if (_objectValue->isFunction(runtime)) {
|
|
57
|
-
_type = JsiWrapperValueType::Function;
|
|
58
|
-
_functionValue =
|
|
59
|
-
std::make_shared<jsi::Function>(_objectValue->asFunction(runtime));
|
|
60
|
-
_objectValue = nullptr;
|
|
61
|
-
} else if (_objectValue->isArray(runtime)) {
|
|
62
|
-
_type = JsiWrapperValueType::Array;
|
|
63
|
-
_arrayValue =
|
|
64
|
-
std::make_shared<jsi::Array>(_objectValue->asArray(runtime));
|
|
65
|
-
_objectValue = nullptr;
|
|
66
|
-
} else if (_objectValue->isHostObject(runtime)) {
|
|
67
|
-
_type = JsiWrapperValueType::HostObject;
|
|
68
|
-
_hostObjectValue = _objectValue->asHostObject(runtime);
|
|
69
|
-
_objectValue = nullptr;
|
|
70
|
-
}
|
|
71
|
-
} else {
|
|
72
|
-
throw std::runtime_error("Could not store jsi::Value of provided type");
|
|
73
|
-
}
|
|
74
|
-
// Save in value holder as well so that we can return current
|
|
75
|
-
if (_valueHolder == nullptr) {
|
|
76
|
-
_valueHolder = std::make_shared<jsi::Object>(runtime);
|
|
77
|
-
}
|
|
78
|
-
_valueHolder->setProperty(runtime, "current", value);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
jsi::Value getCurrent(jsi::Runtime &runtime) {
|
|
82
|
-
if (_valueHolder == nullptr) {
|
|
83
|
-
return jsi::Value::undefined();
|
|
84
|
-
}
|
|
85
|
-
return _valueHolder->getProperty(runtime, "current");
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
bool isUndefinedOrNull() { return isUndefined() || isNull(); }
|
|
89
|
-
|
|
90
|
-
bool isUndefined() { return _type == JsiWrapperValueType::Undefined; }
|
|
91
|
-
|
|
92
|
-
bool isNull() { return _type == JsiWrapperValueType::Null; }
|
|
93
|
-
|
|
94
|
-
bool getAsBool() {
|
|
95
|
-
assert(_type == JsiWrapperValueType::Bool);
|
|
96
|
-
return _boolValue;
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
double getAsNumber() {
|
|
100
|
-
assert(_type == JsiWrapperValueType::Number);
|
|
101
|
-
return _numberValue;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
const std::string &getAsString() {
|
|
105
|
-
assert(_type == JsiWrapperValueType::String);
|
|
106
|
-
return _stringValue;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
std::shared_ptr<jsi::Function> getAsFunction() {
|
|
110
|
-
assert(_type == JsiWrapperValueType::Function);
|
|
111
|
-
return _functionValue;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
std::shared_ptr<jsi::Array> getAsArray() {
|
|
115
|
-
assert(_type == JsiWrapperValueType::Array);
|
|
116
|
-
return _arrayValue;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
std::shared_ptr<jsi::Object> getAsObject() {
|
|
120
|
-
assert(_type == JsiWrapperValueType::Object);
|
|
121
|
-
return _objectValue;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
std::shared_ptr<jsi::HostObject> getAsHostObject() {
|
|
125
|
-
assert(_type == JsiWrapperValueType::HostObject);
|
|
126
|
-
return _hostObjectValue;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
JsiWrapperValueType getType() { return _type; }
|
|
130
|
-
|
|
131
|
-
bool equals(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
132
|
-
if (value.isNumber() && _type == JsiWrapperValueType::Number) {
|
|
133
|
-
return _numberValue == value.asNumber();
|
|
134
|
-
} else if (value.isBool() && _type == JsiWrapperValueType::Bool) {
|
|
135
|
-
return _boolValue == value.getBool();
|
|
136
|
-
} else if (value.isUndefined()) {
|
|
137
|
-
return _type == JsiWrapperValueType::Undefined;
|
|
138
|
-
} else if (value.isNull()) {
|
|
139
|
-
return _type == JsiWrapperValueType::Null;
|
|
140
|
-
} else if (value.isString()) {
|
|
141
|
-
auto current = getCurrent(runtime);
|
|
142
|
-
if (current.isString()) {
|
|
143
|
-
return jsi::String::strictEquals(runtime, value.asString(runtime),
|
|
144
|
-
current.asString(runtime));
|
|
145
|
-
}
|
|
146
|
-
return false;
|
|
147
|
-
}
|
|
148
|
-
return false;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
private:
|
|
152
|
-
std::shared_ptr<jsi::Object> _valueHolder;
|
|
153
|
-
|
|
154
|
-
bool _boolValue;
|
|
155
|
-
double _numberValue;
|
|
156
|
-
std::string _stringValue;
|
|
157
|
-
std::shared_ptr<jsi::Object> _objectValue;
|
|
158
|
-
std::shared_ptr<jsi::Function> _functionValue;
|
|
159
|
-
std::shared_ptr<jsi::Array> _arrayValue;
|
|
160
|
-
std::shared_ptr<jsi::HostObject> _hostObjectValue;
|
|
161
|
-
|
|
162
|
-
JsiWrapperValueType _type;
|
|
163
|
-
};
|
|
164
|
-
} // namespace RNJsi
|