@shopify/react-native-skia 1.7.6 → 1.7.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (364) hide show
  1. package/android/cpp/rnskia-android/OpenGLWindowContext.h +8 -1
  2. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +4 -4
  3. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.h +2 -2
  4. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +13 -0
  5. package/android/src/main/java/com/shopify/reactnative/skia/SkiaTextureView.java +24 -1
  6. package/cpp/rnskia/RNSkJsiViewApi.h +0 -3
  7. package/cpp/rnskia/RNSkView.h +6 -6
  8. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.h +2 -2
  9. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +2 -2
  10. package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +1 -1
  11. package/lib/commonjs/dom/nodes/datatypes/Circle.d.ts +2 -3
  12. package/lib/commonjs/dom/nodes/datatypes/Circle.js +11 -6
  13. package/lib/commonjs/dom/nodes/datatypes/Circle.js.map +1 -1
  14. package/lib/commonjs/dom/nodes/datatypes/Enum.js +1 -0
  15. package/lib/commonjs/dom/nodes/datatypes/Enum.js.map +1 -1
  16. package/lib/commonjs/dom/nodes/datatypes/Fitting.js +1 -10
  17. package/lib/commonjs/dom/nodes/datatypes/Fitting.js.map +1 -1
  18. package/lib/commonjs/dom/nodes/datatypes/Gradient.js +3 -2
  19. package/lib/commonjs/dom/nodes/datatypes/Gradient.js.map +1 -1
  20. package/lib/commonjs/dom/nodes/datatypes/Path.js +4 -1
  21. package/lib/commonjs/dom/nodes/datatypes/Path.js.map +1 -1
  22. package/lib/commonjs/dom/nodes/datatypes/Radius.js +1 -0
  23. package/lib/commonjs/dom/nodes/datatypes/Radius.js.map +1 -1
  24. package/lib/commonjs/dom/nodes/datatypes/Rect.d.ts +3 -1
  25. package/lib/commonjs/dom/nodes/datatypes/Rect.js +17 -7
  26. package/lib/commonjs/dom/nodes/datatypes/Rect.js.map +1 -1
  27. package/lib/commonjs/dom/nodes/datatypes/Transform.d.ts +2 -1
  28. package/lib/commonjs/dom/nodes/datatypes/Transform.js +32 -1
  29. package/lib/commonjs/dom/nodes/datatypes/Transform.js.map +1 -1
  30. package/lib/commonjs/dom/nodes/drawings/Box.js +4 -5
  31. package/lib/commonjs/dom/nodes/drawings/Box.js.map +1 -1
  32. package/lib/commonjs/dom/nodes/drawings/CircleNode.js +1 -1
  33. package/lib/commonjs/dom/nodes/drawings/CircleNode.js.map +1 -1
  34. package/lib/commonjs/dom/types/DeclarationContext.d.ts +4 -4
  35. package/lib/commonjs/dom/types/DeclarationContext.js +8 -2
  36. package/lib/commonjs/dom/types/DeclarationContext.js.map +1 -1
  37. package/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
  38. package/lib/commonjs/external/reanimated/renderHelpers.js +11 -6
  39. package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
  40. package/lib/commonjs/renderer/HostConfig.js +8 -4
  41. package/lib/commonjs/renderer/HostConfig.js.map +1 -1
  42. package/lib/commonjs/renderer/__tests__/setup.d.ts +2 -3
  43. package/lib/commonjs/renderer/processors/Animations/Animations.d.ts +1 -2
  44. package/lib/commonjs/renderer/processors/Animations/Animations.js.map +1 -1
  45. package/lib/commonjs/renderer/typeddash.js +5 -1
  46. package/lib/commonjs/renderer/typeddash.js.map +1 -1
  47. package/lib/commonjs/skia/__tests__/setup.d.ts +0 -3
  48. package/lib/commonjs/skia/types/Path/Path.js +5 -1
  49. package/lib/commonjs/skia/types/Path/Path.js.map +1 -1
  50. package/lib/commonjs/skia/types/Shader/Shader.js +8 -6
  51. package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
  52. package/lib/commonjs/sksg/Container.d.ts +19 -0
  53. package/lib/commonjs/sksg/Container.js +102 -0
  54. package/lib/commonjs/sksg/Container.js.map +1 -0
  55. package/lib/commonjs/sksg/DrawingContext.d.ts +16 -0
  56. package/lib/commonjs/sksg/DrawingContext.js +186 -0
  57. package/lib/commonjs/sksg/DrawingContext.js.map +1 -0
  58. package/lib/commonjs/sksg/HostConfig.d.ts +19 -0
  59. package/lib/commonjs/sksg/HostConfig.js +168 -0
  60. package/lib/commonjs/sksg/HostConfig.js.map +1 -0
  61. package/lib/commonjs/sksg/Reconciler.d.ts +17 -0
  62. package/lib/commonjs/sksg/Reconciler.js +54 -0
  63. package/lib/commonjs/sksg/Reconciler.js.map +1 -0
  64. package/lib/commonjs/sksg/__tests__/MockDeclaration.d.ts +57 -0
  65. package/lib/commonjs/sksg/nodes/Node.d.ts +7 -0
  66. package/lib/commonjs/sksg/nodes/Node.js +6 -0
  67. package/lib/commonjs/sksg/nodes/Node.js.map +1 -0
  68. package/lib/commonjs/sksg/nodes/colorFilters.d.ts +7 -0
  69. package/lib/commonjs/sksg/nodes/colorFilters.js +55 -0
  70. package/lib/commonjs/sksg/nodes/colorFilters.js.map +1 -0
  71. package/lib/commonjs/sksg/nodes/context.d.ts +3 -0
  72. package/lib/commonjs/sksg/nodes/context.js +448 -0
  73. package/lib/commonjs/sksg/nodes/context.js.map +1 -0
  74. package/lib/commonjs/sksg/nodes/drawings.d.ts +31 -0
  75. package/lib/commonjs/sksg/nodes/drawings.js +361 -0
  76. package/lib/commonjs/sksg/nodes/drawings.js.map +1 -0
  77. package/lib/commonjs/sksg/nodes/imageFilters.d.ts +14 -0
  78. package/lib/commonjs/sksg/nodes/imageFilters.js +135 -0
  79. package/lib/commonjs/sksg/nodes/imageFilters.js.map +1 -0
  80. package/lib/commonjs/sksg/nodes/index.d.ts +3 -0
  81. package/lib/commonjs/sksg/nodes/index.js +39 -0
  82. package/lib/commonjs/sksg/nodes/index.js.map +1 -0
  83. package/lib/commonjs/sksg/nodes/paint.d.ts +2 -0
  84. package/lib/commonjs/sksg/nodes/paint.js +80 -0
  85. package/lib/commonjs/sksg/nodes/paint.js.map +1 -0
  86. package/lib/commonjs/sksg/nodes/pathEffects.d.ts +8 -0
  87. package/lib/commonjs/sksg/nodes/pathEffects.js +84 -0
  88. package/lib/commonjs/sksg/nodes/pathEffects.js.map +1 -0
  89. package/lib/commonjs/sksg/nodes/shaders.d.ts +10 -0
  90. package/lib/commonjs/sksg/nodes/shaders.js +156 -0
  91. package/lib/commonjs/sksg/nodes/shaders.js.map +1 -0
  92. package/lib/commonjs/sksg/nodes/utils.d.ts +3 -0
  93. package/lib/commonjs/sksg/nodes/utils.js +25 -0
  94. package/lib/commonjs/sksg/nodes/utils.js.map +1 -0
  95. package/lib/commonjs/views/SkiaPictureView.js +0 -2
  96. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  97. package/lib/commonjs/views/types.d.ts +2 -2
  98. package/lib/commonjs/views/types.js.map +1 -1
  99. package/lib/module/dom/nodes/JsiSkDOM.js.map +1 -1
  100. package/lib/module/dom/nodes/datatypes/Circle.d.ts +2 -3
  101. package/lib/module/dom/nodes/datatypes/Circle.js +12 -6
  102. package/lib/module/dom/nodes/datatypes/Circle.js.map +1 -1
  103. package/lib/module/dom/nodes/datatypes/Enum.js +2 -0
  104. package/lib/module/dom/nodes/datatypes/Enum.js.map +1 -1
  105. package/lib/module/dom/nodes/datatypes/Fitting.js +2 -10
  106. package/lib/module/dom/nodes/datatypes/Fitting.js.map +1 -1
  107. package/lib/module/dom/nodes/datatypes/Gradient.js +4 -2
  108. package/lib/module/dom/nodes/datatypes/Gradient.js.map +1 -1
  109. package/lib/module/dom/nodes/datatypes/Path.js +5 -1
  110. package/lib/module/dom/nodes/datatypes/Path.js.map +1 -1
  111. package/lib/module/dom/nodes/datatypes/Radius.js +2 -0
  112. package/lib/module/dom/nodes/datatypes/Radius.js.map +1 -1
  113. package/lib/module/dom/nodes/datatypes/Rect.d.ts +3 -1
  114. package/lib/module/dom/nodes/datatypes/Rect.js +14 -5
  115. package/lib/module/dom/nodes/datatypes/Rect.js.map +1 -1
  116. package/lib/module/dom/nodes/datatypes/Transform.d.ts +2 -1
  117. package/lib/module/dom/nodes/datatypes/Transform.js +31 -0
  118. package/lib/module/dom/nodes/datatypes/Transform.js.map +1 -1
  119. package/lib/module/dom/nodes/drawings/Box.js +1 -2
  120. package/lib/module/dom/nodes/drawings/Box.js.map +1 -1
  121. package/lib/module/dom/nodes/drawings/CircleNode.js +1 -1
  122. package/lib/module/dom/nodes/drawings/CircleNode.js.map +1 -1
  123. package/lib/module/dom/types/DeclarationContext.d.ts +4 -4
  124. package/lib/module/dom/types/DeclarationContext.js +9 -2
  125. package/lib/module/dom/types/DeclarationContext.js.map +1 -1
  126. package/lib/module/external/reanimated/renderHelpers.d.ts +2 -0
  127. package/lib/module/external/reanimated/renderHelpers.js +8 -4
  128. package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
  129. package/lib/module/renderer/HostConfig.js +8 -4
  130. package/lib/module/renderer/HostConfig.js.map +1 -1
  131. package/lib/module/renderer/__tests__/setup.d.ts +2 -3
  132. package/lib/module/renderer/processors/Animations/Animations.d.ts +1 -2
  133. package/lib/module/renderer/processors/Animations/Animations.js.map +1 -1
  134. package/lib/module/renderer/typeddash.js +5 -1
  135. package/lib/module/renderer/typeddash.js.map +1 -1
  136. package/lib/module/skia/__tests__/setup.d.ts +0 -3
  137. package/lib/module/skia/types/Path/Path.js +5 -1
  138. package/lib/module/skia/types/Path/Path.js.map +1 -1
  139. package/lib/module/skia/types/Shader/Shader.js +9 -6
  140. package/lib/module/skia/types/Shader/Shader.js.map +1 -1
  141. package/lib/module/sksg/Container.d.ts +19 -0
  142. package/lib/module/sksg/Container.js +94 -0
  143. package/lib/module/sksg/Container.js.map +1 -0
  144. package/lib/module/sksg/DrawingContext.d.ts +16 -0
  145. package/lib/module/sksg/DrawingContext.js +180 -0
  146. package/lib/module/sksg/DrawingContext.js.map +1 -0
  147. package/lib/module/sksg/HostConfig.d.ts +19 -0
  148. package/lib/module/sksg/HostConfig.js +161 -0
  149. package/lib/module/sksg/HostConfig.js.map +1 -0
  150. package/lib/module/sksg/Reconciler.d.ts +17 -0
  151. package/lib/module/sksg/Reconciler.js +46 -0
  152. package/lib/module/sksg/Reconciler.js.map +1 -0
  153. package/lib/module/sksg/__tests__/MockDeclaration.d.ts +57 -0
  154. package/lib/module/sksg/nodes/Node.d.ts +7 -0
  155. package/lib/module/sksg/nodes/Node.js +2 -0
  156. package/lib/module/sksg/nodes/Node.js.map +1 -0
  157. package/lib/module/sksg/nodes/colorFilters.d.ts +7 -0
  158. package/lib/module/sksg/nodes/colorFilters.js +44 -0
  159. package/lib/module/sksg/nodes/colorFilters.js.map +1 -0
  160. package/lib/module/sksg/nodes/context.d.ts +3 -0
  161. package/lib/module/sksg/nodes/context.js +443 -0
  162. package/lib/module/sksg/nodes/context.js.map +1 -0
  163. package/lib/module/sksg/nodes/drawings.d.ts +31 -0
  164. package/lib/module/sksg/nodes/drawings.js +334 -0
  165. package/lib/module/sksg/nodes/drawings.js.map +1 -0
  166. package/lib/module/sksg/nodes/imageFilters.d.ts +14 -0
  167. package/lib/module/sksg/nodes/imageFilters.js +122 -0
  168. package/lib/module/sksg/nodes/imageFilters.js.map +1 -0
  169. package/lib/module/sksg/nodes/index.d.ts +3 -0
  170. package/lib/module/sksg/nodes/index.js +4 -0
  171. package/lib/module/sksg/nodes/index.js.map +1 -0
  172. package/lib/module/sksg/nodes/paint.d.ts +2 -0
  173. package/lib/module/sksg/nodes/paint.js +74 -0
  174. package/lib/module/sksg/nodes/paint.js.map +1 -0
  175. package/lib/module/sksg/nodes/pathEffects.d.ts +8 -0
  176. package/lib/module/sksg/nodes/pathEffects.js +72 -0
  177. package/lib/module/sksg/nodes/pathEffects.js.map +1 -0
  178. package/lib/module/sksg/nodes/shaders.d.ts +10 -0
  179. package/lib/module/sksg/nodes/shaders.js +142 -0
  180. package/lib/module/sksg/nodes/shaders.js.map +1 -0
  181. package/lib/module/sksg/nodes/utils.d.ts +3 -0
  182. package/lib/module/sksg/nodes/utils.js +18 -0
  183. package/lib/module/sksg/nodes/utils.js.map +1 -0
  184. package/lib/module/views/SkiaPictureView.js +0 -2
  185. package/lib/module/views/SkiaPictureView.js.map +1 -1
  186. package/lib/module/views/types.d.ts +2 -2
  187. package/lib/module/views/types.js.map +1 -1
  188. package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Circle.d.ts +1 -1
  189. package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Rect.d.ts +2 -0
  190. package/lib/typescript/lib/commonjs/dom/nodes/datatypes/Transform.d.ts +1 -0
  191. package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +2 -0
  192. package/lib/typescript/lib/commonjs/renderer/HostConfig.d.ts +3 -1
  193. package/lib/typescript/lib/commonjs/sksg/Container.d.ts +16 -0
  194. package/lib/typescript/lib/commonjs/sksg/DrawingContext.d.ts +26 -0
  195. package/lib/typescript/lib/commonjs/sksg/HostConfig.d.ts +50 -0
  196. package/lib/typescript/lib/commonjs/sksg/Reconciler.d.ts +16 -0
  197. package/lib/typescript/lib/commonjs/sksg/nodes/Node.d.ts +1 -0
  198. package/lib/typescript/lib/commonjs/sksg/nodes/colorFilters.d.ts +7 -0
  199. package/lib/typescript/lib/commonjs/sksg/nodes/context.d.ts +2 -0
  200. package/lib/typescript/lib/commonjs/sksg/nodes/drawings.d.ts +23 -0
  201. package/lib/typescript/lib/commonjs/sksg/nodes/imageFilters.d.ts +10 -0
  202. package/lib/typescript/lib/commonjs/sksg/nodes/index.d.ts +1 -0
  203. package/lib/typescript/lib/commonjs/sksg/nodes/paint.d.ts +2 -0
  204. package/lib/typescript/lib/commonjs/sksg/nodes/pathEffects.d.ts +8 -0
  205. package/lib/typescript/lib/commonjs/sksg/nodes/shaders.d.ts +10 -0
  206. package/lib/typescript/lib/commonjs/sksg/nodes/utils.d.ts +3 -0
  207. package/lib/typescript/lib/module/dom/nodes/datatypes/Circle.d.ts +1 -1
  208. package/lib/typescript/lib/module/dom/nodes/datatypes/Rect.d.ts +2 -0
  209. package/lib/typescript/lib/module/dom/nodes/datatypes/Transform.d.ts +1 -0
  210. package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +2 -0
  211. package/lib/typescript/lib/module/mock/index.d.ts +4 -1
  212. package/lib/typescript/lib/module/renderer/HostConfig.d.ts +3 -1
  213. package/lib/typescript/lib/module/sksg/Container.d.ts +15 -0
  214. package/lib/typescript/lib/module/sksg/DrawingContext.d.ts +26 -0
  215. package/lib/typescript/lib/module/sksg/HostConfig.d.ts +49 -0
  216. package/lib/typescript/lib/module/sksg/Reconciler.d.ts +15 -0
  217. package/lib/typescript/lib/module/sksg/nodes/colorFilters.d.ts +6 -0
  218. package/lib/typescript/lib/module/sksg/nodes/context.d.ts +1 -0
  219. package/lib/typescript/lib/module/sksg/nodes/drawings.d.ts +22 -0
  220. package/lib/typescript/lib/module/sksg/nodes/imageFilters.d.ts +9 -0
  221. package/lib/typescript/lib/module/sksg/nodes/index.d.ts +3 -0
  222. package/lib/typescript/lib/module/sksg/nodes/paint.d.ts +1 -0
  223. package/lib/typescript/lib/module/sksg/nodes/pathEffects.d.ts +7 -0
  224. package/lib/typescript/lib/module/sksg/nodes/shaders.d.ts +9 -0
  225. package/lib/typescript/lib/module/sksg/nodes/utils.d.ts +2 -0
  226. package/lib/typescript/src/dom/nodes/datatypes/Circle.d.ts +2 -3
  227. package/lib/typescript/src/dom/nodes/datatypes/Rect.d.ts +3 -1
  228. package/lib/typescript/src/dom/nodes/datatypes/Transform.d.ts +2 -1
  229. package/lib/typescript/src/dom/types/DeclarationContext.d.ts +4 -4
  230. package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +2 -0
  231. package/lib/typescript/src/renderer/__tests__/setup.d.ts +2 -3
  232. package/lib/typescript/src/renderer/processors/Animations/Animations.d.ts +1 -2
  233. package/lib/typescript/src/skia/__tests__/setup.d.ts +0 -3
  234. package/lib/typescript/src/sksg/Container.d.ts +19 -0
  235. package/lib/typescript/src/sksg/DrawingContext.d.ts +16 -0
  236. package/lib/typescript/src/sksg/HostConfig.d.ts +19 -0
  237. package/lib/typescript/src/sksg/Reconciler.d.ts +17 -0
  238. package/lib/typescript/src/sksg/__tests__/MockDeclaration.d.ts +57 -0
  239. package/lib/typescript/src/sksg/nodes/Node.d.ts +7 -0
  240. package/lib/typescript/src/sksg/nodes/colorFilters.d.ts +7 -0
  241. package/lib/typescript/src/sksg/nodes/context.d.ts +3 -0
  242. package/lib/typescript/src/sksg/nodes/drawings.d.ts +31 -0
  243. package/lib/typescript/src/sksg/nodes/imageFilters.d.ts +14 -0
  244. package/lib/typescript/src/sksg/nodes/index.d.ts +3 -0
  245. package/lib/typescript/src/sksg/nodes/paint.d.ts +2 -0
  246. package/lib/typescript/src/sksg/nodes/pathEffects.d.ts +8 -0
  247. package/lib/typescript/src/sksg/nodes/shaders.d.ts +10 -0
  248. package/lib/typescript/src/sksg/nodes/utils.d.ts +3 -0
  249. package/lib/typescript/src/views/types.d.ts +2 -2
  250. package/libs/{ios → apple}/libskia.xcframework/Info.plist +15 -0
  251. package/libs/{ios → apple}/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  252. package/libs/{ios → apple}/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  253. package/libs/apple/libskia.xcframework/macos-arm64_x86_64/libskia.a +0 -0
  254. package/libs/{ios → apple}/libskottie.xcframework/Info.plist +20 -5
  255. package/libs/{ios → apple}/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  256. package/libs/{ios → apple}/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  257. package/libs/apple/libskottie.xcframework/macos-arm64_x86_64/libskottie.a +0 -0
  258. package/libs/{ios → apple}/libskparagraph.xcframework/Info.plist +20 -5
  259. package/libs/{ios → apple}/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  260. package/libs/{ios → apple}/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  261. package/libs/apple/libskparagraph.xcframework/macos-arm64_x86_64/libskparagraph.a +0 -0
  262. package/libs/{ios → apple}/libsksg.xcframework/Info.plist +15 -0
  263. package/libs/{ios → apple}/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  264. package/libs/{ios → apple}/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  265. package/libs/apple/libsksg.xcframework/macos-arm64_x86_64/libsksg.a +0 -0
  266. package/libs/{ios → apple}/libskshaper.xcframework/Info.plist +20 -5
  267. package/libs/{ios → apple}/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  268. package/libs/{ios → apple}/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  269. package/libs/apple/libskshaper.xcframework/macos-arm64_x86_64/libskshaper.a +0 -0
  270. package/libs/{ios → apple}/libskunicode_core.xcframework/Info.plist +18 -3
  271. package/libs/{ios → apple}/libskunicode_core.xcframework/ios-arm64_arm64e/libskunicode_core.a +0 -0
  272. package/libs/{ios → apple}/libskunicode_core.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_core.a +0 -0
  273. package/libs/apple/libskunicode_core.xcframework/macos-arm64_x86_64/libskunicode_core.a +0 -0
  274. package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/Info.plist +15 -0
  275. package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e/libskunicode_libgrapheme.a +0 -0
  276. package/libs/{ios → apple}/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_libgrapheme.a +0 -0
  277. package/libs/apple/libskunicode_libgrapheme.xcframework/macos-arm64_x86_64/libskunicode_libgrapheme.a +0 -0
  278. package/libs/{ios → apple}/libsvg.xcframework/Info.plist +15 -0
  279. package/libs/{ios → apple}/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  280. package/libs/{ios → apple}/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  281. package/libs/apple/libsvg.xcframework/macos-arm64_x86_64/libsvg.a +0 -0
  282. package/package.json +3 -3
  283. package/react-native-skia.podspec +9 -9
  284. package/src/__tests__/setup.ts +1 -1
  285. package/src/__tests__/snapshots/sksg/breathe-0.png +0 -0
  286. package/src/__tests__/snapshots/sksg/breathe.png +0 -0
  287. package/src/__tests__/snapshots/sksg/simple.png +0 -0
  288. package/src/__tests__/snapshots/sksg/simple2.png +0 -0
  289. package/src/dom/nodes/JsiSkDOM.ts +2 -1
  290. package/src/dom/nodes/datatypes/Circle.ts +7 -5
  291. package/src/dom/nodes/datatypes/Enum.ts +2 -0
  292. package/src/dom/nodes/datatypes/Fitting.ts +2 -5
  293. package/src/dom/nodes/datatypes/Gradient.ts +4 -7
  294. package/src/dom/nodes/datatypes/Path.ts +5 -2
  295. package/src/dom/nodes/datatypes/Radius.ts +2 -0
  296. package/src/dom/nodes/datatypes/Rect.ts +40 -6
  297. package/src/dom/nodes/datatypes/Transform.ts +29 -1
  298. package/src/dom/nodes/drawings/Box.ts +1 -29
  299. package/src/dom/nodes/drawings/CircleNode.ts +1 -1
  300. package/src/dom/types/DeclarationContext.ts +12 -2
  301. package/src/external/reanimated/renderHelpers.ts +8 -4
  302. package/src/renderer/HostConfig.ts +10 -4
  303. package/src/renderer/__tests__/documentation/shapes/Box.spec.tsx +2 -2
  304. package/src/renderer/__tests__/setup.tsx +17 -15
  305. package/src/renderer/processors/Animations/Animations.ts +1 -5
  306. package/src/renderer/typeddash.ts +4 -2
  307. package/src/skia/__tests__/setup.ts +1 -51
  308. package/src/skia/types/Path/Path.ts +4 -2
  309. package/src/skia/types/Shader/Shader.ts +7 -4
  310. package/src/sksg/Container.ts +102 -0
  311. package/src/sksg/DrawingContext.ts +221 -0
  312. package/src/sksg/HostConfig.ts +287 -0
  313. package/src/sksg/Reconciler.ts +59 -0
  314. package/src/sksg/__tests__/Declarations.spec.tsx +235 -0
  315. package/src/sksg/__tests__/MockDeclaration.ts +140 -0
  316. package/src/sksg/__tests__/Simple.spec.tsx +148 -0
  317. package/src/sksg/nodes/Node.ts +8 -0
  318. package/src/sksg/nodes/colorFilters.ts +60 -0
  319. package/src/sksg/nodes/context.ts +489 -0
  320. package/src/sksg/nodes/drawings.ts +393 -0
  321. package/src/sksg/nodes/imageFilters.ts +183 -0
  322. package/src/sksg/nodes/index.ts +3 -0
  323. package/src/sksg/nodes/paint.ts +75 -0
  324. package/src/sksg/nodes/pathEffects.ts +95 -0
  325. package/src/sksg/nodes/shaders.ts +203 -0
  326. package/src/sksg/nodes/utils.ts +23 -0
  327. package/src/views/SkiaPictureView.tsx +0 -2
  328. package/src/views/types.ts +2 -2
  329. package/lib/commonjs/dom/__tests__/Shaders.spec.d.ts +0 -1
  330. package/lib/commonjs/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
  331. package/lib/module/dom/__tests__/Compose.spec.d.ts +0 -1
  332. package/lib/module/dom/__tests__/Demos.spec.d.ts +0 -1
  333. package/lib/module/dom/__tests__/DrawingContext.spec.d.ts +0 -1
  334. package/lib/module/dom/__tests__/Drawings.spec.d.ts +0 -1
  335. package/lib/module/dom/__tests__/Group.spec.d.ts +0 -1
  336. package/lib/module/dom/__tests__/Paint.spec.d.ts +0 -1
  337. package/lib/module/dom/__tests__/RenderNodes.spec.d.ts +0 -1
  338. package/lib/module/dom/__tests__/Shaders.spec.d.ts +0 -1
  339. package/lib/module/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
  340. package/lib/typescript/src/dom/__tests__/Compose.spec.d.ts +0 -1
  341. package/lib/typescript/src/dom/__tests__/Demos.spec.d.ts +0 -1
  342. package/lib/typescript/src/dom/__tests__/DrawingContext.spec.d.ts +0 -1
  343. package/lib/typescript/src/dom/__tests__/Drawings.spec.d.ts +0 -1
  344. package/lib/typescript/src/dom/__tests__/Group.spec.d.ts +0 -1
  345. package/lib/typescript/src/dom/__tests__/Paint.spec.d.ts +0 -1
  346. package/lib/typescript/src/dom/__tests__/RenderNodes.spec.d.ts +0 -1
  347. package/lib/typescript/src/dom/__tests__/Shaders.spec.d.ts +0 -1
  348. package/lib/typescript/src/renderer/__tests__/SkiaDOM.spec.d.ts +0 -1
  349. package/src/dom/__tests__/Compose.spec.tsx +0 -42
  350. package/src/dom/__tests__/Demos.spec.tsx +0 -145
  351. package/src/dom/__tests__/DrawingContext.spec.tsx +0 -99
  352. package/src/dom/__tests__/Drawings.spec.tsx +0 -95
  353. package/src/dom/__tests__/Group.spec.tsx +0 -132
  354. package/src/dom/__tests__/Paint.spec.tsx +0 -100
  355. package/src/dom/__tests__/RenderNodes.spec.tsx +0 -44
  356. package/src/dom/__tests__/Shaders.spec.tsx +0 -123
  357. package/src/renderer/__tests__/SkiaDOM.spec.tsx +0 -46
  358. /package/lib/commonjs/{dom/__tests__/Compose.spec.d.ts → sksg/__tests__/Declarations.spec.d.ts} +0 -0
  359. /package/lib/commonjs/{dom/__tests__/Demos.spec.d.ts → sksg/__tests__/Simple.spec.d.ts} +0 -0
  360. /package/lib/{commonjs/dom/__tests__/DrawingContext.spec.d.ts → module/sksg/__tests__/Declarations.spec.d.ts} +0 -0
  361. /package/lib/{commonjs/dom/__tests__/Drawings.spec.d.ts → module/sksg/__tests__/Simple.spec.d.ts} +0 -0
  362. /package/lib/{commonjs/dom/__tests__/Group.spec.d.ts → typescript/lib/module/sksg/nodes/Node.d.ts} +0 -0
  363. /package/lib/{commonjs/dom/__tests__/Paint.spec.d.ts → typescript/src/sksg/__tests__/Declarations.spec.d.ts} +0 -0
  364. /package/lib/{commonjs/dom/__tests__/RenderNodes.spec.d.ts → typescript/src/sksg/__tests__/Simple.spec.d.ts} +0 -0
@@ -0,0 +1,393 @@
1
+ "worklet";
2
+
3
+ import {
4
+ deflate,
5
+ enumKey,
6
+ fitRects,
7
+ inflate,
8
+ NodeType,
9
+ processCircle,
10
+ processPath,
11
+ processRect,
12
+ processRRect,
13
+ } from "../../dom/nodes";
14
+ import type {
15
+ AtlasProps,
16
+ BoxProps,
17
+ BoxShadowProps,
18
+ CircleProps,
19
+ DiffRectProps,
20
+ DrawingNodeProps,
21
+ GlyphsProps,
22
+ ImageProps,
23
+ ImageSVGProps,
24
+ LineProps,
25
+ OvalProps,
26
+ ParagraphProps,
27
+ PatchProps,
28
+ PathProps,
29
+ PictureProps,
30
+ PointsProps,
31
+ RectProps,
32
+ RoundedRectProps,
33
+ TextBlobProps,
34
+ TextPathProps,
35
+ TextProps,
36
+ VerticesProps,
37
+ } from "../../dom/types";
38
+ import { saturate } from "../../renderer/processors";
39
+ import type {
40
+ SkCanvas,
41
+ SkPaint,
42
+ SkPoint,
43
+ SkRSXform,
44
+ Skia,
45
+ } from "../../skia/types";
46
+ import {
47
+ BlendMode,
48
+ BlurStyle,
49
+ ClipOp,
50
+ FillType,
51
+ isRRect,
52
+ PointMode,
53
+ VertexMode,
54
+ } from "../../skia/types";
55
+
56
+ import type { Node } from "./Node";
57
+ import { materialize } from "./utils";
58
+
59
+ interface LocalDrawingContext {
60
+ Skia: Skia;
61
+ canvas: SkCanvas;
62
+ paint: SkPaint;
63
+ }
64
+
65
+ export const drawLine = (ctx: LocalDrawingContext, props: LineProps) => {
66
+ const { p1, p2 } = props;
67
+ ctx.canvas.drawLine(p1.x, p1.y, p2.x, p2.y, ctx.paint);
68
+ };
69
+
70
+ export const drawOval = (ctx: LocalDrawingContext, props: OvalProps) => {
71
+ const rect = processRect(ctx.Skia, props);
72
+ ctx.canvas.drawOval(rect, ctx.paint);
73
+ };
74
+
75
+ export const drawBox = (
76
+ ctx: LocalDrawingContext,
77
+ props: BoxProps,
78
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
79
+ children: Node<any>[]
80
+ ) => {
81
+ const { paint, Skia, canvas } = ctx;
82
+ const { box: defaultBox } = props;
83
+ const opacity = paint.getAlphaf();
84
+ const box = isRRect(defaultBox) ? defaultBox : Skia.RRectXY(defaultBox, 0, 0);
85
+ const shadows = children
86
+ .map((node) => {
87
+ if (node.type === NodeType.BoxShadow) {
88
+ return materialize(node.props);
89
+ }
90
+ return null;
91
+ })
92
+ .filter((n): n is BoxShadowProps => n !== null);
93
+ shadows
94
+ .filter((shadow) => !shadow.inner)
95
+ .map((shadow) => {
96
+ const { color = "black", blur, spread = 0, dx = 0, dy = 0 } = shadow;
97
+ const lPaint = Skia.Paint();
98
+ lPaint.setColor(Skia.Color(color));
99
+ lPaint.setAlphaf(paint.getAlphaf() * opacity);
100
+ lPaint.setMaskFilter(
101
+ Skia.MaskFilter.MakeBlur(BlurStyle.Normal, blur, true)
102
+ );
103
+ canvas.drawRRect(inflate(Skia, box, spread, spread, dx, dy), lPaint);
104
+ });
105
+
106
+ canvas.drawRRect(box, paint);
107
+
108
+ shadows
109
+ .filter((shadow) => shadow.inner)
110
+ .map((shadow) => {
111
+ const { color = "black", blur, spread = 0, dx = 0, dy = 0 } = shadow;
112
+ const delta = Skia.Point(10 + Math.abs(dx), 10 + Math.abs(dy));
113
+ canvas.save();
114
+ canvas.clipRRect(box, ClipOp.Intersect, false);
115
+ const lPaint = Skia.Paint();
116
+ lPaint.setColor(Skia.Color(color));
117
+ lPaint.setAlphaf(paint.getAlphaf() * opacity);
118
+
119
+ lPaint.setMaskFilter(
120
+ Skia.MaskFilter.MakeBlur(BlurStyle.Normal, blur, true)
121
+ );
122
+ const inner = deflate(Skia, box, spread, spread, dx, dy);
123
+ const outer = inflate(Skia, box, delta.x, delta.y);
124
+ canvas.drawDRRect(outer, inner, lPaint);
125
+ canvas.restore();
126
+ });
127
+ };
128
+
129
+ export const drawBoxShadow = (
130
+ _ctx: LocalDrawingContext,
131
+ _props: BoxShadowProps
132
+ ) => {
133
+ //throw new Error("drawBoxShadow(): not implemented yet");
134
+ };
135
+
136
+ export const drawImage = (ctx: LocalDrawingContext, props: ImageProps) => {
137
+ const { image } = props;
138
+ if (image) {
139
+ const fit = props.fit ?? "contain";
140
+ const rect = processRect(ctx.Skia, props);
141
+ const { src, dst } = fitRects(
142
+ fit,
143
+ {
144
+ x: 0,
145
+ y: 0,
146
+ width: image.width(),
147
+ height: image.height(),
148
+ },
149
+ rect
150
+ );
151
+ ctx.canvas.drawImageRect(image, src, dst, ctx.paint);
152
+ }
153
+ };
154
+
155
+ export const drawPoints = (ctx: LocalDrawingContext, props: PointsProps) => {
156
+ const { points, mode } = props;
157
+ ctx.canvas.drawPoints(PointMode[enumKey(mode)], points, ctx.paint);
158
+ };
159
+
160
+ export const drawVertices = (
161
+ ctx: LocalDrawingContext,
162
+ props: VerticesProps
163
+ ) => {
164
+ const { mode, textures, colors, indices, blendMode } = props;
165
+ const vertexMode = mode ? VertexMode[enumKey(mode)] : VertexMode.Triangles;
166
+ const vertices = ctx.Skia.MakeVertices(
167
+ vertexMode,
168
+ props.vertices,
169
+ textures,
170
+ colors ? colors.map((c) => ctx.Skia.Color(c)) : undefined,
171
+ indices
172
+ );
173
+ const defaultBlendMode = colors ? BlendMode.DstOver : BlendMode.SrcOver;
174
+ const blend = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;
175
+
176
+ ctx.canvas.drawVertices(vertices, blend, ctx.paint);
177
+ };
178
+
179
+ export const drawDiffRect = (
180
+ ctx: LocalDrawingContext,
181
+ props: DiffRectProps
182
+ ) => {
183
+ const { outer, inner } = props;
184
+ ctx.canvas.drawDRRect(outer, inner, ctx.paint);
185
+ };
186
+
187
+ export const drawTextPath = (
188
+ ctx: LocalDrawingContext,
189
+ props: TextPathProps
190
+ ) => {
191
+ const path = processPath(ctx.Skia, props.path);
192
+ const { font, initialOffset } = props;
193
+ if (font) {
194
+ let { text } = props;
195
+ const ids = font.getGlyphIDs(text);
196
+ const widths = font.getGlyphWidths(ids);
197
+ const rsx: SkRSXform[] = [];
198
+ const meas = ctx.Skia.ContourMeasureIter(path, false, 1);
199
+ let cont = meas.next();
200
+ let dist = initialOffset;
201
+ for (let i = 0; i < text.length && cont; i++) {
202
+ const width = widths[i];
203
+ dist += width / 2;
204
+ if (dist > cont.length()) {
205
+ // jump to next contour
206
+ cont = meas.next();
207
+ if (!cont) {
208
+ // We have come to the end of the path - terminate the string
209
+ // right here.
210
+ text = text.substring(0, i);
211
+ break;
212
+ }
213
+ dist = width / 2;
214
+ }
215
+ // Gives us the (x, y) coordinates as well as the cos/sin of the tangent
216
+ // line at that position.
217
+ const [p, t] = cont.getPosTan(dist);
218
+ const adjustedX = p.x - (width / 2) * t.x;
219
+ const adjustedY = p.y - (width / 2) * t.y;
220
+ rsx.push(ctx.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));
221
+ dist += width / 2;
222
+ }
223
+ const derived = ctx.Skia.TextBlob.MakeFromRSXform(text, rsx, font);
224
+ ctx.canvas.drawTextBlob(derived, 0, 0, ctx.paint);
225
+ }
226
+ };
227
+
228
+ export const drawText = (ctx: LocalDrawingContext, props: TextProps) => {
229
+ const { text, x, y, font } = props;
230
+ if (font != null) {
231
+ ctx.canvas.drawText(text, x, y, ctx.paint, font);
232
+ }
233
+ };
234
+
235
+ export const drawPatch = (ctx: LocalDrawingContext, props: PatchProps) => {
236
+ const { texture, blendMode, patch } = props;
237
+ const defaultBlendMode = props.colors ? BlendMode.DstOver : BlendMode.SrcOver;
238
+ const mode = blendMode ? BlendMode[enumKey(blendMode)] : defaultBlendMode;
239
+ // Patch requires a path with the following constraints:
240
+ // M tl
241
+ // C c1 c2 br
242
+ // C c1 c2 bl
243
+ // C c1 c2 tl (the redundant point in the last command is removed)
244
+
245
+ const points = [
246
+ patch[0].pos,
247
+ patch[0].c2,
248
+ patch[1].c1,
249
+ patch[1].pos,
250
+ patch[1].c2,
251
+ patch[2].c1,
252
+ patch[2].pos,
253
+ patch[2].c2,
254
+ patch[3].c1,
255
+ patch[3].pos,
256
+ patch[3].c2,
257
+ patch[0].c1,
258
+ ];
259
+ const colors = props.colors
260
+ ? props.colors.map((c) => ctx.Skia.Color(c))
261
+ : undefined;
262
+ ctx.canvas.drawPatch(points, colors, texture, mode, ctx.paint);
263
+ };
264
+
265
+ export const drawPath = (ctx: LocalDrawingContext, props: PathProps) => {
266
+ const {
267
+ start: trimStart,
268
+ end: trimEnd,
269
+ fillType,
270
+ stroke,
271
+ ...pathProps
272
+ } = props;
273
+ const start = saturate(trimStart);
274
+ const end = saturate(trimEnd);
275
+ const hasStartOffset = start !== 0;
276
+ const hasEndOffset = end !== 1;
277
+ const hasStrokeOptions = stroke !== undefined;
278
+ const hasFillType = !!fillType;
279
+ const willMutatePath =
280
+ hasStartOffset || hasEndOffset || hasStrokeOptions || hasFillType;
281
+ const pristinePath = processPath(ctx.Skia, pathProps.path);
282
+ const path = willMutatePath ? pristinePath.copy() : pristinePath;
283
+ if (hasFillType) {
284
+ path.setFillType(FillType[enumKey(fillType)]);
285
+ }
286
+ if (hasStrokeOptions) {
287
+ path.stroke(stroke);
288
+ }
289
+ if (hasStartOffset || hasEndOffset) {
290
+ path.trim(start, end, false);
291
+ }
292
+ ctx.canvas.drawPath(path, ctx.paint);
293
+ };
294
+
295
+ export const drawRect = (ctx: LocalDrawingContext, props: RectProps) => {
296
+ const derived = processRect(ctx.Skia, props);
297
+ ctx.canvas.drawRect(derived, ctx.paint);
298
+ };
299
+
300
+ export const drawRRect = (
301
+ ctx: LocalDrawingContext,
302
+ props: RoundedRectProps
303
+ ) => {
304
+ const derived = processRRect(ctx.Skia, props);
305
+ ctx.canvas.drawRRect(derived, ctx.paint);
306
+ };
307
+
308
+ export const drawTextBlob = (
309
+ ctx: LocalDrawingContext,
310
+ props: TextBlobProps
311
+ ) => {
312
+ const { blob, x, y } = props;
313
+ ctx.canvas.drawTextBlob(blob, x, y, ctx.paint);
314
+ };
315
+
316
+ interface ProcessedGlyphs {
317
+ glyphs: number[];
318
+ positions: SkPoint[];
319
+ }
320
+
321
+ export const drawGlyphs = (ctx: LocalDrawingContext, props: GlyphsProps) => {
322
+ const derived = props.glyphs.reduce<ProcessedGlyphs>(
323
+ (acc, glyph) => {
324
+ const { id, pos } = glyph;
325
+ acc.glyphs.push(id);
326
+ acc.positions.push(pos);
327
+ return acc;
328
+ },
329
+ { glyphs: [], positions: [] }
330
+ );
331
+ const { glyphs, positions } = derived;
332
+ const { x, y, font } = props;
333
+ if (font) {
334
+ ctx.canvas.drawGlyphs(glyphs, positions, x, y, font, ctx.paint);
335
+ }
336
+ };
337
+
338
+ export const drawImageSVG = (
339
+ ctx: LocalDrawingContext,
340
+ props: ImageSVGProps
341
+ ) => {
342
+ const { canvas } = ctx;
343
+ const { svg } = props;
344
+ const { x, y, width, height } = props.rect
345
+ ? props.rect
346
+ : { x: props.x, y: props.y, width: props.width, height: props.height };
347
+ if (svg === null) {
348
+ return;
349
+ }
350
+ canvas.save();
351
+ if (x && y) {
352
+ canvas.translate(x, y);
353
+ }
354
+ canvas.drawSvg(svg, width, height);
355
+ canvas.restore();
356
+ };
357
+
358
+ export const drawParagraph = (
359
+ ctx: LocalDrawingContext,
360
+ props: ParagraphProps
361
+ ) => {
362
+ const { paragraph, x, y, width } = props;
363
+ if (paragraph) {
364
+ paragraph.layout(width);
365
+ paragraph.paint(ctx.canvas, x, y);
366
+ }
367
+ };
368
+
369
+ export const drawPicture = (ctx: LocalDrawingContext, props: PictureProps) => {
370
+ const { picture } = props;
371
+ ctx.canvas.drawPicture(picture);
372
+ };
373
+
374
+ export const drawAtlas = (ctx: LocalDrawingContext, props: AtlasProps) => {
375
+ const { image, sprites, transforms, colors, blendMode } = props;
376
+ const blend = blendMode ? BlendMode[enumKey(blendMode)] : undefined;
377
+ if (image) {
378
+ ctx.canvas.drawAtlas(image, sprites, transforms, ctx.paint, blend, colors);
379
+ }
380
+ };
381
+
382
+ export const drawCircle = (ctx: LocalDrawingContext, props: CircleProps) => {
383
+ const { c } = processCircle(props);
384
+ const { r } = props;
385
+ ctx.canvas.drawCircle(c.x, c.y, r, ctx.paint);
386
+ };
387
+
388
+ export const drawFill = (
389
+ ctx: LocalDrawingContext,
390
+ _props: DrawingNodeProps
391
+ ) => {
392
+ ctx.canvas.drawPaint(ctx.paint);
393
+ };
@@ -0,0 +1,183 @@
1
+ "worklet";
2
+
3
+ import { enumKey, processRadius } from "../../dom/nodes";
4
+ import type {
5
+ BlendImageFilterProps,
6
+ BlurImageFilterProps,
7
+ BlurMaskFilterProps,
8
+ DeclarationContext,
9
+ DisplacementMapImageFilterProps,
10
+ DropShadowImageFilterProps,
11
+ MorphologyImageFilterProps,
12
+ OffsetImageFilterProps,
13
+ RuntimeShaderImageFilterProps,
14
+ } from "../../dom/types";
15
+ import type { SkColor, Skia, SkImageFilter } from "../../skia/types";
16
+ import {
17
+ BlendMode,
18
+ BlurStyle,
19
+ ColorChannel,
20
+ processUniforms,
21
+ TileMode,
22
+ } from "../../skia/types";
23
+
24
+ export enum MorphologyOperator {
25
+ Erode,
26
+ Dilate,
27
+ }
28
+
29
+ const Black = Float32Array.of(0, 0, 0, 1);
30
+
31
+ const MakeInnerShadow = (
32
+ Skia: Skia,
33
+ shadowOnly: boolean | undefined,
34
+ dx: number,
35
+ dy: number,
36
+ sigmaX: number,
37
+ sigmaY: number,
38
+ color: SkColor,
39
+ input: SkImageFilter | null
40
+ ) => {
41
+ const sourceGraphic = Skia.ImageFilter.MakeColorFilter(
42
+ Skia.ColorFilter.MakeBlend(Black, BlendMode.Dst),
43
+ null
44
+ );
45
+ const sourceAlpha = Skia.ImageFilter.MakeColorFilter(
46
+ Skia.ColorFilter.MakeBlend(Black, BlendMode.SrcIn),
47
+ null
48
+ );
49
+ const f1 = Skia.ImageFilter.MakeColorFilter(
50
+ Skia.ColorFilter.MakeBlend(color, BlendMode.SrcOut),
51
+ null
52
+ );
53
+ const f2 = Skia.ImageFilter.MakeOffset(dx, dy, f1);
54
+ const f3 = Skia.ImageFilter.MakeBlur(sigmaX, sigmaY, TileMode.Decal, f2);
55
+ const f4 = Skia.ImageFilter.MakeBlend(BlendMode.SrcIn, sourceAlpha, f3);
56
+ if (shadowOnly) {
57
+ return f4;
58
+ }
59
+ return Skia.ImageFilter.MakeCompose(
60
+ input,
61
+ Skia.ImageFilter.MakeBlend(BlendMode.SrcOver, sourceGraphic, f4)
62
+ );
63
+ };
64
+
65
+ const input = (ctx: DeclarationContext) => {
66
+ return ctx.imageFilters.pop() ?? null;
67
+ };
68
+
69
+ export const makeOffsetImageFilter = (
70
+ ctx: DeclarationContext,
71
+ props: OffsetImageFilterProps
72
+ ) => {
73
+ const { x, y } = props;
74
+ return ctx.Skia.ImageFilter.MakeOffset(x, y, null);
75
+ };
76
+
77
+ export const declareDisplacementMapImageFilter = (
78
+ ctx: DeclarationContext,
79
+ props: DisplacementMapImageFilterProps
80
+ ) => {
81
+ const { channelX, channelY, scale } = props;
82
+ const shader = ctx.shaders.pop();
83
+ if (!shader) {
84
+ throw new Error("DisplacementMap expects a shader as child");
85
+ }
86
+ const map = ctx.Skia.ImageFilter.MakeShader(shader, null);
87
+ const imgf = ctx.Skia.ImageFilter.MakeDisplacementMap(
88
+ ColorChannel[enumKey(channelX)],
89
+ ColorChannel[enumKey(channelY)],
90
+ scale,
91
+ map,
92
+ input(ctx)
93
+ );
94
+ ctx.imageFilters.push(imgf);
95
+ };
96
+
97
+ export const makeBlurImageFilter = (
98
+ ctx: DeclarationContext,
99
+ props: BlurImageFilterProps
100
+ ) => {
101
+ const { mode, blur } = props;
102
+ const sigma = processRadius(ctx.Skia, blur);
103
+ const imgf = ctx.Skia.ImageFilter.MakeBlur(
104
+ sigma.x,
105
+ sigma.y,
106
+ TileMode[enumKey(mode)],
107
+ input(ctx)
108
+ );
109
+ return imgf;
110
+ };
111
+
112
+ export const makeDropShadowImageFilter = (
113
+ ctx: DeclarationContext,
114
+ props: DropShadowImageFilterProps
115
+ ) => {
116
+ const { dx, dy, blur, shadowOnly, color: cl, inner } = props;
117
+ const color = ctx.Skia.Color(cl);
118
+ let factory;
119
+ if (inner) {
120
+ factory = MakeInnerShadow.bind(null, ctx.Skia, shadowOnly);
121
+ } else {
122
+ factory = shadowOnly
123
+ ? ctx.Skia.ImageFilter.MakeDropShadowOnly.bind(ctx.Skia.ImageFilter)
124
+ : ctx.Skia.ImageFilter.MakeDropShadow.bind(ctx.Skia.ImageFilter);
125
+ }
126
+ const imgf = factory(dx, dy, blur, blur, color, input(ctx));
127
+ return imgf;
128
+ };
129
+
130
+ export const makeMorphologyImageFilter = (
131
+ ctx: DeclarationContext,
132
+ props: MorphologyImageFilterProps
133
+ ) => {
134
+ const { operator } = props;
135
+ const r = processRadius(ctx.Skia, props.radius);
136
+ let imgf;
137
+ if (MorphologyOperator[enumKey(operator)] === MorphologyOperator.Erode) {
138
+ imgf = ctx.Skia.ImageFilter.MakeErode(r.x, r.y, input(ctx));
139
+ } else {
140
+ imgf = ctx.Skia.ImageFilter.MakeDilate(r.x, r.y, input(ctx));
141
+ }
142
+ return imgf;
143
+ };
144
+
145
+ export const makeRuntimeShaderImageFilter = (
146
+ ctx: DeclarationContext,
147
+ props: RuntimeShaderImageFilterProps
148
+ ) => {
149
+ const { source, uniforms } = props;
150
+ const rtb = ctx.Skia.RuntimeShaderBuilder(source);
151
+ if (uniforms) {
152
+ processUniforms(source, uniforms, rtb);
153
+ }
154
+ const imgf = ctx.Skia.ImageFilter.MakeRuntimeShader(rtb, null, input(ctx));
155
+ return imgf;
156
+ };
157
+
158
+ export const declareBlendImageFilter = (
159
+ ctx: DeclarationContext,
160
+ props: BlendImageFilterProps
161
+ ) => {
162
+ const { mode } = props;
163
+ const a = ctx.imageFilters.pop();
164
+ const b = ctx.imageFilters.pop();
165
+ if (!a || !b) {
166
+ throw new Error("BlendImageFilter requires two image filters");
167
+ }
168
+ const imgf = ctx.Skia.ImageFilter.MakeBlend(mode, a, b);
169
+ ctx.imageFilters.push(imgf);
170
+ };
171
+
172
+ export const declareBlurMaskFilter = (
173
+ ctx: DeclarationContext,
174
+ props: BlurMaskFilterProps
175
+ ) => {
176
+ const { blur, style, respectCTM } = props;
177
+ const mf = ctx.Skia.MaskFilter.MakeBlur(
178
+ BlurStyle[enumKey(style)],
179
+ blur,
180
+ respectCTM
181
+ );
182
+ ctx.maskFilters.push(mf);
183
+ };
@@ -0,0 +1,3 @@
1
+ export * from "./Node";
2
+ export * from "./context";
3
+ export * from "./utils";
@@ -0,0 +1,75 @@
1
+ "worklet";
2
+
3
+ import { enumKey } from "../../dom/nodes";
4
+ import type { DeclarationContext, PaintProps } from "../../dom/types";
5
+ import { BlendMode, PaintStyle, StrokeCap, StrokeJoin } from "../../skia/types";
6
+
7
+ export const declarePaint = (ctx: DeclarationContext, props: PaintProps) => {
8
+ const {
9
+ color,
10
+ strokeWidth,
11
+ blendMode,
12
+ style,
13
+ strokeJoin,
14
+ strokeCap,
15
+ strokeMiter,
16
+ opacity,
17
+ antiAlias,
18
+ dither,
19
+ } = props;
20
+ const paint = ctx.Skia.Paint();
21
+ if (color !== undefined) {
22
+ paint.setColor(ctx.Skia.Color(color));
23
+ }
24
+ if (strokeWidth !== undefined) {
25
+ paint.setStrokeWidth(strokeWidth);
26
+ }
27
+ if (blendMode !== undefined) {
28
+ paint.setBlendMode(BlendMode[enumKey(blendMode)]);
29
+ }
30
+ if (style !== undefined) {
31
+ paint.setStyle(PaintStyle[enumKey(style)]);
32
+ }
33
+ if (strokeJoin !== undefined) {
34
+ paint.setStrokeJoin(StrokeJoin[enumKey(strokeJoin)]);
35
+ }
36
+ if (strokeCap !== undefined) {
37
+ paint.setStrokeCap(StrokeCap[enumKey(strokeCap)]);
38
+ }
39
+ if (strokeMiter !== undefined) {
40
+ paint.setStrokeMiter(strokeMiter);
41
+ }
42
+ if (opacity !== undefined) {
43
+ paint.setAlphaf(opacity);
44
+ }
45
+ if (antiAlias !== undefined) {
46
+ paint.setAntiAlias(antiAlias);
47
+ }
48
+ if (dither !== undefined) {
49
+ paint.setDither(dither);
50
+ }
51
+ //ctx.save();
52
+
53
+ const colorFilter = ctx.colorFilters.popAllAsOne();
54
+ const imageFilter = ctx.imageFilters.popAllAsOne();
55
+ const shader = ctx.shaders.pop();
56
+ const maskFilter = ctx.maskFilters.pop();
57
+ const pathEffect = ctx.pathEffects.popAllAsOne();
58
+ //ctx.restore();
59
+ if (imageFilter) {
60
+ paint.setImageFilter(imageFilter);
61
+ }
62
+ if (shader) {
63
+ paint.setShader(shader);
64
+ }
65
+ if (pathEffect) {
66
+ paint.setPathEffect(pathEffect);
67
+ }
68
+ if (colorFilter) {
69
+ paint.setColorFilter(colorFilter);
70
+ }
71
+ if (maskFilter) {
72
+ paint.setMaskFilter(maskFilter);
73
+ }
74
+ ctx.paints.push(paint);
75
+ };