@shopify/react-native-skia 2.0.7 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/android/CMakeLists.txt +20 -1
  2. package/cpp/api/JsiSkApi.h +3 -0
  3. package/cpp/api/JsiSkImageFilterFactory.h +478 -39
  4. package/cpp/api/JsiSkSkottie.h +590 -0
  5. package/cpp/api/JsiSkottieFactory.h +65 -0
  6. package/cpp/api/recorder/Command.h +1 -0
  7. package/cpp/api/recorder/Convertor.h +16 -0
  8. package/cpp/api/recorder/Drawings.h +23 -0
  9. package/cpp/api/recorder/JsiRecorder.h +6 -0
  10. package/cpp/api/recorder/RNRecorder.h +9 -0
  11. package/cpp/api/third_party/SkottieUtils.cpp +333 -0
  12. package/cpp/api/third_party/SkottieUtils.h +172 -0
  13. package/cpp/skia/modules/jsonreader/SkJSONReader.cpp +980 -0
  14. package/cpp/skia/modules/jsonreader/SkJSONReader.h +389 -0
  15. package/cpp/skia/modules/skottie/include/ExternalLayer.h +56 -0
  16. package/cpp/skia/modules/skottie/include/Skottie.h +313 -0
  17. package/cpp/skia/modules/skottie/include/SkottieProperty.h +190 -0
  18. package/cpp/skia/modules/skottie/include/SlotManager.h +113 -0
  19. package/cpp/skia/modules/skottie/include/TextShaper.h +200 -0
  20. package/cpp/skia/modules/skottie/src/SkottieValue.h +56 -0
  21. package/cpp/skia/modules/skottie/src/animator/Animator.h +89 -0
  22. package/cpp/skia/modules/skottie/src/text/Font.h +82 -0
  23. package/cpp/skia/modules/skottie/src/text/TextAdapter.h +155 -0
  24. package/cpp/skia/modules/skottie/src/text/TextAnimator.h +121 -0
  25. package/cpp/skia/modules/skottie/src/text/TextValue.h +28 -0
  26. package/cpp/skia/modules/sksg/include/SkSGClipEffect.h +61 -0
  27. package/cpp/skia/modules/sksg/include/SkSGColorFilter.h +135 -0
  28. package/cpp/skia/modules/sksg/include/SkSGDraw.h +57 -0
  29. package/cpp/skia/modules/sksg/include/SkSGEffectNode.h +50 -0
  30. package/cpp/skia/modules/sksg/include/SkSGGeometryEffect.h +181 -0
  31. package/cpp/skia/modules/sksg/include/SkSGGeometryNode.h +54 -0
  32. package/cpp/skia/modules/sksg/include/SkSGGradient.h +108 -0
  33. package/cpp/skia/modules/sksg/include/SkSGGroup.h +65 -0
  34. package/cpp/skia/modules/sksg/include/SkSGImage.h +59 -0
  35. package/cpp/skia/modules/sksg/include/SkSGInvalidationController.h +46 -0
  36. package/cpp/skia/modules/sksg/include/SkSGMaskEffect.h +65 -0
  37. package/cpp/skia/modules/sksg/include/SkSGMerge.h +74 -0
  38. package/cpp/skia/modules/sksg/include/SkSGNode.h +128 -0
  39. package/cpp/skia/modules/sksg/include/SkSGOpacityEffect.h +54 -0
  40. package/cpp/skia/modules/sksg/include/SkSGPaint.h +112 -0
  41. package/cpp/skia/modules/sksg/include/SkSGPath.h +68 -0
  42. package/cpp/skia/modules/sksg/include/SkSGPlane.h +47 -0
  43. package/cpp/skia/modules/sksg/include/SkSGRect.h +122 -0
  44. package/cpp/skia/modules/sksg/include/SkSGRenderEffect.h +283 -0
  45. package/cpp/skia/modules/sksg/include/SkSGRenderNode.h +157 -0
  46. package/cpp/skia/modules/sksg/include/SkSGScene.h +47 -0
  47. package/cpp/skia/modules/sksg/include/SkSGText.h +82 -0
  48. package/cpp/skia/modules/sksg/include/SkSGTransform.h +127 -0
  49. package/cpp/skia/src/base/SkArenaAlloc.h +371 -0
  50. package/lib/commonjs/dom/nodes/datatypes/Gradient.d.ts +15 -15
  51. package/lib/commonjs/dom/types/Drawings.d.ts +5 -1
  52. package/lib/commonjs/dom/types/Drawings.js.map +1 -1
  53. package/lib/commonjs/dom/types/NodeType.d.ts +2 -1
  54. package/lib/commonjs/dom/types/NodeType.js +2 -0
  55. package/lib/commonjs/dom/types/NodeType.js.map +1 -1
  56. package/lib/commonjs/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
  57. package/lib/commonjs/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
  58. package/lib/commonjs/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
  59. package/lib/commonjs/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
  60. package/lib/commonjs/renderer/__tests__/setup.d.ts +5 -0
  61. package/lib/commonjs/renderer/components/Skottie.d.ts +4 -0
  62. package/lib/commonjs/renderer/components/Skottie.js +13 -0
  63. package/lib/commonjs/renderer/components/Skottie.js.map +1 -0
  64. package/lib/commonjs/renderer/components/index.d.ts +1 -0
  65. package/lib/commonjs/renderer/components/index.js +11 -0
  66. package/lib/commonjs/renderer/components/index.js.map +1 -1
  67. package/lib/commonjs/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
  68. package/lib/commonjs/skia/types/ImageFilter/ImageFilterFactory.js.map +1 -1
  69. package/lib/commonjs/skia/types/Matrix4.d.ts +11 -2
  70. package/lib/commonjs/skia/types/Matrix4.js +42 -1
  71. package/lib/commonjs/skia/types/Matrix4.js.map +1 -1
  72. package/lib/commonjs/skia/types/Recorder.d.ts +2 -1
  73. package/lib/commonjs/skia/types/Recorder.js.map +1 -1
  74. package/lib/commonjs/skia/types/Skia.d.ts +2 -0
  75. package/lib/commonjs/skia/types/Skia.js.map +1 -1
  76. package/lib/commonjs/skia/types/Skottie.d.ts +223 -0
  77. package/lib/commonjs/skia/types/Skottie.js +73 -0
  78. package/lib/commonjs/skia/types/Skottie.js.map +1 -0
  79. package/lib/commonjs/skia/types/index.d.ts +1 -0
  80. package/lib/commonjs/skia/types/index.js +11 -0
  81. package/lib/commonjs/skia/types/index.js.map +1 -1
  82. package/lib/commonjs/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
  83. package/lib/commonjs/skia/web/JsiSkImageFilterFactory.js +88 -19
  84. package/lib/commonjs/skia/web/JsiSkImageFilterFactory.js.map +1 -1
  85. package/lib/commonjs/skia/web/JsiSkia.js +2 -0
  86. package/lib/commonjs/skia/web/JsiSkia.js.map +1 -1
  87. package/lib/commonjs/skia/web/JsiSkottieAnimation.d.ts +59 -0
  88. package/lib/commonjs/skia/web/JsiSkottieAnimation.js +243 -0
  89. package/lib/commonjs/skia/web/JsiSkottieAnimation.js.map +1 -0
  90. package/lib/commonjs/skia/web/JsiSkottieFactory.d.ts +9 -0
  91. package/lib/commonjs/skia/web/JsiSkottieFactory.js +26 -0
  92. package/lib/commonjs/skia/web/JsiSkottieFactory.js.map +1 -0
  93. package/lib/commonjs/sksg/Elements.d.ts +2 -1
  94. package/lib/commonjs/sksg/Elements.js.map +1 -1
  95. package/lib/commonjs/sksg/Recorder/Core.d.ts +4 -2
  96. package/lib/commonjs/sksg/Recorder/Core.js +1 -0
  97. package/lib/commonjs/sksg/Recorder/Core.js.map +1 -1
  98. package/lib/commonjs/sksg/Recorder/Player.js +2 -0
  99. package/lib/commonjs/sksg/Recorder/Player.js.map +1 -1
  100. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
  101. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js +4 -0
  102. package/lib/commonjs/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
  103. package/lib/commonjs/sksg/Recorder/Recorder.d.ts +2 -1
  104. package/lib/commonjs/sksg/Recorder/Recorder.js +6 -0
  105. package/lib/commonjs/sksg/Recorder/Recorder.js.map +1 -1
  106. package/lib/commonjs/sksg/Recorder/Visitor.js +3 -0
  107. package/lib/commonjs/sksg/Recorder/Visitor.js.map +1 -1
  108. package/lib/commonjs/sksg/Recorder/commands/Drawing.d.ts +2 -2
  109. package/lib/commonjs/sksg/Recorder/commands/Drawing.js +11 -4
  110. package/lib/commonjs/sksg/Recorder/commands/Drawing.js.map +1 -1
  111. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js +1 -1
  112. package/lib/commonjs/sksg/Recorder/commands/ImageFilters.js.map +1 -1
  113. package/lib/module/dom/nodes/datatypes/Gradient.d.ts +15 -15
  114. package/lib/module/dom/types/Drawings.d.ts +5 -1
  115. package/lib/module/dom/types/Drawings.js.map +1 -1
  116. package/lib/module/dom/types/NodeType.d.ts +2 -1
  117. package/lib/module/dom/types/NodeType.js +2 -0
  118. package/lib/module/dom/types/NodeType.js.map +1 -1
  119. package/lib/module/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
  120. package/lib/module/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
  121. package/lib/module/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
  122. package/lib/module/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
  123. package/lib/module/renderer/__tests__/setup.d.ts +5 -0
  124. package/lib/module/renderer/components/Skottie.d.ts +4 -0
  125. package/lib/module/renderer/components/Skottie.js +5 -0
  126. package/lib/module/renderer/components/Skottie.js.map +1 -0
  127. package/lib/module/renderer/components/index.d.ts +1 -0
  128. package/lib/module/renderer/components/index.js +1 -0
  129. package/lib/module/renderer/components/index.js.map +1 -1
  130. package/lib/module/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
  131. package/lib/module/skia/types/ImageFilter/ImageFilterFactory.js.map +1 -1
  132. package/lib/module/skia/types/Matrix4.d.ts +11 -2
  133. package/lib/module/skia/types/Matrix4.js +40 -0
  134. package/lib/module/skia/types/Matrix4.js.map +1 -1
  135. package/lib/module/skia/types/Recorder.d.ts +2 -1
  136. package/lib/module/skia/types/Recorder.js.map +1 -1
  137. package/lib/module/skia/types/Skia.d.ts +2 -0
  138. package/lib/module/skia/types/Skia.js.map +1 -1
  139. package/lib/module/skia/types/Skottie.d.ts +223 -0
  140. package/lib/module/skia/types/Skottie.js +74 -0
  141. package/lib/module/skia/types/Skottie.js.map +1 -0
  142. package/lib/module/skia/types/index.d.ts +1 -0
  143. package/lib/module/skia/types/index.js +1 -0
  144. package/lib/module/skia/types/index.js.map +1 -1
  145. package/lib/module/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
  146. package/lib/module/skia/web/JsiSkImageFilterFactory.js +88 -19
  147. package/lib/module/skia/web/JsiSkImageFilterFactory.js.map +1 -1
  148. package/lib/module/skia/web/JsiSkia.js +2 -0
  149. package/lib/module/skia/web/JsiSkia.js.map +1 -1
  150. package/lib/module/skia/web/JsiSkottieAnimation.d.ts +59 -0
  151. package/lib/module/skia/web/JsiSkottieAnimation.js +236 -0
  152. package/lib/module/skia/web/JsiSkottieAnimation.js.map +1 -0
  153. package/lib/module/skia/web/JsiSkottieFactory.d.ts +9 -0
  154. package/lib/module/skia/web/JsiSkottieFactory.js +19 -0
  155. package/lib/module/skia/web/JsiSkottieFactory.js.map +1 -0
  156. package/lib/module/sksg/Elements.d.ts +2 -1
  157. package/lib/module/sksg/Elements.js.map +1 -1
  158. package/lib/module/sksg/Recorder/Core.d.ts +4 -2
  159. package/lib/module/sksg/Recorder/Core.js +1 -0
  160. package/lib/module/sksg/Recorder/Core.js.map +1 -1
  161. package/lib/module/sksg/Recorder/Player.js +3 -1
  162. package/lib/module/sksg/Recorder/Player.js.map +1 -1
  163. package/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
  164. package/lib/module/sksg/Recorder/ReanimatedRecorder.js +4 -0
  165. package/lib/module/sksg/Recorder/ReanimatedRecorder.js.map +1 -1
  166. package/lib/module/sksg/Recorder/Recorder.d.ts +2 -1
  167. package/lib/module/sksg/Recorder/Recorder.js +6 -0
  168. package/lib/module/sksg/Recorder/Recorder.js.map +1 -1
  169. package/lib/module/sksg/Recorder/Visitor.js +3 -0
  170. package/lib/module/sksg/Recorder/Visitor.js.map +1 -1
  171. package/lib/module/sksg/Recorder/commands/Drawing.d.ts +2 -2
  172. package/lib/module/sksg/Recorder/commands/Drawing.js +9 -2
  173. package/lib/module/sksg/Recorder/commands/Drawing.js.map +1 -1
  174. package/lib/module/sksg/Recorder/commands/ImageFilters.js +1 -1
  175. package/lib/module/sksg/Recorder/commands/ImageFilters.js.map +1 -1
  176. package/lib/typescript/lib/commonjs/renderer/components/Skottie.d.ts +2 -0
  177. package/lib/typescript/lib/commonjs/skia/types/Matrix4.d.ts +1 -0
  178. package/lib/typescript/lib/commonjs/skia/types/Skottie.d.ts +6 -0
  179. package/lib/typescript/lib/commonjs/skia/web/JsiSkImageFilterFactory.d.ts +22 -5
  180. package/lib/typescript/lib/commonjs/skia/web/JsiSkia.d.ts +2 -0
  181. package/lib/typescript/lib/commonjs/skia/web/JsiSkottieAnimation.d.ts +48 -0
  182. package/lib/typescript/lib/commonjs/skia/web/JsiSkottieFactory.d.ts +6 -0
  183. package/lib/typescript/lib/commonjs/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
  184. package/lib/typescript/lib/commonjs/sksg/Recorder/Recorder.d.ts +1 -0
  185. package/lib/typescript/lib/commonjs/sksg/Recorder/commands/Drawing.d.ts +1 -1
  186. package/lib/typescript/lib/module/mock/index.d.ts +7 -0
  187. package/lib/typescript/lib/module/renderer/components/Skottie.d.ts +2 -0
  188. package/lib/typescript/lib/module/renderer/components/index.d.ts +1 -0
  189. package/lib/typescript/lib/module/skia/Skia.web.d.ts +1 -0
  190. package/lib/typescript/lib/module/skia/types/Matrix4.d.ts +1 -0
  191. package/lib/typescript/lib/module/skia/types/Skottie.d.ts +5 -0
  192. package/lib/typescript/lib/module/skia/types/index.d.ts +1 -0
  193. package/lib/typescript/lib/module/skia/web/JsiSkImageFilterFactory.d.ts +22 -5
  194. package/lib/typescript/lib/module/skia/web/JsiSkia.d.ts +2 -0
  195. package/lib/typescript/lib/module/skia/web/JsiSkottieAnimation.d.ts +47 -0
  196. package/lib/typescript/lib/module/skia/web/JsiSkottieFactory.d.ts +5 -0
  197. package/lib/typescript/lib/module/sksg/Recorder/ReanimatedRecorder.d.ts +1 -0
  198. package/lib/typescript/lib/module/sksg/Recorder/Recorder.d.ts +1 -0
  199. package/lib/typescript/lib/module/sksg/Recorder/commands/Drawing.d.ts +1 -1
  200. package/lib/typescript/src/dom/nodes/datatypes/Gradient.d.ts +15 -15
  201. package/lib/typescript/src/dom/types/Drawings.d.ts +5 -1
  202. package/lib/typescript/src/dom/types/NodeType.d.ts +2 -1
  203. package/lib/typescript/src/renderer/__tests__/e2e/AdvancedImageFilters.spec.d.ts +1 -0
  204. package/lib/typescript/src/renderer/__tests__/e2e/Camera.spec.d.ts +21 -0
  205. package/lib/typescript/src/renderer/__tests__/e2e/LightingImageFilters.spec.d.ts +1 -0
  206. package/lib/typescript/src/renderer/__tests__/e2e/Skottie.spec.d.ts +1 -0
  207. package/lib/typescript/src/renderer/__tests__/setup.d.ts +5 -0
  208. package/lib/typescript/src/renderer/components/Skottie.d.ts +4 -0
  209. package/lib/typescript/src/renderer/components/index.d.ts +1 -0
  210. package/lib/typescript/src/skia/types/ImageFilter/ImageFilterFactory.d.ts +252 -15
  211. package/lib/typescript/src/skia/types/Matrix4.d.ts +11 -2
  212. package/lib/typescript/src/skia/types/Recorder.d.ts +2 -1
  213. package/lib/typescript/src/skia/types/Skia.d.ts +2 -0
  214. package/lib/typescript/src/skia/types/Skottie.d.ts +223 -0
  215. package/lib/typescript/src/skia/types/index.d.ts +1 -0
  216. package/lib/typescript/src/skia/web/JsiSkImageFilterFactory.d.ts +29 -12
  217. package/lib/typescript/src/skia/web/JsiSkottieAnimation.d.ts +59 -0
  218. package/lib/typescript/src/skia/web/JsiSkottieFactory.d.ts +9 -0
  219. package/lib/typescript/src/sksg/Elements.d.ts +2 -1
  220. package/lib/typescript/src/sksg/Recorder/Core.d.ts +4 -2
  221. package/lib/typescript/src/sksg/Recorder/ReanimatedRecorder.d.ts +2 -1
  222. package/lib/typescript/src/sksg/Recorder/Recorder.d.ts +2 -1
  223. package/lib/typescript/src/sksg/Recorder/commands/Drawing.d.ts +2 -2
  224. package/libs/android/arm64-v8a/libjsonreader.a +0 -0
  225. package/libs/android/armeabi-v7a/libjsonreader.a +0 -0
  226. package/libs/android/x86/libjsonreader.a +0 -0
  227. package/libs/android/x86_64/libjsonreader.a +0 -0
  228. package/libs/apple/libpathops.xcframework/Info.plist +8 -8
  229. package/libs/apple/libskia.xcframework/Info.plist +14 -14
  230. package/libs/apple/libskottie.xcframework/Info.plist +14 -14
  231. package/libs/apple/libskparagraph.xcframework/Info.plist +16 -16
  232. package/libs/apple/libsksg.xcframework/Info.plist +5 -5
  233. package/libs/apple/libskshaper.xcframework/Info.plist +14 -14
  234. package/libs/apple/libskunicode_libgrapheme.xcframework/Info.plist +14 -14
  235. package/libs/apple/libsvg.xcframework/Info.plist +14 -14
  236. package/package.json +1 -1
  237. package/react-native-skia.podspec +4 -2
  238. package/src/__tests__/snapshots/matrix4/camera-corner.png +0 -0
  239. package/src/__tests__/snapshots/matrix4/camera-offset.png +0 -0
  240. package/src/__tests__/snapshots/matrix4/camera-top-left-center.png +0 -0
  241. package/src/__tests__/snapshots/matrix4/camera-zoom-out.png +0 -0
  242. package/src/__tests__/snapshots/matrix4/full-rect.png +0 -0
  243. package/src/__tests__/snapshots/matrix4/rect.png +0 -0
  244. package/src/__tests__/snapshots/matrix4/scaled-rect.png +0 -0
  245. package/src/__tests__/snapshots/matrix4/test-perspective.png +0 -0
  246. package/src/__tests__/snapshots/matrix4/test-perspective2.png +0 -0
  247. package/src/dom/types/Drawings.ts +6 -0
  248. package/src/dom/types/NodeType.ts +2 -0
  249. package/src/renderer/__tests__/e2e/AdvancedImageFilters.spec.tsx +492 -0
  250. package/src/renderer/__tests__/e2e/Camera.spec.tsx +475 -0
  251. package/src/renderer/__tests__/e2e/LightingImageFilters.spec.tsx +1478 -0
  252. package/src/renderer/__tests__/e2e/Skottie.spec.tsx +440 -0
  253. package/src/renderer/__tests__/e2e/setup/skottie/basic_slots.json +1118 -0
  254. package/src/renderer/__tests__/e2e/setup/skottie/color-props.json +1 -0
  255. package/src/renderer/__tests__/e2e/setup/skottie/confetti.json +5899 -0
  256. package/src/renderer/__tests__/e2e/setup/skottie/drinks.json +43857 -0
  257. package/src/renderer/__tests__/e2e/setup/skottie/fingerprint.json +1 -0
  258. package/src/renderer/__tests__/e2e/setup/skottie/lego_loader.json +29540 -0
  259. package/src/renderer/__tests__/e2e/setup/skottie/new-drop.json +1 -0
  260. package/src/renderer/__tests__/e2e/setup/skottie/onboarding.json +1 -0
  261. package/src/renderer/__tests__/e2e/setup/skottie/text-layer.json +1 -0
  262. package/src/renderer/__tests__/setup.tsx +23 -0
  263. package/src/renderer/components/Skottie.tsx +8 -0
  264. package/src/renderer/components/index.ts +1 -0
  265. package/src/skia/__tests__/assets/Avenir-Heavy.ttf +0 -0
  266. package/src/skia/types/ImageFilter/ImageFilterFactory.ts +391 -21
  267. package/src/skia/types/Matrix4.ts +108 -2
  268. package/src/skia/types/Recorder.ts +2 -0
  269. package/src/skia/types/Skia.ts +2 -0
  270. package/src/skia/types/Skottie.ts +266 -0
  271. package/src/skia/types/index.ts +1 -0
  272. package/src/skia/web/JsiSkImageFilterFactory.ts +266 -31
  273. package/src/skia/web/JsiSkia.ts +2 -0
  274. package/src/skia/web/JsiSkottieAnimation.ts +259 -0
  275. package/src/skia/web/JsiSkottieFactory.ts +25 -0
  276. package/src/sksg/Elements.tsx +2 -0
  277. package/src/sksg/Recorder/Core.ts +3 -0
  278. package/src/sksg/Recorder/Player.ts +3 -0
  279. package/src/sksg/Recorder/ReanimatedRecorder.ts +6 -0
  280. package/src/sksg/Recorder/Recorder.ts +5 -0
  281. package/src/sksg/Recorder/Visitor.ts +3 -0
  282. package/src/sksg/Recorder/commands/Drawing.ts +7 -3
  283. package/src/sksg/Recorder/commands/ImageFilters.ts +1 -1
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Copyright 2018 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkSGPlane_DEFINED
9
+ #define SkSGPlane_DEFINED
10
+
11
+ #include "include/core/SkPath.h"
12
+ #include "include/core/SkRect.h"
13
+ #include "include/core/SkRefCnt.h"
14
+ #include "modules/sksg/include/SkSGGeometryNode.h"
15
+
16
+ class SkCanvas;
17
+ class SkMatrix;
18
+ class SkPaint;
19
+ struct SkPoint;
20
+
21
+ namespace sksg {
22
+ class InvalidationController;
23
+
24
+ /**
25
+ * Concrete Geometry node, representing the whole canvas.
26
+ */
27
+ class Plane final : public GeometryNode {
28
+ public:
29
+ static sk_sp<Plane> Make() { return sk_sp<Plane>(new Plane()); }
30
+
31
+ protected:
32
+ void onClip(SkCanvas*, bool antiAlias) const override;
33
+ void onDraw(SkCanvas*, const SkPaint&) const override;
34
+ bool onContains(const SkPoint&) const override;
35
+
36
+ SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
37
+ SkPath onAsPath() const override;
38
+
39
+ private:
40
+ Plane();
41
+
42
+ using INHERITED = GeometryNode;
43
+ };
44
+
45
+ } // namespace sksg
46
+
47
+ #endif // SkSGPlane_DEFINED
@@ -0,0 +1,122 @@
1
+ /*
2
+ * Copyright 2017 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkSGRect_DEFINED
9
+ #define SkSGRect_DEFINED
10
+
11
+ #include "include/core/SkPath.h"
12
+ #include "include/core/SkPathTypes.h"
13
+ #include "include/core/SkRRect.h"
14
+ #include "include/core/SkRect.h"
15
+ #include "include/core/SkRefCnt.h"
16
+ #include "include/core/SkScalar.h"
17
+ #include "include/private/base/SkTo.h"
18
+ #include "modules/sksg/include/SkSGGeometryNode.h"
19
+ #include "modules/sksg/include/SkSGNode.h"
20
+
21
+ #include <cstdint>
22
+
23
+ class SkCanvas;
24
+ class SkMatrix;
25
+ class SkPaint;
26
+ struct SkPoint;
27
+
28
+ namespace sksg {
29
+ class InvalidationController;
30
+
31
+ /**
32
+ * Concrete Geometry node, wrapping an SkRect.
33
+ */
34
+ class Rect final : public GeometryNode {
35
+ public:
36
+ static sk_sp<Rect> Make() { return sk_sp<Rect>(new Rect(SkRect::MakeEmpty())); }
37
+ static sk_sp<Rect> Make(const SkRect& r) { return sk_sp<Rect>(new Rect(r)); }
38
+
39
+ SG_ATTRIBUTE(L, SkScalar, fRect.fLeft )
40
+ SG_ATTRIBUTE(T, SkScalar, fRect.fTop )
41
+ SG_ATTRIBUTE(R, SkScalar, fRect.fRight )
42
+ SG_ATTRIBUTE(B, SkScalar, fRect.fBottom)
43
+
44
+ SG_MAPPED_ATTRIBUTE(Direction , SkPathDirection, fAttrContaier)
45
+ SG_MAPPED_ATTRIBUTE(InitialPointIndex, uint8_t , fAttrContaier)
46
+
47
+ protected:
48
+ void onClip(SkCanvas*, bool antiAlias) const override;
49
+ void onDraw(SkCanvas*, const SkPaint&) const override;
50
+ bool onContains(const SkPoint&) const override;
51
+
52
+ SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
53
+ SkPath onAsPath() const override;
54
+
55
+ private:
56
+ explicit Rect(const SkRect&);
57
+
58
+ SkRect fRect;
59
+
60
+ struct AttrContainer {
61
+ uint8_t fDirection : 1;
62
+ uint8_t fInitialPointIndex : 2;
63
+
64
+ SkPathDirection getDirection() const {
65
+ return static_cast<SkPathDirection>(fDirection);
66
+ }
67
+ void setDirection(SkPathDirection dir) { fDirection = SkTo<uint8_t>(dir); }
68
+
69
+ uint8_t getInitialPointIndex() const { return fInitialPointIndex; }
70
+ void setInitialPointIndex(uint8_t idx) { fInitialPointIndex = idx; }
71
+ };
72
+ AttrContainer fAttrContaier = { (int)SkPathDirection::kCW, 0 };
73
+
74
+ using INHERITED = GeometryNode;
75
+ };
76
+
77
+ /**
78
+ * Concrete Geometry node, wrapping an SkRRect.
79
+ */
80
+ class RRect final : public GeometryNode {
81
+ public:
82
+ static sk_sp<RRect> Make() { return sk_sp<RRect>(new RRect(SkRRect())); }
83
+ static sk_sp<RRect> Make(const SkRRect& rr) { return sk_sp<RRect>(new RRect(rr)); }
84
+
85
+ SG_ATTRIBUTE(RRect, SkRRect, fRRect)
86
+
87
+ SG_MAPPED_ATTRIBUTE(Direction , SkPathDirection, fAttrContaier)
88
+ SG_MAPPED_ATTRIBUTE(InitialPointIndex, uint8_t , fAttrContaier)
89
+
90
+ protected:
91
+ void onClip(SkCanvas*, bool antiAlias) const override;
92
+ void onDraw(SkCanvas*, const SkPaint&) const override;
93
+ bool onContains(const SkPoint&) const override;
94
+
95
+ SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
96
+ SkPath onAsPath() const override;
97
+
98
+ private:
99
+ explicit RRect(const SkRRect&);
100
+
101
+ SkRRect fRRect;
102
+
103
+ struct AttrContainer {
104
+ uint8_t fDirection : 1;
105
+ uint8_t fInitialPointIndex : 2;
106
+
107
+ SkPathDirection getDirection() const {
108
+ return static_cast<SkPathDirection>(fDirection);
109
+ }
110
+ void setDirection(SkPathDirection dir) { fDirection = SkTo<uint8_t>(dir); }
111
+
112
+ uint8_t getInitialPointIndex() const { return fInitialPointIndex; }
113
+ void setInitialPointIndex(uint8_t idx) { fInitialPointIndex = idx; }
114
+ };
115
+ AttrContainer fAttrContaier = { (int)SkPathDirection::kCW, 0 };
116
+
117
+ using INHERITED = GeometryNode;
118
+ };
119
+
120
+ } // namespace sksg
121
+
122
+ #endif // SkSGRect_DEFINED
@@ -0,0 +1,283 @@
1
+ /*
2
+ * Copyright 2019 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkSGRenderEffect_DEFINED
9
+ #define SkSGRenderEffect_DEFINED
10
+
11
+ #include "include/core/SkBlendMode.h"
12
+ #include "include/core/SkBlender.h"
13
+ #include "include/core/SkColor.h"
14
+ #include "include/core/SkImageFilter.h"
15
+ #include "include/core/SkPoint.h"
16
+ #include "include/core/SkRect.h"
17
+ #include "include/core/SkRefCnt.h"
18
+ #include "include/core/SkShader.h"
19
+ #include "include/core/SkTileMode.h"
20
+ #include "include/effects/SkImageFilters.h"
21
+ #include "include/private/base/SkAssert.h"
22
+ #include "modules/sksg/include/SkSGEffectNode.h"
23
+ #include "modules/sksg/include/SkSGNode.h"
24
+
25
+ #include <optional>
26
+
27
+ class SkCanvas;
28
+ class SkMatrix;
29
+
30
+ // TODO: merge EffectNode.h with this header
31
+
32
+ namespace sksg {
33
+ class InvalidationController;
34
+ class RenderNode;
35
+
36
+ /**
37
+ * Shader base class.
38
+ */
39
+ class Shader : public Node {
40
+ public:
41
+ ~Shader() override;
42
+
43
+ const sk_sp<SkShader>& getShader() const {
44
+ SkASSERT(!this->hasInval());
45
+ return fShader;
46
+ }
47
+
48
+ protected:
49
+ Shader();
50
+
51
+ SkRect onRevalidate(InvalidationController*, const SkMatrix&) final;
52
+
53
+ virtual sk_sp<SkShader> onRevalidateShader() = 0;
54
+
55
+ private:
56
+ sk_sp<SkShader> fShader;
57
+
58
+ using INHERITED = Node;
59
+ };
60
+
61
+ /**
62
+ * Attaches a shader to the render DAG.
63
+ */
64
+ class ShaderEffect final : public EffectNode {
65
+ public:
66
+ ~ShaderEffect() override;
67
+
68
+ static sk_sp<ShaderEffect> Make(sk_sp<RenderNode> child, sk_sp<Shader> shader = nullptr);
69
+
70
+ void setShader(sk_sp<Shader>);
71
+
72
+ protected:
73
+ void onRender(SkCanvas*, const RenderContext*) const override;
74
+
75
+ SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
76
+
77
+ private:
78
+ ShaderEffect(sk_sp<RenderNode> child, sk_sp<Shader> shader);
79
+
80
+ sk_sp<Shader> fShader;
81
+
82
+ using INHERITED = EffectNode;
83
+ };
84
+
85
+ /**
86
+ * Attaches a mask shader to the render DAG.
87
+ */
88
+ class MaskShaderEffect final : public EffectNode {
89
+ public:
90
+ static sk_sp<MaskShaderEffect> Make(sk_sp<RenderNode>, sk_sp<SkShader> = nullptr);
91
+
92
+ SG_ATTRIBUTE(Shader, sk_sp<SkShader>, fShader)
93
+
94
+ protected:
95
+ void onRender(SkCanvas*, const RenderContext*) const override;
96
+
97
+ private:
98
+ MaskShaderEffect(sk_sp<RenderNode>, sk_sp<SkShader>);
99
+
100
+ sk_sp<SkShader> fShader;
101
+
102
+ using INHERITED = EffectNode;
103
+ };
104
+
105
+ /**
106
+ * ImageFilter base class.
107
+ */
108
+ class ImageFilter : public Node {
109
+ public:
110
+ ~ImageFilter() override;
111
+
112
+ const sk_sp<SkImageFilter>& getFilter() const {
113
+ SkASSERT(!this->hasInval());
114
+ return fFilter;
115
+ }
116
+
117
+ SG_ATTRIBUTE(CropRect, SkImageFilters::CropRect, fCropRect)
118
+
119
+ protected:
120
+ ImageFilter();
121
+
122
+ SkRect onRevalidate(InvalidationController*, const SkMatrix&) final;
123
+
124
+ virtual sk_sp<SkImageFilter> onRevalidateFilter() = 0;
125
+
126
+ private:
127
+ sk_sp<SkImageFilter> fFilter;
128
+ SkImageFilters::CropRect fCropRect = std::nullopt;
129
+
130
+ using INHERITED = Node;
131
+ };
132
+
133
+ /**
134
+ * Attaches an ImageFilter (chain) to the render DAG.
135
+ */
136
+ class ImageFilterEffect final : public EffectNode {
137
+ public:
138
+ ~ImageFilterEffect() override;
139
+
140
+ static sk_sp<RenderNode> Make(sk_sp<RenderNode> child, sk_sp<ImageFilter> filter);
141
+
142
+ enum class Cropping {
143
+ kNone, // Doesn't use a crop rect.
144
+ kContent, // Uses the content bounding box as a crop rect.
145
+ };
146
+
147
+ SG_ATTRIBUTE(Cropping, Cropping, fCropping)
148
+
149
+ protected:
150
+ void onRender(SkCanvas*, const RenderContext*) const override;
151
+ const RenderNode* onNodeAt(const SkPoint&) const override;
152
+
153
+ SkRect onRevalidate(InvalidationController*, const SkMatrix&) override;
154
+
155
+ private:
156
+ ImageFilterEffect(sk_sp<RenderNode> child, sk_sp<ImageFilter> filter);
157
+
158
+ sk_sp<ImageFilter> fImageFilter;
159
+ Cropping fCropping = Cropping::kNone;
160
+
161
+ using INHERITED = EffectNode;
162
+ };
163
+
164
+ /**
165
+ * Wrapper for externally-managed SkImageFilters.
166
+ */
167
+ class ExternalImageFilter final : public ImageFilter {
168
+ public:
169
+ ~ExternalImageFilter() override;
170
+
171
+ static sk_sp<ExternalImageFilter> Make() {
172
+ return sk_sp<ExternalImageFilter>(new ExternalImageFilter());
173
+ }
174
+
175
+ SG_ATTRIBUTE(ImageFilter, sk_sp<SkImageFilter>, fImageFilter)
176
+
177
+ private:
178
+ ExternalImageFilter();
179
+
180
+ sk_sp<SkImageFilter> onRevalidateFilter() override { return fImageFilter; }
181
+
182
+ sk_sp<SkImageFilter> fImageFilter;
183
+ };
184
+
185
+ /**
186
+ * SkDropShadowImageFilter node.
187
+ */
188
+ class DropShadowImageFilter final : public ImageFilter {
189
+ public:
190
+ ~DropShadowImageFilter() override;
191
+
192
+ static sk_sp<DropShadowImageFilter> Make();
193
+
194
+ enum class Mode { kShadowAndForeground, kShadowOnly };
195
+
196
+ SG_ATTRIBUTE(Offset, SkVector, fOffset)
197
+ SG_ATTRIBUTE(Sigma , SkVector, fSigma )
198
+ SG_ATTRIBUTE(Color , SkColor , fColor )
199
+ SG_ATTRIBUTE(Mode , Mode , fMode )
200
+
201
+ protected:
202
+ sk_sp<SkImageFilter> onRevalidateFilter() override;
203
+
204
+ private:
205
+ explicit DropShadowImageFilter();
206
+
207
+ SkVector fOffset = { 0, 0 },
208
+ fSigma = { 0, 0 };
209
+ SkColor fColor = SK_ColorBLACK;
210
+ Mode fMode = Mode::kShadowAndForeground;
211
+
212
+ using INHERITED = ImageFilter;
213
+ };
214
+
215
+ /**
216
+ * SkBlurImageFilter node.
217
+ */
218
+ class BlurImageFilter final : public ImageFilter {
219
+ public:
220
+ ~BlurImageFilter() override;
221
+
222
+ static sk_sp<BlurImageFilter> Make();
223
+
224
+ SG_ATTRIBUTE(Sigma , SkVector , fSigma )
225
+ SG_ATTRIBUTE(TileMode, SkTileMode, fTileMode)
226
+
227
+ protected:
228
+ sk_sp<SkImageFilter> onRevalidateFilter() override;
229
+
230
+ private:
231
+ explicit BlurImageFilter();
232
+
233
+ SkVector fSigma = { 0, 0 };
234
+ SkTileMode fTileMode = SkTileMode::kDecal;
235
+
236
+ using INHERITED = ImageFilter;
237
+ };
238
+
239
+ /**
240
+ * Applies an SkBlender to descendant render nodes.
241
+ */
242
+ class BlenderEffect final : public EffectNode {
243
+ public:
244
+ ~BlenderEffect() override;
245
+
246
+ static sk_sp<BlenderEffect> Make(sk_sp<RenderNode> child, sk_sp<SkBlender> = nullptr);
247
+
248
+ SG_ATTRIBUTE(Blender, sk_sp<SkBlender>, fBlender)
249
+
250
+ protected:
251
+ void onRender(SkCanvas*, const RenderContext*) const override;
252
+ const RenderNode* onNodeAt(const SkPoint&) const override;
253
+
254
+ private:
255
+ BlenderEffect(sk_sp<RenderNode>, sk_sp<SkBlender>);
256
+
257
+ sk_sp<SkBlender> fBlender;
258
+
259
+ using INHERITED = EffectNode;
260
+ };
261
+
262
+ class LayerEffect final : public EffectNode {
263
+ public:
264
+ ~LayerEffect() override;
265
+
266
+ static sk_sp<LayerEffect> Make(sk_sp<RenderNode> child,
267
+ SkBlendMode mode = SkBlendMode::kSrcOver);
268
+
269
+ SG_ATTRIBUTE(Mode, SkBlendMode, fMode)
270
+
271
+ private:
272
+ LayerEffect(sk_sp<RenderNode> child, SkBlendMode mode);
273
+
274
+ void onRender(SkCanvas*, const RenderContext*) const override;
275
+
276
+ SkBlendMode fMode;
277
+
278
+ using INHERITED = EffectNode;
279
+ };
280
+
281
+ } // namespace sksg
282
+
283
+ #endif // SkSGRenderEffect_DEFINED
@@ -0,0 +1,157 @@
1
+ /*
2
+ * Copyright 2017 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkSGRenderNode_DEFINED
9
+ #define SkSGRenderNode_DEFINED
10
+
11
+ #include "include/core/SkBlender.h"
12
+ #include "include/core/SkColorFilter.h"
13
+ #include "include/core/SkMatrix.h"
14
+ #include "include/core/SkRefCnt.h"
15
+ #include "include/core/SkShader.h"
16
+ #include "modules/sksg/include/SkSGNode.h"
17
+
18
+ #include <cstddef>
19
+ #include <cstdint>
20
+ #include <utility>
21
+ #include <vector>
22
+
23
+ class SkCanvas;
24
+ class SkImageFilter;
25
+ class SkPaint;
26
+ struct SkPoint;
27
+ struct SkRect;
28
+
29
+ namespace sksg {
30
+
31
+ /**
32
+ * Base class for nodes which can render to a canvas.
33
+ */
34
+ class RenderNode : public Node {
35
+ protected:
36
+ struct RenderContext;
37
+
38
+ public:
39
+ // Render the node and its descendants to the canvas.
40
+ void render(SkCanvas*, const RenderContext* = nullptr) const;
41
+
42
+ // Perform a front-to-back hit-test, and return the RenderNode located at |point|.
43
+ // Normally, hit-testing stops at leaf Draw nodes.
44
+ const RenderNode* nodeAt(const SkPoint& point) const;
45
+
46
+ // Controls the visibility of the render node. Invisible nodes are not rendered,
47
+ // but they still participate in revalidation.
48
+ bool isVisible() const;
49
+ void setVisible(bool);
50
+
51
+ protected:
52
+ explicit RenderNode(uint32_t inval_traits = 0);
53
+
54
+ virtual void onRender(SkCanvas*, const RenderContext*) const = 0;
55
+ virtual const RenderNode* onNodeAt(const SkPoint& p) const = 0;
56
+
57
+ // Paint property overrides.
58
+ // These are deferred until we can determine whether they can be applied to the individual
59
+ // draw paints, or whether they require content isolation (applied to a layer).
60
+ struct RenderContext {
61
+ sk_sp<SkColorFilter> fColorFilter;
62
+ sk_sp<SkShader> fShader;
63
+ sk_sp<SkShader> fMaskShader;
64
+ sk_sp<SkBlender> fBlender;
65
+ SkMatrix fShaderCTM = SkMatrix::I(),
66
+ fMaskCTM = SkMatrix::I();
67
+ float fOpacity = 1;
68
+
69
+ // Returns true if the paint overrides require a layer when applied to non-atomic draws.
70
+ bool requiresIsolation() const;
71
+
72
+ void modulatePaint(const SkMatrix& ctm, SkPaint*, bool is_layer_paint = false) const;
73
+ };
74
+
75
+ class ScopedRenderContext final {
76
+ public:
77
+ ScopedRenderContext(SkCanvas*, const RenderContext*);
78
+ ~ScopedRenderContext();
79
+
80
+ ScopedRenderContext(ScopedRenderContext&& that) { *this = std::move(that); }
81
+
82
+ ScopedRenderContext& operator=(ScopedRenderContext&& that) {
83
+ fCanvas = that.fCanvas;
84
+ fCtx = std::move(that.fCtx);
85
+ fMaskShader = std::move(that.fMaskShader);
86
+ fRestoreCount = that.fRestoreCount;
87
+
88
+ // scope ownership is being transferred
89
+ that.fRestoreCount = -1;
90
+
91
+ return *this;
92
+ }
93
+
94
+ operator const RenderContext* () const { return &fCtx; }
95
+ const RenderContext* operator->() const { return &fCtx; }
96
+
97
+ // Add (cumulative) paint overrides to a render node sub-DAG.
98
+ ScopedRenderContext&& modulateOpacity(float opacity);
99
+ ScopedRenderContext&& modulateColorFilter(sk_sp<SkColorFilter>);
100
+ ScopedRenderContext&& modulateShader(sk_sp<SkShader>, const SkMatrix& shader_ctm);
101
+ ScopedRenderContext&& modulateMaskShader(sk_sp<SkShader>, const SkMatrix& ms_ctm);
102
+ ScopedRenderContext&& modulateBlender(sk_sp<SkBlender>);
103
+
104
+ // Force content isolation for a node sub-DAG by applying the RenderContext
105
+ // overrides via a layer.
106
+ ScopedRenderContext&& setIsolation(const SkRect& bounds, const SkMatrix& ctm,
107
+ bool do_isolate);
108
+
109
+ // Similarly, force content isolation by applying the RenderContext overrides and
110
+ // an image filter via a single layer.
111
+ ScopedRenderContext&& setFilterIsolation(const SkRect& bounds, const SkMatrix& ctm,
112
+ sk_sp<SkImageFilter>);
113
+
114
+ private:
115
+ // stack-only
116
+ void* operator new(size_t) = delete;
117
+ void* operator new(size_t, void*) = delete;
118
+
119
+ // Scopes cannot be copied.
120
+ ScopedRenderContext(const ScopedRenderContext&) = delete;
121
+ ScopedRenderContext& operator=(const ScopedRenderContext&) = delete;
122
+
123
+ SkCanvas* fCanvas;
124
+ RenderContext fCtx;
125
+ sk_sp<SkShader> fMaskShader; // to be applied at isolation layer restore time
126
+ int fRestoreCount;
127
+ };
128
+
129
+ private:
130
+ friend class ImageFilterEffect;
131
+
132
+ using INHERITED = Node;
133
+ };
134
+
135
+ /**
136
+ * Clients outside SkSG looking to implement custom render nodes,
137
+ * should derive from this class instead of RenderNode. It handles
138
+ * various book-keeping, and provides a controlled extension point.
139
+ */
140
+ class CustomRenderNode : public RenderNode {
141
+ protected:
142
+ explicit CustomRenderNode(std::vector<sk_sp<RenderNode>>&& children);
143
+ ~CustomRenderNode() override;
144
+
145
+ const std::vector<sk_sp<RenderNode>>& children() const { return fChildren; }
146
+
147
+ bool hasChildrenInval() const;
148
+
149
+ private:
150
+ std::vector<sk_sp<RenderNode>> fChildren;
151
+
152
+ using INHERITED = RenderNode;
153
+ };
154
+
155
+ } // namespace sksg
156
+
157
+ #endif // SkSGRenderNode_DEFINED
@@ -0,0 +1,47 @@
1
+ /*
2
+ * Copyright 2018 Google Inc.
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+
8
+ #ifndef SkSGScene_DEFINED
9
+ #define SkSGScene_DEFINED
10
+
11
+ #include "include/core/SkRefCnt.h"
12
+ #include "include/core/SkTypes.h"
13
+
14
+ #include <memory>
15
+
16
+ class SkCanvas;
17
+ struct SkPoint;
18
+
19
+ namespace sksg {
20
+
21
+ class InvalidationController;
22
+ class RenderNode;
23
+
24
+ /**
25
+ * Holds a scene root. Provides high-level methods for rendering.
26
+ *
27
+ */
28
+ class Scene final {
29
+ public:
30
+ static std::unique_ptr<Scene> Make(sk_sp<RenderNode> root);
31
+ ~Scene();
32
+ Scene(const Scene&) = delete;
33
+ Scene& operator=(const Scene&) = delete;
34
+
35
+ void render(SkCanvas*) const;
36
+ void revalidate(InvalidationController* = nullptr);
37
+ const RenderNode* nodeAt(const SkPoint&) const;
38
+
39
+ private:
40
+ explicit Scene(sk_sp<RenderNode> root);
41
+
42
+ const sk_sp<RenderNode> fRoot;
43
+ };
44
+
45
+ } // namespace sksg
46
+
47
+ #endif // SkSGScene_DEFINED