@shopify/react-native-skia 0.1.212 → 0.1.214

Sign up to get free protection for your applications and to get access to all the features.
Files changed (254) hide show
  1. package/android/build.gradle +5 -0
  2. package/android/cpp/rnskia-android/SkiaOpenGLHelper.h +3 -2
  3. package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +9 -2
  4. package/cpp/api/JsiSkSurface.h +4 -1
  5. package/cpp/skia/include/android/GrAHardwareBufferUtils.h +99 -0
  6. package/cpp/skia/include/android/SkHeifDecoder.h +10 -3
  7. package/cpp/skia/include/codec/SkAvifDecoder.h +1 -0
  8. package/cpp/skia/include/codec/SkBmpDecoder.h +1 -0
  9. package/cpp/skia/include/codec/SkCodec.h +4 -3
  10. package/cpp/skia/include/codec/SkEncodedImageFormat.h +0 -3
  11. package/cpp/skia/include/codec/SkGifDecoder.h +1 -0
  12. package/cpp/skia/include/codec/SkIcoDecoder.h +1 -0
  13. package/cpp/skia/include/codec/SkJpegDecoder.h +1 -0
  14. package/cpp/skia/include/codec/SkJpegxlDecoder.h +1 -0
  15. package/cpp/skia/include/codec/SkPngDecoder.h +1 -0
  16. package/cpp/skia/include/codec/SkRawDecoder.h +1 -0
  17. package/cpp/skia/include/codec/SkWbmpDecoder.h +1 -0
  18. package/cpp/skia/include/codec/SkWebpDecoder.h +1 -0
  19. package/cpp/skia/include/config/SkUserConfig.h +0 -2
  20. package/cpp/skia/include/core/SkBitmap.h +8 -8
  21. package/cpp/skia/include/core/SkCanvas.h +37 -50
  22. package/cpp/skia/include/core/SkCapabilities.h +2 -7
  23. package/cpp/skia/include/core/SkColor.h +1 -1
  24. package/cpp/skia/include/core/SkColorFilter.h +6 -0
  25. package/cpp/skia/include/core/SkColorTable.h +3 -0
  26. package/cpp/skia/include/core/SkColorType.h +2 -0
  27. package/cpp/skia/include/core/SkContourMeasure.h +12 -8
  28. package/cpp/skia/include/core/SkDocument.h +1 -0
  29. package/cpp/skia/include/core/SkFont.h +11 -2
  30. package/cpp/skia/include/core/SkFontMgr.h +2 -3
  31. package/cpp/skia/include/core/SkGraphics.h +3 -13
  32. package/cpp/skia/include/core/SkImage.h +57 -111
  33. package/cpp/skia/include/core/SkImageFilter.h +6 -1
  34. package/cpp/skia/include/core/SkImageGenerator.h +8 -0
  35. package/cpp/skia/include/core/SkImageInfo.h +0 -2
  36. package/cpp/skia/include/core/SkM44.h +7 -3
  37. package/cpp/skia/include/core/SkMallocPixelRef.h +4 -1
  38. package/cpp/skia/include/core/SkMatrix.h +17 -17
  39. package/cpp/skia/include/core/SkMesh.h +71 -61
  40. package/cpp/skia/include/core/SkMilestone.h +1 -1
  41. package/cpp/skia/include/core/SkOverdrawCanvas.h +25 -0
  42. package/cpp/skia/include/core/SkPaint.h +1 -1
  43. package/cpp/skia/include/core/SkPath.h +12 -4
  44. package/cpp/skia/include/core/SkPathMeasure.h +3 -4
  45. package/cpp/skia/include/core/SkPicture.h +19 -6
  46. package/cpp/skia/include/core/SkPictureRecorder.h +6 -6
  47. package/cpp/skia/include/core/SkPixmap.h +2 -3
  48. package/cpp/skia/include/core/SkRRect.h +1 -1
  49. package/cpp/skia/include/core/SkRect.h +107 -110
  50. package/cpp/skia/include/core/SkRefCnt.h +1 -1
  51. package/cpp/skia/include/core/SkRegion.h +7 -1
  52. package/cpp/skia/include/core/SkSerialProcs.h +14 -0
  53. package/cpp/skia/include/core/SkShader.h +9 -0
  54. package/cpp/skia/include/core/SkStream.h +9 -9
  55. package/cpp/skia/include/core/SkString.h +1 -1
  56. package/cpp/skia/include/core/SkSurface.h +14 -25
  57. package/cpp/skia/include/core/SkTextBlob.h +17 -4
  58. package/cpp/skia/include/core/SkTiledImageUtils.h +28 -0
  59. package/cpp/skia/include/core/SkTypeface.h +7 -2
  60. package/cpp/skia/include/core/SkTypes.h +4 -12
  61. package/cpp/skia/include/docs/SkPDFDocument.h +17 -3
  62. package/cpp/skia/include/effects/SkImageFilters.h +73 -24
  63. package/cpp/skia/include/effects/SkRuntimeEffect.h +20 -51
  64. package/cpp/skia/include/gpu/GpuTypes.h +13 -0
  65. package/cpp/skia/include/gpu/GrBackendSurface.h +95 -262
  66. package/cpp/skia/include/gpu/GrContextOptions.h +7 -1
  67. package/cpp/skia/include/gpu/GrDirectContext.h +138 -128
  68. package/cpp/skia/include/gpu/GrRecordingContext.h +9 -4
  69. package/cpp/skia/include/gpu/GrSurfaceInfo.h +0 -24
  70. package/cpp/skia/include/gpu/GrTypes.h +16 -1
  71. package/cpp/skia/include/gpu/GrYUVABackendTextures.h +4 -4
  72. package/cpp/skia/include/gpu/d3d/GrD3DTypes.h +2 -2
  73. package/cpp/skia/include/gpu/ganesh/SkImageGanesh.h +44 -12
  74. package/cpp/skia/include/gpu/ganesh/SkMeshGanesh.h +57 -0
  75. package/cpp/skia/include/gpu/ganesh/SkSurfaceGanesh.h +2 -1
  76. package/cpp/skia/include/gpu/ganesh/gl/GrGLBackendSurface.h +58 -0
  77. package/cpp/skia/include/gpu/ganesh/gl/GrGLDirectContext.h +29 -0
  78. package/cpp/skia/include/gpu/ganesh/mtl/SkSurfaceMetal.h +1 -1
  79. package/cpp/skia/include/gpu/ganesh/vk/GrVkBackendSurface.h +67 -0
  80. package/cpp/skia/include/gpu/gl/GrGLInterface.h +2 -2
  81. package/cpp/skia/include/gpu/graphite/BackendTexture.h +14 -3
  82. package/cpp/skia/include/gpu/graphite/Context.h +93 -13
  83. package/cpp/skia/include/gpu/graphite/ContextOptions.h +19 -8
  84. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +23 -0
  85. package/cpp/skia/include/gpu/graphite/Image.h +56 -0
  86. package/cpp/skia/include/gpu/graphite/ImageProvider.h +5 -0
  87. package/cpp/skia/include/gpu/graphite/Recorder.h +26 -9
  88. package/cpp/skia/include/gpu/graphite/Recording.h +7 -5
  89. package/cpp/skia/include/gpu/graphite/TextureInfo.h +8 -0
  90. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +2 -2
  91. package/cpp/skia/include/gpu/mtl/GrMtlTypes.h +2 -2
  92. package/cpp/skia/include/gpu/vk/GrVkTypes.h +4 -3
  93. package/cpp/skia/include/ports/SkCFObject.h +1 -1
  94. package/cpp/skia/include/private/SkGainmapInfo.h +4 -13
  95. package/cpp/skia/include/private/SkJpegGainmapEncoder.h +1 -24
  96. package/cpp/skia/include/private/SkWeakRefCnt.h +1 -1
  97. package/cpp/skia/include/private/base/SkAnySubclass.h +73 -0
  98. package/cpp/skia/include/private/base/SkAssert.h +106 -12
  99. package/cpp/skia/include/private/base/SkAttributes.h +0 -12
  100. package/cpp/skia/include/private/base/SkFeatures.h +0 -3
  101. package/cpp/skia/include/private/base/SkFloatingPoint.h +58 -105
  102. package/cpp/skia/include/private/base/SkSpan_impl.h +18 -12
  103. package/cpp/skia/include/private/base/SkTArray.h +22 -17
  104. package/cpp/skia/include/private/base/SkTDArray.h +5 -6
  105. package/cpp/skia/include/private/base/SkTemplates.h +50 -30
  106. package/cpp/skia/include/private/chromium/GrDeferredDisplayListRecorder.h +5 -2
  107. package/cpp/skia/include/private/chromium/GrSurfaceCharacterization.h +2 -2
  108. package/cpp/skia/include/private/chromium/SkChromeRemoteGlyphCache.h +13 -8
  109. package/cpp/skia/include/private/chromium/SkDiscardableMemory.h +1 -1
  110. package/cpp/skia/include/private/chromium/SkImageChromium.h +16 -3
  111. package/cpp/skia/include/private/chromium/Slug.h +11 -4
  112. package/cpp/skia/include/private/gpu/ganesh/GrD3DTypesMinimal.h +1 -1
  113. package/cpp/skia/include/private/gpu/ganesh/GrGLTypesPriv.h +6 -9
  114. package/cpp/skia/include/private/gpu/ganesh/GrTypesPriv.h +29 -13
  115. package/cpp/skia/include/private/gpu/ganesh/GrVkTypesPriv.h +2 -28
  116. package/cpp/skia/include/private/gpu/graphite/ContextOptionsPriv.h +34 -0
  117. package/cpp/skia/include/private/gpu/graphite/DawnTypesPriv.h +6 -0
  118. package/cpp/skia/include/private/gpu/graphite/MtlGraphiteTypesPriv.h +8 -0
  119. package/cpp/skia/include/private/gpu/graphite/VulkanGraphiteTypesPriv.h +10 -0
  120. package/cpp/skia/include/utils/SkBase64.h +2 -2
  121. package/cpp/skia/include/utils/SkNWayCanvas.h +1 -11
  122. package/cpp/skia/include/utils/SkNoDrawCanvas.h +0 -2
  123. package/cpp/skia/include/utils/SkPaintFilterCanvas.h +1 -2
  124. package/cpp/skia/include/utils/SkShadowUtils.h +15 -1
  125. package/cpp/skia/include/utils/SkTextUtils.h +1 -1
  126. package/cpp/skia/modules/skparagraph/include/Paragraph.h +107 -1
  127. package/cpp/skia/modules/skparagraph/include/ParagraphBuilder.h +3 -2
  128. package/cpp/skia/modules/skparagraph/include/ParagraphStyle.h +4 -0
  129. package/cpp/skia/modules/skparagraph/include/TypefaceFontProvider.h +5 -3
  130. package/cpp/skia/modules/svg/include/SkSVGAttributeParser.h +4 -0
  131. package/cpp/skia/src/core/SkChecksum.h +2 -1
  132. package/cpp/skia/src/core/SkPathPriv.h +1 -1
  133. package/cpp/skia/src/core/SkTHash.h +19 -9
  134. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +3 -1
  135. package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +1 -1
  136. package/lib/commonjs/dom/nodes/datatypes/Rect.js +5 -1
  137. package/lib/commonjs/dom/nodes/datatypes/Rect.js.map +1 -1
  138. package/lib/commonjs/external/reanimated/index.d.ts +1 -0
  139. package/lib/commonjs/external/reanimated/index.js +13 -0
  140. package/lib/commonjs/external/reanimated/index.js.map +1 -1
  141. package/lib/commonjs/external/reanimated/moduleWrapper.js +3 -8
  142. package/lib/commonjs/external/reanimated/moduleWrapper.js.map +1 -1
  143. package/lib/commonjs/external/reanimated/renderHelpers.js +46 -1
  144. package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
  145. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.d.ts +2 -0
  146. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.js +26 -0
  147. package/lib/commonjs/external/reanimated/useDerivedValueOnJS.js.map +1 -0
  148. package/lib/commonjs/external/reanimated/useSharedValueEffect.js +2 -5
  149. package/lib/commonjs/external/reanimated/useSharedValueEffect.js.map +1 -1
  150. package/lib/commonjs/index.d.ts +1 -0
  151. package/lib/commonjs/index.js +21 -0
  152. package/lib/commonjs/index.js.map +1 -1
  153. package/lib/commonjs/skia/types/MaskFilter.js +4 -0
  154. package/lib/commonjs/skia/types/MaskFilter.js.map +1 -1
  155. package/lib/commonjs/skia/web/JsiSkPicture.js +2 -1
  156. package/lib/commonjs/skia/web/JsiSkPicture.js.map +1 -1
  157. package/lib/commonjs/views/SkiaBaseWebView.js +1 -1
  158. package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
  159. package/lib/commonjs/views/types.js +3 -0
  160. package/lib/commonjs/views/types.js.map +1 -1
  161. package/lib/module/dom/nodes/datatypes/Rect.js +5 -1
  162. package/lib/module/dom/nodes/datatypes/Rect.js.map +1 -1
  163. package/lib/module/external/reanimated/index.d.ts +1 -0
  164. package/lib/module/external/reanimated/index.js +1 -0
  165. package/lib/module/external/reanimated/index.js.map +1 -1
  166. package/lib/module/external/reanimated/moduleWrapper.js +1 -9
  167. package/lib/module/external/reanimated/moduleWrapper.js.map +1 -1
  168. package/lib/module/external/reanimated/renderHelpers.js +48 -2
  169. package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
  170. package/lib/module/external/reanimated/useDerivedValueOnJS.d.ts +2 -0
  171. package/lib/module/external/reanimated/useDerivedValueOnJS.js +15 -0
  172. package/lib/module/external/reanimated/useDerivedValueOnJS.js.map +1 -0
  173. package/lib/module/external/reanimated/useSharedValueEffect.js +3 -6
  174. package/lib/module/external/reanimated/useSharedValueEffect.js.map +1 -1
  175. package/lib/module/index.d.ts +1 -0
  176. package/lib/module/index.js +1 -0
  177. package/lib/module/index.js.map +1 -1
  178. package/lib/module/skia/types/MaskFilter.js +3 -0
  179. package/lib/module/skia/types/MaskFilter.js.map +1 -1
  180. package/lib/module/views/types.js +3 -0
  181. package/lib/module/views/types.js.map +1 -1
  182. package/lib/typescript/src/external/reanimated/index.d.ts +1 -0
  183. package/lib/typescript/src/external/reanimated/useDerivedValueOnJS.d.ts +2 -0
  184. package/lib/typescript/src/index.d.ts +1 -0
  185. package/libs/android/arm64-v8a/libskia.a +0 -0
  186. package/libs/android/arm64-v8a/libskottie.a +0 -0
  187. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  188. package/libs/android/arm64-v8a/libsksg.a +0 -0
  189. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  190. package/libs/android/arm64-v8a/libskunicode.a +0 -0
  191. package/libs/android/arm64-v8a/libsvg.a +0 -0
  192. package/libs/android/armeabi-v7a/libskia.a +0 -0
  193. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  194. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  195. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  196. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  197. package/libs/android/armeabi-v7a/libskunicode.a +0 -0
  198. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  199. package/libs/android/x86/libskia.a +0 -0
  200. package/libs/android/x86/libskottie.a +0 -0
  201. package/libs/android/x86/libskparagraph.a +0 -0
  202. package/libs/android/x86/libsksg.a +0 -0
  203. package/libs/android/x86/libskshaper.a +0 -0
  204. package/libs/android/x86/libskunicode.a +0 -0
  205. package/libs/android/x86/libsvg.a +0 -0
  206. package/libs/android/x86_64/libskia.a +0 -0
  207. package/libs/android/x86_64/libskottie.a +0 -0
  208. package/libs/android/x86_64/libskparagraph.a +0 -0
  209. package/libs/android/x86_64/libsksg.a +0 -0
  210. package/libs/android/x86_64/libskshaper.a +0 -0
  211. package/libs/android/x86_64/libskunicode.a +0 -0
  212. package/libs/android/x86_64/libsvg.a +0 -0
  213. package/libs/ios/libskia.xcframework/Info.plist +5 -5
  214. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  215. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  216. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  217. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  218. package/libs/ios/libskparagraph.xcframework/Info.plist +5 -5
  219. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  220. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  221. package/libs/ios/libsksg.xcframework/Info.plist +5 -5
  222. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  223. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  224. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  225. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  226. package/libs/ios/libskunicode.xcframework/Info.plist +5 -5
  227. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  228. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  229. package/libs/ios/libsvg.xcframework/Info.plist +5 -5
  230. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  231. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  232. package/package.json +1 -1
  233. package/react-native-skia.podspec +1 -1
  234. package/src/dom/nodes/datatypes/Rect.ts +6 -2
  235. package/src/external/reanimated/index.ts +1 -0
  236. package/src/external/reanimated/moduleWrapper.ts +6 -10
  237. package/src/external/reanimated/renderHelpers.ts +41 -1
  238. package/src/external/reanimated/useDerivedValueOnJS.ts +24 -0
  239. package/src/external/reanimated/useSharedValueEffect.ts +4 -7
  240. package/src/index.ts +1 -0
  241. package/cpp/skia/include/core/SkDeferredDisplayList.h +0 -15
  242. package/cpp/skia/include/core/SkDeferredDisplayListRecorder.h +0 -15
  243. package/cpp/skia/include/core/SkPromiseImageTexture.h +0 -20
  244. package/cpp/skia/include/core/SkSurfaceCharacterization.h +0 -15
  245. package/cpp/skia/include/core/SkTime.h +0 -63
  246. package/cpp/skia/include/effects/SkOpPathEffect.h +0 -43
  247. package/cpp/skia/include/effects/SkStrokeAndFillPathEffect.h +0 -28
  248. package/cpp/skia/include/gpu/GrBackendSurfaceMutableState.h +0 -32
  249. package/cpp/skia/include/gpu/dawn/GrDawnTypes.h +0 -95
  250. package/cpp/skia/include/private/SkBitmaskEnum.h +0 -59
  251. package/cpp/skia/include/private/SkSLDefines.h +0 -64
  252. package/cpp/skia/include/private/SkShadowFlags.h +0 -27
  253. package/cpp/skia/include/private/gpu/ganesh/GrDawnTypesPriv.h +0 -26
  254. /package/cpp/skia/{include/private/base → src/core}/SkPathEnums.h +0 -0
@@ -17,6 +17,10 @@ class SkData;
17
17
  class SkImage;
18
18
  class SkPicture;
19
19
  class SkTypeface;
20
+ class SkReadBuffer;
21
+ namespace sktext::gpu {
22
+ class Slug;
23
+ }
20
24
 
21
25
  /**
22
26
  * A serial-proc is asked to serialize the specified object (e.g. picture or image).
@@ -49,6 +53,13 @@ using SkDeserialPictureProc = sk_sp<SkPicture> (*)(const void* data, size_t leng
49
53
  */
50
54
  using SkDeserialImageProc = sk_sp<SkImage> (*)(const void* data, size_t length, void* ctx);
51
55
 
56
+ /**
57
+ * Slugs are currently only deserializable with a GPU backend. Clients will not be able to
58
+ * provide a custom mechanism here, but can enable Slug deserialization by calling
59
+ * sktext::gpu::AddDeserialProcs to add Skia's implementation.
60
+ */
61
+ using SkSlugProc = sk_sp<sktext::gpu::Slug> (*)(SkReadBuffer&, void* ctx);
62
+
52
63
  /**
53
64
  * Called with the encoded form of a typeface (previously written with a custom
54
65
  * SkSerialTypefaceProc proc). Return a typeface object, or nullptr indicating failure.
@@ -73,6 +84,9 @@ struct SK_API SkDeserialProcs {
73
84
  SkDeserialImageProc fImageProc = nullptr;
74
85
  void* fImageCtx = nullptr;
75
86
 
87
+ SkSlugProc fSlugProc = nullptr;
88
+ void* fSlugCtx = nullptr;
89
+
76
90
  SkDeserialTypefaceProc fTypefaceProc = nullptr;
77
91
  void* fTypefaceCtx = nullptr;
78
92
 
@@ -67,6 +67,15 @@ public:
67
67
  */
68
68
  sk_sp<SkShader> makeWithColorFilter(sk_sp<SkColorFilter>) const;
69
69
 
70
+ /**
71
+ * Return a shader that will compute this shader in a specific color space.
72
+ * By default, all shaders operate in the destination (surface) color space.
73
+ * The results of a shader are still always converted to the destination - this
74
+ * API has no impact on simple shaders or images. Primarily, it impacts shaders
75
+ * that perform mathematical operations, like Blend shaders, or runtime shaders.
76
+ */
77
+ sk_sp<SkShader> makeWithWorkingColorSpace(sk_sp<SkColorSpace>) const;
78
+
70
79
  private:
71
80
  SkShader() = default;
72
81
  friend class SkShaderBase;
@@ -86,22 +86,22 @@ public:
86
86
  */
87
87
  virtual bool isAtEnd() const = 0;
88
88
 
89
- bool SK_WARN_UNUSED_RESULT readS8(int8_t*);
90
- bool SK_WARN_UNUSED_RESULT readS16(int16_t*);
91
- bool SK_WARN_UNUSED_RESULT readS32(int32_t*);
89
+ [[nodiscard]] bool readS8(int8_t*);
90
+ [[nodiscard]] bool readS16(int16_t*);
91
+ [[nodiscard]] bool readS32(int32_t*);
92
92
 
93
- bool SK_WARN_UNUSED_RESULT readU8(uint8_t* i) { return this->readS8((int8_t*)i); }
94
- bool SK_WARN_UNUSED_RESULT readU16(uint16_t* i) { return this->readS16((int16_t*)i); }
95
- bool SK_WARN_UNUSED_RESULT readU32(uint32_t* i) { return this->readS32((int32_t*)i); }
93
+ [[nodiscard]] bool readU8(uint8_t* i) { return this->readS8((int8_t*)i); }
94
+ [[nodiscard]] bool readU16(uint16_t* i) { return this->readS16((int16_t*)i); }
95
+ [[nodiscard]] bool readU32(uint32_t* i) { return this->readS32((int32_t*)i); }
96
96
 
97
- bool SK_WARN_UNUSED_RESULT readBool(bool* b) {
97
+ [[nodiscard]] bool readBool(bool* b) {
98
98
  uint8_t i;
99
99
  if (!this->readU8(&i)) { return false; }
100
100
  *b = (i != 0);
101
101
  return true;
102
102
  }
103
- bool SK_WARN_UNUSED_RESULT readScalar(SkScalar*);
104
- bool SK_WARN_UNUSED_RESULT readPackedUInt(size_t*);
103
+ [[nodiscard]] bool readScalar(SkScalar*);
104
+ [[nodiscard]] bool readPackedUInt(size_t*);
105
105
 
106
106
  //SkStreamRewindable
107
107
  /** Rewinds to the beginning of the stream. Returns true if the stream is known
@@ -16,8 +16,8 @@
16
16
 
17
17
  #include <atomic>
18
18
  #include <cstdarg>
19
- #include <cstddef>
20
19
  #include <cstdint>
20
+ #include <cstring>
21
21
  #include <string>
22
22
  #include <string_view>
23
23
  #include <type_traits>
@@ -39,12 +39,6 @@ namespace skgpu::graphite {
39
39
  class Recorder;
40
40
  }
41
41
 
42
- #if !defined(SK_DISABLE_LEGACY_SKSURFACE_FLUSH)
43
- enum class GrSemaphoresSubmitted : bool;
44
- struct GrFlushInfo;
45
- namespace skgpu { class MutableTextureState; }
46
- #endif
47
-
48
42
  namespace SkSurfaces {
49
43
 
50
44
  enum class BackendSurfaceAccess {
@@ -555,6 +549,20 @@ public:
555
549
  ReadPixelsCallback callback,
556
550
  ReadPixelsContext context);
557
551
 
552
+ /**
553
+ * Identical to asyncRescaleAndReadPixelsYUV420 but a fourth plane is returned in the
554
+ * AsyncReadResult passed to 'callback'. The fourth plane contains the alpha chanel at the
555
+ * same full resolution as the Y plane.
556
+ */
557
+ void asyncRescaleAndReadPixelsYUVA420(SkYUVColorSpace yuvColorSpace,
558
+ sk_sp<SkColorSpace> dstColorSpace,
559
+ const SkIRect& srcRect,
560
+ const SkISize& dstSize,
561
+ RescaleGamma rescaleGamma,
562
+ RescaleMode rescaleMode,
563
+ ReadPixelsCallback callback,
564
+ ReadPixelsContext context);
565
+
558
566
  /** Copies SkRect of pixels from the src SkPixmap to the SkSurface.
559
567
 
560
568
  Source SkRect corners are (0, 0) and (src.width(), src.height()).
@@ -643,25 +651,6 @@ private:
643
651
  uint32_t fGenerationID;
644
652
 
645
653
  using INHERITED = SkRefCnt;
646
-
647
- public:
648
- #if !defined(SK_DISABLE_LEGACY_SKSURFACE_FLUSH) && defined(SK_GANESH)
649
- using BackendSurfaceAccess = SkSurfaces::BackendSurfaceAccess;
650
- GrSemaphoresSubmitted flush(BackendSurfaceAccess access, const GrFlushInfo& info);
651
- GrSemaphoresSubmitted flush(const GrFlushInfo& info,
652
- const skgpu::MutableTextureState* newState = nullptr);
653
- void resolveMSAA();
654
- #endif
655
-
656
- #if !defined(SK_DISABLE_LEGACY_SKSURFACE_FLUSH)
657
- void flushAndSubmit(bool syncCpu = false);
658
- void flush();
659
- #endif
660
-
661
- #if !defined(SK_DISABLE_LEGACY_SKSURFACE_AS_IMAGE) && defined(SK_GRAPHITE)
662
- sk_sp<SkImage> asImage();
663
- #endif
664
-
665
654
  };
666
655
 
667
656
  #endif
@@ -9,16 +9,25 @@
9
9
  #define SkTextBlob_DEFINED
10
10
 
11
11
  #include "include/core/SkFont.h"
12
- #include "include/core/SkPaint.h"
12
+ #include "include/core/SkFontTypes.h"
13
+ #include "include/core/SkRect.h"
13
14
  #include "include/core/SkRefCnt.h"
14
- #include "include/core/SkString.h"
15
+ #include "include/core/SkScalar.h"
16
+ #include "include/core/SkTypes.h"
17
+ #include "include/private/base/SkDebug.h"
15
18
  #include "include/private/base/SkTemplates.h"
16
19
 
17
20
  #include <atomic>
21
+ #include <cstdint>
22
+ #include <cstring>
18
23
 
24
+ class SkData;
25
+ class SkPaint;
26
+ class SkTypeface;
27
+ struct SkDeserialProcs;
28
+ struct SkPoint;
19
29
  struct SkRSXform;
20
30
  struct SkSerialProcs;
21
- struct SkDeserialProcs;
22
31
 
23
32
  namespace sktext {
24
33
  class GlyphRunList;
@@ -248,10 +257,13 @@ private:
248
257
 
249
258
  static unsigned ScalarsPerGlyph(GlyphPositioning pos);
250
259
 
260
+ using PurgeDelegate = void (*)(uint32_t blobID, uint32_t cacheID);
261
+
251
262
  // Call when this blob is part of the key to a cache entry. This allows the cache
252
263
  // to know automatically those entries can be purged when this SkTextBlob is deleted.
253
- void notifyAddedToCache(uint32_t cacheID) const {
264
+ void notifyAddedToCache(uint32_t cacheID, PurgeDelegate purgeDelegate) const {
254
265
  fCacheID.store(cacheID);
266
+ fPurgeDelegate.store(purgeDelegate);
255
267
  }
256
268
 
257
269
  friend class sktext::GlyphRunList;
@@ -262,6 +274,7 @@ private:
262
274
  const SkRect fBounds;
263
275
  const uint32_t fUniqueID;
264
276
  mutable std::atomic<uint32_t> fCacheID;
277
+ mutable std::atomic<PurgeDelegate> fPurgeDelegate;
265
278
 
266
279
  SkDEBUGCODE(size_t fStorageSize;)
267
280
 
@@ -15,8 +15,18 @@
15
15
  #include "include/core/SkSamplingOptions.h"
16
16
  #include "include/core/SkScalar.h"
17
17
  #include "include/private/base/SkAPI.h"
18
+
19
+ #include <cstdint>
20
+
18
21
  class SkPaint;
19
22
 
23
+ /** \namespace SkTiledImageUtils
24
+ SkTiledImageUtils' DrawImage/DrawImageRect methods are intended to be direct replacements
25
+ for their SkCanvas equivalents. The SkTiledImageUtils calls will break SkBitmap-backed
26
+ SkImages into smaller tiles and draw them if the original image is too large to be
27
+ uploaded to the GPU. If the original image doesn't need tiling or is already gpu-backed
28
+ the DrawImage/DrawImageRect calls will fall through to the matching SkCanvas call.
29
+ */
20
30
  namespace SkTiledImageUtils {
21
31
 
22
32
  SK_API void DrawImageRect(SkCanvas* canvas,
@@ -92,6 +102,24 @@ inline void DrawImage(SkCanvas* canvas,
92
102
  DrawImage(canvas, image.get(), x, y, sampling, paint, constraint);
93
103
  }
94
104
 
105
+ static constexpr int kNumImageKeyValues = 6;
106
+
107
+ /** Retrieves a set of values that can be used as part of a cache key for the provided image.
108
+
109
+ Unfortunately, SkImage::uniqueID isn't sufficient as an SkImage cache key. In particular,
110
+ SkBitmap-backed SkImages can share a single SkBitmap and refer to different subsets of it.
111
+ In this situation the optimal key is based on the SkBitmap's generation ID and the subset
112
+ rectangle.
113
+ For Picture-backed images this method will attempt to generate a concise internally-based
114
+ key (i.e., containing picture ID, matrix translation, width and height, etc.). For complicated
115
+ Picture-backed images (i.e., those w/ a paint or a full matrix) it will fall back to
116
+ using 'image's unique key.
117
+
118
+ @param image The image for which key values are desired
119
+ @param keyValues The resulting key values
120
+ */
121
+ SK_API void GetImageKeyValues(const SkImage* image, uint32_t keyValues[kNumImageKeyValues]);
122
+
95
123
  } // namespace SkTiledImageUtils
96
124
 
97
125
  #endif // SkTiledImageUtils_DEFINED
@@ -11,20 +11,25 @@
11
11
  #include "include/core/SkFontArguments.h"
12
12
  #include "include/core/SkFontParameters.h"
13
13
  #include "include/core/SkFontStyle.h"
14
- #include "include/core/SkFontTypes.h"
15
14
  #include "include/core/SkRect.h"
15
+ #include "include/core/SkRefCnt.h"
16
16
  #include "include/core/SkString.h"
17
+ #include "include/core/SkTypes.h"
17
18
  #include "include/private/SkWeakRefCnt.h"
18
19
  #include "include/private/base/SkOnce.h"
19
20
 
21
+ #include <cstddef>
22
+ #include <cstdint>
23
+ #include <memory>
24
+
20
25
  class SkData;
21
26
  class SkDescriptor;
22
- class SkFontData;
23
27
  class SkFontDescriptor;
24
28
  class SkScalerContext;
25
29
  class SkStream;
26
30
  class SkStreamAsset;
27
31
  class SkWStream;
32
+ enum class SkTextEncoding;
28
33
  struct SkAdvancedTypefaceMetrics;
29
34
  struct SkScalerContextEffects;
30
35
  struct SkScalerContextRec;
@@ -26,11 +26,7 @@
26
26
  #include <climits>
27
27
  #include <cstdint>
28
28
 
29
- #if defined(SK_GANESH) || defined(SK_GRAPHITE)
30
- # if !defined(SK_ENABLE_SKSL)
31
- # define SK_ENABLE_SKSL
32
- # endif
33
- #else
29
+ #if !defined(SK_GANESH) && !defined(SK_GRAPHITE)
34
30
  # undef SK_GL
35
31
  # undef SK_VULKAN
36
32
  # undef SK_METAL
@@ -90,11 +86,6 @@
90
86
  #define SK_GAMMA_EXPONENT (0.0f) // SRGB
91
87
  #endif
92
88
 
93
- #ifndef GR_TEST_UTILS
94
- # define GR_TEST_UTILS 0
95
- #endif
96
-
97
-
98
89
  #if defined(SK_HISTOGRAM_ENUMERATION) || \
99
90
  defined(SK_HISTOGRAM_BOOLEAN) || \
100
91
  defined(SK_HISTOGRAM_EXACT_LINEAR) || \
@@ -142,7 +133,8 @@
142
133
  #endif
143
134
 
144
135
  /**
145
- * Gr defines are set to 0 or 1, rather than being undefined or defined
136
+ * These defines are set to 0 or 1, rather than being undefined or defined
137
+ * TODO: consider updating these for consistency
146
138
  */
147
139
 
148
140
  #if !defined(GR_CACHE_STATS)
@@ -154,7 +146,7 @@
154
146
  #endif
155
147
 
156
148
  #if !defined(GR_GPU_STATS)
157
- #if defined(SK_DEBUG) || defined(SK_DUMP_STATS) || GR_TEST_UTILS
149
+ #if defined(SK_DEBUG) || defined(SK_DUMP_STATS) || defined(GR_TEST_UTILS)
158
150
  #define GR_GPU_STATS 1
159
151
  #else
160
152
  #define GR_GPU_STATS 0
@@ -11,8 +11,8 @@
11
11
  #include "include/core/SkMilestone.h"
12
12
  #include "include/core/SkScalar.h"
13
13
  #include "include/core/SkString.h"
14
- #include "include/core/SkTime.h"
15
14
  #include "include/private/base/SkNoncopyable.h"
15
+ #include "src/base/SkTime.h"
16
16
 
17
17
  #define SKPDF_STRING(X) SKPDF_STRING_IMPL(X)
18
18
  #define SKPDF_STRING_IMPL(X) #X
@@ -63,6 +63,20 @@ struct StructureElementNode {
63
63
  SkString fLang;
64
64
  };
65
65
 
66
+ struct DateTime {
67
+ int16_t fTimeZoneMinutes; // The number of minutes that this
68
+ // is ahead of or behind UTC.
69
+ uint16_t fYear; //!< e.g. 2005
70
+ uint8_t fMonth; //!< 1..12
71
+ uint8_t fDayOfWeek; //!< 0..6, 0==Sunday
72
+ uint8_t fDay; //!< 1..31
73
+ uint8_t fHour; //!< 0..23
74
+ uint8_t fMinute; //!< 0..59
75
+ uint8_t fSecond; //!< 0..59
76
+
77
+ void toISO8601(SkString* dst) const;
78
+ };
79
+
66
80
  /** Optional metadata to be passed into the PDF factory function.
67
81
  */
68
82
  struct Metadata {
@@ -96,12 +110,12 @@ struct Metadata {
96
110
  /** The date and time the document was created.
97
111
  The zero default value represents an unknown/unset time.
98
112
  */
99
- SkTime::DateTime fCreation = {0, 0, 0, 0, 0, 0, 0, 0};
113
+ DateTime fCreation = {0, 0, 0, 0, 0, 0, 0, 0};
100
114
 
101
115
  /** The date and time the document was most recently modified.
102
116
  The zero default value represents an unknown/unset time.
103
117
  */
104
- SkTime::DateTime fModified = {0, 0, 0, 0, 0, 0, 0, 0};
118
+ DateTime fModified = {0, 0, 0, 0, 0, 0, 0, 0};
105
119
 
106
120
  /** The DPI (pixels-per-inch) at which features without native PDF support
107
121
  will be rasterized (e.g. draw image with perspective, draw text with
@@ -8,52 +8,69 @@
8
8
  #ifndef SkImageFilters_DEFINED
9
9
  #define SkImageFilters_DEFINED
10
10
 
11
- #include "include/core/SkBlendMode.h"
12
11
  #include "include/core/SkColor.h"
13
12
  #include "include/core/SkImage.h"
14
13
  #include "include/core/SkImageFilter.h"
15
14
  #include "include/core/SkPicture.h"
16
15
  #include "include/core/SkRect.h"
16
+ #include "include/core/SkRefCnt.h"
17
+ #include "include/core/SkScalar.h"
18
+ #include "include/core/SkShader.h"
17
19
  #include "include/core/SkTileMode.h"
18
20
  #include "include/core/SkTypes.h"
19
- #include "include/effects/SkRuntimeEffect.h"
20
21
 
21
22
  #include <cstddef>
23
+ #include <optional>
24
+ #include <string_view>
25
+ #include <utility>
22
26
 
23
27
  class SkBlender;
24
28
  class SkColorFilter;
25
- class SkPaint;
26
- class SkRegion;
27
-
28
- namespace skif {
29
- static constexpr SkRect kNoCropRect = {SK_ScalarNegativeInfinity, SK_ScalarNegativeInfinity,
30
- SK_ScalarInfinity, SK_ScalarInfinity};
31
- }
29
+ class SkMatrix;
30
+ class SkRuntimeShaderBuilder;
31
+ enum class SkBlendMode;
32
+ struct SkIPoint;
33
+ struct SkISize;
34
+ struct SkPoint3;
35
+ struct SkSamplingOptions;
32
36
 
33
37
  // A set of factory functions providing useful SkImageFilter effects. For image filters that take an
34
38
  // input filter, providing nullptr means it will automatically use the dynamic source image. This
35
39
  // source depends on how the filter is applied, but is either the contents of a saved layer when
36
- // drawing with SkCanvas, or an explicit SkImage if using SkImage::makeWithFilter.
40
+ // drawing with SkCanvas, or an explicit SkImage if using one of the SkImages::MakeWithFilter
41
+ // factories.
37
42
  class SK_API SkImageFilters {
38
43
  public:
39
44
  // This is just a convenience type to allow passing SkIRects, SkRects, and optional pointers
40
45
  // to those types as a crop rect for the image filter factories. It's not intended to be used
41
46
  // directly.
42
- struct CropRect {
43
- CropRect() : fCropRect(skif::kNoCropRect) {}
47
+ struct CropRect : public std::optional<SkRect> {
48
+ CropRect() {}
44
49
  // Intentionally not explicit so callers don't have to use this type but can use SkIRect or
45
50
  // SkRect as desired.
46
- CropRect(std::nullptr_t) : fCropRect(skif::kNoCropRect) {}
47
- CropRect(const SkIRect& crop) : fCropRect(SkRect::Make(crop)) {}
48
- CropRect(const SkRect& crop) : fCropRect(crop) {}
49
- CropRect(const SkIRect* optionalCrop) : fCropRect(optionalCrop ? SkRect::Make(*optionalCrop)
50
- : skif::kNoCropRect) {}
51
- CropRect(const SkRect* optionalCrop) : fCropRect(optionalCrop ? *optionalCrop
52
- : skif::kNoCropRect) {}
53
-
54
- operator const SkRect*() const { return fCropRect == skif::kNoCropRect ? nullptr : &fCropRect; }
51
+ CropRect(const SkIRect& crop) : std::optional<SkRect>(SkRect::Make(crop)) {}
52
+ CropRect(const SkRect& crop) : std::optional<SkRect>(crop) {}
53
+ CropRect(const std::optional<SkRect>& crop) : std::optional<SkRect>(crop) {}
54
+ CropRect(const std::nullopt_t&) : std::optional<SkRect>() {}
55
+
56
+ // Backwards compatibility for when the APIs used to explicitly accept "const SkRect*"
57
+ CropRect(std::nullptr_t) {}
58
+ CropRect(const SkIRect* optionalCrop) {
59
+ if (optionalCrop) {
60
+ *this = SkRect::Make(*optionalCrop);
61
+ }
62
+ }
63
+ CropRect(const SkRect* optionalCrop) {
64
+ if (optionalCrop) {
65
+ *this = *optionalCrop;
66
+ }
67
+ }
55
68
 
56
- SkRect fCropRect;
69
+ // std::optional doesn't define == when comparing to another optional...
70
+ bool operator==(const CropRect& o) const {
71
+ return this->has_value() == o.has_value() &&
72
+ (!this->has_value() || this->value() == *o);
73
+ }
57
74
  };
58
75
 
59
76
  /**
@@ -128,6 +145,27 @@ public:
128
145
  */
129
146
  static sk_sp<SkImageFilter> Compose(sk_sp<SkImageFilter> outer, sk_sp<SkImageFilter> inner);
130
147
 
148
+ /**
149
+ * Create a filter that applies a crop to the result of the 'input' filter. Pixels within the
150
+ * crop rectangle are unmodified from what 'input' produced. Pixels outside of crop match the
151
+ * provided SkTileMode (defaulting to kDecal).
152
+ *
153
+ * NOTE: The optional CropRect argument for many of the factories is equivalent to creating the
154
+ * filter without a CropRect and then wrapping it in ::Crop(rect, kDecal). Explicitly adding
155
+ * Crop filters lets you control their tiling and use different geometry for the input and the
156
+ * output of another filter.
157
+ *
158
+ * @param rect The cropping geometry
159
+ * @param tileMode The tilemode applied to pixels *outside* of 'crop'
160
+ * @param input The input filter that is cropped, uses source image if this is null
161
+ */
162
+ static sk_sp<SkImageFilter> Crop(const SkRect& rect,
163
+ SkTileMode tileMode,
164
+ sk_sp<SkImageFilter> input);
165
+ static sk_sp<SkImageFilter> Crop(const SkRect& rect, sk_sp<SkImageFilter> input) {
166
+ return Crop(rect, SkTileMode::kDecal, std::move(input));
167
+ }
168
+
131
169
  /**
132
170
  * Create a filter that moves each pixel in its color input based on an (x,y) vector encoded
133
171
  * in its displacement input filter. Two color components of the displacement image are
@@ -179,6 +217,11 @@ public:
179
217
  SkColor color, sk_sp<SkImageFilter> input,
180
218
  const CropRect& cropRect = {});
181
219
 
220
+ /**
221
+ * Create a filter that always produces transparent black.
222
+ */
223
+ static sk_sp<SkImageFilter> Empty();
224
+
182
225
  /**
183
226
  * Create a filter that draws the 'srcRect' portion of image into 'dstRect' using the given
184
227
  * filter quality. Similar to SkCanvas::drawImageRect. The returned image filter evaluates
@@ -311,7 +354,6 @@ public:
311
354
  return Picture(std::move(pic), target);
312
355
  }
313
356
 
314
- #ifdef SK_ENABLE_SKSL
315
357
  /**
316
358
  * Create a filter that fills the output with the per-pixel evaluation of the SkShader produced
317
359
  * by the SkRuntimeShaderBuilder. The shader is defined in the image filter's local coordinate
@@ -320,6 +362,8 @@ public:
320
362
  * This variant assumes that the runtime shader samples 'childShaderName' with the same input
321
363
  * coordinate passed to to shader.
322
364
  *
365
+ * This requires a GPU backend or SkSL to be compiled in.
366
+ *
323
367
  * @param builder The builder used to produce the runtime shader, that will in turn
324
368
  * fill the result image
325
369
  * @param childShaderName The name of the child shader defined in the builder that will be
@@ -343,6 +387,8 @@ public:
343
387
  *
344
388
  * This allows Skia to provide sampleable values for the image filter without worrying about
345
389
  * boundary conditions.
390
+ *
391
+ * This requires a GPU backend or SkSL to be compiled in.
346
392
  */
347
393
  static sk_sp<SkImageFilter> RuntimeShader(const SkRuntimeShaderBuilder& builder,
348
394
  SkScalar sampleRadius,
@@ -354,6 +400,8 @@ public:
354
400
  * by the SkRuntimeShaderBuilder. The shader is defined in the image filter's local coordinate
355
401
  * system, so it will automatically be affected by SkCanvas' transform.
356
402
  *
403
+ * This requires a GPU backend or SkSL to be compiled in.
404
+ *
357
405
  * @param builder The builder used to produce the runtime shader, that will in turn
358
406
  * fill the result image
359
407
  * @param childShaderNames The names of the child shaders defined in the builder that will be
@@ -378,13 +426,14 @@ public:
378
426
  * inform Skia that the runtime shader guarantees that all dynamic children (defined in
379
427
  * childShaderNames) will be evaluated with coordinates at most 'maxSampleRadius' away from the
380
428
  * coordinate provided to the runtime shader itself.
429
+ *
430
+ * This requires a GPU backend or SkSL to be compiled in.
381
431
  */
382
432
  static sk_sp<SkImageFilter> RuntimeShader(const SkRuntimeShaderBuilder& builder,
383
433
  SkScalar maxSampleRadius,
384
434
  std::string_view childShaderNames[],
385
435
  const sk_sp<SkImageFilter> inputs[],
386
436
  int inputCount);
387
- #endif // SK_ENABLE_SKSL
388
437
 
389
438
  enum class Dither : bool {
390
439
  kNo = false,