@shopify/react-native-skia 2.0.7 → 2.1.1

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.
Files changed (306) hide show
  1. package/android/CMakeLists.txt +20 -1
  2. package/cpp/api/JsiSkApi.h +3 -0
  3. package/cpp/api/JsiSkImageFilterFactory.h +478 -39
  4. package/cpp/api/JsiSkSkottie.h +590 -0
  5. package/cpp/api/JsiSkottieFactory.h +65 -0
  6. package/cpp/api/recorder/Command.h +1 -0
  7. package/cpp/api/recorder/Convertor.h +32 -0
  8. package/cpp/api/recorder/Drawings.h +23 -0
  9. package/cpp/api/recorder/ImageFilters.h +20 -0
  10. package/cpp/api/recorder/JsiRecorder.h +6 -0
  11. package/cpp/api/recorder/RNRecorder.h +15 -0
  12. package/cpp/api/third_party/SkottieUtils.cpp +333 -0
  13. package/cpp/api/third_party/SkottieUtils.h +172 -0
  14. package/cpp/skia/modules/jsonreader/SkJSONReader.cpp +980 -0
  15. package/cpp/skia/modules/jsonreader/SkJSONReader.h +389 -0
  16. package/cpp/skia/modules/skottie/include/ExternalLayer.h +56 -0
  17. package/cpp/skia/modules/skottie/include/Skottie.h +313 -0
  18. package/cpp/skia/modules/skottie/include/SkottieProperty.h +190 -0
  19. package/cpp/skia/modules/skottie/include/SlotManager.h +113 -0
  20. package/cpp/skia/modules/skottie/include/TextShaper.h +200 -0
  21. package/cpp/skia/modules/skottie/src/SkottieValue.h +56 -0
  22. package/cpp/skia/modules/skottie/src/animator/Animator.h +89 -0
  23. package/cpp/skia/modules/skottie/src/text/Font.h +82 -0
  24. package/cpp/skia/modules/skottie/src/text/TextAdapter.h +155 -0
  25. package/cpp/skia/modules/skottie/src/text/TextAnimator.h +121 -0
  26. package/cpp/skia/modules/skottie/src/text/TextValue.h +28 -0
  27. package/cpp/skia/modules/sksg/include/SkSGClipEffect.h +61 -0
  28. package/cpp/skia/modules/sksg/include/SkSGColorFilter.h +135 -0
  29. package/cpp/skia/modules/sksg/include/SkSGDraw.h +57 -0
  30. package/cpp/skia/modules/sksg/include/SkSGEffectNode.h +50 -0
  31. package/cpp/skia/modules/sksg/include/SkSGGeometryEffect.h +181 -0
  32. package/cpp/skia/modules/sksg/include/SkSGGeometryNode.h +54 -0
  33. package/cpp/skia/modules/sksg/include/SkSGGradient.h +108 -0
  34. package/cpp/skia/modules/sksg/include/SkSGGroup.h +65 -0
  35. package/cpp/skia/modules/sksg/include/SkSGImage.h +59 -0
  36. package/cpp/skia/modules/sksg/include/SkSGInvalidationController.h +46 -0
  37. package/cpp/skia/modules/sksg/include/SkSGMaskEffect.h +65 -0
  38. package/cpp/skia/modules/sksg/include/SkSGMerge.h +74 -0
  39. package/cpp/skia/modules/sksg/include/SkSGNode.h +128 -0
  40. package/cpp/skia/modules/sksg/include/SkSGOpacityEffect.h +54 -0
  41. package/cpp/skia/modules/sksg/include/SkSGPaint.h +112 -0
  42. package/cpp/skia/modules/sksg/include/SkSGPath.h +68 -0
  43. package/cpp/skia/modules/sksg/include/SkSGPlane.h +47 -0
  44. package/cpp/skia/modules/sksg/include/SkSGRect.h +122 -0
  45. package/cpp/skia/modules/sksg/include/SkSGRenderEffect.h +283 -0
  46. package/cpp/skia/modules/sksg/include/SkSGRenderNode.h +157 -0
  47. package/cpp/skia/modules/sksg/include/SkSGScene.h +47 -0
  48. package/cpp/skia/modules/sksg/include/SkSGText.h +82 -0
  49. package/cpp/skia/modules/sksg/include/SkSGTransform.h +127 -0
  50. package/cpp/skia/src/base/SkArenaAlloc.h +371 -0
  51. package/lib/commonjs/dom/nodes/datatypes/Gradient.d.ts +15 -15
  52. package/lib/commonjs/dom/types/Drawings.d.ts +8 -1
  53. package/lib/commonjs/dom/types/Drawings.js.map +1 -1
  54. package/lib/commonjs/dom/types/NodeType.d.ts +3 -1
  55. package/lib/commonjs/dom/types/NodeType.js +4 -0
  56. package/lib/commonjs/dom/types/NodeType.js.map +1 -1
  57. package/lib/commonjs/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
  58. package/lib/commonjs/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
  59. package/lib/commonjs/renderer/__tests__/e2e/ImageFilter.spec.d.ts +1 -0
  60. package/lib/commonjs/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
  61. package/lib/commonjs/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
  62. package/lib/commonjs/renderer/__tests__/setup.d.ts +5 -0
  63. package/lib/commonjs/renderer/components/ImageFilter.d.ts +4 -0
  64. package/lib/commonjs/renderer/components/ImageFilter.js +13 -0
  65. package/lib/commonjs/renderer/components/ImageFilter.js.map +1 -0
  66. package/lib/commonjs/renderer/components/Skottie.d.ts +4 -0
  67. package/lib/commonjs/renderer/components/Skottie.js +13 -0
  68. package/lib/commonjs/renderer/components/Skottie.js.map +1 -0
  69. package/lib/commonjs/renderer/components/index.d.ts +2 -0
  70. package/lib/commonjs/renderer/components/index.js +22 -0
  71. package/lib/commonjs/renderer/components/index.js.map +1 -1
  72. package/lib/commonjs/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
  73. package/lib/commonjs/skia/types/ImageFilter/ImageFilterFactory.js.map +1 -1
  74. package/lib/commonjs/skia/types/Matrix4.d.ts +11 -2
  75. package/lib/commonjs/skia/types/Matrix4.js +42 -1
  76. package/lib/commonjs/skia/types/Matrix4.js.map +1 -1
  77. package/lib/commonjs/skia/types/Recorder.d.ts +2 -1
  78. package/lib/commonjs/skia/types/Recorder.js.map +1 -1
  79. package/lib/commonjs/skia/types/Skia.d.ts +2 -0
  80. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  81. package/lib/commonjs/skia/types/Skottie.d.ts +223 -0
  82. package/lib/commonjs/skia/types/Skottie.js +73 -0
  83. package/lib/commonjs/skia/types/Skottie.js.map +1 -0
  84. package/lib/commonjs/skia/types/index.d.ts +1 -0
  85. package/lib/commonjs/skia/types/index.js +11 -0
  86. package/lib/commonjs/skia/types/index.js.map +1 -1
  87. package/lib/commonjs/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
  88. package/lib/commonjs/skia/web/JsiSkImageFilterFactory.js +88 -19
  89. package/lib/commonjs/skia/web/JsiSkImageFilterFactory.js.map +1 -1
  90. package/lib/commonjs/skia/web/JsiSkia.js +2 -0
  91. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  92. package/lib/commonjs/skia/web/JsiSkottieAnimation.d.ts +59 -0
  93. package/lib/commonjs/skia/web/JsiSkottieAnimation.js +243 -0
  94. package/lib/commonjs/skia/web/JsiSkottieAnimation.js.map +1 -0
  95. package/lib/commonjs/skia/web/JsiSkottieFactory.d.ts +9 -0
  96. package/lib/commonjs/skia/web/JsiSkottieFactory.js +26 -0
  97. package/lib/commonjs/skia/web/JsiSkottieFactory.js.map +1 -0
  98. package/lib/commonjs/sksg/Elements.d.ts +3 -1
  99. package/lib/commonjs/sksg/Elements.js.map +1 -1
  100. package/lib/commonjs/sksg/Node.d.ts +1 -1
  101. package/lib/commonjs/sksg/Node.js +1 -1
  102. package/lib/commonjs/sksg/Node.js.map +1 -1
  103. package/lib/commonjs/sksg/Recorder/Core.d.ts +4 -2
  104. package/lib/commonjs/sksg/Recorder/Core.js +1 -0
  105. package/lib/commonjs/sksg/Recorder/Core.js.map +1 -1
  106. package/lib/commonjs/sksg/Recorder/Player.js +2 -0
  107. package/lib/commonjs/sksg/Recorder/Player.js.map +1 -1
  108. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
  109. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js +4 -0
  110. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
  111. package/lib/commonjs/sksg/Recorder/Recorder.d.ts +2 -1
  112. package/lib/commonjs/sksg/Recorder/Recorder.js +6 -0
  113. package/lib/commonjs/sksg/Recorder/Recorder.js.map +1 -1
  114. package/lib/commonjs/sksg/Recorder/Visitor.js +3 -0
  115. package/lib/commonjs/sksg/Recorder/Visitor.js.map +1 -1
  116. package/lib/commonjs/sksg/Recorder/commands/Drawing.d.ts +2 -2
  117. package/lib/commonjs/sksg/Recorder/commands/Drawing.js +11 -4
  118. package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -1
  119. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js +12 -2
  120. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js.map +1 -1
  121. package/lib/module/dom/nodes/datatypes/Gradient.d.ts +15 -15
  122. package/lib/module/dom/types/Drawings.d.ts +8 -1
  123. package/lib/module/dom/types/Drawings.js.map +1 -1
  124. package/lib/module/dom/types/NodeType.d.ts +3 -1
  125. package/lib/module/dom/types/NodeType.js +4 -0
  126. package/lib/module/dom/types/NodeType.js.map +1 -1
  127. package/lib/module/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
  128. package/lib/module/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
  129. package/lib/module/renderer/__tests__/e2e/ImageFilter.spec.d.ts +1 -0
  130. package/lib/module/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
  131. package/lib/module/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
  132. package/lib/module/renderer/__tests__/setup.d.ts +5 -0
  133. package/lib/module/renderer/components/ImageFilter.d.ts +4 -0
  134. package/lib/module/renderer/components/ImageFilter.js +5 -0
  135. package/lib/module/renderer/components/ImageFilter.js.map +1 -0
  136. package/lib/module/renderer/components/Skottie.d.ts +4 -0
  137. package/lib/module/renderer/components/Skottie.js +5 -0
  138. package/lib/module/renderer/components/Skottie.js.map +1 -0
  139. package/lib/module/renderer/components/index.d.ts +2 -0
  140. package/lib/module/renderer/components/index.js +2 -0
  141. package/lib/module/renderer/components/index.js.map +1 -1
  142. package/lib/module/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
  143. package/lib/module/skia/types/ImageFilter/ImageFilterFactory.js.map +1 -1
  144. package/lib/module/skia/types/Matrix4.d.ts +11 -2
  145. package/lib/module/skia/types/Matrix4.js +40 -0
  146. package/lib/module/skia/types/Matrix4.js.map +1 -1
  147. package/lib/module/skia/types/Recorder.d.ts +2 -1
  148. package/lib/module/skia/types/Recorder.js.map +1 -1
  149. package/lib/module/skia/types/Skia.d.ts +2 -0
  150. package/lib/module/skia/types/Skia.js.map +1 -1
  151. package/lib/module/skia/types/Skottie.d.ts +223 -0
  152. package/lib/module/skia/types/Skottie.js +74 -0
  153. package/lib/module/skia/types/Skottie.js.map +1 -0
  154. package/lib/module/skia/types/index.d.ts +1 -0
  155. package/lib/module/skia/types/index.js +1 -0
  156. package/lib/module/skia/types/index.js.map +1 -1
  157. package/lib/module/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
  158. package/lib/module/skia/web/JsiSkImageFilterFactory.js +88 -19
  159. package/lib/module/skia/web/JsiSkImageFilterFactory.js.map +1 -1
  160. package/lib/module/skia/web/JsiSkia.js +2 -0
  161. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  162. package/lib/module/skia/web/JsiSkottieAnimation.d.ts +59 -0
  163. package/lib/module/skia/web/JsiSkottieAnimation.js +236 -0
  164. package/lib/module/skia/web/JsiSkottieAnimation.js.map +1 -0
  165. package/lib/module/skia/web/JsiSkottieFactory.d.ts +9 -0
  166. package/lib/module/skia/web/JsiSkottieFactory.js +19 -0
  167. package/lib/module/skia/web/JsiSkottieFactory.js.map +1 -0
  168. package/lib/module/sksg/Elements.d.ts +3 -1
  169. package/lib/module/sksg/Elements.js.map +1 -1
  170. package/lib/module/sksg/Node.d.ts +1 -1
  171. package/lib/module/sksg/Node.js +1 -1
  172. package/lib/module/sksg/Node.js.map +1 -1
  173. package/lib/module/sksg/Recorder/Core.d.ts +4 -2
  174. package/lib/module/sksg/Recorder/Core.js +1 -0
  175. package/lib/module/sksg/Recorder/Core.js.map +1 -1
  176. package/lib/module/sksg/Recorder/Player.js +3 -1
  177. package/lib/module/sksg/Recorder/Player.js.map +1 -1
  178. package/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
  179. package/lib/module/sksg/Recorder/ReanimatedRecorder.js +4 -0
  180. package/lib/module/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
  181. package/lib/module/sksg/Recorder/Recorder.d.ts +2 -1
  182. package/lib/module/sksg/Recorder/Recorder.js +6 -0
  183. package/lib/module/sksg/Recorder/Recorder.js.map +1 -1
  184. package/lib/module/sksg/Recorder/Visitor.js +3 -0
  185. package/lib/module/sksg/Recorder/Visitor.js.map +1 -1
  186. package/lib/module/sksg/Recorder/commands/Drawing.d.ts +2 -2
  187. package/lib/module/sksg/Recorder/commands/Drawing.js +9 -2
  188. package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -1
  189. package/lib/module/sksg/Recorder/commands/ImageFilters.js +12 -2
  190. package/lib/module/sksg/Recorder/commands/ImageFilters.js.map +1 -1
  191. package/lib/typescript/lib/commonjs/renderer/components/ImageFilter.d.ts +2 -0
  192. package/lib/typescript/lib/commonjs/renderer/components/Skottie.d.ts +2 -0
  193. package/lib/typescript/lib/commonjs/skia/types/Matrix4.d.ts +1 -0
  194. package/lib/typescript/lib/commonjs/skia/types/Skottie.d.ts +6 -0
  195. package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFilterFactory.d.ts +22 -5
  196. package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +2 -0
  197. package/lib/typescript/lib/commonjs/skia/web/JsiSkottieAnimation.d.ts +48 -0
  198. package/lib/typescript/lib/commonjs/skia/web/JsiSkottieFactory.d.ts +6 -0
  199. package/lib/typescript/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
  200. package/lib/typescript/lib/commonjs/sksg/Recorder/Recorder.d.ts +1 -0
  201. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Drawing.d.ts +1 -1
  202. package/lib/typescript/lib/module/mock/index.d.ts +8 -0
  203. package/lib/typescript/lib/module/renderer/components/ImageFilter.d.ts +2 -0
  204. package/lib/typescript/lib/module/renderer/components/Skottie.d.ts +2 -0
  205. package/lib/typescript/lib/module/renderer/components/index.d.ts +2 -0
  206. package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -0
  207. package/lib/typescript/lib/module/skia/types/Matrix4.d.ts +1 -0
  208. package/lib/typescript/lib/module/skia/types/Skottie.d.ts +5 -0
  209. package/lib/typescript/lib/module/skia/types/index.d.ts +1 -0
  210. package/lib/typescript/lib/module/skia/web/JsiSkImageFilterFactory.d.ts +22 -5
  211. package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +2 -0
  212. package/lib/typescript/lib/module/skia/web/JsiSkottieAnimation.d.ts +47 -0
  213. package/lib/typescript/lib/module/skia/web/JsiSkottieFactory.d.ts +5 -0
  214. package/lib/typescript/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
  215. package/lib/typescript/lib/module/sksg/Recorder/Recorder.d.ts +1 -0
  216. package/lib/typescript/lib/module/sksg/Recorder/commands/Drawing.d.ts +1 -1
  217. package/lib/typescript/src/dom/nodes/datatypes/Gradient.d.ts +15 -15
  218. package/lib/typescript/src/dom/types/Drawings.d.ts +8 -1
  219. package/lib/typescript/src/dom/types/NodeType.d.ts +3 -1
  220. package/lib/typescript/src/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
  221. package/lib/typescript/src/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
  222. package/lib/typescript/src/renderer/__tests__/e2e/ImageFilter.spec.d.ts +1 -0
  223. package/lib/typescript/src/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
  224. package/lib/typescript/src/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
  225. package/lib/typescript/src/renderer/__tests__/setup.d.ts +5 -0
  226. package/lib/typescript/src/renderer/components/ImageFilter.d.ts +4 -0
  227. package/lib/typescript/src/renderer/components/Skottie.d.ts +4 -0
  228. package/lib/typescript/src/renderer/components/index.d.ts +2 -0
  229. package/lib/typescript/src/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
  230. package/lib/typescript/src/skia/types/Matrix4.d.ts +11 -2
  231. package/lib/typescript/src/skia/types/Recorder.d.ts +2 -1
  232. package/lib/typescript/src/skia/types/Skia.d.ts +2 -0
  233. package/lib/typescript/src/skia/types/Skottie.d.ts +223 -0
  234. package/lib/typescript/src/skia/types/index.d.ts +1 -0
  235. package/lib/typescript/src/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
  236. package/lib/typescript/src/skia/web/JsiSkottieAnimation.d.ts +59 -0
  237. package/lib/typescript/src/skia/web/JsiSkottieFactory.d.ts +9 -0
  238. package/lib/typescript/src/sksg/Elements.d.ts +3 -1
  239. package/lib/typescript/src/sksg/Node.d.ts +1 -1
  240. package/lib/typescript/src/sksg/Recorder/Core.d.ts +4 -2
  241. package/lib/typescript/src/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
  242. package/lib/typescript/src/sksg/Recorder/Recorder.d.ts +2 -1
  243. package/lib/typescript/src/sksg/Recorder/commands/Drawing.d.ts +2 -2
  244. package/libs/android/arm64-v8a/libjsonreader.a +0 -0
  245. package/libs/android/armeabi-v7a/libjsonreader.a +0 -0
  246. package/libs/android/x86/libjsonreader.a +0 -0
  247. package/libs/android/x86_64/libjsonreader.a +0 -0
  248. package/libs/apple/libpathops.xcframework/Info.plist +8 -8
  249. package/libs/apple/libskia.xcframework/Info.plist +14 -14
  250. package/libs/apple/libskottie.xcframework/Info.plist +14 -14
  251. package/libs/apple/libskparagraph.xcframework/Info.plist +16 -16
  252. package/libs/apple/libsksg.xcframework/Info.plist +5 -5
  253. package/libs/apple/libskshaper.xcframework/Info.plist +14 -14
  254. package/libs/apple/libskunicode_libgrapheme.xcframework/Info.plist +14 -14
  255. package/libs/apple/libsvg.xcframework/Info.plist +14 -14
  256. package/package.json +1 -1
  257. package/react-native-skia.podspec +4 -2
  258. package/src/__tests__/snapshots/matrix4/camera-corner.png +0 -0
  259. package/src/__tests__/snapshots/matrix4/camera-offset.png +0 -0
  260. package/src/__tests__/snapshots/matrix4/camera-top-left-center.png +0 -0
  261. package/src/__tests__/snapshots/matrix4/camera-zoom-out.png +0 -0
  262. package/src/__tests__/snapshots/matrix4/full-rect.png +0 -0
  263. package/src/__tests__/snapshots/matrix4/rect.png +0 -0
  264. package/src/__tests__/snapshots/matrix4/scaled-rect.png +0 -0
  265. package/src/__tests__/snapshots/matrix4/test-perspective.png +0 -0
  266. package/src/__tests__/snapshots/matrix4/test-perspective2.png +0 -0
  267. package/src/dom/types/Drawings.ts +11 -0
  268. package/src/dom/types/NodeType.ts +4 -0
  269. package/src/renderer/__tests__/e2e/AdvancedImageFilters.spec.tsx +492 -0
  270. package/src/renderer/__tests__/e2e/Camera.spec.tsx +475 -0
  271. package/src/renderer/__tests__/e2e/ImageFilter.spec.tsx +99 -0
  272. package/src/renderer/__tests__/e2e/LightingImageFilters.spec.tsx +1478 -0
  273. package/src/renderer/__tests__/e2e/Skottie.spec.tsx +440 -0
  274. package/src/renderer/__tests__/e2e/setup/skottie/basic_slots.json +1118 -0
  275. package/src/renderer/__tests__/e2e/setup/skottie/color-props.json +1 -0
  276. package/src/renderer/__tests__/e2e/setup/skottie/confetti.json +5899 -0
  277. package/src/renderer/__tests__/e2e/setup/skottie/drinks.json +43857 -0
  278. package/src/renderer/__tests__/e2e/setup/skottie/fingerprint.json +1 -0
  279. package/src/renderer/__tests__/e2e/setup/skottie/lego_loader.json +29540 -0
  280. package/src/renderer/__tests__/e2e/setup/skottie/new-drop.json +1 -0
  281. package/src/renderer/__tests__/e2e/setup/skottie/onboarding.json +1 -0
  282. package/src/renderer/__tests__/e2e/setup/skottie/text-layer.json +1 -0
  283. package/src/renderer/__tests__/setup.tsx +31 -0
  284. package/src/renderer/components/ImageFilter.tsx +8 -0
  285. package/src/renderer/components/Skottie.tsx +8 -0
  286. package/src/renderer/components/index.ts +2 -0
  287. package/src/skia/__tests__/assets/Avenir-Heavy.ttf +0 -0
  288. package/src/skia/types/ImageFilter/ImageFilterFactory.ts +391 -21
  289. package/src/skia/types/Matrix4.ts +108 -2
  290. package/src/skia/types/Recorder.ts +2 -0
  291. package/src/skia/types/Skia.ts +2 -0
  292. package/src/skia/types/Skottie.ts +266 -0
  293. package/src/skia/types/index.ts +1 -0
  294. package/src/skia/web/JsiSkImageFilterFactory.ts +266 -31
  295. package/src/skia/web/JsiSkia.ts +2 -0
  296. package/src/skia/web/JsiSkottieAnimation.ts +259 -0
  297. package/src/skia/web/JsiSkottieFactory.ts +25 -0
  298. package/src/sksg/Elements.tsx +4 -0
  299. package/src/sksg/Node.ts +1 -0
  300. package/src/sksg/Recorder/Core.ts +3 -0
  301. package/src/sksg/Recorder/Player.ts +3 -0
  302. package/src/sksg/Recorder/ReanimatedRecorder.ts +6 -0
  303. package/src/sksg/Recorder/Recorder.ts +5 -0
  304. package/src/sksg/Recorder/Visitor.ts +3 -0
  305. package/src/sksg/Recorder/commands/Drawing.ts +7 -3
  306. package/src/sksg/Recorder/commands/ImageFilters.ts +15 -2
@@ -7,12 +7,14 @@
7
7
 
8
8
  #include "JsiSkHostObjects.h"
9
9
  #include "JsiSkImageFilter.h"
10
+ #include "JsiSkPicture.h"
10
11
  #include "JsiSkRuntimeShaderBuilder.h"
11
12
 
12
13
  #pragma clang diagnostic push
13
14
  #pragma clang diagnostic ignored "-Wdocumentation"
14
15
 
15
16
  #include "include/core/SkImageFilter.h"
17
+ #include "include/core/SkPoint3.h"
16
18
 
17
19
  #pragma clang diagnostic pop
18
20
 
@@ -20,46 +22,65 @@ namespace RNSkia {
20
22
 
21
23
  namespace jsi = facebook::jsi;
22
24
 
25
+ inline bool hasOptionalArgument(const jsi::Value *arguments, size_t count,
26
+ size_t index) {
27
+ return (index < count && !arguments[index].isNull() &&
28
+ !arguments[index].isUndefined());
29
+ }
30
+
23
31
  class JsiSkImageFilterFactory : public JsiSkHostObject {
24
32
  public:
25
33
  JSI_HOST_FUNCTION(MakeBlur) {
26
34
  float sigmaX = arguments[0].asNumber();
27
35
  float sigmaY = arguments[1].asNumber();
28
36
  int tileMode = arguments[2].asNumber();
29
- sk_sp<SkImageFilter> imageFilter;
30
- if (!arguments[3].isNull()) {
37
+ sk_sp<SkImageFilter> imageFilter = nullptr;
38
+ if (hasOptionalArgument(arguments, count, 3)) {
31
39
  imageFilter = JsiSkImageFilter::fromValue(runtime, arguments[3]);
32
40
  }
41
+ SkImageFilters::CropRect cropRect = {};
42
+ if (hasOptionalArgument(arguments, count, 4)) {
43
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[4]);
44
+ }
33
45
  return jsi::Object::createFromHostObject(
34
46
  runtime, std::make_shared<JsiSkImageFilter>(
35
47
  getContext(),
36
48
  SkImageFilters::Blur(sigmaX, sigmaY, (SkTileMode)tileMode,
37
- imageFilter)));
49
+ imageFilter, cropRect)));
38
50
  }
39
51
 
40
52
  JSI_HOST_FUNCTION(MakeColorFilter) {
41
53
  auto cf = JsiSkColorFilter::fromValue(runtime, arguments[0]);
42
- sk_sp<SkImageFilter> input;
43
- if (!arguments[1].isNull()) {
54
+ sk_sp<SkImageFilter> input = nullptr;
55
+ if (hasOptionalArgument(arguments, count, 1)) {
44
56
  input = JsiSkImageFilter::fromValue(runtime, arguments[1]);
45
57
  }
58
+ SkImageFilters::CropRect cropRect = {};
59
+ if (hasOptionalArgument(arguments, count, 2)) {
60
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[2]);
61
+ }
46
62
  return jsi::Object::createFromHostObject(
47
- runtime, std::make_shared<JsiSkImageFilter>(
48
- getContext(), SkImageFilters::ColorFilter(
49
- std::move(cf), std::move(input))));
63
+ runtime,
64
+ std::make_shared<JsiSkImageFilter>(
65
+ getContext(), SkImageFilters::ColorFilter(
66
+ std::move(cf), std::move(input), cropRect)));
50
67
  }
51
68
 
52
69
  JSI_HOST_FUNCTION(MakeOffset) {
53
70
  auto x = arguments[0].asNumber();
54
71
  auto y = arguments[1].asNumber();
55
- sk_sp<SkImageFilter> input;
56
- if (!arguments[2].isNull()) {
72
+ sk_sp<SkImageFilter> input = nullptr;
73
+ if (hasOptionalArgument(arguments, count, 2)) {
57
74
  input = JsiSkImageFilter::fromValue(runtime, arguments[2]);
58
75
  }
76
+ SkImageFilters::CropRect cropRect = {};
77
+ if (hasOptionalArgument(arguments, count, 3)) {
78
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[3]);
79
+ }
59
80
  return jsi::Object::createFromHostObject(
60
- runtime,
61
- std::make_shared<JsiSkImageFilter>(
62
- getContext(), SkImageFilters::Offset(x, y, std::move(input))));
81
+ runtime, std::make_shared<JsiSkImageFilter>(
82
+ getContext(),
83
+ SkImageFilters::Offset(x, y, std::move(input), cropRect)));
63
84
  }
64
85
 
65
86
  JSI_HOST_FUNCTION(MakeDisplacementMap) {
@@ -69,32 +90,46 @@ public:
69
90
  static_cast<SkColorChannel>(arguments[1].asNumber());
70
91
  auto scale = arguments[2].asNumber();
71
92
  auto in2 = JsiSkImageFilter::fromValue(runtime, arguments[3]);
72
- sk_sp<SkImageFilter> input;
73
- if (!arguments[4].isNull()) {
93
+ sk_sp<SkImageFilter> input = nullptr;
94
+ if (hasOptionalArgument(arguments, count, 4)) {
74
95
  input = JsiSkImageFilter::fromValue(runtime, arguments[4]);
75
96
  }
97
+ SkImageFilters::CropRect cropRect = {};
98
+ if (hasOptionalArgument(arguments, count, 5)) {
99
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[5]);
100
+ }
76
101
  return jsi::Object::createFromHostObject(
77
102
  runtime,
78
103
  std::make_shared<JsiSkImageFilter>(
79
104
  getContext(), SkImageFilters::DisplacementMap(
80
105
  fXChannelSelector, fYChannelSelector, scale,
81
- std::move(in2), std::move(input))));
106
+ std::move(in2), std::move(input), cropRect)));
82
107
  }
83
108
 
84
109
  JSI_HOST_FUNCTION(MakeShader) {
85
110
  auto shader = JsiSkShader::fromValue(runtime, arguments[0]);
111
+ SkImageFilters::Dither dither = SkImageFilters::Dither::kNo;
112
+ if (hasOptionalArgument(arguments, count, 1)) {
113
+ dither = arguments[1].asBool() ? SkImageFilters::Dither::kYes
114
+ : SkImageFilters::Dither::kNo;
115
+ }
116
+ SkImageFilters::CropRect cropRect = {};
117
+ if (hasOptionalArgument(arguments, count, 2)) {
118
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[2]);
119
+ }
86
120
  return jsi::Object::createFromHostObject(
87
121
  runtime, std::make_shared<JsiSkImageFilter>(
88
- getContext(), SkImageFilters::Shader(std::move(shader))));
122
+ getContext(), SkImageFilters::Shader(std::move(shader),
123
+ dither, cropRect)));
89
124
  }
90
125
 
91
126
  JSI_HOST_FUNCTION(MakeCompose) {
92
- sk_sp<SkImageFilter> outer;
93
- if (!arguments[0].isNull() && !arguments[0].isUndefined()) {
127
+ sk_sp<SkImageFilter> outer = nullptr;
128
+ if (hasOptionalArgument(arguments, count, 0)) {
94
129
  outer = JsiSkImageFilter::fromValue(runtime, arguments[0]);
95
130
  }
96
- sk_sp<SkImageFilter> inner;
97
- if (!arguments[1].isNull() && !arguments[1].isUndefined()) {
131
+ sk_sp<SkImageFilter> inner = nullptr;
132
+ if (hasOptionalArgument(arguments, count, 1)) {
98
133
  inner = JsiSkImageFilter::fromValue(runtime, arguments[1]);
99
134
  }
100
135
  return jsi::Object::createFromHostObject(
@@ -109,12 +144,12 @@ public:
109
144
  JsiSkImageFilter::fromValue(runtime, arguments[1]);
110
145
  sk_sp<SkImageFilter> foreground = nullptr;
111
146
 
112
- if (count > 2 && !arguments[2].isNull()) {
147
+ if (hasOptionalArgument(arguments, count, 2)) {
113
148
  foreground = JsiSkImageFilter::fromValue(runtime, arguments[2]);
114
149
  }
115
150
 
116
151
  SkImageFilters::CropRect cropRect = {};
117
- if (count > 3 && !arguments[3].isUndefined()) {
152
+ if (hasOptionalArgument(arguments, count, 3)) {
118
153
  cropRect = *JsiSkRect::fromValue(runtime, arguments[3]);
119
154
  }
120
155
 
@@ -131,12 +166,12 @@ public:
131
166
  auto sigmaX = arguments[2].asNumber();
132
167
  auto sigmaY = arguments[3].asNumber();
133
168
  auto color = JsiSkColor::fromValue(runtime, arguments[4]);
134
- sk_sp<SkImageFilter> input;
135
- if (!arguments[5].isNull() && !arguments[5].isUndefined()) {
169
+ sk_sp<SkImageFilter> input = nullptr;
170
+ if (hasOptionalArgument(arguments, count, 5)) {
136
171
  input = JsiSkImageFilter::fromValue(runtime, arguments[5]);
137
172
  }
138
173
  SkImageFilters::CropRect cropRect = {};
139
- if (count > 6 && !arguments[6].isUndefined()) {
174
+ if (hasOptionalArgument(arguments, count, 6)) {
140
175
  cropRect = *JsiSkRect::fromValue(runtime, arguments[6]);
141
176
  }
142
177
  return jsi::Object::createFromHostObject(
@@ -152,12 +187,12 @@ public:
152
187
  auto sigmaX = arguments[2].asNumber();
153
188
  auto sigmaY = arguments[3].asNumber();
154
189
  auto color = JsiSkColor::fromValue(runtime, arguments[4]);
155
- sk_sp<SkImageFilter> input;
156
- if (!arguments[5].isNull() && !arguments[5].isUndefined()) {
190
+ sk_sp<SkImageFilter> input = nullptr;
191
+ if (hasOptionalArgument(arguments, count, 5)) {
157
192
  input = JsiSkImageFilter::fromValue(runtime, arguments[5]);
158
193
  }
159
194
  SkImageFilters::CropRect cropRect = {};
160
- if (count > 6 && !arguments[6].isUndefined()) {
195
+ if (hasOptionalArgument(arguments, count, 6)) {
161
196
  cropRect = *JsiSkRect::fromValue(runtime, arguments[6]);
162
197
  }
163
198
  return jsi::Object::createFromHostObject(
@@ -170,12 +205,12 @@ public:
170
205
  JSI_HOST_FUNCTION(MakeErode) {
171
206
  auto rx = arguments[0].asNumber();
172
207
  auto ry = arguments[1].asNumber();
173
- sk_sp<SkImageFilter> input;
174
- if (!arguments[2].isNull() && !arguments[2].isUndefined()) {
208
+ sk_sp<SkImageFilter> input = nullptr;
209
+ if (hasOptionalArgument(arguments, count, 2)) {
175
210
  input = JsiSkImageFilter::fromValue(runtime, arguments[2]);
176
211
  }
177
212
  SkImageFilters::CropRect cropRect = {};
178
- if (count > 3 && !arguments[3].isUndefined()) {
213
+ if (hasOptionalArgument(arguments, count, 3)) {
179
214
  cropRect = *JsiSkRect::fromValue(runtime, arguments[3]);
180
215
  }
181
216
  return jsi::Object::createFromHostObject(
@@ -187,12 +222,12 @@ public:
187
222
  JSI_HOST_FUNCTION(MakeDilate) {
188
223
  auto rx = arguments[0].asNumber();
189
224
  auto ry = arguments[1].asNumber();
190
- sk_sp<SkImageFilter> input;
191
- if (!arguments[2].isNull() && !arguments[2].isUndefined()) {
225
+ sk_sp<SkImageFilter> input = nullptr;
226
+ if (hasOptionalArgument(arguments, count, 2)) {
192
227
  input = JsiSkImageFilter::fromValue(runtime, arguments[2]);
193
228
  }
194
229
  SkImageFilters::CropRect cropRect = {};
195
- if (count > 3 && !arguments[3].isUndefined()) {
230
+ if (hasOptionalArgument(arguments, count, 3)) {
196
231
  cropRect = *JsiSkRect::fromValue(runtime, arguments[3]);
197
232
  }
198
233
  return jsi::Object::createFromHostObject(
@@ -205,12 +240,12 @@ public:
205
240
  auto rtb = JsiSkRuntimeShaderBuilder::fromValue(runtime, arguments[0]);
206
241
 
207
242
  const char *childName = "";
208
- if (!arguments[1].isNull() && !arguments[1].isUndefined()) {
243
+ if (hasOptionalArgument(arguments, count, 1)) {
209
244
  childName = arguments[1].asString(runtime).utf8(runtime).c_str();
210
245
  }
211
246
 
212
- sk_sp<SkImageFilter> input;
213
- if (!arguments[2].isNull() && !arguments[2].isUndefined()) {
247
+ sk_sp<SkImageFilter> input = nullptr;
248
+ if (hasOptionalArgument(arguments, count, 2)) {
214
249
  input = JsiSkImageFilter::fromValue(runtime, arguments[2]);
215
250
  }
216
251
  return jsi::Object::createFromHostObject(
@@ -219,6 +254,393 @@ public:
219
254
  *rtb, childName, std::move(input))));
220
255
  }
221
256
 
257
+ JSI_HOST_FUNCTION(MakeArithmetic) {
258
+ float k1 = arguments[0].asNumber();
259
+ float k2 = arguments[1].asNumber();
260
+ float k3 = arguments[2].asNumber();
261
+ float k4 = arguments[3].asNumber();
262
+ bool enforcePMColor = arguments[4].asBool();
263
+ sk_sp<SkImageFilter> background = nullptr;
264
+ if (hasOptionalArgument(arguments, count, 5)) {
265
+ background = JsiSkImageFilter::fromValue(runtime, arguments[5]);
266
+ }
267
+ sk_sp<SkImageFilter> foreground = nullptr;
268
+ if (hasOptionalArgument(arguments, count, 6)) {
269
+ foreground = JsiSkImageFilter::fromValue(runtime, arguments[6]);
270
+ }
271
+ SkImageFilters::CropRect cropRect = {};
272
+ if (hasOptionalArgument(arguments, count, 7)) {
273
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[7]);
274
+ }
275
+ return jsi::Object::createFromHostObject(
276
+ runtime, std::make_shared<JsiSkImageFilter>(
277
+ getContext(),
278
+ SkImageFilters::Arithmetic(
279
+ k1, k2, k3, k4, enforcePMColor, std::move(background),
280
+ std::move(foreground), cropRect)));
281
+ }
282
+
283
+ JSI_HOST_FUNCTION(MakeCrop) {
284
+ SkRect rect = *JsiSkRect::fromValue(runtime, arguments[0]);
285
+ SkTileMode tileMode = SkTileMode::kDecal;
286
+ if (hasOptionalArgument(arguments, count, 1)) {
287
+ tileMode = (SkTileMode)arguments[1].asNumber();
288
+ }
289
+ sk_sp<SkImageFilter> imageFilter = nullptr;
290
+ if (hasOptionalArgument(arguments, count, 2)) {
291
+ imageFilter = JsiSkImageFilter::fromValue(runtime, arguments[2]);
292
+ }
293
+ return jsi::Object::createFromHostObject(
294
+ runtime,
295
+ std::make_shared<JsiSkImageFilter>(
296
+ getContext(),
297
+ SkImageFilters::Crop(rect, tileMode, std::move(imageFilter))));
298
+ }
299
+
300
+ JSI_HOST_FUNCTION(MakeEmpty) {
301
+ return jsi::Object::createFromHostObject(
302
+ runtime, std::make_shared<JsiSkImageFilter>(getContext(),
303
+ SkImageFilters::Empty()));
304
+ }
305
+
306
+ inline SkPoint3 SkPoint3FromValue(jsi::Runtime &runtime,
307
+ const jsi::Value &obj) {
308
+ const auto &object = obj.asObject(runtime);
309
+ auto x = object.getProperty(runtime, "x").asNumber();
310
+ auto y = object.getProperty(runtime, "y").asNumber();
311
+ auto z = object.getProperty(runtime, "z").asNumber();
312
+ return SkPoint3::Make(x, y, z);
313
+ }
314
+
315
+ JSI_HOST_FUNCTION(MakeDistantLitDiffuse) {
316
+ SkPoint3 direction = SkPoint3FromValue(runtime, arguments[0]);
317
+ SkColor lightColor = JsiSkColor::fromValue(runtime, arguments[1]);
318
+ float surfaceScale = arguments[2].asNumber();
319
+ float kd = arguments[3].asNumber();
320
+ sk_sp<SkImageFilter> input = nullptr;
321
+ if (hasOptionalArgument(arguments, count, 4)) {
322
+ input = JsiSkImageFilter::fromValue(runtime, arguments[4]);
323
+ }
324
+ SkImageFilters::CropRect cropRect = {};
325
+ if (hasOptionalArgument(arguments, count, 5)) {
326
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[5]);
327
+ }
328
+ return jsi::Object::createFromHostObject(
329
+ runtime, std::make_shared<JsiSkImageFilter>(
330
+ getContext(), SkImageFilters::DistantLitDiffuse(
331
+ direction, lightColor, surfaceScale, kd,
332
+ std::move(input), cropRect)));
333
+ }
334
+
335
+ JSI_HOST_FUNCTION(MakePointLitDiffuse) {
336
+ SkPoint3 location = SkPoint3FromValue(runtime, arguments[0]);
337
+ SkColor lightColor = JsiSkColor::fromValue(runtime, arguments[1]);
338
+ float surfaceScale = arguments[2].asNumber();
339
+ float kd = arguments[3].asNumber();
340
+ sk_sp<SkImageFilter> input = nullptr;
341
+ if (hasOptionalArgument(arguments, count, 4)) {
342
+ input = JsiSkImageFilter::fromValue(runtime, arguments[4]);
343
+ }
344
+ SkImageFilters::CropRect cropRect = {};
345
+ if (hasOptionalArgument(arguments, count, 5)) {
346
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[5]);
347
+ }
348
+ return jsi::Object::createFromHostObject(
349
+ runtime, std::make_shared<JsiSkImageFilter>(
350
+ getContext(), SkImageFilters::PointLitDiffuse(
351
+ location, lightColor, surfaceScale, kd,
352
+ std::move(input), cropRect)));
353
+ }
354
+
355
+ JSI_HOST_FUNCTION(MakeSpotLitDiffuse) {
356
+ SkPoint3 location = SkPoint3FromValue(runtime, arguments[0]);
357
+ SkPoint3 target = SkPoint3FromValue(runtime, arguments[1]);
358
+ float falloffExponent = arguments[2].asNumber();
359
+ float cutoffAngle = arguments[3].asNumber();
360
+ SkColor lightColor = JsiSkColor::fromValue(runtime, arguments[4]);
361
+ float surfaceScale = arguments[5].asNumber();
362
+ float kd = arguments[6].asNumber();
363
+ sk_sp<SkImageFilter> input = nullptr;
364
+ if (hasOptionalArgument(arguments, count, 7)) {
365
+ input = JsiSkImageFilter::fromValue(runtime, arguments[7]);
366
+ }
367
+ SkImageFilters::CropRect cropRect = {};
368
+ if (hasOptionalArgument(arguments, count, 8)) {
369
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[8]);
370
+ }
371
+ return jsi::Object::createFromHostObject(
372
+ runtime, std::make_shared<JsiSkImageFilter>(
373
+ getContext(), SkImageFilters::SpotLitDiffuse(
374
+ location, target, falloffExponent,
375
+ cutoffAngle, lightColor, surfaceScale,
376
+ kd, std::move(input), cropRect)));
377
+ }
378
+
379
+ JSI_HOST_FUNCTION(MakeDistantLitSpecular) {
380
+ SkPoint3 direction = SkPoint3FromValue(runtime, arguments[0]);
381
+ SkColor lightColor = JsiSkColor::fromValue(runtime, arguments[1]);
382
+ float surfaceScale = arguments[2].asNumber();
383
+ float ks = arguments[3].asNumber();
384
+ float shininess = arguments[4].asNumber();
385
+ sk_sp<SkImageFilter> input = nullptr;
386
+ if (hasOptionalArgument(arguments, count, 5)) {
387
+ input = JsiSkImageFilter::fromValue(runtime, arguments[5]);
388
+ }
389
+ SkImageFilters::CropRect cropRect = {};
390
+ if (hasOptionalArgument(arguments, count, 6)) {
391
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[6]);
392
+ }
393
+ return jsi::Object::createFromHostObject(
394
+ runtime, std::make_shared<JsiSkImageFilter>(
395
+ getContext(), SkImageFilters::DistantLitSpecular(
396
+ direction, lightColor, surfaceScale, ks,
397
+ shininess, std::move(input), cropRect)));
398
+ }
399
+
400
+ JSI_HOST_FUNCTION(MakePointLitSpecular) {
401
+ SkPoint3 location = SkPoint3FromValue(runtime, arguments[0]);
402
+ SkColor lightColor = JsiSkColor::fromValue(runtime, arguments[1]);
403
+ float surfaceScale = arguments[2].asNumber();
404
+ float ks = arguments[3].asNumber();
405
+ float shininess = arguments[4].asNumber();
406
+ sk_sp<SkImageFilter> input = nullptr;
407
+ if (hasOptionalArgument(arguments, count, 5)) {
408
+ input = JsiSkImageFilter::fromValue(runtime, arguments[5]);
409
+ }
410
+ SkImageFilters::CropRect cropRect = {};
411
+ if (hasOptionalArgument(arguments, count, 6)) {
412
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[6]);
413
+ }
414
+ return jsi::Object::createFromHostObject(
415
+ runtime, std::make_shared<JsiSkImageFilter>(
416
+ getContext(), SkImageFilters::PointLitSpecular(
417
+ location, lightColor, surfaceScale, ks,
418
+ shininess, std::move(input), cropRect)));
419
+ }
420
+
421
+ JSI_HOST_FUNCTION(MakeSpotLitSpecular) {
422
+ SkPoint3 location = SkPoint3FromValue(runtime, arguments[0]);
423
+ SkPoint3 target = SkPoint3FromValue(runtime, arguments[1]);
424
+ float falloffExponent = arguments[2].asNumber();
425
+ float cutoffAngle = arguments[3].asNumber();
426
+ SkColor lightColor = JsiSkColor::fromValue(runtime, arguments[4]);
427
+ float surfaceScale = arguments[5].asNumber();
428
+ float ks = arguments[6].asNumber();
429
+ float shininess = arguments[7].asNumber();
430
+ sk_sp<SkImageFilter> input = nullptr;
431
+ if (hasOptionalArgument(arguments, count, 8)) {
432
+ input = JsiSkImageFilter::fromValue(runtime, arguments[8]);
433
+ }
434
+ SkImageFilters::CropRect cropRect = {};
435
+ if (hasOptionalArgument(arguments, count, 9)) {
436
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[9]);
437
+ }
438
+ return jsi::Object::createFromHostObject(
439
+ runtime,
440
+ std::make_shared<JsiSkImageFilter>(
441
+ getContext(),
442
+ SkImageFilters::SpotLitSpecular(
443
+ location, target, falloffExponent, cutoffAngle, lightColor,
444
+ surfaceScale, ks, shininess, std::move(input), cropRect)));
445
+ }
446
+
447
+ JSI_HOST_FUNCTION(MakeImage) {
448
+ sk_sp<SkImage> image = JsiSkImage::fromValue(runtime, arguments[0]);
449
+ SkRect srcRect;
450
+ if (hasOptionalArgument(arguments, count, 1)) {
451
+ srcRect = *JsiSkRect::fromValue(runtime, arguments[1]);
452
+ } else {
453
+ srcRect = SkRect::Make(image->bounds());
454
+ }
455
+ SkRect dstRect;
456
+ if (hasOptionalArgument(arguments, count, 2)) {
457
+ dstRect = *JsiSkRect::fromValue(runtime, arguments[2]);
458
+ } else {
459
+ dstRect = srcRect;
460
+ }
461
+ SkFilterMode filterMode = SkFilterMode::kNearest;
462
+ if (hasOptionalArgument(arguments, count, 3)) {
463
+ filterMode = (SkFilterMode)arguments[3].asNumber();
464
+ }
465
+ SkMipmapMode mipmap = SkMipmapMode::kNone;
466
+ if (hasOptionalArgument(arguments, count, 4)) {
467
+ mipmap = (SkMipmapMode)arguments[4].asNumber();
468
+ }
469
+ return jsi::Object::createFromHostObject(
470
+ runtime, std::make_shared<JsiSkImageFilter>(
471
+ getContext(), SkImageFilters::Image(
472
+ std::move(image), srcRect, dstRect,
473
+ SkSamplingOptions(filterMode, mipmap))));
474
+ }
475
+
476
+ JSI_HOST_FUNCTION(MakeMagnifier) {
477
+ SkRect lensBounds = *JsiSkRect::fromValue(runtime, arguments[0]);
478
+ float zoomAmount = arguments[1].asNumber();
479
+ float inset = arguments[2].asNumber();
480
+ SkFilterMode filterMode = SkFilterMode::kNearest;
481
+ if (hasOptionalArgument(arguments, count, 3)) {
482
+ filterMode = (SkFilterMode)arguments[3].asNumber();
483
+ }
484
+ SkMipmapMode mipmap = SkMipmapMode::kNone;
485
+ if (hasOptionalArgument(arguments, count, 4)) {
486
+ mipmap = (SkMipmapMode)arguments[4].asNumber();
487
+ }
488
+ sk_sp<SkImageFilter> input = nullptr;
489
+ if (hasOptionalArgument(arguments, count, 5)) {
490
+ input = JsiSkImageFilter::fromValue(runtime, arguments[5]);
491
+ }
492
+ SkImageFilters::CropRect cropRect = {};
493
+ if (hasOptionalArgument(arguments, count, 6)) {
494
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[6]);
495
+ }
496
+ return jsi::Object::createFromHostObject(
497
+ runtime, std::make_shared<JsiSkImageFilter>(
498
+ getContext(), SkImageFilters::Magnifier(
499
+ lensBounds, zoomAmount, inset,
500
+ SkSamplingOptions(filterMode, mipmap),
501
+ input, cropRect)));
502
+ }
503
+
504
+ JSI_HOST_FUNCTION(MakeMatrixConvolution) {
505
+ SkISize kernelSize =
506
+ SkISize::Make(arguments[0].asNumber(), arguments[1].asNumber());
507
+ std::vector<float> kernel;
508
+ auto kernelArray = arguments[2].asObject(runtime).asArray(runtime);
509
+ auto size = kernelArray.size(runtime);
510
+ for (size_t i = 0; i < size; i++) {
511
+ kernel.push_back(kernelArray.getValueAtIndex(runtime, i).asNumber());
512
+ }
513
+ auto gain = arguments[3].asNumber();
514
+ auto bias = arguments[4].asNumber();
515
+ SkIPoint kernelOffset =
516
+ SkIPoint::Make(arguments[5].asNumber(), arguments[6].asNumber());
517
+ auto tileMode = static_cast<SkTileMode>(arguments[7].asNumber());
518
+ bool convolveAlpha = arguments[8].asBool();
519
+ sk_sp<SkImageFilter> input = nullptr;
520
+ if (hasOptionalArgument(arguments, count, 9)) {
521
+ input = JsiSkImageFilter::fromValue(runtime, arguments[9]);
522
+ }
523
+ SkImageFilters::CropRect cropRect = {};
524
+ if (hasOptionalArgument(arguments, count, 10)) {
525
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[10]);
526
+ }
527
+ return jsi::Object::createFromHostObject(
528
+ runtime, std::make_shared<JsiSkImageFilter>(
529
+ getContext(),
530
+ SkImageFilters::MatrixConvolution(
531
+ kernelSize, kernel.data(), gain, bias, kernelOffset,
532
+ tileMode, convolveAlpha, std::move(input), cropRect)));
533
+ }
534
+
535
+ JSI_HOST_FUNCTION(MakeMatrixTransform) {
536
+ SkMatrix matrix = *JsiSkMatrix::fromValue(runtime, arguments[0]);
537
+ SkFilterMode filterMode = SkFilterMode::kNearest;
538
+ if (hasOptionalArgument(arguments, count, 1)) {
539
+ filterMode = (SkFilterMode)arguments[1].asNumber();
540
+ }
541
+ SkMipmapMode mipmap = SkMipmapMode::kNone;
542
+ if (hasOptionalArgument(arguments, count, 2)) {
543
+ mipmap = (SkMipmapMode)arguments[2].asNumber();
544
+ }
545
+ sk_sp<SkImageFilter> input = nullptr;
546
+ if (hasOptionalArgument(arguments, count, 3)) {
547
+ input = JsiSkImageFilter::fromValue(runtime, arguments[3]);
548
+ }
549
+ return jsi::Object::createFromHostObject(
550
+ runtime,
551
+ std::make_shared<JsiSkImageFilter>(
552
+ getContext(), SkImageFilters::MatrixTransform(
553
+ matrix, SkSamplingOptions(filterMode, mipmap),
554
+ std::move(input))));
555
+ }
556
+
557
+ JSI_HOST_FUNCTION(MakeMerge) {
558
+ std::vector<sk_sp<SkImageFilter>> filters;
559
+ auto filtersArray = arguments[0].asObject(runtime).asArray(runtime);
560
+ auto filtersCount = filtersArray.size(runtime);
561
+ for (size_t i = 0; i < filtersCount; ++i) {
562
+ auto element = filtersArray.getValueAtIndex(runtime, i);
563
+ if (element.isNull()) {
564
+ filters.push_back(nullptr);
565
+ } else {
566
+ filters.push_back(JsiSkImageFilter::fromValue(runtime, element));
567
+ }
568
+ }
569
+ SkImageFilters::CropRect cropRect = {};
570
+ if (hasOptionalArgument(arguments, count, 1)) {
571
+ cropRect = *JsiSkRect::fromValue(runtime, arguments[1]);
572
+ }
573
+ return jsi::Object::createFromHostObject(
574
+ runtime,
575
+ std::make_shared<JsiSkImageFilter>(
576
+ getContext(),
577
+ SkImageFilters::Merge(filters.data(), filtersCount, cropRect)));
578
+ }
579
+
580
+ JSI_HOST_FUNCTION(MakePicture) {
581
+ sk_sp<SkPicture> picture = JsiSkPicture::fromValue(runtime, arguments[0]);
582
+ SkRect targetRect;
583
+ if (hasOptionalArgument(arguments, count, 1)) {
584
+ targetRect = *JsiSkRect::fromValue(runtime, arguments[1]);
585
+ } else {
586
+ targetRect = picture ? picture->cullRect() : SkRect::MakeEmpty();
587
+ }
588
+ return jsi::Object::createFromHostObject(
589
+ runtime, std::make_shared<JsiSkImageFilter>(
590
+ getContext(),
591
+ SkImageFilters::Picture(std::move(picture), targetRect)));
592
+ }
593
+
594
+ JSI_HOST_FUNCTION(MakeRuntimeShaderWithChildren) {
595
+ auto rtb = JsiSkRuntimeShaderBuilder::fromValue(runtime, arguments[0]);
596
+ float maxSampleRadius = arguments[1].asNumber();
597
+ std::vector<std::string> childNames;
598
+ auto childNamesJS = arguments[2].asObject(runtime).asArray(runtime);
599
+ size_t length = childNamesJS.size(runtime);
600
+ for (size_t i = 0; i < length; ++i) {
601
+ auto element = childNamesJS.getValueAtIndex(runtime, i);
602
+ childNames.push_back(element.asString(runtime).utf8(runtime).c_str());
603
+ }
604
+ std::vector<std::string_view> childNamesStringView;
605
+ childNamesStringView.reserve(childNames.size());
606
+ for (const auto &name : childNames) {
607
+ childNamesStringView.push_back(std::string_view(name));
608
+ }
609
+
610
+ std::vector<sk_sp<SkImageFilter>> inputs;
611
+ auto inputsJS = arguments[3].asObject(runtime).asArray(runtime);
612
+ if (inputsJS.size(runtime) != length) {
613
+ return jsi::Value::null();
614
+ }
615
+ for (size_t i = 0; i < length; ++i) {
616
+ auto element = inputsJS.getValueAtIndex(runtime, i);
617
+ if (element.isNull()) {
618
+ inputs.push_back(nullptr);
619
+ } else {
620
+ inputs.push_back(JsiSkImageFilter::fromValue(runtime, element));
621
+ }
622
+ }
623
+ return jsi::Object::createFromHostObject(
624
+ runtime, std::make_shared<JsiSkImageFilter>(
625
+ getContext(),
626
+ SkImageFilters::RuntimeShader(*rtb, maxSampleRadius,
627
+ childNamesStringView.data(),
628
+ inputs.data(), length)));
629
+ }
630
+
631
+ JSI_HOST_FUNCTION(MakeTile) {
632
+ SkRect src = *JsiSkRect::fromValue(runtime, arguments[0]);
633
+ SkRect dst = *JsiSkRect::fromValue(runtime, arguments[1]);
634
+ sk_sp<SkImageFilter> input = nullptr;
635
+ if (hasOptionalArgument(arguments, count, 2)) {
636
+ input = JsiSkImageFilter::fromValue(runtime, arguments[2]);
637
+ }
638
+ return jsi::Object::createFromHostObject(
639
+ runtime,
640
+ std::make_shared<JsiSkImageFilter>(
641
+ getContext(), SkImageFilters::Tile(src, dst, std::move(input))));
642
+ }
643
+
222
644
  JSI_EXPORT_FUNCTIONS(
223
645
  JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeBlur),
224
646
  JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeOffset),
@@ -231,7 +653,24 @@ public:
231
653
  JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeBlend),
232
654
  JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeDropShadow),
233
655
  JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeDropShadowOnly),
234
- JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeRuntimeShader))
656
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeRuntimeShader),
657
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeArithmetic),
658
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeCrop),
659
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeEmpty),
660
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeImage),
661
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeMagnifier),
662
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeMatrixConvolution),
663
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeMatrixTransform),
664
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeMerge),
665
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakePicture),
666
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeRuntimeShaderWithChildren),
667
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeTile),
668
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeDistantLitDiffuse),
669
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakePointLitDiffuse),
670
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeSpotLitDiffuse),
671
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeDistantLitSpecular),
672
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakePointLitSpecular),
673
+ JSI_EXPORT_FUNC(JsiSkImageFilterFactory, MakeSpotLitSpecular))
235
674
 
236
675
  explicit JsiSkImageFilterFactory(std::shared_ptr<RNSkPlatformContext> context)
237
676
  : JsiSkHostObject(std::move(context)) {}