diff --git a/example/src/Examples/API/Transform.tsx b/example/src/Examples/API/Transform.tsx index 9622a39953..a88328b14f 100644 --- a/example/src/Examples/API/Transform.tsx +++ b/example/src/Examples/API/Transform.tsx @@ -126,19 +126,19 @@ export const Transform = () => { const pers0 = 0; const pers1 = 0; const pers2 = 1; - canvas.concat( - Skia.Matrix([ - scaleX, - skewX, - transX, - skewY, - scaleY, - transY, - pers0, - pers1, - pers2, - ]) - ); + const m = Skia.Matrix([ + scaleX, + skewX, + transX, + skewY, + scaleY, + transY, + pers0, + pers1, + pers2, + ]); + //console.log({ matrix: m.get() }); + canvas.concat(m); canvas.drawImageRect(image, imgRect, rect, paint); canvas.restore(); diff --git a/package/cpp/api/JsiSkMatrix.h b/package/cpp/api/JsiSkMatrix.h index 7d210259d7..d17093bbfc 100644 --- a/package/cpp/api/JsiSkMatrix.h +++ b/package/cpp/api/JsiSkMatrix.h @@ -88,6 +88,14 @@ class JsiSkMatrix : public JsiSkWrappingSharedPtrHostObject { return jsi::Value::undefined(); } + JSI_HOST_FUNCTION(get) { + auto values = jsi::Array(runtime, 9); + for (auto i = 0; i < 9; i++) { + values.setValueAtIndex(runtime, i, getObject()->get(i)); + } + return values; + } + JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiSkMatrix, __typename__)) JSI_EXPORT_FUNCTIONS( @@ -97,6 +105,7 @@ class JsiSkMatrix : public JsiSkWrappingSharedPtrHostObject { JSI_EXPORT_FUNC(JsiSkMatrix, skew), JSI_EXPORT_FUNC(JsiSkMatrix, rotate), JSI_EXPORT_FUNC(JsiSkMatrix, identity), + JSI_EXPORT_FUNC(JsiSkMatrix, get), ) /** diff --git a/package/src/renderer/__tests__/Transform.spec.tsx b/package/src/renderer/__tests__/Transform.spec.tsx index e48a5188ed..4f8a11a173 100644 --- a/package/src/renderer/__tests__/Transform.spec.tsx +++ b/package/src/renderer/__tests__/Transform.spec.tsx @@ -29,6 +29,7 @@ describe("Renderer", () => { matrix.translate(origin.x, origin.y); matrix.scale(0.5); matrix.translate(-origin.x, -origin.y); + expect(matrix.get()).toStrictEqual([0.5, 0, 192, 0, 0.5, 192, 0, 0, 1]); const surface = drawOnNode( diff --git a/package/src/skia/types/Matrix.ts b/package/src/skia/types/Matrix.ts index 18f9ce7fc0..73badfe350 100644 --- a/package/src/skia/types/Matrix.ts +++ b/package/src/skia/types/Matrix.ts @@ -22,6 +22,7 @@ export interface SkMatrix extends SkJSIInstance<"Matrix"> { skew: (x: number, y: number) => void; rotate: (theta: number) => void; identity: () => void; + get: () => number[]; } type Transform2dName = diff --git a/package/src/skia/web/JsiSkMatrix.ts b/package/src/skia/web/JsiSkMatrix.ts index 773ebc49ee..4255c90fe3 100644 --- a/package/src/skia/web/JsiSkMatrix.ts +++ b/package/src/skia/web/JsiSkMatrix.ts @@ -57,4 +57,8 @@ export class JsiSkMatrix identity() { this.ref.set(this.CanvasKit.Matrix.identity()); } + + get() { + return Array.from(this.ref); + } }