@shopify/react-native-skia 1.8.0 → 1.8.2

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 (390) hide show
  1. package/cpp/api/JsiSkPaint.h +8 -1
  2. package/lib/commonjs/dom/types/Common.d.ts +6 -4
  3. package/lib/commonjs/dom/types/Common.js.map +1 -1
  4. package/lib/commonjs/dom/types/ImageFilters.d.ts +1 -1
  5. package/lib/commonjs/dom/types/ImageFilters.js.map +1 -1
  6. package/lib/commonjs/dom/types/Node.d.ts +0 -2
  7. package/lib/commonjs/dom/types/Node.js.map +1 -1
  8. package/lib/commonjs/external/reanimated/index.d.ts +0 -1
  9. package/lib/commonjs/external/reanimated/index.js +0 -11
  10. package/lib/commonjs/external/reanimated/index.js.map +1 -1
  11. package/lib/commonjs/external/reanimated/renderHelpers.d.ts +0 -1
  12. package/lib/commonjs/external/reanimated/renderHelpers.js +5 -43
  13. package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
  14. package/lib/commonjs/external/reanimated/useAnimatedImageValue.js +1 -8
  15. package/lib/commonjs/external/reanimated/useAnimatedImageValue.js.map +1 -1
  16. package/lib/commonjs/skia/core/AnimatedImage.d.ts +1 -1
  17. package/lib/commonjs/skia/core/AnimatedImage.js +1 -1
  18. package/lib/commonjs/skia/core/AnimatedImage.js.map +1 -1
  19. package/lib/commonjs/skia/core/Data.d.ts +1 -1
  20. package/lib/commonjs/skia/core/Data.js +2 -8
  21. package/lib/commonjs/skia/core/Data.js.map +1 -1
  22. package/lib/commonjs/skia/types/Paint/Paint.d.ts +1 -0
  23. package/lib/commonjs/skia/types/Paint/Paint.js.map +1 -1
  24. package/lib/commonjs/skia/web/JsiSkPaint.d.ts +1 -0
  25. package/lib/commonjs/skia/web/JsiSkPaint.js +3 -0
  26. package/lib/commonjs/skia/web/JsiSkPaint.js.map +1 -1
  27. package/lib/commonjs/sksg/Container.d.ts +3 -2
  28. package/lib/commonjs/sksg/Container.js +32 -26
  29. package/lib/commonjs/sksg/Container.js.map +1 -1
  30. package/lib/commonjs/sksg/HostConfig.d.ts +2 -2
  31. package/lib/commonjs/sksg/HostConfig.js +7 -25
  32. package/lib/commonjs/sksg/HostConfig.js.map +1 -1
  33. package/lib/commonjs/sksg/Node.d.ts +19 -0
  34. package/lib/commonjs/sksg/Node.js +78 -0
  35. package/lib/commonjs/sksg/Node.js.map +1 -0
  36. package/lib/commonjs/sksg/Reconciler.d.ts +1 -1
  37. package/lib/commonjs/sksg/Recorder/Core.d.ts +79 -0
  38. package/lib/commonjs/sksg/Recorder/Core.js +110 -0
  39. package/lib/commonjs/sksg/Recorder/Core.js.map +1 -0
  40. package/lib/commonjs/sksg/Recorder/DrawingContext.d.ts +18 -0
  41. package/lib/commonjs/sksg/Recorder/DrawingContext.js +105 -0
  42. package/lib/commonjs/sksg/Recorder/DrawingContext.js.map +1 -0
  43. package/lib/commonjs/sksg/Recorder/Player.d.ts +3 -0
  44. package/lib/commonjs/sksg/Recorder/Player.js +127 -0
  45. package/lib/commonjs/sksg/Recorder/Player.js.map +1 -0
  46. package/lib/commonjs/sksg/Recorder/Recorder.d.ts +50 -0
  47. package/lib/commonjs/sksg/Recorder/Recorder.js +288 -0
  48. package/lib/commonjs/sksg/Recorder/Recorder.js.map +1 -0
  49. package/lib/commonjs/sksg/Recorder/Recording.d.ts +7 -0
  50. package/lib/commonjs/sksg/Recorder/Recording.js +12 -0
  51. package/lib/commonjs/sksg/Recorder/Recording.js.map +1 -0
  52. package/lib/commonjs/sksg/Recorder/Visitor.d.ts +5 -0
  53. package/lib/commonjs/sksg/Recorder/Visitor.js +293 -0
  54. package/lib/commonjs/sksg/Recorder/Visitor.js.map +1 -0
  55. package/lib/commonjs/sksg/Recorder/commands/Box.d.ts +13 -0
  56. package/lib/commonjs/sksg/Recorder/commands/Box.js +71 -0
  57. package/lib/commonjs/sksg/Recorder/commands/Box.js.map +1 -0
  58. package/lib/commonjs/sksg/Recorder/commands/CTM.d.ts +3 -0
  59. package/lib/commonjs/sksg/Recorder/commands/CTM.js +79 -0
  60. package/lib/commonjs/sksg/Recorder/commands/CTM.js.map +1 -0
  61. package/lib/commonjs/sksg/Recorder/commands/ColorFilters.d.ts +6 -0
  62. package/lib/commonjs/sksg/Recorder/commands/ColorFilters.js +76 -0
  63. package/lib/commonjs/sksg/Recorder/commands/ColorFilters.js.map +1 -0
  64. package/lib/commonjs/sksg/Recorder/commands/Drawing.d.ts +24 -0
  65. package/lib/commonjs/sksg/{nodes/drawings.js → Recorder/commands/Drawing.js} +5 -5
  66. package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -0
  67. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.d.ts +12 -0
  68. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js +183 -0
  69. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js.map +1 -0
  70. package/lib/commonjs/sksg/Recorder/commands/Paint.d.ts +4 -0
  71. package/lib/commonjs/sksg/Recorder/commands/Paint.js +70 -0
  72. package/lib/commonjs/sksg/Recorder/commands/Paint.js.map +1 -0
  73. package/lib/commonjs/sksg/Recorder/commands/PathEffects.d.ts +6 -0
  74. package/lib/commonjs/sksg/Recorder/commands/PathEffects.js +137 -0
  75. package/lib/commonjs/sksg/Recorder/commands/PathEffects.js.map +1 -0
  76. package/lib/commonjs/sksg/Recorder/commands/Shaders.d.ts +5 -0
  77. package/lib/commonjs/sksg/{nodes/shaders.js → Recorder/commands/Shaders.js} +58 -15
  78. package/lib/commonjs/sksg/Recorder/commands/Shaders.js.map +1 -0
  79. package/lib/commonjs/sksg/{nodes/utils.d.ts → utils.d.ts} +3 -0
  80. package/lib/commonjs/sksg/{nodes/utils.js → utils.js} +12 -2
  81. package/lib/commonjs/sksg/utils.js.map +1 -0
  82. package/lib/module/dom/types/Common.d.ts +6 -4
  83. package/lib/module/dom/types/Common.js.map +1 -1
  84. package/lib/module/dom/types/ImageFilters.d.ts +1 -1
  85. package/lib/module/dom/types/ImageFilters.js.map +1 -1
  86. package/lib/module/dom/types/Node.d.ts +0 -2
  87. package/lib/module/dom/types/Node.js.map +1 -1
  88. package/lib/module/external/reanimated/index.d.ts +0 -1
  89. package/lib/module/external/reanimated/index.js +0 -1
  90. package/lib/module/external/reanimated/index.js.map +1 -1
  91. package/lib/module/external/reanimated/renderHelpers.d.ts +0 -1
  92. package/lib/module/external/reanimated/renderHelpers.js +4 -42
  93. package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
  94. package/lib/module/external/reanimated/useAnimatedImageValue.js +1 -8
  95. package/lib/module/external/reanimated/useAnimatedImageValue.js.map +1 -1
  96. package/lib/module/skia/core/AnimatedImage.d.ts +1 -1
  97. package/lib/module/skia/core/AnimatedImage.js +1 -1
  98. package/lib/module/skia/core/AnimatedImage.js.map +1 -1
  99. package/lib/module/skia/core/Data.d.ts +1 -1
  100. package/lib/module/skia/core/Data.js +2 -8
  101. package/lib/module/skia/core/Data.js.map +1 -1
  102. package/lib/module/skia/types/Paint/Paint.d.ts +1 -0
  103. package/lib/module/skia/types/Paint/Paint.js.map +1 -1
  104. package/lib/module/skia/web/JsiSkPaint.d.ts +1 -0
  105. package/lib/module/skia/web/JsiSkPaint.js +3 -0
  106. package/lib/module/skia/web/JsiSkPaint.js.map +1 -1
  107. package/lib/module/sksg/Container.d.ts +3 -2
  108. package/lib/module/sksg/Container.js +30 -24
  109. package/lib/module/sksg/Container.js.map +1 -1
  110. package/lib/module/sksg/HostConfig.d.ts +2 -2
  111. package/lib/module/sksg/HostConfig.js +7 -25
  112. package/lib/module/sksg/HostConfig.js.map +1 -1
  113. package/lib/module/sksg/Node.d.ts +19 -0
  114. package/lib/module/sksg/Node.js +67 -0
  115. package/lib/module/sksg/Node.js.map +1 -0
  116. package/lib/module/sksg/Reconciler.d.ts +1 -1
  117. package/lib/module/sksg/Recorder/Core.d.ts +79 -0
  118. package/lib/module/sksg/Recorder/Core.js +101 -0
  119. package/lib/module/sksg/Recorder/Core.js.map +1 -0
  120. package/lib/module/sksg/Recorder/DrawingContext.d.ts +18 -0
  121. package/lib/module/sksg/Recorder/DrawingContext.js +98 -0
  122. package/lib/module/sksg/Recorder/DrawingContext.js.map +1 -0
  123. package/lib/module/sksg/Recorder/Player.d.ts +3 -0
  124. package/lib/module/sksg/Recorder/Player.js +120 -0
  125. package/lib/module/sksg/Recorder/Player.js.map +1 -0
  126. package/lib/module/sksg/Recorder/Recorder.d.ts +50 -0
  127. package/lib/module/sksg/Recorder/Recorder.js +281 -0
  128. package/lib/module/sksg/Recorder/Recorder.js.map +1 -0
  129. package/lib/module/sksg/Recorder/Recording.d.ts +7 -0
  130. package/lib/module/sksg/Recorder/Recording.js +5 -0
  131. package/lib/module/sksg/Recorder/Recording.js.map +1 -0
  132. package/lib/module/sksg/Recorder/Visitor.d.ts +5 -0
  133. package/lib/module/sksg/Recorder/Visitor.js +285 -0
  134. package/lib/module/sksg/Recorder/Visitor.js.map +1 -0
  135. package/lib/module/sksg/Recorder/commands/Box.d.ts +13 -0
  136. package/lib/module/sksg/Recorder/commands/Box.js +63 -0
  137. package/lib/module/sksg/Recorder/commands/Box.js.map +1 -0
  138. package/lib/module/sksg/Recorder/commands/CTM.d.ts +3 -0
  139. package/lib/module/sksg/Recorder/commands/CTM.js +72 -0
  140. package/lib/module/sksg/Recorder/commands/CTM.js.map +1 -0
  141. package/lib/module/sksg/Recorder/commands/ColorFilters.d.ts +6 -0
  142. package/lib/module/sksg/Recorder/commands/ColorFilters.js +67 -0
  143. package/lib/module/sksg/Recorder/commands/ColorFilters.js.map +1 -0
  144. package/lib/module/sksg/Recorder/commands/Drawing.d.ts +24 -0
  145. package/lib/module/sksg/{nodes/drawings.js → Recorder/commands/Drawing.js} +5 -5
  146. package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -0
  147. package/lib/module/sksg/Recorder/commands/ImageFilters.d.ts +12 -0
  148. package/lib/module/sksg/{nodes/imageFilters.js → Recorder/commands/ImageFilters.js} +87 -95
  149. package/lib/module/sksg/Recorder/commands/ImageFilters.js.map +1 -0
  150. package/lib/module/sksg/Recorder/commands/Paint.d.ts +4 -0
  151. package/lib/module/sksg/Recorder/commands/Paint.js +62 -0
  152. package/lib/module/sksg/Recorder/commands/Paint.js.map +1 -0
  153. package/lib/module/sksg/Recorder/commands/PathEffects.d.ts +6 -0
  154. package/lib/module/sksg/Recorder/commands/PathEffects.js +128 -0
  155. package/lib/module/sksg/Recorder/commands/PathEffects.js.map +1 -0
  156. package/lib/module/sksg/Recorder/commands/Shaders.d.ts +5 -0
  157. package/lib/module/sksg/{nodes/shaders.js → Recorder/commands/Shaders.js} +63 -13
  158. package/lib/module/sksg/Recorder/commands/Shaders.js.map +1 -0
  159. package/lib/module/sksg/{nodes/utils.d.ts → utils.d.ts} +3 -0
  160. package/lib/module/sksg/{nodes/utils.js → utils.js} +10 -1
  161. package/lib/module/sksg/utils.js.map +1 -0
  162. package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +0 -1
  163. package/lib/typescript/lib/commonjs/skia/core/AnimatedImage.d.ts +1 -1
  164. package/lib/typescript/lib/commonjs/skia/core/Data.d.ts +1 -1
  165. package/lib/typescript/lib/commonjs/skia/web/JsiSkPaint.d.ts +1 -0
  166. package/lib/typescript/lib/commonjs/sksg/Container.d.ts +4 -0
  167. package/lib/typescript/lib/commonjs/sksg/HostConfig.d.ts +1 -3
  168. package/lib/typescript/lib/commonjs/sksg/Node.d.ts +14 -0
  169. package/lib/typescript/lib/commonjs/sksg/Recorder/Core.d.ts +5 -0
  170. package/lib/typescript/lib/commonjs/sksg/Recorder/DrawingContext.d.ts +17 -0
  171. package/lib/typescript/lib/commonjs/sksg/Recorder/Player.d.ts +2 -0
  172. package/lib/typescript/lib/commonjs/sksg/Recorder/Recorder.d.ts +45 -0
  173. package/lib/typescript/lib/commonjs/sksg/Recorder/Recording.d.ts +5 -0
  174. package/lib/typescript/lib/commonjs/sksg/Recorder/Visitor.d.ts +27 -0
  175. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Box.d.ts +3 -0
  176. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/CTM.d.ts +2 -0
  177. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/ColorFilters.d.ts +4 -0
  178. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/ImageFilters.d.ts +6 -0
  179. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Paint.d.ts +14 -0
  180. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/PathEffects.d.ts +4 -0
  181. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Shaders.d.ts +3 -0
  182. package/lib/typescript/lib/commonjs/sksg/{nodes/utils.d.ts → utils.d.ts} +1 -0
  183. package/lib/typescript/lib/module/external/reanimated/index.d.ts +0 -1
  184. package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +0 -1
  185. package/lib/typescript/lib/module/mock/index.d.ts +1 -1
  186. package/lib/typescript/lib/module/skia/core/AnimatedImage.d.ts +1 -1
  187. package/lib/typescript/lib/module/skia/core/Data.d.ts +1 -1
  188. package/lib/typescript/lib/module/skia/web/JsiSkPaint.d.ts +1 -0
  189. package/lib/typescript/lib/module/sksg/Container.d.ts +4 -0
  190. package/lib/typescript/lib/module/sksg/HostConfig.d.ts +1 -3
  191. package/lib/typescript/lib/module/sksg/Node.d.ts +13 -0
  192. package/lib/typescript/lib/module/sksg/Recorder/Core.d.ts +4 -0
  193. package/lib/typescript/lib/module/sksg/Recorder/DrawingContext.d.ts +16 -0
  194. package/lib/typescript/lib/module/sksg/Recorder/Player.d.ts +1 -0
  195. package/lib/typescript/lib/module/sksg/Recorder/Recorder.d.ts +44 -0
  196. package/lib/typescript/lib/module/sksg/Recorder/Recording.d.ts +4 -0
  197. package/lib/typescript/lib/module/sksg/Recorder/Visitor.d.ts +26 -0
  198. package/lib/typescript/lib/module/sksg/Recorder/commands/Box.d.ts +2 -0
  199. package/lib/typescript/lib/module/sksg/Recorder/commands/CTM.d.ts +1 -0
  200. package/lib/typescript/lib/module/sksg/Recorder/commands/ColorFilters.d.ts +3 -0
  201. package/lib/typescript/lib/module/sksg/Recorder/commands/ImageFilters.d.ts +5 -0
  202. package/lib/typescript/lib/module/sksg/Recorder/commands/Paint.d.ts +13 -0
  203. package/lib/typescript/lib/module/sksg/Recorder/commands/PathEffects.d.ts +3 -0
  204. package/lib/typescript/lib/module/sksg/Recorder/commands/Shaders.d.ts +2 -0
  205. package/lib/typescript/lib/module/sksg/{nodes/utils.d.ts → utils.d.ts} +1 -0
  206. package/lib/typescript/src/dom/types/Common.d.ts +6 -4
  207. package/lib/typescript/src/dom/types/ImageFilters.d.ts +1 -1
  208. package/lib/typescript/src/dom/types/Node.d.ts +0 -2
  209. package/lib/typescript/src/external/reanimated/index.d.ts +0 -1
  210. package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +0 -1
  211. package/lib/typescript/src/skia/core/AnimatedImage.d.ts +1 -1
  212. package/lib/typescript/src/skia/core/Data.d.ts +1 -1
  213. package/lib/typescript/src/skia/types/Paint/Paint.d.ts +1 -0
  214. package/lib/typescript/src/skia/web/JsiSkPaint.d.ts +1 -0
  215. package/lib/typescript/src/sksg/Container.d.ts +3 -2
  216. package/lib/typescript/src/sksg/HostConfig.d.ts +2 -2
  217. package/lib/typescript/src/sksg/Node.d.ts +19 -0
  218. package/lib/typescript/src/sksg/Reconciler.d.ts +1 -1
  219. package/lib/typescript/src/sksg/Recorder/Core.d.ts +79 -0
  220. package/lib/typescript/src/sksg/Recorder/DrawingContext.d.ts +18 -0
  221. package/lib/typescript/src/sksg/Recorder/Player.d.ts +3 -0
  222. package/lib/typescript/src/sksg/Recorder/Recorder.d.ts +50 -0
  223. package/lib/typescript/src/sksg/Recorder/Recording.d.ts +7 -0
  224. package/lib/typescript/src/sksg/Recorder/Visitor.d.ts +5 -0
  225. package/lib/typescript/src/sksg/Recorder/commands/Box.d.ts +13 -0
  226. package/lib/typescript/src/sksg/Recorder/commands/CTM.d.ts +3 -0
  227. package/lib/typescript/src/sksg/Recorder/commands/ColorFilters.d.ts +6 -0
  228. package/lib/typescript/src/sksg/Recorder/commands/Drawing.d.ts +24 -0
  229. package/lib/typescript/src/sksg/Recorder/commands/ImageFilters.d.ts +12 -0
  230. package/lib/typescript/src/sksg/Recorder/commands/Paint.d.ts +4 -0
  231. package/lib/typescript/src/sksg/Recorder/commands/PathEffects.d.ts +6 -0
  232. package/lib/typescript/src/sksg/Recorder/commands/Shaders.d.ts +5 -0
  233. package/lib/typescript/src/sksg/{nodes/utils.d.ts → utils.d.ts} +3 -0
  234. package/package.json +1 -1
  235. package/src/__tests__/snapshots/image-filter/test-shadow.png +0 -0
  236. package/src/dom/types/Common.ts +7 -5
  237. package/src/dom/types/ImageFilters.ts +2 -1
  238. package/src/dom/types/Node.ts +0 -4
  239. package/src/external/reanimated/index.ts +0 -1
  240. package/src/external/reanimated/renderHelpers.ts +4 -44
  241. package/src/external/reanimated/useAnimatedImageValue.ts +4 -15
  242. package/src/renderer/__tests__/e2e/ColorFilters.spec.tsx +15 -0
  243. package/src/renderer/__tests__/e2e/Composition/ColorFilterComposition.spec.tsx +23 -2
  244. package/src/renderer/__tests__/e2e/ImageFilters.spec.tsx +91 -2
  245. package/src/renderer/__tests__/setup.tsx +1 -1
  246. package/src/skia/core/AnimatedImage.ts +2 -3
  247. package/src/skia/core/Data.ts +3 -9
  248. package/src/skia/types/Paint/Paint.ts +2 -0
  249. package/src/skia/web/JsiSkPaint.ts +4 -0
  250. package/src/sksg/Container.ts +35 -29
  251. package/src/sksg/HostConfig.ts +5 -50
  252. package/src/sksg/Node.ts +105 -0
  253. package/src/sksg/Recorder/Core.ts +171 -0
  254. package/src/sksg/Recorder/DrawingContext.ts +130 -0
  255. package/src/sksg/Recorder/Player.ts +160 -0
  256. package/src/sksg/Recorder/Recorder.ts +259 -0
  257. package/src/sksg/Recorder/Recording.ts +13 -0
  258. package/src/sksg/Recorder/Visitor.ts +324 -0
  259. package/src/sksg/Recorder/commands/Box.ts +63 -0
  260. package/src/sksg/Recorder/commands/CTM.ts +72 -0
  261. package/src/sksg/Recorder/commands/ColorFilters.ts +87 -0
  262. package/src/sksg/{nodes/drawings.ts → Recorder/commands/Drawing.ts} +29 -65
  263. package/src/sksg/Recorder/commands/ImageFilters.ts +255 -0
  264. package/src/sksg/Recorder/commands/Paint.ts +77 -0
  265. package/src/sksg/Recorder/commands/PathEffects.ts +169 -0
  266. package/src/sksg/{nodes/shaders.ts → Recorder/commands/Shaders.ts} +100 -26
  267. package/src/sksg/{nodes/utils.ts → utils.ts} +14 -1
  268. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.d.ts +0 -1
  269. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.js +0 -24
  270. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.js.map +0 -1
  271. package/lib/commonjs/sksg/DeclarationContext.d.ts +0 -56
  272. package/lib/commonjs/sksg/DeclarationContext.js +0 -77
  273. package/lib/commonjs/sksg/DeclarationContext.js.map +0 -1
  274. package/lib/commonjs/sksg/DrawingContext.d.ts +0 -13
  275. package/lib/commonjs/sksg/DrawingContext.js +0 -172
  276. package/lib/commonjs/sksg/DrawingContext.js.map +0 -1
  277. package/lib/commonjs/sksg/__tests__/Declarations.spec.d.ts +0 -1
  278. package/lib/commonjs/sksg/__tests__/MockDeclaration.d.ts +0 -57
  279. package/lib/commonjs/sksg/nodes/Node.d.ts +0 -7
  280. package/lib/commonjs/sksg/nodes/Node.js +0 -6
  281. package/lib/commonjs/sksg/nodes/Node.js.map +0 -1
  282. package/lib/commonjs/sksg/nodes/colorFilters.d.ts +0 -10
  283. package/lib/commonjs/sksg/nodes/colorFilters.js +0 -79
  284. package/lib/commonjs/sksg/nodes/colorFilters.js.map +0 -1
  285. package/lib/commonjs/sksg/nodes/context.d.ts +0 -3
  286. package/lib/commonjs/sksg/nodes/context.js +0 -394
  287. package/lib/commonjs/sksg/nodes/context.js.map +0 -1
  288. package/lib/commonjs/sksg/nodes/drawings.d.ts +0 -30
  289. package/lib/commonjs/sksg/nodes/drawings.js.map +0 -1
  290. package/lib/commonjs/sksg/nodes/imageFilters.d.ts +0 -17
  291. package/lib/commonjs/sksg/nodes/imageFilters.js +0 -197
  292. package/lib/commonjs/sksg/nodes/imageFilters.js.map +0 -1
  293. package/lib/commonjs/sksg/nodes/index.d.ts +0 -3
  294. package/lib/commonjs/sksg/nodes/index.js +0 -39
  295. package/lib/commonjs/sksg/nodes/index.js.map +0 -1
  296. package/lib/commonjs/sksg/nodes/paint.d.ts +0 -3
  297. package/lib/commonjs/sksg/nodes/paint.js +0 -81
  298. package/lib/commonjs/sksg/nodes/paint.js.map +0 -1
  299. package/lib/commonjs/sksg/nodes/pathEffects.d.ts +0 -11
  300. package/lib/commonjs/sksg/nodes/pathEffects.js +0 -111
  301. package/lib/commonjs/sksg/nodes/pathEffects.js.map +0 -1
  302. package/lib/commonjs/sksg/nodes/shaders.d.ts +0 -11
  303. package/lib/commonjs/sksg/nodes/shaders.js.map +0 -1
  304. package/lib/commonjs/sksg/nodes/utils.js.map +0 -1
  305. package/lib/module/external/reanimated/useDerivedValueOnJS.d.ts +0 -1
  306. package/lib/module/external/reanimated/useDerivedValueOnJS.js +0 -16
  307. package/lib/module/external/reanimated/useDerivedValueOnJS.js.map +0 -1
  308. package/lib/module/sksg/DeclarationContext.d.ts +0 -56
  309. package/lib/module/sksg/DeclarationContext.js +0 -69
  310. package/lib/module/sksg/DeclarationContext.js.map +0 -1
  311. package/lib/module/sksg/DrawingContext.d.ts +0 -13
  312. package/lib/module/sksg/DrawingContext.js +0 -165
  313. package/lib/module/sksg/DrawingContext.js.map +0 -1
  314. package/lib/module/sksg/__tests__/Declarations.spec.d.ts +0 -1
  315. package/lib/module/sksg/__tests__/MockDeclaration.d.ts +0 -57
  316. package/lib/module/sksg/nodes/Node.d.ts +0 -7
  317. package/lib/module/sksg/nodes/Node.js +0 -2
  318. package/lib/module/sksg/nodes/Node.js.map +0 -1
  319. package/lib/module/sksg/nodes/colorFilters.d.ts +0 -10
  320. package/lib/module/sksg/nodes/colorFilters.js +0 -66
  321. package/lib/module/sksg/nodes/colorFilters.js.map +0 -1
  322. package/lib/module/sksg/nodes/context.d.ts +0 -3
  323. package/lib/module/sksg/nodes/context.js +0 -387
  324. package/lib/module/sksg/nodes/context.js.map +0 -1
  325. package/lib/module/sksg/nodes/drawings.d.ts +0 -30
  326. package/lib/module/sksg/nodes/drawings.js.map +0 -1
  327. package/lib/module/sksg/nodes/imageFilters.d.ts +0 -17
  328. package/lib/module/sksg/nodes/imageFilters.js.map +0 -1
  329. package/lib/module/sksg/nodes/index.d.ts +0 -3
  330. package/lib/module/sksg/nodes/index.js +0 -4
  331. package/lib/module/sksg/nodes/index.js.map +0 -1
  332. package/lib/module/sksg/nodes/paint.d.ts +0 -3
  333. package/lib/module/sksg/nodes/paint.js +0 -74
  334. package/lib/module/sksg/nodes/paint.js.map +0 -1
  335. package/lib/module/sksg/nodes/pathEffects.d.ts +0 -11
  336. package/lib/module/sksg/nodes/pathEffects.js +0 -97
  337. package/lib/module/sksg/nodes/pathEffects.js.map +0 -1
  338. package/lib/module/sksg/nodes/shaders.d.ts +0 -11
  339. package/lib/module/sksg/nodes/shaders.js.map +0 -1
  340. package/lib/module/sksg/nodes/utils.js.map +0 -1
  341. package/lib/typescript/lib/commonjs/external/reanimated/useDerivedValueOnJS.d.ts +0 -2
  342. package/lib/typescript/lib/commonjs/sksg/DeclarationContext.d.ts +0 -53
  343. package/lib/typescript/lib/commonjs/sksg/DrawingContext.d.ts +0 -22
  344. package/lib/typescript/lib/commonjs/sksg/nodes/Node.d.ts +0 -1
  345. package/lib/typescript/lib/commonjs/sksg/nodes/colorFilters.d.ts +0 -8
  346. package/lib/typescript/lib/commonjs/sksg/nodes/context.d.ts +0 -2
  347. package/lib/typescript/lib/commonjs/sksg/nodes/imageFilters.d.ts +0 -12
  348. package/lib/typescript/lib/commonjs/sksg/nodes/index.d.ts +0 -1
  349. package/lib/typescript/lib/commonjs/sksg/nodes/paint.d.ts +0 -2
  350. package/lib/typescript/lib/commonjs/sksg/nodes/pathEffects.d.ts +0 -9
  351. package/lib/typescript/lib/commonjs/sksg/nodes/shaders.d.ts +0 -10
  352. package/lib/typescript/lib/module/external/reanimated/useDerivedValueOnJS.d.ts +0 -1
  353. package/lib/typescript/lib/module/sksg/DeclarationContext.d.ts +0 -52
  354. package/lib/typescript/lib/module/sksg/DrawingContext.d.ts +0 -21
  355. package/lib/typescript/lib/module/sksg/nodes/Node.d.ts +0 -1
  356. package/lib/typescript/lib/module/sksg/nodes/colorFilters.d.ts +0 -7
  357. package/lib/typescript/lib/module/sksg/nodes/context.d.ts +0 -1
  358. package/lib/typescript/lib/module/sksg/nodes/imageFilters.d.ts +0 -11
  359. package/lib/typescript/lib/module/sksg/nodes/index.d.ts +0 -3
  360. package/lib/typescript/lib/module/sksg/nodes/paint.d.ts +0 -1
  361. package/lib/typescript/lib/module/sksg/nodes/pathEffects.d.ts +0 -8
  362. package/lib/typescript/lib/module/sksg/nodes/shaders.d.ts +0 -9
  363. package/lib/typescript/src/external/reanimated/useDerivedValueOnJS.d.ts +0 -1
  364. package/lib/typescript/src/sksg/DeclarationContext.d.ts +0 -56
  365. package/lib/typescript/src/sksg/DrawingContext.d.ts +0 -13
  366. package/lib/typescript/src/sksg/__tests__/Declarations.spec.d.ts +0 -1
  367. package/lib/typescript/src/sksg/__tests__/MockDeclaration.d.ts +0 -57
  368. package/lib/typescript/src/sksg/nodes/Node.d.ts +0 -7
  369. package/lib/typescript/src/sksg/nodes/colorFilters.d.ts +0 -10
  370. package/lib/typescript/src/sksg/nodes/context.d.ts +0 -3
  371. package/lib/typescript/src/sksg/nodes/drawings.d.ts +0 -30
  372. package/lib/typescript/src/sksg/nodes/imageFilters.d.ts +0 -17
  373. package/lib/typescript/src/sksg/nodes/index.d.ts +0 -3
  374. package/lib/typescript/src/sksg/nodes/paint.d.ts +0 -3
  375. package/lib/typescript/src/sksg/nodes/pathEffects.d.ts +0 -11
  376. package/lib/typescript/src/sksg/nodes/shaders.d.ts +0 -11
  377. package/src/external/reanimated/useDerivedValueOnJS.ts +0 -20
  378. package/src/sksg/DeclarationContext.ts +0 -85
  379. package/src/sksg/DrawingContext.ts +0 -226
  380. package/src/sksg/__tests__/Declarations.spec.tsx +0 -235
  381. package/src/sksg/__tests__/MockDeclaration.ts +0 -138
  382. package/src/sksg/nodes/Node.ts +0 -8
  383. package/src/sksg/nodes/colorFilters.ts +0 -79
  384. package/src/sksg/nodes/context.ts +0 -412
  385. package/src/sksg/nodes/imageFilters.ts +0 -235
  386. package/src/sksg/nodes/index.ts +0 -3
  387. package/src/sksg/nodes/paint.ts +0 -75
  388. package/src/sksg/nodes/pathEffects.ts +0 -118
  389. /package/lib/typescript/lib/commonjs/sksg/{nodes/drawings.d.ts → Recorder/commands/Drawing.d.ts} +0 -0
  390. /package/lib/typescript/lib/module/sksg/{nodes/drawings.d.ts → Recorder/commands/Drawing.d.ts} +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  processPath,
9
9
  processRect,
10
10
  processRRect,
11
- } from "../../dom/nodes";
11
+ } from "../../../dom/nodes";
12
12
  import type {
13
13
  AtlasProps,
14
14
  BoxProps,
@@ -32,15 +32,9 @@ import type {
32
32
  TextPathProps,
33
33
  TextProps,
34
34
  VerticesProps,
35
- } from "../../dom/types";
36
- import { saturate } from "../../renderer/processors";
37
- import type {
38
- SkCanvas,
39
- SkPaint,
40
- SkPoint,
41
- SkRSXform,
42
- Skia,
43
- } from "../../skia/types";
35
+ } from "../../../dom/types";
36
+ import { saturate } from "../../../renderer/processors";
37
+ import type { SkPoint, SkRSXform } from "../../../skia/types";
44
38
  import {
45
39
  BlendMode,
46
40
  BlurStyle,
@@ -49,31 +43,25 @@ import {
49
43
  isRRect,
50
44
  PointMode,
51
45
  VertexMode,
52
- } from "../../skia/types";
53
-
54
- import type { Node } from "./Node";
55
- import { materialize } from "./utils";
56
-
57
- interface LocalDrawingContext {
58
- Skia: Skia;
59
- canvas: SkCanvas;
60
- paint: SkPaint;
61
- }
46
+ } from "../../../skia/types";
47
+ import type { Node } from "../../Node";
48
+ import { materialize } from "../../utils";
49
+ import type { DrawingContext } from "../DrawingContext";
62
50
 
63
- export const drawLine = (ctx: LocalDrawingContext, props: LineProps) => {
51
+ export const drawLine = (ctx: DrawingContext, props: LineProps) => {
64
52
  "worklet";
65
53
  const { p1, p2 } = props;
66
54
  ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);
67
55
  };
68
56
 
69
- export const drawOval = (ctx: LocalDrawingContext, props: OvalProps) => {
57
+ export const drawOval = (ctx: DrawingContext, props: OvalProps) => {
70
58
  "worklet";
71
59
  const rect = processRect(ctx.Skia, props);
72
60
  ctx.canvas.drawOval(rect, ctx.paint);
73
61
  };
74
62
 
75
63
  export const drawBox = (
76
- ctx: LocalDrawingContext,
64
+ ctx: DrawingContext,
77
65
  props: BoxProps,
78
66
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
67
  children: Node<any>[]
@@ -127,7 +115,7 @@ export const drawBox = (
127
115
  });
128
116
  };
129
117
 
130
- export const drawImage = (ctx: LocalDrawingContext, props: ImageProps) => {
118
+ export const drawImage = (ctx: DrawingContext, props: ImageProps) => {
131
119
  "worklet";
132
120
  const { image } = props;
133
121
  if (image) {
@@ -147,16 +135,13 @@ export const drawImage = (ctx: LocalDrawingContext, props: ImageProps) => {
147
135
  }
148
136
  };
149
137
 
150
- export const drawPoints = (ctx: LocalDrawingContext, props: PointsProps) => {
138
+ export const drawPoints = (ctx: DrawingContext, props: PointsProps) => {
151
139
  "worklet";
152
140
  const { points, mode } = props;
153
141
  ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);
154
142
  };
155
143
 
156
- export const drawVertices = (
157
- ctx: LocalDrawingContext,
158
- props: VerticesProps
159
- ) => {
144
+ export const drawVertices = (ctx: DrawingContext, props: VerticesProps) => {
160
145
  "worklet";
161
146
  const { mode, textures, colors, indices, blendMode } = props;
162
147
  const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;
@@ -173,19 +158,13 @@ export const drawVertices = (
173
158
  ctx.canvas.drawVertices(vertices, blend, ctx.paint);
174
159
  };
175
160
 
176
- export const drawDiffRect = (
177
- ctx: LocalDrawingContext,
178
- props: DiffRectProps
179
- ) => {
161
+ export const drawDiffRect = (ctx: DrawingContext, props: DiffRectProps) => {
180
162
  "worklet";
181
163
  const { outer, inner } = props;
182
164
  ctx.canvas.drawDRRect(outer, inner, ctx.paint);
183
165
  };
184
166
 
185
- export const drawTextPath = (
186
- ctx: LocalDrawingContext,
187
- props: TextPathProps
188
- ) => {
167
+ export const drawTextPath = (ctx: DrawingContext, props: TextPathProps) => {
189
168
  "worklet";
190
169
  const path = processPath(ctx.Skia, props.path);
191
170
  const { font, initialOffset } = props;
@@ -224,7 +203,7 @@ export const drawTextPath = (
224
203
  }
225
204
  };
226
205
 
227
- export const drawText = (ctx: LocalDrawingContext, props: TextProps) => {
206
+ export const drawText = (ctx: DrawingContext, props: TextProps) => {
228
207
  "worklet";
229
208
  const { text, x, y, font } = props;
230
209
  if (font != null) {
@@ -232,7 +211,7 @@ export const drawText = (ctx: LocalDrawingContext, props: TextProps) => {
232
211
  }
233
212
  };
234
213
 
235
- export const drawPatch = (ctx: LocalDrawingContext, props: PatchProps) => {
214
+ export const drawPatch = (ctx: DrawingContext, props: PatchProps) => {
236
215
  "worklet";
237
216
  const { texture, blendMode, patch } = props;
238
217
  const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;
@@ -263,7 +242,7 @@ export const drawPatch = (ctx: LocalDrawingContext, props: PatchProps) => {
263
242
  ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);
264
243
  };
265
244
 
266
- export const drawPath = (ctx: LocalDrawingContext, props: PathProps) => {
245
+ export const drawPath = (ctx: DrawingContext, props: PathProps) => {
267
246
  "worklet";
268
247
  const {
269
248
  start: trimStart,
@@ -294,25 +273,19 @@ export const drawPath = (ctx: LocalDrawingContext, props: PathProps) => {
294
273
  ctx.canvas.drawPath(path, ctx.paint);
295
274
  };
296
275
 
297
- export const drawRect = (ctx: LocalDrawingContext, props: RectProps) => {
276
+ export const drawRect = (ctx: DrawingContext, props: RectProps) => {
298
277
  "worklet";
299
278
  const derived = processRect(ctx.Skia, props);
300
279
  ctx.canvas.drawRect(derived, ctx.paint);
301
280
  };
302
281
 
303
- export const drawRRect = (
304
- ctx: LocalDrawingContext,
305
- props: RoundedRectProps
306
- ) => {
282
+ export const drawRRect = (ctx: DrawingContext, props: RoundedRectProps) => {
307
283
  "worklet";
308
284
  const derived = processRRect(ctx.Skia, props);
309
285
  ctx.canvas.drawRRect(derived, ctx.paint);
310
286
  };
311
287
 
312
- export const drawTextBlob = (
313
- ctx: LocalDrawingContext,
314
- props: TextBlobProps
315
- ) => {
288
+ export const drawTextBlob = (ctx: DrawingContext, props: TextBlobProps) => {
316
289
  "worklet";
317
290
  const { blob, x, y } = props;
318
291
  ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);
@@ -323,7 +296,7 @@ interface ProcessedGlyphs {
323
296
  positions: SkPoint[];
324
297
  }
325
298
 
326
- export const drawGlyphs = (ctx: LocalDrawingContext, props: GlyphsProps) => {
299
+ export const drawGlyphs = (ctx: DrawingContext, props: GlyphsProps) => {
327
300
  "worklet";
328
301
  const derived = props.glyphs.reduce<ProcessedGlyphs>(
329
302
  (acc, glyph) => {
@@ -341,10 +314,7 @@ export const drawGlyphs = (ctx: LocalDrawingContext, props: GlyphsProps) => {
341
314
  }
342
315
  };
343
316
 
344
- export const drawImageSVG = (
345
- ctx: LocalDrawingContext,
346
- props: ImageSVGProps
347
- ) => {
317
+ export const drawImageSVG = (ctx: DrawingContext, props: ImageSVGProps) => {
348
318
  "worklet";
349
319
  const { canvas } = ctx;
350
320
  const { svg } = props;
@@ -362,10 +332,7 @@ export const drawImageSVG = (
362
332
  canvas.restore();
363
333
  };
364
334
 
365
- export const drawParagraph = (
366
- ctx: LocalDrawingContext,
367
- props: ParagraphProps
368
- ) => {
335
+ export const drawParagraph = (ctx: DrawingContext, props: ParagraphProps) => {
369
336
  "worklet";
370
337
  const { paragraph, x, y, width } = props;
371
338
  if (paragraph) {
@@ -374,13 +341,13 @@ export const drawParagraph = (
374
341
  }
375
342
  };
376
343
 
377
- export const drawPicture = (ctx: LocalDrawingContext, props: PictureProps) => {
344
+ export const drawPicture = (ctx: DrawingContext, props: PictureProps) => {
378
345
  "worklet";
379
346
  const { picture } = props;
380
347
  ctx.canvas.drawPicture(picture);
381
348
  };
382
349
 
383
- export const drawAtlas = (ctx: LocalDrawingContext, props: AtlasProps) => {
350
+ export const drawAtlas = (ctx: DrawingContext, props: AtlasProps) => {
384
351
  "worklet";
385
352
  const { image, sprites, transforms, colors, blendMode } = props;
386
353
  const blend = blendMode ? BlendMode[enumKey(blendMode)] : undefined;
@@ -389,17 +356,14 @@ export const drawAtlas = (ctx: LocalDrawingContext, props: AtlasProps) => {
389
356
  }
390
357
  };
391
358
 
392
- export const drawCircle = (ctx: LocalDrawingContext, props: CircleProps) => {
359
+ export const drawCircle = (ctx: DrawingContext, props: CircleProps) => {
393
360
  "worklet";
394
361
  const { c } = processCircle(props);
395
362
  const { r } = props;
396
363
  ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);
397
364
  };
398
365
 
399
- export const drawFill = (
400
- ctx: LocalDrawingContext,
401
- _props: DrawingNodeProps
402
- ) => {
366
+ export const drawFill = (ctx: DrawingContext, _props: DrawingNodeProps) => {
403
367
  "worklet";
404
368
  ctx.canvas.drawPaint(ctx.paint);
405
369
  };
@@ -0,0 +1,255 @@
1
+ import { enumKey, processRadius } from "../../../dom/nodes";
2
+ import type {
3
+ BlendImageFilterProps,
4
+ BlurImageFilterProps,
5
+ BlurMaskFilterProps,
6
+ DisplacementMapImageFilterProps,
7
+ DropShadowImageFilterProps,
8
+ MorphologyImageFilterProps,
9
+ OffsetImageFilterProps,
10
+ RuntimeShaderImageFilterProps,
11
+ } from "../../../dom/types";
12
+ import { NodeType } from "../../../dom/types";
13
+ import type { SkColor, SkImageFilter, Skia } from "../../../skia/types";
14
+ import {
15
+ BlendMode,
16
+ BlurStyle,
17
+ ColorChannel,
18
+ processUniforms,
19
+ TileMode,
20
+ } from "../../../skia/types";
21
+ import { composeDeclarations } from "../../utils";
22
+ import type { Command } from "../Core";
23
+ import { CommandType } from "../Core";
24
+ import type { DrawingContext } from "../DrawingContext";
25
+
26
+ export enum MorphologyOperator {
27
+ Erode,
28
+ Dilate,
29
+ }
30
+
31
+ const Black = Float32Array.of(0, 0, 0, 1);
32
+
33
+ const MakeInnerShadow = (
34
+ Skia: Skia,
35
+ shadowOnly: boolean | undefined,
36
+ dx: number,
37
+ dy: number,
38
+ sigmaX: number,
39
+ sigmaY: number,
40
+ color: SkColor,
41
+ input: SkImageFilter | null
42
+ ) => {
43
+ "worklet";
44
+ const sourceGraphic = Skia.ImageFilter.MakeColorFilter(
45
+ Skia.ColorFilter.MakeBlend(Black, BlendMode.Dst),
46
+ null
47
+ );
48
+ const sourceAlpha = Skia.ImageFilter.MakeColorFilter(
49
+ Skia.ColorFilter.MakeBlend(Black, BlendMode.SrcIn),
50
+ null
51
+ );
52
+ const f1 = Skia.ImageFilter.MakeColorFilter(
53
+ Skia.ColorFilter.MakeBlend(color, BlendMode.SrcOut),
54
+ null
55
+ );
56
+ const f2 = Skia.ImageFilter.MakeOffset(dx, dy, f1);
57
+ const f3 = Skia.ImageFilter.MakeBlur(sigmaX, sigmaY, TileMode.Decal, f2);
58
+ const f4 = Skia.ImageFilter.MakeBlend(BlendMode.SrcIn, sourceAlpha, f3);
59
+ if (shadowOnly) {
60
+ return f4;
61
+ }
62
+ return Skia.ImageFilter.MakeCompose(
63
+ input,
64
+ Skia.ImageFilter.MakeBlend(BlendMode.SrcOver, sourceGraphic, f4)
65
+ );
66
+ };
67
+
68
+ const declareBlurImageFilter = (
69
+ ctx: DrawingContext,
70
+ props: BlurImageFilterProps
71
+ ) => {
72
+ "worklet";
73
+ const { mode, blur } = props;
74
+ const sigma = processRadius(ctx.Skia, blur);
75
+ const imgf = ctx.Skia.ImageFilter.MakeBlur(
76
+ sigma.x,
77
+ sigma.y,
78
+ TileMode[enumKey(mode)],
79
+ null
80
+ );
81
+ ctx.imageFilters.push(imgf);
82
+ };
83
+
84
+ const declareMorphologyImageFilter = (
85
+ ctx: DrawingContext,
86
+ props: MorphologyImageFilterProps
87
+ ) => {
88
+ "worklet";
89
+ const { operator } = props;
90
+ const r = processRadius(ctx.Skia, props.radius);
91
+ let imgf;
92
+ if (MorphologyOperator[enumKey(operator)] === MorphologyOperator.Erode) {
93
+ imgf = ctx.Skia.ImageFilter.MakeErode(r.x, r.y, null);
94
+ } else {
95
+ imgf = ctx.Skia.ImageFilter.MakeDilate(r.x, r.y, null);
96
+ }
97
+ ctx.imageFilters.push(imgf);
98
+ };
99
+
100
+ const declareOffsetImageFilter = (
101
+ ctx: DrawingContext,
102
+ props: OffsetImageFilterProps
103
+ ) => {
104
+ "worklet";
105
+ const { x, y } = props;
106
+ const imgf = ctx.Skia.ImageFilter.MakeOffset(x, y, null);
107
+ ctx.imageFilters.push(imgf);
108
+ };
109
+
110
+ const declareDropShadowImageFilter = (
111
+ ctx: DrawingContext,
112
+ props: DropShadowImageFilterProps
113
+ ) => {
114
+ "worklet";
115
+ const { dx, dy, blur, shadowOnly, color: cl, inner } = props;
116
+ const color = ctx.Skia.Color(cl);
117
+ let factory;
118
+ if (inner) {
119
+ factory = MakeInnerShadow.bind(null, ctx.Skia, shadowOnly);
120
+ } else {
121
+ factory = shadowOnly
122
+ ? ctx.Skia.ImageFilter.MakeDropShadowOnly.bind(ctx.Skia.ImageFilter)
123
+ : ctx.Skia.ImageFilter.MakeDropShadow.bind(ctx.Skia.ImageFilter);
124
+ }
125
+ const imgf = factory(dx, dy, blur, blur, color, null);
126
+ ctx.imageFilters.push(imgf);
127
+ };
128
+
129
+ const declareBlendImageFilter = (
130
+ ctx: DrawingContext,
131
+ props: BlendImageFilterProps
132
+ ) => {
133
+ "worklet";
134
+ const blend = BlendMode[enumKey(props.mode)];
135
+ // Blend ImageFilters
136
+ const imageFilters = ctx.imageFilters.splice(0, ctx.imageFilters.length);
137
+ const composer = ctx.Skia.ImageFilter.MakeBlend.bind(
138
+ ctx.Skia.ImageFilter,
139
+ blend
140
+ );
141
+ ctx.imageFilters.push(composeDeclarations(imageFilters, composer));
142
+ };
143
+
144
+ const declareDisplacementMapImageFilter = (
145
+ ctx: DrawingContext,
146
+ props: DisplacementMapImageFilterProps
147
+ ) => {
148
+ "worklet";
149
+ const { channelX, channelY, scale } = props;
150
+ const shader = ctx.shaders.pop();
151
+ if (!shader) {
152
+ throw new Error("DisplacementMap expects a shader as child");
153
+ }
154
+ const map = ctx.Skia.ImageFilter.MakeShader(shader, null);
155
+ const imgf = ctx.Skia.ImageFilter.MakeDisplacementMap(
156
+ ColorChannel[enumKey(channelX)],
157
+ ColorChannel[enumKey(channelY)],
158
+ scale,
159
+ map,
160
+ null
161
+ );
162
+ ctx.imageFilters.push(imgf);
163
+ };
164
+
165
+ const declareRuntimeShaderImageFilter = (
166
+ ctx: DrawingContext,
167
+ props: RuntimeShaderImageFilterProps
168
+ ) => {
169
+ "worklet";
170
+ const { source, uniforms } = props;
171
+ const rtb = ctx.Skia.RuntimeShaderBuilder(source);
172
+ if (uniforms) {
173
+ processUniforms(source, uniforms, rtb);
174
+ }
175
+ const imgf = ctx.Skia.ImageFilter.MakeRuntimeShader(rtb, null, null);
176
+ ctx.imageFilters.push(imgf);
177
+ };
178
+
179
+ export const composeImageFilters = (ctx: DrawingContext) => {
180
+ "worklet";
181
+ if (ctx.imageFilters.length > 1) {
182
+ const outer = ctx.imageFilters.pop()!;
183
+ const inner = ctx.imageFilters.pop()!;
184
+ ctx.imageFilters.push(ctx.Skia.ImageFilter.MakeCompose(outer, inner));
185
+ }
186
+ };
187
+
188
+ export const setBlurMaskFilter = (
189
+ ctx: DrawingContext,
190
+ props: BlurMaskFilterProps
191
+ ) => {
192
+ "worklet";
193
+ const { blur, style, respectCTM } = props;
194
+ const mf = ctx.Skia.MaskFilter.MakeBlur(
195
+ BlurStyle[enumKey(style)],
196
+ blur,
197
+ respectCTM
198
+ );
199
+ ctx.paint.setMaskFilter(mf);
200
+ };
201
+
202
+ export const isPushImageFilter = (
203
+ command: Command
204
+ ): command is Command<CommandType.PushImageFilter> => {
205
+ "worklet";
206
+ return command.type === CommandType.PushImageFilter;
207
+ };
208
+
209
+ type Props = {
210
+ [NodeType.OffsetImageFilter]: OffsetImageFilterProps;
211
+ [NodeType.DisplacementMapImageFilter]: DisplacementMapImageFilterProps;
212
+ [NodeType.BlurImageFilter]: BlurImageFilterProps;
213
+ [NodeType.DropShadowImageFilter]: DropShadowImageFilterProps;
214
+ [NodeType.MorphologyImageFilter]: MorphologyImageFilterProps;
215
+ [NodeType.BlendImageFilter]: BlendImageFilterProps;
216
+ [NodeType.RuntimeShaderImageFilter]: RuntimeShaderImageFilterProps;
217
+ };
218
+
219
+ interface PushImageFilter<T extends keyof Props>
220
+ extends Command<CommandType.PushImageFilter> {
221
+ imageFilterType: T;
222
+ props: Props[T];
223
+ }
224
+
225
+ const isImageFilter = <T extends keyof Props>(
226
+ command: Command<CommandType.PushImageFilter>,
227
+ type: T
228
+ ): command is PushImageFilter<T> => {
229
+ "worklet";
230
+ return command.imageFilterType === type;
231
+ };
232
+
233
+ export const pushImageFilter = (
234
+ ctx: DrawingContext,
235
+ command: Command<CommandType.PushImageFilter>
236
+ ) => {
237
+ "worklet";
238
+ if (isImageFilter(command, NodeType.BlurImageFilter)) {
239
+ declareBlurImageFilter(ctx, command.props);
240
+ } else if (isImageFilter(command, NodeType.MorphologyImageFilter)) {
241
+ declareMorphologyImageFilter(ctx, command.props);
242
+ } else if (isImageFilter(command, NodeType.BlendImageFilter)) {
243
+ declareBlendImageFilter(ctx, command.props);
244
+ } else if (isImageFilter(command, NodeType.DisplacementMapImageFilter)) {
245
+ declareDisplacementMapImageFilter(ctx, command.props);
246
+ } else if (isImageFilter(command, NodeType.DropShadowImageFilter)) {
247
+ declareDropShadowImageFilter(ctx, command.props);
248
+ } else if (isImageFilter(command, NodeType.OffsetImageFilter)) {
249
+ declareOffsetImageFilter(ctx, command.props);
250
+ } else if (isImageFilter(command, NodeType.RuntimeShaderImageFilter)) {
251
+ declareRuntimeShaderImageFilter(ctx, command.props);
252
+ } else {
253
+ throw new Error("Invalid image filter type: " + command.imageFilterType);
254
+ }
255
+ };
@@ -0,0 +1,77 @@
1
+ import { enumKey } from "../../../dom/nodes";
2
+ import type { PaintProps } from "../../../dom/types";
3
+ import {
4
+ BlendMode,
5
+ PaintStyle,
6
+ StrokeCap,
7
+ StrokeJoin,
8
+ } from "../../../skia/types";
9
+ import type { SkPaint, Skia } from "../../../skia/types";
10
+
11
+ export const processColor = (
12
+ Skia: Skia,
13
+ color: number | string | Float32Array | number[]
14
+ ) => {
15
+ "worklet";
16
+ if (typeof color === "string" || typeof color === "number") {
17
+ return Skia.Color(color);
18
+ } else if (Array.isArray(color) || color instanceof Float32Array) {
19
+ return color instanceof Float32Array ? color : new Float32Array(color);
20
+ } else {
21
+ throw new Error(
22
+ `Invalid color type: ${typeof color}. Expected number, string, or array.`
23
+ );
24
+ }
25
+ };
26
+
27
+ export const setPaintProperties = (
28
+ Skia: Skia,
29
+ paint: SkPaint,
30
+ {
31
+ opacity,
32
+ color,
33
+ blendMode,
34
+ strokeWidth,
35
+ style,
36
+ strokeJoin,
37
+ strokeCap,
38
+ strokeMiter,
39
+ antiAlias,
40
+ dither,
41
+ }: PaintProps
42
+ ) => {
43
+ "worklet";
44
+ if (opacity !== undefined) {
45
+ paint.setAlphaf(paint.getAlphaf() * opacity);
46
+ }
47
+ if (color !== undefined) {
48
+ const currentOpacity = paint.getAlphaf();
49
+ paint.setShader(null);
50
+ paint.setColor(processColor(Skia, color));
51
+ paint.setAlphaf(currentOpacity * paint.getAlphaf());
52
+ }
53
+ if (blendMode !== undefined) {
54
+ paint.setBlendMode(BlendMode[enumKey(blendMode)]);
55
+ }
56
+ if (strokeWidth !== undefined) {
57
+ paint.setStrokeWidth(strokeWidth);
58
+ }
59
+ if (style !== undefined) {
60
+ paint.setStyle(PaintStyle[enumKey(style)]);
61
+ }
62
+ if (strokeJoin !== undefined) {
63
+ paint.setStrokeJoin(StrokeJoin[enumKey(strokeJoin)]);
64
+ }
65
+ if (strokeCap !== undefined) {
66
+ paint.setStrokeCap(StrokeCap[enumKey(strokeCap)]);
67
+ }
68
+ if (strokeMiter !== undefined) {
69
+ paint.setStrokeMiter(strokeMiter);
70
+ }
71
+ if (antiAlias !== undefined) {
72
+ paint.setAntiAlias(antiAlias);
73
+ }
74
+ if (dither !== undefined) {
75
+ paint.setDither(dither);
76
+ }
77
+ };