@shopify/react-native-skia 0.1.123 → 0.1.126

Sign up to get free protection for your applications and to get access to all the features.
Files changed (423) hide show
  1. package/android/CMakeLists.txt +3 -0
  2. package/android/build.gradle +1 -1
  3. package/android/cpp/rnskia-android/RNSkDrawViewImpl.cpp +5 -5
  4. package/android/cpp/rnskia-android/RNSkDrawViewImpl.h +4 -4
  5. package/cpp/api/JsiSkApi.h +3 -1
  6. package/cpp/api/JsiSkCanvas.h +1 -1
  7. package/cpp/api/JsiSkColor.h +41 -7
  8. package/cpp/api/JsiSkColorFilterFactory.h +2 -1
  9. package/cpp/api/JsiSkImageFilter.h +0 -2
  10. package/cpp/api/JsiSkImageFilterFactory.h +37 -17
  11. package/cpp/api/JsiSkMatrix.h +44 -2
  12. package/cpp/api/JsiSkPaint.h +4 -7
  13. package/cpp/api/JsiSkRuntimeEffect.h +7 -0
  14. package/cpp/api/JsiSkRuntimeEffectFactory.h +3 -2
  15. package/cpp/api/JsiSkRuntimeShaderBuilder.h +70 -0
  16. package/cpp/api/JsiSkShaderFactory.h +2 -2
  17. package/cpp/api/JsiSkVertices.h +1 -1
  18. package/cpp/api/third_party/CSSColorParser.cpp +194 -0
  19. package/cpp/api/third_party/CSSColorParser.h +1 -191
  20. package/cpp/jsi/JsiSimpleValueWrapper.h +108 -0
  21. package/cpp/rnskia/RNSkAnimation.h +0 -2
  22. package/cpp/rnskia/RNSkDrawView.cpp +10 -13
  23. package/cpp/rnskia/RNSkDrawView.h +2 -2
  24. package/cpp/rnskia/RNSkValueApi.h +6 -2
  25. package/cpp/rnskia/values/RNSkClockValue.h +2 -2
  26. package/cpp/rnskia/values/RNSkDerivedValue.h +12 -5
  27. package/cpp/rnskia/values/RNSkReadonlyValue.h +14 -12
  28. package/cpp/rnskia/values/RNSkValue.h +8 -3
  29. package/ios/RNSkia-iOS/PlatformContext.h +30 -4
  30. package/ios/RNSkia-iOS/RNSkDrawViewImpl.h +4 -4
  31. package/ios/RNSkia-iOS/SkiaDrawView.mm +9 -13
  32. package/lib/commonjs/{values/animation → animation}/decay/decay.js +0 -0
  33. package/lib/commonjs/{values/animation → animation}/decay/decay.js.map +0 -0
  34. package/lib/commonjs/{values/animation → animation}/decay/index.js +0 -0
  35. package/lib/commonjs/{values/animation → animation}/decay/index.js.map +0 -0
  36. package/lib/commonjs/{values/animation → animation}/decay/runDecay.js +1 -1
  37. package/lib/commonjs/animation/decay/runDecay.js.map +1 -0
  38. package/lib/commonjs/{values/animation → animation}/decay/types.js +0 -0
  39. package/lib/commonjs/{values/animation → animation}/decay/types.js.map +0 -0
  40. package/lib/commonjs/{values/animation → animation}/functions/index.js +0 -0
  41. package/lib/commonjs/{values/animation → animation}/functions/index.js.map +0 -0
  42. package/lib/commonjs/animation/functions/interpolate.js +141 -0
  43. package/lib/commonjs/animation/functions/interpolate.js.map +1 -0
  44. package/lib/commonjs/animation/functions/interpolateColors.js +39 -0
  45. package/lib/commonjs/animation/functions/interpolateColors.js.map +1 -0
  46. package/lib/commonjs/{values/animation → animation}/index.js +0 -0
  47. package/lib/commonjs/{values/animation → animation}/index.js.map +0 -0
  48. package/lib/commonjs/{values/animation → animation}/spring/Spring.js +0 -0
  49. package/lib/commonjs/{values/animation → animation}/spring/Spring.js.map +0 -0
  50. package/lib/commonjs/{values/animation → animation}/spring/functions/index.js +0 -0
  51. package/lib/commonjs/{values/animation → animation}/spring/functions/index.js.map +0 -0
  52. package/lib/commonjs/{values/animation → animation}/spring/functions/spring.js +0 -0
  53. package/lib/commonjs/{values/animation → animation}/spring/functions/spring.js.map +0 -0
  54. package/lib/commonjs/{values/animation → animation}/spring/index.js +0 -0
  55. package/lib/commonjs/{values/animation → animation}/spring/index.js.map +0 -0
  56. package/lib/commonjs/{values/animation → animation}/spring/runSpring.js +0 -0
  57. package/lib/commonjs/animation/spring/runSpring.js.map +1 -0
  58. package/lib/commonjs/{values/animation → animation}/spring/types.js +0 -0
  59. package/lib/commonjs/{values/animation → animation}/spring/types.js.map +0 -0
  60. package/lib/commonjs/{values/animation → animation}/spring/useSpring.js +0 -0
  61. package/lib/commonjs/animation/spring/useSpring.js.map +1 -0
  62. package/lib/commonjs/{values/animation → animation}/timing/Easing.js +0 -0
  63. package/lib/commonjs/{values/animation → animation}/timing/Easing.js.map +0 -0
  64. package/lib/commonjs/{values/animation → animation}/timing/createTiming.js +1 -1
  65. package/lib/commonjs/animation/timing/createTiming.js.map +1 -0
  66. package/lib/commonjs/{values/animation → animation}/timing/functions/bezier.js +0 -0
  67. package/lib/commonjs/{values/animation → animation}/timing/functions/bezier.js.map +0 -0
  68. package/lib/commonjs/{values/animation → animation}/timing/functions/getResolvedParams.js +3 -3
  69. package/lib/commonjs/animation/timing/functions/getResolvedParams.js.map +1 -0
  70. package/lib/commonjs/{values/animation → animation}/timing/functions/index.js +0 -0
  71. package/lib/commonjs/{values/animation → animation}/timing/functions/index.js.map +0 -0
  72. package/lib/commonjs/{values/animation → animation}/timing/functions/timing.js +0 -0
  73. package/lib/commonjs/{values/animation → animation}/timing/functions/timing.js.map +1 -1
  74. package/lib/commonjs/{values/animation → animation}/timing/functions/types.js +0 -0
  75. package/lib/commonjs/{values/animation → animation}/timing/functions/types.js.map +0 -0
  76. package/lib/commonjs/{values/animation → animation}/timing/index.js +0 -0
  77. package/lib/commonjs/{values/animation → animation}/timing/index.js.map +0 -0
  78. package/lib/commonjs/{values/animation → animation}/timing/runTiming.js +0 -0
  79. package/lib/commonjs/animation/timing/runTiming.js.map +1 -0
  80. package/lib/commonjs/{values/animation → animation}/timing/useLoop.js +0 -0
  81. package/lib/commonjs/{values/animation → animation}/timing/useLoop.js.map +0 -0
  82. package/lib/commonjs/{values/animation → animation}/timing/useTiming.js +1 -1
  83. package/lib/commonjs/animation/timing/useTiming.js.map +1 -0
  84. package/lib/commonjs/{values/animation → animation}/types.js +0 -0
  85. package/lib/commonjs/{values/animation → animation}/types.js.map +0 -0
  86. package/lib/commonjs/index.js +13 -0
  87. package/lib/commonjs/index.js.map +1 -1
  88. package/lib/commonjs/renderer/Canvas.js +14 -5
  89. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  90. package/lib/commonjs/renderer/components/colorFilters/BlendColor.js.map +1 -1
  91. package/lib/commonjs/renderer/components/colorFilters/Lerp.js +1 -1
  92. package/lib/commonjs/renderer/components/colorFilters/Lerp.js.map +1 -1
  93. package/lib/commonjs/renderer/components/imageFilters/InnerShadow.js +4 -2
  94. package/lib/commonjs/renderer/components/imageFilters/InnerShadow.js.map +1 -1
  95. package/lib/commonjs/renderer/components/imageFilters/RuntimeShader.js +37 -0
  96. package/lib/commonjs/renderer/components/imageFilters/RuntimeShader.js.map +1 -0
  97. package/lib/commonjs/renderer/components/imageFilters/index.js +13 -0
  98. package/lib/commonjs/renderer/components/imageFilters/index.js.map +1 -1
  99. package/lib/commonjs/renderer/components/shaders/Gradient.js +1 -1
  100. package/lib/commonjs/renderer/components/shaders/Gradient.js.map +1 -1
  101. package/lib/commonjs/renderer/components/shaders/Shader.js +2 -2
  102. package/lib/commonjs/renderer/components/shaders/Shader.js.map +1 -1
  103. package/lib/commonjs/renderer/processors/Circles.js +3 -2
  104. package/lib/commonjs/renderer/processors/Circles.js.map +1 -1
  105. package/lib/commonjs/renderer/processors/Font.js +1 -1
  106. package/lib/commonjs/renderer/processors/Font.js.map +1 -1
  107. package/lib/commonjs/renderer/processors/Rects.js +11 -21
  108. package/lib/commonjs/renderer/processors/Rects.js.map +1 -1
  109. package/lib/commonjs/renderer/processors/math/Matrix3.js +42 -63
  110. package/lib/commonjs/renderer/processors/math/Matrix3.js.map +1 -1
  111. package/lib/commonjs/renderer/processors/math/Vector.js +4 -5
  112. package/lib/commonjs/renderer/processors/math/Vector.js.map +1 -1
  113. package/lib/commonjs/skia/Color.js +14 -38
  114. package/lib/commonjs/skia/Color.js.map +1 -1
  115. package/lib/commonjs/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
  116. package/lib/commonjs/skia/Matrix.js.map +1 -1
  117. package/lib/commonjs/skia/Shader/useShader.js +4 -1
  118. package/lib/commonjs/skia/Shader/useShader.js.map +1 -1
  119. package/lib/commonjs/skia/Skia.js +3 -45
  120. package/lib/commonjs/skia/Skia.js.map +1 -1
  121. package/lib/commonjs/skia/SkiaApi.js +4 -0
  122. package/lib/commonjs/skia/SkiaApi.js.map +1 -0
  123. package/lib/commonjs/values/api.js +4 -6
  124. package/lib/commonjs/values/api.js.map +1 -1
  125. package/lib/commonjs/values/api.web.js +18 -0
  126. package/lib/commonjs/values/api.web.js.map +1 -0
  127. package/lib/commonjs/values/index.js +0 -13
  128. package/lib/commonjs/values/index.js.map +1 -1
  129. package/lib/commonjs/values/web/RNSkAnimation.js +46 -0
  130. package/lib/commonjs/values/web/RNSkAnimation.js.map +1 -0
  131. package/lib/commonjs/values/web/RNSkClockValue.js +75 -0
  132. package/lib/commonjs/values/web/RNSkClockValue.js.map +1 -0
  133. package/lib/commonjs/values/web/RNSkDerivedValue.js +51 -0
  134. package/lib/commonjs/values/web/RNSkDerivedValue.js.map +1 -0
  135. package/lib/commonjs/values/web/RNSkReadonlyValue.js +45 -0
  136. package/lib/commonjs/values/web/RNSkReadonlyValue.js.map +1 -0
  137. package/lib/commonjs/values/web/RNSkValue.js +73 -0
  138. package/lib/commonjs/values/web/RNSkValue.js.map +1 -0
  139. package/lib/commonjs/values/web/api.js +31 -0
  140. package/lib/commonjs/values/web/api.js.map +1 -0
  141. package/lib/commonjs/values/web/index.js +19 -0
  142. package/lib/commonjs/values/web/index.js.map +1 -0
  143. package/lib/commonjs/views/SkiaView.js +13 -10
  144. package/lib/commonjs/views/SkiaView.js.map +1 -1
  145. package/lib/commonjs/views/api.js +11 -0
  146. package/lib/commonjs/views/api.js.map +1 -0
  147. package/lib/commonjs/views/types.js.map +1 -1
  148. package/lib/module/{values/animation → animation}/decay/decay.js +0 -0
  149. package/lib/module/{values/animation → animation}/decay/decay.js.map +0 -0
  150. package/lib/module/{values/animation → animation}/decay/index.js +0 -0
  151. package/lib/module/{values/animation → animation}/decay/index.js.map +0 -0
  152. package/lib/module/{values/animation → animation}/decay/runDecay.js +1 -1
  153. package/lib/module/animation/decay/runDecay.js.map +1 -0
  154. package/lib/module/{values/animation → animation}/decay/types.js +0 -0
  155. package/lib/module/{values/animation → animation}/decay/types.js.map +0 -0
  156. package/lib/module/{values/animation → animation}/functions/index.js +0 -0
  157. package/lib/module/{values/animation → animation}/functions/index.js.map +0 -0
  158. package/lib/module/animation/functions/interpolate.js +132 -0
  159. package/lib/module/animation/functions/interpolate.js.map +1 -0
  160. package/lib/module/animation/functions/interpolateColors.js +23 -0
  161. package/lib/module/animation/functions/interpolateColors.js.map +1 -0
  162. package/lib/module/{values/animation → animation}/index.js +0 -0
  163. package/lib/module/{values/animation → animation}/index.js.map +0 -0
  164. package/lib/module/{values/animation → animation}/spring/Spring.js +0 -0
  165. package/lib/module/{values/animation → animation}/spring/Spring.js.map +0 -0
  166. package/lib/module/{values/animation → animation}/spring/functions/index.js +0 -0
  167. package/lib/module/{values/animation → animation}/spring/functions/index.js.map +0 -0
  168. package/lib/module/{values/animation → animation}/spring/functions/spring.js +0 -0
  169. package/lib/module/{values/animation → animation}/spring/functions/spring.js.map +0 -0
  170. package/lib/module/{values/animation → animation}/spring/index.js +0 -0
  171. package/lib/module/{values/animation → animation}/spring/index.js.map +0 -0
  172. package/lib/module/{values/animation → animation}/spring/runSpring.js +0 -0
  173. package/lib/module/animation/spring/runSpring.js.map +1 -0
  174. package/lib/module/{values/animation → animation}/spring/types.js +0 -0
  175. package/lib/module/{values/animation → animation}/spring/types.js.map +0 -0
  176. package/lib/module/{values/animation → animation}/spring/useSpring.js +0 -0
  177. package/lib/module/animation/spring/useSpring.js.map +1 -0
  178. package/lib/module/{values/animation → animation}/timing/Easing.js +0 -0
  179. package/lib/module/{values/animation → animation}/timing/Easing.js.map +0 -0
  180. package/lib/module/{values/animation → animation}/timing/createTiming.js +1 -1
  181. package/lib/module/animation/timing/createTiming.js.map +1 -0
  182. package/lib/module/{values/animation → animation}/timing/functions/bezier.js +0 -0
  183. package/lib/module/{values/animation → animation}/timing/functions/bezier.js.map +0 -0
  184. package/lib/module/{values/animation → animation}/timing/functions/getResolvedParams.js +3 -3
  185. package/lib/module/animation/timing/functions/getResolvedParams.js.map +1 -0
  186. package/lib/module/{values/animation → animation}/timing/functions/index.js +0 -0
  187. package/lib/module/{values/animation → animation}/timing/functions/index.js.map +0 -0
  188. package/lib/module/{values/animation → animation}/timing/functions/timing.js +0 -0
  189. package/lib/module/{values/animation → animation}/timing/functions/timing.js.map +1 -1
  190. package/lib/module/{values/animation → animation}/timing/functions/types.js +0 -0
  191. package/lib/module/{values/animation → animation}/timing/functions/types.js.map +0 -0
  192. package/lib/module/{values/animation → animation}/timing/index.js +0 -0
  193. package/lib/module/{values/animation → animation}/timing/index.js.map +0 -0
  194. package/lib/module/{values/animation → animation}/timing/runTiming.js +0 -0
  195. package/lib/module/animation/timing/runTiming.js.map +1 -0
  196. package/lib/module/{values/animation → animation}/timing/useLoop.js +0 -0
  197. package/lib/module/{values/animation → animation}/timing/useLoop.js.map +0 -0
  198. package/lib/module/{values/animation → animation}/timing/useTiming.js +1 -1
  199. package/lib/module/animation/timing/useTiming.js.map +1 -0
  200. package/lib/module/{values/animation → animation}/types.js +0 -0
  201. package/lib/module/{values/animation → animation}/types.js.map +0 -0
  202. package/lib/module/index.js +1 -0
  203. package/lib/module/index.js.map +1 -1
  204. package/lib/module/renderer/Canvas.js +10 -4
  205. package/lib/module/renderer/Canvas.js.map +1 -1
  206. package/lib/module/renderer/components/colorFilters/BlendColor.js.map +1 -1
  207. package/lib/module/renderer/components/colorFilters/Lerp.js +1 -1
  208. package/lib/module/renderer/components/colorFilters/Lerp.js.map +1 -1
  209. package/lib/module/renderer/components/imageFilters/InnerShadow.js +3 -2
  210. package/lib/module/renderer/components/imageFilters/InnerShadow.js.map +1 -1
  211. package/lib/module/renderer/components/imageFilters/RuntimeShader.js +19 -0
  212. package/lib/module/renderer/components/imageFilters/RuntimeShader.js.map +1 -0
  213. package/lib/module/renderer/components/imageFilters/index.js +1 -0
  214. package/lib/module/renderer/components/imageFilters/index.js.map +1 -1
  215. package/lib/module/renderer/components/shaders/Gradient.js +2 -2
  216. package/lib/module/renderer/components/shaders/Gradient.js.map +1 -1
  217. package/lib/module/renderer/components/shaders/Shader.js +3 -2
  218. package/lib/module/renderer/components/shaders/Shader.js.map +1 -1
  219. package/lib/module/renderer/processors/Circles.js +3 -2
  220. package/lib/module/renderer/processors/Circles.js.map +1 -1
  221. package/lib/module/renderer/processors/Font.js +1 -1
  222. package/lib/module/renderer/processors/Font.js.map +1 -1
  223. package/lib/module/renderer/processors/Rects.js +9 -21
  224. package/lib/module/renderer/processors/Rects.js.map +1 -1
  225. package/lib/module/renderer/processors/math/Matrix3.js +52 -72
  226. package/lib/module/renderer/processors/math/Matrix3.js.map +1 -1
  227. package/lib/module/renderer/processors/math/Vector.js +3 -5
  228. package/lib/module/renderer/processors/math/Vector.js.map +1 -1
  229. package/lib/module/skia/Color.js +9 -25
  230. package/lib/module/skia/Color.js.map +1 -1
  231. package/lib/module/skia/ImageFilter/ImageFilterFactory.js.map +1 -1
  232. package/lib/module/skia/Matrix.js.map +1 -1
  233. package/lib/module/skia/Shader/useShader.js +4 -1
  234. package/lib/module/skia/Shader/useShader.js.map +1 -1
  235. package/lib/module/skia/Skia.js +2 -46
  236. package/lib/module/skia/Skia.js.map +1 -1
  237. package/lib/module/skia/SkiaApi.js +2 -0
  238. package/lib/module/skia/SkiaApi.js.map +1 -0
  239. package/lib/module/values/api.js +4 -6
  240. package/lib/module/values/api.js.map +1 -1
  241. package/lib/module/values/api.web.js +7 -0
  242. package/lib/module/values/api.web.js.map +1 -0
  243. package/lib/module/values/index.js +0 -1
  244. package/lib/module/values/index.js.map +1 -1
  245. package/lib/module/values/web/RNSkAnimation.js +36 -0
  246. package/lib/module/values/web/RNSkAnimation.js.map +1 -0
  247. package/lib/module/values/web/RNSkClockValue.js +65 -0
  248. package/lib/module/values/web/RNSkClockValue.js.map +1 -0
  249. package/lib/module/values/web/RNSkDerivedValue.js +41 -0
  250. package/lib/module/values/web/RNSkDerivedValue.js.map +1 -0
  251. package/lib/module/values/web/RNSkReadonlyValue.js +36 -0
  252. package/lib/module/values/web/RNSkReadonlyValue.js.map +1 -0
  253. package/lib/module/values/web/RNSkValue.js +63 -0
  254. package/lib/module/values/web/RNSkValue.js.map +1 -0
  255. package/lib/module/values/web/api.js +19 -0
  256. package/lib/module/values/web/api.js.map +1 -0
  257. package/lib/module/values/web/index.js +2 -0
  258. package/lib/module/values/web/index.js.map +1 -0
  259. package/lib/module/views/SkiaView.js +1 -3
  260. package/lib/module/views/SkiaView.js.map +1 -1
  261. package/lib/module/views/api.js +4 -0
  262. package/lib/module/views/api.js.map +1 -0
  263. package/lib/module/views/types.js.map +1 -1
  264. package/lib/typescript/src/{values/animation → animation}/decay/decay.d.ts +0 -0
  265. package/lib/typescript/src/{values/animation → animation}/decay/index.d.ts +0 -0
  266. package/lib/typescript/src/{values/animation → animation}/decay/runDecay.d.ts +2 -2
  267. package/lib/typescript/src/{values/animation → animation}/decay/types.d.ts +1 -1
  268. package/lib/typescript/src/{values/animation → animation}/functions/index.d.ts +0 -0
  269. package/lib/typescript/src/animation/functions/interpolate.d.ts +11 -0
  270. package/lib/typescript/src/animation/functions/interpolateColors.d.ts +3 -0
  271. package/lib/typescript/src/{values/animation → animation}/index.d.ts +0 -0
  272. package/lib/typescript/src/{values/animation → animation}/spring/Spring.d.ts +0 -0
  273. package/lib/typescript/src/{values/animation → animation}/spring/functions/index.d.ts +0 -0
  274. package/lib/typescript/src/{values/animation → animation}/spring/functions/spring.d.ts +0 -0
  275. package/lib/typescript/src/{values/animation → animation}/spring/index.d.ts +0 -0
  276. package/lib/typescript/src/{values/animation → animation}/spring/runSpring.d.ts +1 -1
  277. package/lib/typescript/src/{values/animation → animation}/spring/types.d.ts +0 -0
  278. package/lib/typescript/src/{values/animation → animation}/spring/useSpring.d.ts +1 -1
  279. package/lib/typescript/src/{values/animation → animation}/timing/Easing.d.ts +0 -0
  280. package/lib/typescript/src/{values/animation → animation}/timing/createTiming.d.ts +2 -2
  281. package/lib/typescript/src/{values/animation → animation}/timing/functions/bezier.d.ts +0 -0
  282. package/lib/typescript/src/{values/animation → animation}/timing/functions/getResolvedParams.d.ts +0 -0
  283. package/lib/typescript/src/{values/animation → animation}/timing/functions/index.d.ts +0 -0
  284. package/lib/typescript/src/{values/animation → animation}/timing/functions/timing.d.ts +1 -1
  285. package/lib/typescript/src/{values/animation → animation}/timing/functions/types.d.ts +0 -0
  286. package/lib/typescript/src/{values/animation → animation}/timing/index.d.ts +0 -0
  287. package/lib/typescript/src/{values/animation → animation}/timing/runTiming.d.ts +1 -1
  288. package/lib/typescript/src/{values/animation → animation}/timing/useLoop.d.ts +0 -0
  289. package/lib/typescript/src/{values/animation → animation}/timing/useTiming.d.ts +1 -1
  290. package/lib/typescript/src/{values/animation → animation}/types.d.ts +5 -5
  291. package/lib/typescript/src/index.d.ts +1 -0
  292. package/lib/typescript/src/renderer/Canvas.d.ts +6 -0
  293. package/lib/typescript/src/renderer/components/colorFilters/BlendColor.d.ts +1 -1
  294. package/lib/typescript/src/renderer/components/imageFilters/RuntimeShader.d.ts +7 -0
  295. package/lib/typescript/src/renderer/components/imageFilters/index.d.ts +1 -0
  296. package/lib/typescript/src/renderer/components/shaders/Gradient.d.ts +1 -1
  297. package/lib/typescript/src/renderer/components/shaders/Shader.d.ts +2 -2
  298. package/lib/typescript/src/renderer/components/shapes/Circle.d.ts +1 -4
  299. package/lib/typescript/src/renderer/processors/Rects.d.ts +9 -41
  300. package/lib/typescript/src/renderer/processors/math/Matrix3.d.ts +1 -5
  301. package/lib/typescript/src/renderer/processors/math/Vector.d.ts +5 -17
  302. package/lib/typescript/src/skia/Color.d.ts +8 -9
  303. package/lib/typescript/src/skia/ImageFilter/ImageFilterFactory.d.ts +16 -0
  304. package/lib/typescript/src/skia/Matrix.d.ts +7 -1
  305. package/lib/typescript/src/skia/RuntimeEffect/RuntimeEffect.d.ts +2 -1
  306. package/lib/typescript/src/skia/RuntimeEffect/RuntimeEffectFactory.d.ts +2 -2
  307. package/lib/typescript/src/skia/Shader/useShader.d.ts +1 -1
  308. package/lib/typescript/src/skia/Skia.d.ts +28 -95
  309. package/lib/typescript/src/skia/SkiaApi.d.ts +71 -0
  310. package/lib/typescript/src/skia/Surface/Surface.d.ts +1 -1
  311. package/lib/typescript/src/skia/Surface/SurfaceFactory.d.ts +2 -2
  312. package/lib/typescript/src/values/api.d.ts +2 -25
  313. package/lib/typescript/src/values/api.web.d.ts +2 -0
  314. package/lib/typescript/src/values/index.d.ts +0 -1
  315. package/lib/typescript/src/values/types.d.ts +24 -1
  316. package/lib/typescript/src/values/web/RNSkAnimation.d.ts +9 -0
  317. package/lib/typescript/src/values/web/RNSkClockValue.d.ts +13 -0
  318. package/lib/typescript/src/values/web/RNSkDerivedValue.d.ts +9 -0
  319. package/lib/typescript/src/values/web/RNSkReadonlyValue.d.ts +11 -0
  320. package/lib/typescript/src/values/web/RNSkValue.d.ts +14 -0
  321. package/lib/typescript/src/values/web/api.d.ts +2 -0
  322. package/lib/typescript/src/values/web/index.d.ts +1 -0
  323. package/lib/typescript/src/views/SkiaView.d.ts +3 -36
  324. package/lib/typescript/src/views/api.d.ts +5 -0
  325. package/lib/typescript/src/views/types.d.ts +32 -0
  326. package/package.json +2 -2
  327. package/src/{values/animation → animation}/decay/decay.ts +0 -0
  328. package/src/{values/animation → animation}/decay/index.ts +0 -0
  329. package/src/{values/animation → animation}/decay/runDecay.ts +2 -2
  330. package/src/{values/animation → animation}/decay/types.ts +1 -1
  331. package/src/{values/animation → animation}/functions/index.ts +0 -0
  332. package/src/animation/functions/interpolate.ts +182 -0
  333. package/src/animation/functions/interpolateColors.ts +58 -0
  334. package/src/{values/animation → animation}/index.ts +0 -0
  335. package/src/{values/animation → animation}/spring/Spring.ts +0 -0
  336. package/src/{values/animation → animation}/spring/functions/index.ts +0 -0
  337. package/src/{values/animation → animation}/spring/functions/spring.ts +0 -0
  338. package/src/{values/animation → animation}/spring/index.ts +0 -0
  339. package/src/{values/animation → animation}/spring/runSpring.ts +1 -1
  340. package/src/{values/animation → animation}/spring/types.ts +0 -0
  341. package/src/{values/animation → animation}/spring/useSpring.ts +1 -1
  342. package/src/{values/animation → animation}/timing/Easing.ts +0 -0
  343. package/src/{values/animation → animation}/timing/createTiming.ts +2 -2
  344. package/src/{values/animation → animation}/timing/functions/__tests__/timing.spec.ts +0 -0
  345. package/src/{values/animation → animation}/timing/functions/bezier.ts +0 -0
  346. package/src/{values/animation → animation}/timing/functions/getResolvedParams.ts +2 -2
  347. package/src/{values/animation → animation}/timing/functions/index.ts +0 -0
  348. package/src/{values/animation → animation}/timing/functions/timing.ts +1 -1
  349. package/src/{values/animation → animation}/timing/functions/types.ts +0 -0
  350. package/src/{values/animation → animation}/timing/index.ts +0 -0
  351. package/src/{values/animation → animation}/timing/runTiming.ts +1 -1
  352. package/src/{values/animation → animation}/timing/useLoop.ts +0 -0
  353. package/src/{values/animation → animation}/timing/useTiming.ts +2 -2
  354. package/src/{values/animation → animation}/types.ts +5 -5
  355. package/src/index.ts +1 -0
  356. package/src/renderer/Canvas.tsx +11 -4
  357. package/src/renderer/components/colorFilters/BlendColor.tsx +1 -1
  358. package/src/renderer/components/colorFilters/Lerp.tsx +1 -1
  359. package/src/renderer/components/imageFilters/InnerShadow.tsx +4 -2
  360. package/src/renderer/components/imageFilters/RuntimeShader.tsx +23 -0
  361. package/src/renderer/components/imageFilters/index.ts +1 -0
  362. package/src/renderer/components/shaders/Gradient.ts +2 -4
  363. package/src/renderer/components/shaders/Shader.tsx +3 -3
  364. package/src/renderer/processors/Circles.ts +2 -1
  365. package/src/renderer/processors/Font.ts +1 -1
  366. package/src/renderer/processors/Rects.ts +9 -14
  367. package/src/renderer/processors/math/Matrix3.ts +24 -105
  368. package/src/renderer/processors/math/Vector.ts +3 -2
  369. package/src/skia/Color.ts +13 -27
  370. package/src/skia/ImageFilter/ImageFilterFactory.ts +20 -0
  371. package/src/skia/Matrix.ts +8 -1
  372. package/src/skia/RuntimeEffect/RuntimeEffect.ts +3 -1
  373. package/src/skia/RuntimeEffect/RuntimeEffectFactory.ts +2 -2
  374. package/src/skia/Shader/useShader.ts +4 -1
  375. package/src/skia/Skia.ts +4 -126
  376. package/src/skia/SkiaApi.ts +86 -0
  377. package/src/skia/Surface/Surface.ts +1 -1
  378. package/src/skia/Surface/SurfaceFactory.ts +2 -2
  379. package/src/values/api.ts +3 -42
  380. package/src/values/api.web.ts +5 -0
  381. package/src/values/index.ts +0 -1
  382. package/src/values/types.ts +30 -1
  383. package/src/values/web/RNSkAnimation.ts +33 -0
  384. package/src/values/web/RNSkClockValue.ts +58 -0
  385. package/src/values/web/RNSkDerivedValue.ts +38 -0
  386. package/src/values/web/RNSkReadonlyValue.ts +32 -0
  387. package/src/values/web/RNSkValue.ts +57 -0
  388. package/src/values/web/__tests__/RNSkAnimation.spec.ts +21 -0
  389. package/src/values/web/__tests__/RNSkDerivedValue.spec.ts +15 -0
  390. package/src/values/web/__tests__/RNSkReadonlyValue.spec.ts +8 -0
  391. package/src/values/web/__tests__/RNSkValue.spec.ts +11 -0
  392. package/src/values/web/api.ts +33 -0
  393. package/src/values/web/index.ts +1 -0
  394. package/src/views/SkiaView.tsx +3 -49
  395. package/src/views/api.ts +7 -0
  396. package/src/views/types.ts +40 -0
  397. package/lib/commonjs/values/animation/decay/runDecay.js.map +0 -1
  398. package/lib/commonjs/values/animation/functions/interpolate.js +0 -139
  399. package/lib/commonjs/values/animation/functions/interpolate.js.map +0 -1
  400. package/lib/commonjs/values/animation/functions/interpolateColors.js +0 -47
  401. package/lib/commonjs/values/animation/functions/interpolateColors.js.map +0 -1
  402. package/lib/commonjs/values/animation/spring/runSpring.js.map +0 -1
  403. package/lib/commonjs/values/animation/spring/useSpring.js.map +0 -1
  404. package/lib/commonjs/values/animation/timing/createTiming.js.map +0 -1
  405. package/lib/commonjs/values/animation/timing/functions/getResolvedParams.js.map +0 -1
  406. package/lib/commonjs/values/animation/timing/runTiming.js.map +0 -1
  407. package/lib/commonjs/values/animation/timing/useTiming.js.map +0 -1
  408. package/lib/module/values/animation/decay/runDecay.js.map +0 -1
  409. package/lib/module/values/animation/functions/interpolate.js +0 -132
  410. package/lib/module/values/animation/functions/interpolate.js.map +0 -1
  411. package/lib/module/values/animation/functions/interpolateColors.js +0 -32
  412. package/lib/module/values/animation/functions/interpolateColors.js.map +0 -1
  413. package/lib/module/values/animation/spring/runSpring.js.map +0 -1
  414. package/lib/module/values/animation/spring/useSpring.js.map +0 -1
  415. package/lib/module/values/animation/timing/createTiming.js.map +0 -1
  416. package/lib/module/values/animation/timing/functions/getResolvedParams.js.map +0 -1
  417. package/lib/module/values/animation/timing/runTiming.js.map +0 -1
  418. package/lib/module/values/animation/timing/useTiming.js.map +0 -1
  419. package/lib/typescript/scripts/install-npm.d.ts +0 -1
  420. package/lib/typescript/src/values/animation/functions/interpolate.d.ts +0 -7
  421. package/lib/typescript/src/values/animation/functions/interpolateColors.d.ts +0 -3
  422. package/src/values/animation/functions/interpolate.ts +0 -169
  423. package/src/values/animation/functions/interpolateColors.ts +0 -62
@@ -0,0 +1,194 @@
1
+ #include "CSSColorParser.h"
2
+
3
+ namespace CSSColorParser {
4
+
5
+ template <typename T>
6
+ uint8_t clamp_css_byte(T i) { // Clamp to integer 0 .. 255.
7
+ i = ::round(i); // Seems to be what Chrome does (vs truncation).
8
+ return i < 0 ? 0 : i > 255 ? 255 : uint8_t(i);
9
+ }
10
+
11
+ template <typename T>
12
+ float clamp_css_float(T f) { // Clamp to float 0.0 .. 1.0.
13
+ return f < 0 ? 0 : f > 1 ? 1 : float(f);
14
+ }
15
+
16
+ float parseFloat(const std::string& str) {
17
+ return strtof(str.c_str(), nullptr);
18
+ }
19
+
20
+ int64_t parseInt(const std::string& str, uint8_t base = 10) {
21
+ return strtoll(str.c_str(), nullptr, base);
22
+ }
23
+
24
+ uint8_t parse_css_int(const std::string& str) { // int or percentage.
25
+ if (str.length() && str.back() == '%') {
26
+ return clamp_css_byte(parseFloat(str) / 100.0f * 255.0f);
27
+ } else {
28
+ return clamp_css_byte(parseInt(str));
29
+ }
30
+ }
31
+
32
+ float parse_css_float(const std::string& str) { // float or percentage.
33
+ if (str.length() && str.back() == '%') {
34
+ return clamp_css_float(parseFloat(str) / 100.0f);
35
+ } else {
36
+ return clamp_css_float(parseFloat(str));
37
+ }
38
+ }
39
+
40
+ float css_hue_to_rgb(float m1, float m2, float h) {
41
+ if (h < 0.0f) {
42
+ h += 1.0f;
43
+ } else if (h > 1.0f) {
44
+ h -= 1.0f;
45
+ }
46
+
47
+ if (h * 6.0f < 1.0f) {
48
+ return m1 + (m2 - m1) * h * 6.0f;
49
+ }
50
+ if (h * 2.0f < 1.0f) {
51
+ return m2;
52
+ }
53
+ if (h * 3.0f < 2.0f) {
54
+ return m1 + (m2 - m1) * (2.0f / 3.0f - h) * 6.0f;
55
+ }
56
+ return m1;
57
+ }
58
+
59
+ std::vector<std::string> split(const std::string& s, char delim) {
60
+ std::vector<std::string> elems;
61
+ std::stringstream ss(s);
62
+ std::string item;
63
+ while (std::getline(ss, item, delim)) {
64
+ elems.push_back(item);
65
+ }
66
+ return elems;
67
+ }
68
+
69
+ Color parse(const std::string& css_str) {
70
+ std::string str = css_str;
71
+
72
+ // Remove all whitespace, not compliant, but should just be more accepting.
73
+ str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
74
+
75
+ // Convert to lowercase.
76
+ std::transform(str.begin(), str.end(), str.begin(), ::tolower);
77
+
78
+ for (const auto& namedColor : namedColors) {
79
+ if (str == namedColor.name) {
80
+ return { namedColor.color };
81
+ }
82
+ }
83
+
84
+ // #abc and #abc123 syntax.
85
+ if (str.length() && str.front() == '#') {
86
+ auto iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.
87
+ if (str.length() == 4) {
88
+ if (!(iv >= 0 && iv <= 0xfff)) {
89
+ return {};
90
+ } else {
91
+ return {
92
+ static_cast<uint8_t>(((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8)),
93
+ static_cast<uint8_t>((iv & 0xf0) | ((iv & 0xf0) >> 4)),
94
+ static_cast<uint8_t>((iv & 0xf) | ((iv & 0xf) << 4)),
95
+ 1
96
+ };
97
+ }
98
+ } else if (str.length() == 7) {
99
+ if (!(iv >= 0 && iv <= 0xffffff)) {
100
+ return {}; // Covers NaN.
101
+ } else {
102
+ return {
103
+ static_cast<uint8_t>((iv & 0xff0000) >> 16),
104
+ static_cast<uint8_t>((iv & 0xff00) >> 8),
105
+ static_cast<uint8_t>(iv & 0xff),
106
+ 1
107
+ };
108
+ }
109
+ }else if (str.length() == 5) {
110
+ // #rgba
111
+ if (!(iv >= 0 && iv <= 0xffff)) return {}; // Covers NaN.
112
+ return {
113
+ static_cast<uint8_t>(((iv & 0xf000) >> 8) | ((iv & 0xf000) >> 12)),
114
+ static_cast<uint8_t>(((iv & 0x0f00) >> 4) | ((iv & 0x0f00) >> 8)),
115
+ static_cast<uint8_t>((iv & 0x00f0) | ((iv & 0x00f0) >> 4)),
116
+ static_cast<uint8_t>(((iv & 0x000f) << 4 | (iv & 0x000f))) / 255.0f
117
+ };
118
+ } else if (str.length() == 9) {
119
+ // #rrggbbaa
120
+ if (!(iv >= 0 && iv <= 0xffffffff)) return {}; // Covers NaN.
121
+ return {
122
+ static_cast<uint8_t>(((iv & 0xff000000) >> 24) & 0xff),
123
+ static_cast<uint8_t>((iv & 0x00ff0000) >> 16),
124
+ static_cast<uint8_t>((iv & 0x0000ff00) >> 8),
125
+ static_cast<uint8_t>((iv & 0x000000ff)) / 255.0f
126
+ };
127
+ }
128
+
129
+ return {};
130
+ }
131
+
132
+ size_t op = str.find_first_of('('), ep = str.find_first_of(')');
133
+ if (op != std::string::npos && ep + 1 == str.length()) {
134
+ const std::string fname = str.substr(0, op);
135
+ const std::vector<std::string> params = split(str.substr(op + 1, ep - (op + 1)), ',');
136
+
137
+ float alpha = 1.0f;
138
+
139
+ if (fname == "rgba" || fname == "rgb") {
140
+ if (fname == "rgba") {
141
+ if (params.size() != 4) {
142
+ return { };
143
+ }
144
+ alpha = parse_css_float(params.back());
145
+ } else {
146
+ if (params.size() != 3) {
147
+ return { };
148
+ }
149
+ }
150
+
151
+ return {
152
+ parse_css_int(params[0]),
153
+ parse_css_int(params[1]),
154
+ parse_css_int(params[2]),
155
+ alpha
156
+ };
157
+
158
+ } else if (fname == "hsla" || fname == "hsl") {
159
+ if (fname == "hsla") {
160
+ if (params.size() != 4) {
161
+ return { };
162
+ }
163
+ alpha = parse_css_float(params.back());
164
+ } else {
165
+ if (params.size() != 3) {
166
+ return { };
167
+ }
168
+ }
169
+
170
+ float h = parseFloat(params[0]) / 360.0f;
171
+ float i;
172
+ // Normalize the hue to [0..1[
173
+ h = std::modf(h, &i);
174
+
175
+ // NOTE(deanm): According to the CSS spec s/l should only be
176
+ // percentages, but we don't bother and let float or percentage.
177
+ float s = parse_css_float(params[1]);
178
+ float l = parse_css_float(params[2]);
179
+
180
+ float m2 = l <= 0.5f ? l * (s + 1.0f) : l + s - l * s;
181
+ float m1 = l * 2.0f - m2;
182
+
183
+ return {
184
+ clamp_css_byte(css_hue_to_rgb(m1, m2, h + 1.0f / 3.0f) * 255.0f),
185
+ clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255.0f),
186
+ clamp_css_byte(css_hue_to_rgb(m1, m2, h - 1.0f / 3.0f) * 255.0f),
187
+ alpha
188
+ };
189
+ }
190
+ }
191
+
192
+ return { };
193
+ }
194
+ }
@@ -122,71 +122,6 @@ namespace CSSColorParser {
122
122
  { "yellow", { 255, 255, 0, 1 } }, { "yellowgreen", { 154, 205, 50, 1 } }
123
123
  };
124
124
 
125
- template <typename T>
126
- uint8_t clamp_css_byte(T i) { // Clamp to integer 0 .. 255.
127
- i = ::round(i); // Seems to be what Chrome does (vs truncation).
128
- return i < 0 ? 0 : i > 255 ? 255 : uint8_t(i);
129
- }
130
-
131
- template <typename T>
132
- float clamp_css_float(T f) { // Clamp to float 0.0 .. 1.0.
133
- return f < 0 ? 0 : f > 1 ? 1 : float(f);
134
- }
135
-
136
- float parseFloat(const std::string& str) {
137
- return strtof(str.c_str(), nullptr);
138
- }
139
-
140
- int64_t parseInt(const std::string& str, uint8_t base = 10) {
141
- return strtoll(str.c_str(), nullptr, base);
142
- }
143
-
144
- uint8_t parse_css_int(const std::string& str) { // int or percentage.
145
- if (str.length() && str.back() == '%') {
146
- return clamp_css_byte(parseFloat(str) / 100.0f * 255.0f);
147
- } else {
148
- return clamp_css_byte(parseInt(str));
149
- }
150
- }
151
-
152
- float parse_css_float(const std::string& str) { // float or percentage.
153
- if (str.length() && str.back() == '%') {
154
- return clamp_css_float(parseFloat(str) / 100.0f);
155
- } else {
156
- return clamp_css_float(parseFloat(str));
157
- }
158
- }
159
-
160
- float css_hue_to_rgb(float m1, float m2, float h) {
161
- if (h < 0.0f) {
162
- h += 1.0f;
163
- } else if (h > 1.0f) {
164
- h -= 1.0f;
165
- }
166
-
167
- if (h * 6.0f < 1.0f) {
168
- return m1 + (m2 - m1) * h * 6.0f;
169
- }
170
- if (h * 2.0f < 1.0f) {
171
- return m2;
172
- }
173
- if (h * 3.0f < 2.0f) {
174
- return m1 + (m2 - m1) * (2.0f / 3.0f - h) * 6.0f;
175
- }
176
- return m1;
177
- }
178
-
179
- std::vector<std::string> split(const std::string& s, char delim) {
180
- std::vector<std::string> elems;
181
- std::stringstream ss(s);
182
- std::string item;
183
- while (std::getline(ss, item, delim)) {
184
- elems.push_back(item);
185
- }
186
- return elems;
187
- }
188
-
189
-
190
125
  inline bool operator==(const Color& lhs, const Color& rhs) {
191
126
  return lhs.r == rhs.r && lhs.g == rhs.g && lhs.b == rhs.b && ::fabs(lhs.a - rhs.a) < 0.0001f;
192
127
  }
@@ -195,130 +130,5 @@ namespace CSSColorParser {
195
130
  return !(lhs == rhs);
196
131
  }
197
132
 
198
- Color parse(const std::string& css_str) {
199
- std::string str = css_str;
200
-
201
- // Remove all whitespace, not compliant, but should just be more accepting.
202
- str.erase(std::remove(str.begin(), str.end(), ' '), str.end());
203
-
204
- // Convert to lowercase.
205
- std::transform(str.begin(), str.end(), str.begin(), ::tolower);
206
-
207
- for (const auto& namedColor : namedColors) {
208
- if (str == namedColor.name) {
209
- return { namedColor.color };
210
- }
211
- }
212
-
213
- // #abc and #abc123 syntax.
214
- if (str.length() && str.front() == '#') {
215
- auto iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.
216
- if (str.length() == 4) {
217
- if (!(iv >= 0 && iv <= 0xfff)) {
218
- return {};
219
- } else {
220
- return {
221
- static_cast<uint8_t>(((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8)),
222
- static_cast<uint8_t>((iv & 0xf0) | ((iv & 0xf0) >> 4)),
223
- static_cast<uint8_t>((iv & 0xf) | ((iv & 0xf) << 4)),
224
- 1
225
- };
226
- }
227
- } else if (str.length() == 7) {
228
- if (!(iv >= 0 && iv <= 0xffffff)) {
229
- return {}; // Covers NaN.
230
- } else {
231
- return {
232
- static_cast<uint8_t>((iv & 0xff0000) >> 16),
233
- static_cast<uint8_t>((iv & 0xff00) >> 8),
234
- static_cast<uint8_t>(iv & 0xff),
235
- 1
236
- };
237
- }
238
- }else if (str.length() == 5) {
239
- // #rgba
240
- if (!(iv >= 0 && iv <= 0xffff)) return {}; // Covers NaN.
241
- return {
242
- static_cast<uint8_t>(((iv & 0xf000) >> 8) | ((iv & 0xf000) >> 12)),
243
- static_cast<uint8_t>(((iv & 0x0f00) >> 4) | ((iv & 0x0f00) >> 8)),
244
- static_cast<uint8_t>((iv & 0x00f0) | ((iv & 0x00f0) >> 4)),
245
- static_cast<uint8_t>(((iv & 0x000f) << 4 | (iv & 0x000f))) / 255.0f
246
- };
247
- } else if (str.length() == 9) {
248
- // #rrggbbaa
249
- if (!(iv >= 0 && iv <= 0xffffffff)) return {}; // Covers NaN.
250
- return {
251
- static_cast<uint8_t>(((iv & 0xff000000) >> 24) & 0xff),
252
- static_cast<uint8_t>((iv & 0x00ff0000) >> 16),
253
- static_cast<uint8_t>((iv & 0x0000ff00) >> 8),
254
- static_cast<uint8_t>((iv & 0x000000ff)) / 255.0f
255
- };
256
- }
257
-
258
- return {};
259
- }
260
-
261
- size_t op = str.find_first_of('('), ep = str.find_first_of(')');
262
- if (op != std::string::npos && ep + 1 == str.length()) {
263
- const std::string fname = str.substr(0, op);
264
- const std::vector<std::string> params = split(str.substr(op + 1, ep - (op + 1)), ',');
265
-
266
- float alpha = 1.0f;
267
-
268
- if (fname == "rgba" || fname == "rgb") {
269
- if (fname == "rgba") {
270
- if (params.size() != 4) {
271
- return { };
272
- }
273
- alpha = parse_css_float(params.back());
274
- } else {
275
- if (params.size() != 3) {
276
- return { };
277
- }
278
- }
279
-
280
- return {
281
- parse_css_int(params[0]),
282
- parse_css_int(params[1]),
283
- parse_css_int(params[2]),
284
- alpha
285
- };
286
-
287
- } else if (fname == "hsla" || fname == "hsl") {
288
- if (fname == "hsla") {
289
- if (params.size() != 4) {
290
- return { };
291
- }
292
- alpha = parse_css_float(params.back());
293
- } else {
294
- if (params.size() != 3) {
295
- return { };
296
- }
297
- }
298
-
299
- float h = parseFloat(params[0]) / 360.0f;
300
- float i;
301
- // Normalize the hue to [0..1[
302
- h = std::modf(h, &i);
303
-
304
- // NOTE(deanm): According to the CSS spec s/l should only be
305
- // percentages, but we don't bother and let float or percentage.
306
- float s = parse_css_float(params[1]);
307
- float l = parse_css_float(params[2]);
308
-
309
- float m2 = l <= 0.5f ? l * (s + 1.0f) : l + s - l * s;
310
- float m1 = l * 2.0f - m2;
311
-
312
- return {
313
- clamp_css_byte(css_hue_to_rgb(m1, m2, h + 1.0f / 3.0f) * 255.0f),
314
- clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255.0f),
315
- clamp_css_byte(css_hue_to_rgb(m1, m2, h - 1.0f / 3.0f) * 255.0f),
316
- alpha
317
- };
318
- }
319
- }
320
-
321
- return { };
322
- }
323
-
133
+ Color parse(const std::string& css_str);
324
134
  } // namespace CSSColorParser
@@ -0,0 +1,108 @@
1
+
2
+ #pragma once
3
+
4
+ #include <jsi/jsi.h>
5
+
6
+ namespace RNJsi
7
+ {
8
+ using namespace facebook;
9
+
10
+ enum JsiWrapperValueType
11
+ {
12
+ NonInitialized,
13
+ Undefined,
14
+ Null,
15
+ Bool,
16
+ Number,
17
+ JsiValue
18
+ };
19
+
20
+ /**
21
+ Implements a simple wrapper class for JSI primitives like numbers and boolean values. Objects,
22
+ strings and arrays are stored as values inside a property holder. The class also provides a method
23
+ for comparing values that will compare numbers, booleans and strings.
24
+ */
25
+ class JsiSimpleValueWrapper
26
+ {
27
+ public:
28
+ JsiSimpleValueWrapper(jsi::Runtime& runtime) :
29
+ _type(JsiWrapperValueType::NonInitialized),
30
+ _propNameId(jsi::PropNameID::forUtf8(runtime, "value"))
31
+ {}
32
+
33
+ jsi::Value getCurrent(jsi::Runtime &runtime)
34
+ {
35
+ switch (_type)
36
+ {
37
+ case JsiWrapperValueType::NonInitialized:
38
+ return nullptr;
39
+ case JsiWrapperValueType::Undefined:
40
+ return jsi::Value::undefined();
41
+ case JsiWrapperValueType::Null:
42
+ return jsi::Value::null();
43
+ case JsiWrapperValueType::Bool:
44
+ return _boolValue;
45
+ case JsiWrapperValueType::Number:
46
+ return _numberValue;
47
+ case JsiWrapperValueType::JsiValue:
48
+ if (_valueHolder == nullptr) {
49
+ return jsi::Value::undefined();
50
+ }
51
+ return _valueHolder->getProperty(runtime, _propNameId);
52
+ }
53
+ }
54
+
55
+ void setCurrent(jsi::Runtime &runtime, const jsi::Value &value)
56
+ {
57
+ if(value.isNumber()) {
58
+ _type = JsiWrapperValueType::Number;
59
+ _numberValue = value.asNumber();
60
+ } else if(value.isBool()) {
61
+ _type = JsiWrapperValueType::Bool;
62
+ _boolValue = value.getBool();
63
+ } else if(value.isUndefined()) {
64
+ _type = JsiWrapperValueType::Undefined;
65
+ } else if(value.isNull()) {
66
+ _type = JsiWrapperValueType::Null;
67
+ } else {
68
+ _type = JsiWrapperValueType::JsiValue;
69
+ // Save as javascript object - we don't want to have to copy strings, objects and values
70
+ if(_valueHolder == nullptr) {
71
+ _valueHolder = std::make_shared<jsi::Object>(runtime);
72
+ }
73
+ _valueHolder->setProperty(runtime, _propNameId, value);
74
+ }
75
+ }
76
+
77
+ bool equals(jsi::Runtime& runtime, const jsi::Value &value) {
78
+ if (_type == JsiWrapperValueType::NonInitialized) {
79
+ return false;
80
+ }
81
+ if(value.isNumber() && _type == JsiWrapperValueType::Number) {
82
+ return _numberValue == value.asNumber();
83
+ } else if(value.isBool() && _type == JsiWrapperValueType::Bool) {
84
+ return _boolValue == value.getBool();
85
+ } else if(value.isUndefined()) {
86
+ return _type == JsiWrapperValueType::Undefined;
87
+ } else if(value.isNull()) {
88
+ return _type == JsiWrapperValueType::Null;
89
+ } else if(value.isString()) {
90
+ auto current = getCurrent(runtime);
91
+ if (current.isString()) {
92
+ return jsi::String::strictEquals(runtime, value.asString(runtime), current.asString(runtime));
93
+ }
94
+ return false;
95
+ }
96
+ return false;
97
+ }
98
+
99
+ private:
100
+ jsi::PropNameID _propNameId;
101
+ std::shared_ptr<jsi::Object> _valueHolder;
102
+
103
+ bool _boolValue;
104
+ double _numberValue;
105
+
106
+ JsiWrapperValueType _type;
107
+ };
108
+ }
@@ -32,8 +32,6 @@ public:
32
32
  _args[1] = jsi::Value::undefined();
33
33
  }
34
34
 
35
- virtual ~RNSkAnimation() {}
36
-
37
35
  JSI_HOST_FUNCTION(cancel) {
38
36
  stopClock();
39
37
  return jsi::Value::undefined();
@@ -67,17 +67,9 @@ void RNSkDrawView::setDrawCallback(std::shared_ptr<jsi::Function> callback) {
67
67
  _jsTimingInfo.reset();
68
68
  _gpuTimingInfo.reset();
69
69
 
70
- // Set up debug font/paints
71
- auto font = SkFont();
72
- font.setSize(14);
73
- auto paint = SkPaint();
74
- paint.setColor(SkColors::kRed);
75
-
76
70
  // Create draw drawCallback wrapper
77
71
  _drawCallback = std::make_shared<RNSkDrawCallback>(
78
72
  [weakSelf = weak_from_this(),
79
- paint = std::move(paint),
80
- font = std::move(font),
81
73
  callback = std::move(callback)](std::shared_ptr<JsiSkCanvas> canvas,
82
74
  int width,
83
75
  int height,
@@ -121,7 +113,12 @@ void RNSkDrawView::setDrawCallback(std::shared_ptr<jsi::Function> callback) {
121
113
  stream << "js: " << jsAvg << "ms gpu: " << gpuAvg << "ms " << " total: " << total << "ms";
122
114
 
123
115
  std::string debugString = stream.str();
124
-
116
+
117
+ // Set up debug font/paints
118
+ auto font = SkFont();
119
+ font.setSize(14);
120
+ auto paint = SkPaint();
121
+ paint.setColor(SkColors::kRed);
125
122
  canvas->getCanvas()->drawSimpleText(
126
123
  debugString.c_str(), debugString.size(), SkTextEncoding::kUTF8, 8,
127
124
  18, font, paint);
@@ -157,7 +154,7 @@ void RNSkDrawView::drawInCanvas(std::shared_ptr<JsiSkCanvas> canvas,
157
154
 
158
155
  sk_sp<SkImage> RNSkDrawView::makeImageSnapshot(std::shared_ptr<SkRect> bounds) {
159
156
  // Assert width/height
160
- auto surface = SkSurface::MakeRasterN32Premul(getWidth(), getHeight());
157
+ auto surface = SkSurface::MakeRasterN32Premul(getScaledWidth(), getScaledHeight());
161
158
  auto canvas = surface->getCanvas();
162
159
  auto jsiCanvas = std::make_shared<JsiSkCanvas>(_platformContext);
163
160
  jsiCanvas->setCanvas(canvas);
@@ -165,7 +162,7 @@ sk_sp<SkImage> RNSkDrawView::makeImageSnapshot(std::shared_ptr<SkRect> bounds) {
165
162
  milliseconds ms = duration_cast<milliseconds>(
166
163
  system_clock::now().time_since_epoch());
167
164
 
168
- drawInCanvas(jsiCanvas, getWidth(), getHeight(), ms.count() / 1000);
165
+ drawInCanvas(jsiCanvas, getScaledWidth(), getScaledHeight(), ms.count() / 1000);
169
166
 
170
167
  if(bounds != nullptr) {
171
168
  SkIRect b = SkIRect::MakeXYWH(bounds->x(), bounds->y(), bounds->width(), bounds->height());
@@ -188,7 +185,7 @@ void RNSkDrawView::performDraw() {
188
185
  // move the actual drawing onto the render thread later
189
186
  SkPictureRecorder recorder;
190
187
  SkRTreeFactory factory;
191
- SkCanvas* canvas = recorder.beginRecording(getWidth(), getHeight(), &factory);
188
+ SkCanvas* canvas = recorder.beginRecording(getScaledWidth(), getScaledHeight(), &factory);
192
189
  _jsiCanvas->setCanvas(canvas);
193
190
 
194
191
  // Get current milliseconds
@@ -197,7 +194,7 @@ void RNSkDrawView::performDraw() {
197
194
 
198
195
  try {
199
196
  // Perform the javascript drawing
200
- drawInCanvas(_jsiCanvas, getWidth(), getHeight(), ms.count() / 1000.0);
197
+ drawInCanvas(_jsiCanvas, getScaledWidth(), getScaledHeight(), ms.count() / 1000.0);
201
198
  } catch(...) {
202
199
  _jsTimingInfo.stopTiming();
203
200
  _jsDrawingLock->unlock();
@@ -97,12 +97,12 @@ protected:
97
97
  /**
98
98
  Returns the scaled width of the view
99
99
  */
100
- virtual int getWidth() { return -1; };
100
+ virtual float getScaledWidth() = 0;
101
101
 
102
102
  /**
103
103
  Returns the scaled height of the view
104
104
  */
105
- virtual int getHeight() { return -1; };
105
+ virtual float getScaledHeight() = 0;
106
106
 
107
107
  /**
108
108
  Override to render picture to GPU
@@ -34,8 +34,12 @@ public:
34
34
  }
35
35
 
36
36
  JSI_HOST_FUNCTION(createDerivedValue) {
37
- return jsi::Object::createFromHostObject(runtime,
38
- std::make_shared<RNSkDerivedValue>(_platformContext, runtime, arguments, count));
37
+ // Creation and initialization is done in two steps to be able to use weak references when setting
38
+ // up dependencies - since weak_from_this needs our instance to be a shared_ptr before calling
39
+ // weak_from_this().
40
+ auto derivedValue = std::make_shared<RNSkDerivedValue>(_platformContext, runtime, arguments, count);
41
+ derivedValue->initializeDependencies(runtime, arguments, count);
42
+ return jsi::Object::createFromHostObject(runtime, derivedValue);
39
43
  }
40
44
 
41
45
  JSI_HOST_FUNCTION(createAnimation) {
@@ -32,7 +32,6 @@ public:
32
32
  size_t count) : RNSkReadonlyValue(platformContext),
33
33
  _runtime(runtime),
34
34
  _identifier(identifier) {
35
-
36
35
  // Start by updating to zero (start value)
37
36
  update(_runtime, static_cast<double>(0));
38
37
  }
@@ -72,6 +71,7 @@ public:
72
71
  _start += timeSinceStop;
73
72
 
74
73
  _state = RNSkClockState::Running;
74
+
75
75
  getContext()->beginDrawLoop(_identifier, [weakSelf = weak_from_this()](bool invalidated){
76
76
  auto self = weakSelf.lock();
77
77
  if(self) {
@@ -135,7 +135,7 @@ protected:
135
135
  size_t _identifier;
136
136
  std::chrono::time_point<std::chrono::steady_clock> _start;
137
137
  std::chrono::time_point<std::chrono::steady_clock> _stop;
138
- std::atomic<RNSkClockState> _state;
138
+ std::atomic<RNSkClockState> _state = { RNSkClockState::NotStarted };
139
139
  };
140
140
 
141
141
  }
@@ -39,6 +39,11 @@ public:
39
39
  jsi::detail::throwJSError(runtime, "Expected array of dependencies as second parameter");
40
40
  }
41
41
 
42
+ // Get callback for calculating result
43
+ _callback = std::make_shared<jsi::Function>(arguments[0].asObject(runtime).asFunction(runtime));
44
+ }
45
+
46
+ void initializeDependencies(jsi::Runtime &runtime, const jsi::Value *arguments, size_t count) {
42
47
  // Save dependencies
43
48
  std::vector<std::shared_ptr<RNSkReadonlyValue>> dependencies;
44
49
 
@@ -59,14 +64,16 @@ public:
59
64
  dependencies.push_back(value);
60
65
  }
61
66
 
62
- // Get callback for calculating result
63
- _callback = std::make_shared<jsi::Function>(arguments[0].asObject(runtime).asFunction(runtime));
64
-
65
67
  // register change handler on dependencies
66
68
  _unsubscribers.reserve(_unsubscribers.size() + size);
67
69
  for(const auto &dep: dependencies) {
68
- auto dispatcher = std::bind(&RNSkDerivedValue::dependencyUpdated, this, std::placeholders::_1);
69
- _unsubscribers.push_back(dep->addListener(dispatcher));
70
+ _unsubscribers.push_back(dep->addListener([weakSelf = weak_from_this()](jsi::Runtime& runtime) {
71
+ auto self = weakSelf.lock();
72
+ if(self) {
73
+ auto selfAsThis = std::dynamic_pointer_cast<RNSkDerivedValue>(self);
74
+ selfAsThis->dependencyUpdated(runtime);
75
+ }
76
+ }));
70
77
  }
71
78
 
72
79
  // Set initial value