@shopify/react-native-skia 2.0.0-next.3 → 2.0.0-next.5

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 (148) hide show
  1. package/apple/RNSkApplePlatformContext.h +2 -1
  2. package/apple/RNSkApplePlatformContext.mm +6 -4
  3. package/apple/RNSkAppleView.h +1 -1
  4. package/apple/RNSkAppleView.mm +1 -1
  5. package/apple/SkiaManager.mm +2 -1
  6. package/apple/SkiaUIView.h +1 -1
  7. package/cpp/api/JsiSkCanvas.h +29 -25
  8. package/cpp/api/recorder/Drawings.h +13 -17
  9. package/cpp/api/recorder/Shaders.h +21 -32
  10. package/cpp/skia/include/codec/SkCodec.h +39 -1
  11. package/cpp/skia/include/config/SkUserConfig.h +1 -10
  12. package/cpp/skia/include/core/SkCanvas.h +8 -4
  13. package/cpp/skia/include/core/SkContourMeasure.h +2 -2
  14. package/cpp/skia/include/core/SkMilestone.h +1 -1
  15. package/cpp/skia/include/core/SkPaint.h +8 -5
  16. package/cpp/skia/include/core/SkStream.h +8 -3
  17. package/cpp/skia/include/core/SkTextBlob.h +9 -9
  18. package/cpp/skia/include/core/SkTypeface.h +4 -6
  19. package/cpp/skia/include/core/SkTypes.h +5 -0
  20. package/cpp/skia/include/docs/SkPDFDocument.h +47 -2
  21. package/cpp/skia/include/docs/SkPDFJpegHelpers.h +41 -0
  22. package/cpp/skia/include/effects/SkRuntimeEffect.h +5 -1
  23. package/cpp/skia/include/effects/SkTableMaskFilter.h +4 -0
  24. package/cpp/skia/include/gpu/graphite/BackendTexture.h +0 -2
  25. package/cpp/skia/include/gpu/graphite/ContextOptions.h +17 -0
  26. package/cpp/skia/include/gpu/graphite/GraphiteTypes.h +21 -18
  27. package/cpp/skia/include/gpu/graphite/PrecompileContext.h +24 -0
  28. package/cpp/skia/include/gpu/graphite/TextureInfo.h +87 -42
  29. package/cpp/skia/include/gpu/graphite/YUVABackendTextures.h +13 -4
  30. package/cpp/skia/include/gpu/graphite/dawn/DawnBackendContext.h +9 -0
  31. package/cpp/skia/include/gpu/graphite/dawn/DawnGraphiteTypes.h +166 -0
  32. package/cpp/skia/include/gpu/graphite/dawn/DawnTypes.h +3 -141
  33. package/cpp/skia/include/gpu/graphite/dawn/DawnUtils.h +2 -21
  34. package/cpp/skia/include/gpu/graphite/mtl/MtlBackendContext.h +4 -0
  35. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes.h +30 -6
  36. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypesUtils.h +4 -42
  37. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteTypes_cpp.h +50 -0
  38. package/cpp/skia/include/gpu/graphite/mtl/MtlGraphiteUtils.h +2 -20
  39. package/cpp/skia/include/gpu/graphite/precompile/Precompile.h +14 -4
  40. package/cpp/skia/include/gpu/graphite/precompile/PrecompileShader.h +14 -6
  41. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteContext.h +31 -0
  42. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteTypes.h +36 -14
  43. package/cpp/skia/include/gpu/graphite/vk/VulkanGraphiteUtils.h +3 -21
  44. package/cpp/skia/include/ports/SkTypeface_fontations.h +3 -0
  45. package/cpp/skia/include/private/SkJpegMetadataDecoder.h +7 -0
  46. package/cpp/skia/include/private/base/SkAnySubclass.h +6 -0
  47. package/cpp/skia/include/private/chromium/SkPMColor.h +38 -0
  48. package/cpp/skia/modules/skparagraph/include/Paragraph.h +2 -2
  49. package/cpp/skia/modules/skunicode/include/SkUnicode.h +10 -6
  50. package/cpp/skia/modules/svg/include/SkSVGDOM.h +1 -3
  51. package/cpp/skia/src/base/SkTInternalLList.h +1 -1
  52. package/cpp/skia/src/core/SkLRUCache.h +6 -3
  53. package/lib/commonjs/external/reanimated/textures.d.ts +2 -4
  54. package/lib/commonjs/external/reanimated/textures.js +8 -15
  55. package/lib/commonjs/external/reanimated/textures.js.map +1 -1
  56. package/lib/commonjs/sksg/HostConfig.js +2 -1
  57. package/lib/commonjs/sksg/HostConfig.js.map +1 -1
  58. package/lib/module/external/reanimated/textures.d.ts +2 -4
  59. package/lib/module/external/reanimated/textures.js +7 -12
  60. package/lib/module/external/reanimated/textures.js.map +1 -1
  61. package/lib/module/sksg/HostConfig.js +2 -1
  62. package/lib/module/sksg/HostConfig.js.map +1 -1
  63. package/lib/typescript/lib/commonjs/external/reanimated/textures.d.ts +1 -3
  64. package/lib/typescript/lib/commonjs/sksg/HostConfig.d.ts +1 -1
  65. package/lib/typescript/lib/module/external/reanimated/textures.d.ts +1 -3
  66. package/lib/typescript/lib/module/sksg/HostConfig.d.ts +1 -1
  67. package/lib/typescript/src/external/reanimated/textures.d.ts +2 -4
  68. package/libs/android/arm64-v8a/libskia.a +0 -0
  69. package/libs/android/arm64-v8a/libskottie.a +0 -0
  70. package/libs/android/arm64-v8a/libskparagraph.a +0 -0
  71. package/libs/android/arm64-v8a/libsksg.a +0 -0
  72. package/libs/android/arm64-v8a/libskshaper.a +0 -0
  73. package/libs/android/arm64-v8a/libskunicode_icu.a +0 -0
  74. package/libs/android/arm64-v8a/libsvg.a +0 -0
  75. package/libs/android/armeabi-v7a/libskia.a +0 -0
  76. package/libs/android/armeabi-v7a/libskottie.a +0 -0
  77. package/libs/android/armeabi-v7a/libskparagraph.a +0 -0
  78. package/libs/android/armeabi-v7a/libsksg.a +0 -0
  79. package/libs/android/armeabi-v7a/libskshaper.a +0 -0
  80. package/libs/android/armeabi-v7a/libskunicode_icu.a +0 -0
  81. package/libs/android/armeabi-v7a/libsvg.a +0 -0
  82. package/libs/android/x86/libskia.a +0 -0
  83. package/libs/android/x86/libskottie.a +0 -0
  84. package/libs/android/x86/libskparagraph.a +0 -0
  85. package/libs/android/x86/libsksg.a +0 -0
  86. package/libs/android/x86/libskshaper.a +0 -0
  87. package/libs/android/x86/libskunicode_icu.a +0 -0
  88. package/libs/android/x86/libsvg.a +0 -0
  89. package/libs/android/x86_64/libskia.a +0 -0
  90. package/libs/android/x86_64/libskottie.a +0 -0
  91. package/libs/android/x86_64/libskparagraph.a +0 -0
  92. package/libs/android/x86_64/libsksg.a +0 -0
  93. package/libs/android/x86_64/libskshaper.a +0 -0
  94. package/libs/android/x86_64/libskunicode_icu.a +0 -0
  95. package/libs/android/x86_64/libsvg.a +0 -0
  96. package/libs/apple/libskia.xcframework/Info.plist +15 -15
  97. package/libs/apple/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  98. package/libs/apple/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  99. package/libs/apple/libskia.xcframework/macos-arm64_x86_64/libskia.a +0 -0
  100. package/libs/apple/libskia.xcframework/tvos-arm64_arm64e/libskia.a +0 -0
  101. package/libs/apple/libskia.xcframework/tvos-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  102. package/libs/apple/libskottie.xcframework/Info.plist +7 -7
  103. package/libs/apple/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  104. package/libs/apple/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  105. package/libs/apple/libskottie.xcframework/macos-arm64_x86_64/libskottie.a +0 -0
  106. package/libs/apple/libskottie.xcframework/tvos-arm64_arm64e/libskottie.a +0 -0
  107. package/libs/apple/libskottie.xcframework/tvos-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  108. package/libs/apple/libskparagraph.xcframework/Info.plist +13 -13
  109. package/libs/apple/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  110. package/libs/apple/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  111. package/libs/apple/libskparagraph.xcframework/macos-arm64_x86_64/libskparagraph.a +0 -0
  112. package/libs/apple/libskparagraph.xcframework/tvos-arm64_arm64e/libskparagraph.a +0 -0
  113. package/libs/apple/libskparagraph.xcframework/tvos-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  114. package/libs/apple/libsksg.xcframework/Info.plist +13 -13
  115. package/libs/apple/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  116. package/libs/apple/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  117. package/libs/apple/libsksg.xcframework/macos-arm64_x86_64/libsksg.a +0 -0
  118. package/libs/apple/libsksg.xcframework/tvos-arm64_arm64e/libsksg.a +0 -0
  119. package/libs/apple/libsksg.xcframework/tvos-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  120. package/libs/apple/libskshaper.xcframework/Info.plist +14 -14
  121. package/libs/apple/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  122. package/libs/apple/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  123. package/libs/apple/libskshaper.xcframework/macos-arm64_x86_64/libskshaper.a +0 -0
  124. package/libs/apple/libskshaper.xcframework/tvos-arm64_arm64e/libskshaper.a +0 -0
  125. package/libs/apple/libskshaper.xcframework/tvos-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  126. package/libs/apple/libskunicode_core.xcframework/Info.plist +12 -12
  127. package/libs/apple/libskunicode_core.xcframework/ios-arm64_arm64e/libskunicode_core.a +0 -0
  128. package/libs/apple/libskunicode_core.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_core.a +0 -0
  129. package/libs/apple/libskunicode_core.xcframework/macos-arm64_x86_64/libskunicode_core.a +0 -0
  130. package/libs/apple/libskunicode_core.xcframework/tvos-arm64_arm64e/libskunicode_core.a +0 -0
  131. package/libs/apple/libskunicode_core.xcframework/tvos-arm64_arm64e_x86_64-simulator/libskunicode_core.a +0 -0
  132. package/libs/apple/libskunicode_libgrapheme.xcframework/Info.plist +15 -15
  133. package/libs/apple/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e/libskunicode_libgrapheme.a +0 -0
  134. package/libs/apple/libskunicode_libgrapheme.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode_libgrapheme.a +0 -0
  135. package/libs/apple/libskunicode_libgrapheme.xcframework/macos-arm64_x86_64/libskunicode_libgrapheme.a +0 -0
  136. package/libs/apple/libskunicode_libgrapheme.xcframework/tvos-arm64_arm64e/libskunicode_libgrapheme.a +0 -0
  137. package/libs/apple/libskunicode_libgrapheme.xcframework/tvos-arm64_arm64e_x86_64-simulator/libskunicode_libgrapheme.a +0 -0
  138. package/libs/apple/libsvg.xcframework/Info.plist +8 -8
  139. package/libs/apple/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  140. package/libs/apple/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  141. package/libs/apple/libsvg.xcframework/macos-arm64_x86_64/libsvg.a +0 -0
  142. package/libs/apple/libsvg.xcframework/tvos-arm64_arm64e/libsvg.a +0 -0
  143. package/libs/apple/libsvg.xcframework/tvos-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  144. package/package.json +1 -1
  145. package/src/external/reanimated/textures.tsx +12 -20
  146. package/src/sksg/HostConfig.ts +2 -1
  147. package/cpp/skia/include/core/SkColorPriv.h +0 -165
  148. package/cpp/skia/include/private/SkColorData.h +0 -385
@@ -13,20 +13,21 @@
13
13
  #include "include/gpu/graphite/TextureInfo.h"
14
14
  #include "include/gpu/vk/VulkanTypes.h"
15
15
 
16
- namespace skgpu::graphite {
16
+ class SkStream;
17
+ class SkWStream;
17
18
 
18
- struct VulkanTextureInfo {
19
- uint32_t fSampleCount = 1;
20
- Mipmapped fMipmapped = Mipmapped::kNo;
19
+ namespace skgpu::graphite {
21
20
 
21
+ class SK_API VulkanTextureInfo final : public TextureInfo::Data {
22
+ public:
22
23
  // VkImageCreateInfo properties
23
24
  // Currently the only supported flag is VK_IMAGE_CREATE_PROTECTED_BIT. Any other flag will not
24
25
  // be accepted
25
- VkImageCreateFlags fFlags = 0;
26
- VkFormat fFormat = VK_FORMAT_UNDEFINED;
27
- VkImageTiling fImageTiling = VK_IMAGE_TILING_OPTIMAL;
28
- VkImageUsageFlags fImageUsageFlags = 0;
29
- VkSharingMode fSharingMode = VK_SHARING_MODE_EXCLUSIVE;
26
+ VkImageCreateFlags fFlags = 0;
27
+ VkFormat fFormat = VK_FORMAT_UNDEFINED;
28
+ VkImageTiling fImageTiling = VK_IMAGE_TILING_OPTIMAL;
29
+ VkImageUsageFlags fImageUsageFlags = 0;
30
+ VkSharingMode fSharingMode = VK_SHARING_MODE_EXCLUSIVE;
30
31
 
31
32
  // Properties related to the image view and sampling. These are less inherent properties of the
32
33
  // VkImage but describe how the VkImage should be used within Skia.
@@ -35,8 +36,8 @@ struct VulkanTextureInfo {
35
36
  // However, if the VkImage is a Ycbcr format, the client can pass a specific plan here to have
36
37
  // Skia directly sample a plane. In that case the client should also pass in a VkFormat that is
37
38
  // compatible with the plane as described by the Vulkan spec.
38
- VkImageAspectFlags fAspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
39
- VulkanYcbcrConversionInfo fYcbcrConversionInfo;
39
+ VkImageAspectFlags fAspectMask = VK_IMAGE_ASPECT_COLOR_BIT;
40
+ VulkanYcbcrConversionInfo fYcbcrConversionInfo;
40
41
 
41
42
  VulkanTextureInfo() = default;
42
43
  VulkanTextureInfo(uint32_t sampleCount,
@@ -48,8 +49,7 @@ struct VulkanTextureInfo {
48
49
  VkSharingMode sharingMode,
49
50
  VkImageAspectFlags aspectMask,
50
51
  VulkanYcbcrConversionInfo ycbcrConversionInfo)
51
- : fSampleCount(sampleCount)
52
- , fMipmapped(mipmapped)
52
+ : Data(sampleCount, mipmapped)
53
53
  , fFlags(flags)
54
54
  , fFormat(format)
55
55
  , fImageTiling(imageTiling)
@@ -57,6 +57,29 @@ struct VulkanTextureInfo {
57
57
  , fSharingMode(sharingMode)
58
58
  , fAspectMask(aspectMask)
59
59
  , fYcbcrConversionInfo(ycbcrConversionInfo) {}
60
+
61
+ private:
62
+ friend class TextureInfo;
63
+ friend class TextureInfoPriv;
64
+
65
+ // Non-virtual template API for TextureInfo::Data accessed directly when backend type is known.
66
+ static constexpr skgpu::BackendApi kBackend = skgpu::BackendApi::kVulkan;
67
+
68
+ Protected isProtected() const {
69
+ return fFlags & VK_IMAGE_CREATE_PROTECTED_BIT ? Protected::kYes : Protected::kNo;
70
+ }
71
+ TextureFormat viewFormat() const;
72
+
73
+ bool serialize(SkWStream*) const;
74
+ bool deserialize(SkStream*);
75
+
76
+ // Virtual API when the specific backend type is not available.
77
+ SkString toBackendString() const override;
78
+
79
+ void copyTo(TextureInfo::AnyTextureInfoData& dstData) const override {
80
+ dstData.emplace<VulkanTextureInfo>(*this);
81
+ }
82
+ bool isCompatible(const TextureInfo& that, bool requireExact) const override;
60
83
  };
61
84
 
62
85
  namespace TextureInfos {
@@ -78,7 +101,6 @@ namespace BackendSemaphores {
78
101
  SK_API BackendSemaphore MakeVulkan(VkSemaphore);
79
102
 
80
103
  SK_API VkSemaphore GetVkSemaphore(const BackendSemaphore&);
81
-
82
104
  } // namespace BackendSemaphores
83
105
 
84
106
  } // namespace skgpu::graphite
@@ -5,24 +5,6 @@
5
5
  * found in the LICENSE file.
6
6
  */
7
7
 
8
- #ifndef skgpu_graphite_VulkanGraphiteUtils_DEFINED
9
- #define skgpu_graphite_VulkanGraphiteUtils_DEFINED
10
-
11
- #include <memory>
12
-
13
- #include "include/private/base/SkAPI.h"
14
-
15
- namespace skgpu { struct VulkanBackendContext; }
16
-
17
- namespace skgpu::graphite {
18
-
19
- class Context;
20
- struct ContextOptions;
21
-
22
- namespace ContextFactory {
23
- SK_API std::unique_ptr<Context> MakeVulkan(const VulkanBackendContext&, const ContextOptions&);
24
- } // namespace ContextFactory
25
-
26
- } // namespace skgpu::graphite
27
-
28
- #endif // skgpu_graphite_VulkanGraphiteUtils_DEFINED
8
+ // DEPRECRATED: VulkanGraphiteUtils.h will be removed in the future, please include
9
+ // VulkanGraphiteContext.h
10
+ #include "include/gpu/graphite/vk/VulkanGraphiteContext.h"
@@ -18,4 +18,7 @@
18
18
  SK_API sk_sp<SkTypeface> SkTypeface_Make_Fontations(std::unique_ptr<SkStreamAsset> fontData,
19
19
  const SkFontArguments& args);
20
20
 
21
+ SK_API sk_sp<SkTypeface> SkTypeface_Make_Fontations(sk_sp<SkData> fontData,
22
+ const SkFontArguments& args);
23
+
21
24
  #endif
@@ -86,6 +86,13 @@ public:
86
86
  virtual bool findGainmapImage(sk_sp<SkData> baseImageData,
87
87
  sk_sp<SkData>& outGainmapImagedata,
88
88
  SkGainmapInfo& outGainmapInfo) = 0;
89
+
90
+ /**
91
+ * Return the first JUMBF superbox, if any, and nullptr otherwise. If |copyData| is false,
92
+ * then the returned SkData may directly reference the data provided when this object was
93
+ * created.
94
+ */
95
+ virtual sk_sp<SkData> getJUMBFMetadata(bool copyData) const = 0;
89
96
  };
90
97
 
91
98
  #endif
@@ -52,6 +52,9 @@ public:
52
52
  fValid = false;
53
53
  }
54
54
 
55
+ bool has_value() const { return fValid; }
56
+ explicit operator bool() const { return this->has_value(); }
57
+
55
58
  const Base* get() const {
56
59
  SkASSERT(fValid);
57
60
  return std::launder(reinterpret_cast<const Base*>(fData));
@@ -65,6 +68,9 @@ public:
65
68
  Base* operator->() { return this->get(); }
66
69
  const Base* operator->() const { return this->get(); }
67
70
 
71
+ Base& operator*() { return *this->get(); }
72
+ const Base& operator*() const { return *this->get(); }
73
+
68
74
  private:
69
75
  alignas(8) std::byte fData[Size];
70
76
  bool fValid = false;
@@ -0,0 +1,38 @@
1
+ /*
2
+ * Copyright 2025 Google LLC
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 SkPMColor_DEFINED
9
+ #define SkPMColor_DEFINED
10
+
11
+ #include "include/core/SkColor.h"
12
+ #include "include/private/base/SkAPI.h"
13
+
14
+ #include <cstdint>
15
+
16
+ /** Returns a SkPMColor value from already premultiplied 8-bit component values.
17
+
18
+ @param a amount of alpha, from fully transparent (0) to fully opaque (255)
19
+ @param r amount of red, from no red (0) to full red (255)
20
+ @param g amount of green, from no green (0) to full green (255)
21
+ @param b amount of blue, from no blue (0) to full blue (255)
22
+ @return premultiplied color
23
+ */
24
+ SK_API SkPMColor SkPMColorSetARGB(SkAlpha a, uint8_t r, uint8_t g, uint8_t b);
25
+
26
+ /** Returns alpha component of premultiplied color. */
27
+ SK_API SkAlpha SkPMColorGetA(SkPMColor);
28
+
29
+ /** Returns red component of premultiplied color. */
30
+ SK_API uint8_t SkPMColorGetR(SkPMColor);
31
+
32
+ /** Returns green component of premultiplied color. */
33
+ SK_API uint8_t SkPMColorGetG(SkPMColor);
34
+
35
+ /** Returns blue component of premultiplied color. */
36
+ SK_API uint8_t SkPMColorGetB(SkPMColor);
37
+
38
+ #endif
@@ -88,7 +88,7 @@ public:
88
88
  SkPoint origin;
89
89
  SkScalar advanceX;
90
90
  int count;
91
- const uint16_t* glyphs; // count values
91
+ const SkGlyphID* glyphs; // count values
92
92
  const SkPoint* positions; // count values
93
93
  const uint32_t* utf8Starts; // count+1 values
94
94
  unsigned flags;
@@ -103,7 +103,7 @@ public:
103
103
  SkPoint origin;
104
104
  SkSize advance;
105
105
  int count;
106
- const uint16_t* glyphs; // count values
106
+ const SkGlyphID* glyphs; // count values
107
107
  SkPoint* positions; // count values
108
108
  const SkRect* bounds; // count values
109
109
  const uint32_t* utf8Starts; // count+1 values
@@ -271,18 +271,22 @@ class SKUNICODE_API SkUnicode : public SkRefCnt {
271
271
 
272
272
  SkBidiIterator::Position pos16 = 0;
273
273
  while (pos16 <= iter->getLength()) {
274
- auto level = iter->getLevelAt(pos16);
275
- if (pos16 == 0) {
274
+ uint16_t nextPos16 = start16 - utf16;
275
+ auto level = iter->getLevelAt(nextPos16);
276
+ if (nextPos16 == 0) {
276
277
  currentLevel = level;
277
278
  } else if (level != currentLevel) {
278
- callback(pos16, start16 - utf16, currentLevel);
279
+ callback(pos16, nextPos16, currentLevel);
279
280
  currentLevel = level;
281
+ pos16 = nextPos16;
280
282
  }
281
283
  if (start16 == end16) {
282
- break;
284
+ if (pos16 != nextPos16) {
285
+ callback(pos16, nextPos16, currentLevel);
286
+ }
287
+ return;
283
288
  }
284
- SkUnichar u = SkUTF::NextUTF16(&start16, end16);
285
- pos16 += SkUTF::ToUTF16(u);
289
+ SkUTF::NextUTF16(&start16, end16);
286
290
  }
287
291
  }
288
292
 
@@ -53,9 +53,7 @@ public:
53
53
  sk_sp<SkShapers::Factory> fTextShapingFactory;
54
54
  };
55
55
 
56
- static sk_sp<SkSVGDOM> MakeFromStream(SkStream& str) {
57
- return Builder().make(str);
58
- }
56
+ static sk_sp<SkSVGDOM> MakeFromStream(SkStream& str);
59
57
 
60
58
  /**
61
59
  * Returns the root (outermost) SVG element.
@@ -238,7 +238,7 @@ public:
238
238
  /**
239
239
  * C++11 range-for interface.
240
240
  */
241
- bool operator!=(const Iter& that) { return fCurr != that.fCurr; }
241
+ bool operator!=(const Iter& that) const { return fCurr != that.fCurr; }
242
242
  T* operator*() { return this->get(); }
243
243
  void operator++() { this->next(); }
244
244
 
@@ -14,7 +14,7 @@
14
14
 
15
15
  struct SkNoOpPurge {
16
16
  template <typename K, typename V>
17
- void operator()(const K& /* k */, const V* /* v */) const {}
17
+ void operator()(void* /* context */, const K& /* k */, const V* /* v */) const {}
18
18
  };
19
19
 
20
20
  /**
@@ -35,7 +35,9 @@ private:
35
35
  };
36
36
 
37
37
  public:
38
- explicit SkLRUCache(int maxCount) : fMaxCount(maxCount) {}
38
+ explicit SkLRUCache(int maxCount, void* context = nullptr)
39
+ : fMaxCount(maxCount)
40
+ , fContext(context) {}
39
41
  SkLRUCache() = delete;
40
42
 
41
43
  ~SkLRUCache() {
@@ -111,7 +113,7 @@ public:
111
113
  SkASSERT(value);
112
114
  Entry* entry = *value;
113
115
  SkASSERT(key == entry->fKey);
114
- PurgeCB()(key, &entry->fValue);
116
+ PurgeCB()(fContext, key, &entry->fValue);
115
117
  fMap.remove(key);
116
118
  fLRU.remove(entry);
117
119
  delete entry;
@@ -131,6 +133,7 @@ private:
131
133
  int fMaxCount;
132
134
  skia_private::THashTable<Entry*, K, Traits> fMap;
133
135
  SkTInternalLList<Entry> fLRU;
136
+ void* fContext;
134
137
  };
135
138
 
136
139
  #endif
@@ -1,8 +1,6 @@
1
- import type { ReactElement } from "react";
1
+ import type { DependencyList, ReactElement } from "react";
2
2
  import type { SharedValue } from "react-native-reanimated";
3
3
  import type { DataSourceParam, SkImage, SkPicture, SkSize } from "../../skia/types";
4
- export declare const useTexture: (element: ReactElement, size: SkSize) => SharedValue<SkImage | null>;
5
- export declare const useTextureAsValue: (element: ReactElement, size: SkSize) => SharedValue<SkImage | null>;
6
- export declare const useTextureValueFromPicture: (picture: SkPicture | null, size: SkSize) => SharedValue<SkImage | null>;
4
+ export declare const useTexture: (element: ReactElement, size: SkSize, deps?: DependencyList) => SharedValue<SkImage | null>;
7
5
  export declare const usePictureAsTexture: (picture: SkPicture | null, size: SkSize) => SharedValue<SkImage | null>;
8
6
  export declare const useImageAsTexture: (source: DataSourceParam) => SharedValue<SkImage | null>;
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useTextureValueFromPicture = exports.useTextureAsValue = exports.useTexture = exports.usePictureAsTexture = exports.useImageAsTexture = void 0;
6
+ exports.useTexture = exports.usePictureAsTexture = exports.useImageAsTexture = void 0;
7
7
  var _react = require("react");
8
8
  var _Offscreen = require("../../renderer/Offscreen");
9
9
  var _skia = require("../../skia");
@@ -14,7 +14,7 @@ const createTexture = (texture, picture, size) => {
14
14
 
15
15
  texture.value = (0, _Offscreen.drawAsImageFromPicture)(picture, size);
16
16
  };
17
- const useTexture = (element, size) => {
17
+ const useTexture = (element, size, deps) => {
18
18
  const {
19
19
  width,
20
20
  height
@@ -26,28 +26,21 @@ const useTexture = (element, size) => {
26
26
  y: 0,
27
27
  width,
28
28
  height
29
- }).then(pic => setPicture(pic));
30
- }, [element, width, height]);
29
+ }).then(pic => {
30
+ setPicture(pic);
31
+ });
32
+ // eslint-disable-next-line react-hooks/exhaustive-deps
33
+ }, deps !== null && deps !== void 0 ? deps : []);
31
34
  return usePictureAsTexture(picture, size);
32
35
  };
33
36
  exports.useTexture = useTexture;
34
- const useTextureAsValue = (element, size) => {
35
- console.warn("useTextureAsValue has been renamed to use useTexture");
36
- return useTexture(element, size);
37
- };
38
- exports.useTextureAsValue = useTextureAsValue;
39
- const useTextureValueFromPicture = (picture, size) => {
40
- console.warn("useTextureValueFromPicture has been renamed to use usePictureAsTexture");
41
- return usePictureAsTexture(picture, size);
42
- };
43
- exports.useTextureValueFromPicture = useTextureValueFromPicture;
44
37
  const usePictureAsTexture = (picture, size) => {
45
38
  const texture = _ReanimatedProxy.default.useSharedValue(null);
46
39
  (0, _react.useEffect)(() => {
47
40
  if (picture !== null) {
48
41
  _ReanimatedProxy.default.runOnUI(createTexture)(texture, picture, size);
49
42
  }
50
- }, [texture, picture, size]);
43
+ }, [picture, size, texture]);
51
44
  return texture;
52
45
  };
53
46
  exports.usePictureAsTexture = usePictureAsTexture;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_Offscreen","_skia","_ReanimatedProxy","_interopRequireDefault","e","__esModule","default","createTexture","texture","picture","size","value","drawAsImageFromPicture","useTexture","element","width","height","setPicture","useState","useEffect","drawAsPicture","x","y","then","pic","usePictureAsTexture","exports","useTextureAsValue","console","warn","useTextureValueFromPicture","Rea","useSharedValue","runOnUI","useImageAsTexture","source","image","useImage","useMemo","recorder","Skia","PictureRecorder","canvas","beginRecording","drawImage","finishRecordingAsPicture"],"sources":["textures.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport type { ReactElement } from \"react\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n DataSourceParam,\n SkImage,\n SkPicture,\n SkSize,\n} from \"../../skia/types\";\nimport {\n drawAsImageFromPicture,\n drawAsPicture,\n} from \"../../renderer/Offscreen\";\nimport { Skia, useImage } from \"../../skia\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst createTexture = (\n texture: SharedValue<SkImage | null>,\n picture: SkPicture,\n size: SkSize\n) => {\n \"worklet\";\n texture.value = drawAsImageFromPicture(picture, size);\n};\n\nexport const useTexture = (element: ReactElement, size: SkSize) => {\n const { width, height } = size;\n const [picture, setPicture] = useState<SkPicture | null>(null);\n useEffect(() => {\n drawAsPicture(element, {\n x: 0,\n y: 0,\n width,\n height,\n }).then((pic) => setPicture(pic));\n }, [element, width, height]);\n return usePictureAsTexture(picture, size);\n};\n\nexport const useTextureAsValue = (element: ReactElement, size: SkSize) => {\n console.warn(\"useTextureAsValue has been renamed to use useTexture\");\n return useTexture(element, size);\n};\n\nexport const useTextureValueFromPicture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n console.warn(\n \"useTextureValueFromPicture has been renamed to use usePictureAsTexture\"\n );\n return usePictureAsTexture(picture, size);\n};\n\nexport const usePictureAsTexture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (picture !== null) {\n Rea.runOnUI(createTexture)(texture, picture, size);\n }\n }, [texture, picture, size]);\n return texture;\n};\n\nexport const useImageAsTexture = (source: DataSourceParam) => {\n const image = useImage(source);\n const size = useMemo(() => {\n if (image) {\n return { width: image.width(), height: image.height() };\n }\n return { width: 0, height: 0 };\n }, [image]);\n const picture = useMemo(() => {\n if (image) {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording({\n x: 0,\n y: 0,\n width: size.width,\n height: size.height,\n });\n canvas.drawImage(image, 0, 0);\n return recorder.finishRecordingAsPicture();\n } else {\n return null;\n }\n }, [size, image]);\n return usePictureAsTexture(picture, size);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_Offscreen","_skia","_ReanimatedProxy","_interopRequireDefault","e","__esModule","default","createTexture","texture","picture","size","value","drawAsImageFromPicture","useTexture","element","deps","width","height","setPicture","useState","useEffect","drawAsPicture","x","y","then","pic","usePictureAsTexture","exports","Rea","useSharedValue","runOnUI","useImageAsTexture","source","image","useImage","useMemo","recorder","Skia","PictureRecorder","canvas","beginRecording","drawImage","finishRecordingAsPicture"],"sources":["textures.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport type { DependencyList, ReactElement } from \"react\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n DataSourceParam,\n SkImage,\n SkPicture,\n SkSize,\n} from \"../../skia/types\";\nimport {\n drawAsImageFromPicture,\n drawAsPicture,\n} from \"../../renderer/Offscreen\";\nimport { Skia, useImage } from \"../../skia\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst createTexture = (\n texture: SharedValue<SkImage | null>,\n picture: SkPicture,\n size: SkSize\n) => {\n \"worklet\";\n texture.value = drawAsImageFromPicture(picture, size);\n};\n\nexport const useTexture = (\n element: ReactElement,\n size: SkSize,\n deps?: DependencyList\n) => {\n const { width, height } = size;\n const [picture, setPicture] = useState<SkPicture | null>(null);\n useEffect(() => {\n drawAsPicture(element, {\n x: 0,\n y: 0,\n width,\n height,\n }).then((pic) => {\n setPicture(pic);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps ?? []);\n return usePictureAsTexture(picture, size);\n};\n\nexport const usePictureAsTexture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (picture !== null) {\n Rea.runOnUI(createTexture)(texture, picture, size);\n }\n }, [picture, size, texture]);\n return texture;\n};\n\nexport const useImageAsTexture = (source: DataSourceParam) => {\n const image = useImage(source);\n const size = useMemo(() => {\n if (image) {\n return { width: image.width(), height: image.height() };\n }\n return { width: 0, height: 0 };\n }, [image]);\n const picture = useMemo(() => {\n if (image) {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording({\n x: 0,\n y: 0,\n width: size.width,\n height: size.height,\n });\n canvas.drawImage(image, 0, 0);\n return recorder.finishRecordingAsPicture();\n } else {\n return null;\n }\n }, [size, image]);\n return usePictureAsTexture(picture, size);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -75,8 +75,9 @@ const sksgHostConfig = exports.sksgHostConfig = {
75
75
  debug("prepareForCommit");
76
76
  return null;
77
77
  },
78
- resetAfterCommit(_container) {
78
+ resetAfterCommit(container) {
79
79
  debug("resetAfterCommit");
80
+ container.redraw();
80
81
  },
81
82
  getPublicInstance(node) {
82
83
  debug("getPublicInstance");
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_constants","_typeddash","NoEventPriority","DEBUG","debug","args","console","log","exports","currentUpdatePriority","sksgHostConfig","supportsMutation","isPrimaryRenderer","supportsPersistence","supportsHydration","scheduleTimeout","setTimeout","cancelTimeout","clearTimeout","noTimeout","getRootHostContext","_rootContainerInstance","getChildHostContext","_parentHostContext","_type","shouldSetTextContent","_props","createTextInstance","_text","_hostContext","_internalInstanceHandle","Error","createInstance","type","propsWithChildren","_container","children","props","instance","appendInitialChild","parentInstance","child","push","finalizeInitialChildren","commitMount","prepareForCommit","resetAfterCommit","getPublicInstance","node","commitTextUpdate","_textInstance","_oldText","_newText","clearContainer","prepareUpdate","_instance","oldProps","newProps","container","propsAreEqual","shallowEq","preparePortalMount","cloneInstance","_oldProps","_updatePayload","keepChildren","_recyclableInstance","createContainerChildSet","appendChildToContainerChildSet","childSet","finalizeContainerChildren","newChildren","root","replaceContainerChildren","cloneHiddenInstance","cloneHiddenTextInstance","getCurrentEventPriority","DefaultEventPriority","beforeActiveInstanceBlur","afterActiveInstanceBlur","detachDeletedInstance","_node","getInstanceFromNode","prepareScopeUpdate","_scopeInstance","getInstanceFromScope","shouldAttemptEagerTransition","trackSchedulerEvent","resolveEventType","resolveEventTimeStamp","requestPostPaintCallback","maySuspendCommit","preloadInstance","startSuspendingCommit","suspendInstance","waitForCommitToBeReady","NotPendingTransition","HostTransitionContext","createContext","setCurrentUpdatePriority","newPriority","getCurrentUpdatePriority","resolveUpdatePriority","resetFormInstance"],"sources":["HostConfig.ts"],"sourcesContent":["/*global NodeJS*/\nimport { createContext } from \"react\";\nimport type { Fiber, HostConfig } from \"react-reconciler\";\nimport { DefaultEventPriority } from \"react-reconciler/constants\";\n\nimport type { NodeType } from \"../dom/types\";\nimport { shallowEq } from \"../renderer/typeddash\";\n\nimport type { Node } from \"./Node\";\nimport type { Container } from \"./Container\";\n\ntype EventPriority = number;\nconst NoEventPriority = 0;\n\nconst DEBUG = false;\nexport const debug = (...args: Parameters<typeof console.log>) => {\n if (DEBUG) {\n console.log(...args);\n }\n};\n\ntype Instance = Node;\n\ntype Props = object;\ntype TextInstance = Node;\ntype SuspenseInstance = Instance;\ntype HydratableInstance = Instance;\ntype PublicInstance = Instance;\ntype HostContext = object;\ntype UpdatePayload = Container;\ntype ChildSet = Node[];\ntype TimeoutHandle = NodeJS.Timeout;\ntype NoTimeout = -1;\n\ntype SkiaHostConfig = HostConfig<\n NodeType,\n Props,\n Container,\n Instance,\n TextInstance,\n SuspenseInstance,\n HydratableInstance,\n PublicInstance,\n HostContext,\n UpdatePayload,\n ChildSet,\n TimeoutHandle,\n NoTimeout\n>;\nlet currentUpdatePriority: EventPriority = NoEventPriority;\n\nexport const sksgHostConfig: SkiaHostConfig = {\n /**\n * This function is used by the reconciler in order to calculate current time for prioritising work.\n */\n supportsMutation: false,\n isPrimaryRenderer: false,\n supportsPersistence: true,\n supportsHydration: false,\n //supportsMicrotask: true,\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n\n getRootHostContext: (_rootContainerInstance: Container) => {\n debug(\"getRootHostContext\");\n return {};\n },\n\n getChildHostContext(_parentHostContext, _type, _rootContainerInstance) {\n debug(\"getChildHostContext\");\n return {};\n },\n\n shouldSetTextContent(_type, _props) {\n return false;\n },\n\n createTextInstance(\n _text,\n _rootContainerInstance,\n _hostContext,\n _internalInstanceHandle\n ) {\n debug(\"createTextInstance\");\n // return SpanNode({}, text) as SkNode;\n throw new Error(\"Text nodes are not supported yet\");\n },\n\n createInstance(\n type,\n propsWithChildren,\n _container,\n _hostContext,\n _internalInstanceHandle\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { children, ...props } = propsWithChildren as any;\n debug(\"createInstance\", type);\n const instance = {\n type,\n props,\n children: [],\n };\n return instance;\n },\n\n appendInitialChild(parentInstance: Instance, child: Instance | TextInstance) {\n parentInstance.children.push(child);\n },\n\n finalizeInitialChildren(\n parentInstance,\n _type,\n _props,\n _rootContainerInstance,\n _hostContext\n ) {\n debug(\"finalizeInitialChildren\", parentInstance);\n return false;\n },\n\n commitMount() {\n // if finalizeInitialChildren = true\n debug(\"commitMount\");\n },\n\n prepareForCommit(_container: Container) {\n debug(\"prepareForCommit\");\n return null;\n },\n\n resetAfterCommit(_container) {\n debug(\"resetAfterCommit\");\n },\n\n getPublicInstance(node: Instance) {\n debug(\"getPublicInstance\");\n return node;\n },\n\n commitTextUpdate: (\n _textInstance: TextInstance,\n _oldText: string,\n _newText: string\n ) => {\n // textInstance.instance = newText;\n },\n\n clearContainer: (_container) => {\n debug(\"clearContainer\");\n },\n\n prepareUpdate(\n _instance: Instance,\n _type: string,\n oldProps: Props,\n newProps: Props,\n container: Container,\n _hostContext: HostContext\n ) {\n debug(\"prepareUpdate\");\n const propsAreEqual = shallowEq(oldProps, newProps);\n if (propsAreEqual) {\n return null;\n }\n return container;\n },\n\n preparePortalMount: () => {\n debug(\"preparePortalMount\");\n },\n\n cloneInstance(\n instance,\n _type,\n _oldProps,\n newProps,\n _updatePayload,\n _internalInstanceHandle,\n keepChildren: boolean,\n _recyclableInstance: null | Instance\n ) {\n debug(\"cloneInstance\");\n return {\n type: instance.type,\n props: { ...newProps },\n children: keepChildren ? [...instance.children] : [],\n };\n },\n\n createContainerChildSet(): ChildSet {\n debug(\"createContainerChildSet\");\n return [];\n },\n\n appendChildToContainerChildSet(\n childSet: ChildSet,\n child: Instance | TextInstance\n ): void {\n childSet.push(child);\n },\n\n finalizeContainerChildren(container: Container, newChildren: ChildSet) {\n debug(\"finalizeContainerChildren\");\n container.root = newChildren;\n },\n\n replaceContainerChildren(container: Container, newChildren: ChildSet) {\n container.root = newChildren;\n },\n\n cloneHiddenInstance(\n _instance: Instance,\n _type: string,\n _props: Props\n ): Instance {\n debug(\"cloneHiddenInstance\");\n throw new Error(\"Not yet implemented.\");\n },\n\n cloneHiddenTextInstance(_instance: Instance, _text: string): TextInstance {\n debug(\"cloneHiddenTextInstance\");\n throw new Error(\"Not yet implemented.\");\n },\n // see https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874\n getCurrentEventPriority: () => DefaultEventPriority,\n beforeActiveInstanceBlur: () => {},\n afterActiveInstanceBlur: () => {},\n detachDeletedInstance: (_node: Instance) => {},\n getInstanceFromNode: function (_node): Fiber | null | undefined {\n throw new Error(\"Function not implemented.\");\n },\n prepareScopeUpdate: function (_scopeInstance, _instance): void {\n throw new Error(\"Function not implemented.\");\n },\n getInstanceFromScope: function (_scopeInstance): Instance | null {\n throw new Error(\"Function not implemented.\");\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shouldAttemptEagerTransition: () => false,\n trackSchedulerEvent: () => {},\n resolveEventType: () => null,\n resolveEventTimeStamp: () => -1.1,\n requestPostPaintCallback() {},\n maySuspendCommit: () => false,\n preloadInstance: () => true, // true indicates already loaded\n startSuspendingCommit() {},\n suspendInstance() {},\n waitForCommitToBeReady: () => null,\n NotPendingTransition: null,\n HostTransitionContext: createContext(null),\n setCurrentUpdatePriority(newPriority: number) {\n currentUpdatePriority = newPriority;\n },\n getCurrentUpdatePriority() {\n return currentUpdatePriority;\n },\n resolveUpdatePriority() {\n if (currentUpdatePriority !== NoEventPriority) {\n return currentUpdatePriority;\n }\n return DefaultEventPriority;\n },\n resetFormInstance() {},\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_constants","_typeddash","NoEventPriority","DEBUG","debug","args","console","log","exports","currentUpdatePriority","sksgHostConfig","supportsMutation","isPrimaryRenderer","supportsPersistence","supportsHydration","scheduleTimeout","setTimeout","cancelTimeout","clearTimeout","noTimeout","getRootHostContext","_rootContainerInstance","getChildHostContext","_parentHostContext","_type","shouldSetTextContent","_props","createTextInstance","_text","_hostContext","_internalInstanceHandle","Error","createInstance","type","propsWithChildren","_container","children","props","instance","appendInitialChild","parentInstance","child","push","finalizeInitialChildren","commitMount","prepareForCommit","resetAfterCommit","container","redraw","getPublicInstance","node","commitTextUpdate","_textInstance","_oldText","_newText","clearContainer","prepareUpdate","_instance","oldProps","newProps","propsAreEqual","shallowEq","preparePortalMount","cloneInstance","_oldProps","_updatePayload","keepChildren","_recyclableInstance","createContainerChildSet","appendChildToContainerChildSet","childSet","finalizeContainerChildren","newChildren","root","replaceContainerChildren","cloneHiddenInstance","cloneHiddenTextInstance","getCurrentEventPriority","DefaultEventPriority","beforeActiveInstanceBlur","afterActiveInstanceBlur","detachDeletedInstance","_node","getInstanceFromNode","prepareScopeUpdate","_scopeInstance","getInstanceFromScope","shouldAttemptEagerTransition","trackSchedulerEvent","resolveEventType","resolveEventTimeStamp","requestPostPaintCallback","maySuspendCommit","preloadInstance","startSuspendingCommit","suspendInstance","waitForCommitToBeReady","NotPendingTransition","HostTransitionContext","createContext","setCurrentUpdatePriority","newPriority","getCurrentUpdatePriority","resolveUpdatePriority","resetFormInstance"],"sources":["HostConfig.ts"],"sourcesContent":["/*global NodeJS*/\nimport { createContext } from \"react\";\nimport type { Fiber, HostConfig } from \"react-reconciler\";\nimport { DefaultEventPriority } from \"react-reconciler/constants\";\n\nimport type { NodeType } from \"../dom/types\";\nimport { shallowEq } from \"../renderer/typeddash\";\n\nimport type { Node } from \"./Node\";\nimport type { Container } from \"./Container\";\n\ntype EventPriority = number;\nconst NoEventPriority = 0;\n\nconst DEBUG = false;\nexport const debug = (...args: Parameters<typeof console.log>) => {\n if (DEBUG) {\n console.log(...args);\n }\n};\n\ntype Instance = Node;\n\ntype Props = object;\ntype TextInstance = Node;\ntype SuspenseInstance = Instance;\ntype HydratableInstance = Instance;\ntype PublicInstance = Instance;\ntype HostContext = object;\ntype UpdatePayload = Container;\ntype ChildSet = Node[];\ntype TimeoutHandle = NodeJS.Timeout;\ntype NoTimeout = -1;\n\ntype SkiaHostConfig = HostConfig<\n NodeType,\n Props,\n Container,\n Instance,\n TextInstance,\n SuspenseInstance,\n HydratableInstance,\n PublicInstance,\n HostContext,\n UpdatePayload,\n ChildSet,\n TimeoutHandle,\n NoTimeout\n>;\nlet currentUpdatePriority: EventPriority = NoEventPriority;\n\nexport const sksgHostConfig: SkiaHostConfig = {\n /**\n * This function is used by the reconciler in order to calculate current time for prioritising work.\n */\n supportsMutation: false,\n isPrimaryRenderer: false,\n supportsPersistence: true,\n supportsHydration: false,\n //supportsMicrotask: true,\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n\n getRootHostContext: (_rootContainerInstance: Container) => {\n debug(\"getRootHostContext\");\n return {};\n },\n\n getChildHostContext(_parentHostContext, _type, _rootContainerInstance) {\n debug(\"getChildHostContext\");\n return {};\n },\n\n shouldSetTextContent(_type, _props) {\n return false;\n },\n\n createTextInstance(\n _text,\n _rootContainerInstance,\n _hostContext,\n _internalInstanceHandle\n ) {\n debug(\"createTextInstance\");\n // return SpanNode({}, text) as SkNode;\n throw new Error(\"Text nodes are not supported yet\");\n },\n\n createInstance(\n type,\n propsWithChildren,\n _container,\n _hostContext,\n _internalInstanceHandle\n ) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const { children, ...props } = propsWithChildren as any;\n debug(\"createInstance\", type);\n const instance = {\n type,\n props,\n children: [],\n };\n return instance;\n },\n\n appendInitialChild(parentInstance: Instance, child: Instance | TextInstance) {\n parentInstance.children.push(child);\n },\n\n finalizeInitialChildren(\n parentInstance,\n _type,\n _props,\n _rootContainerInstance,\n _hostContext\n ) {\n debug(\"finalizeInitialChildren\", parentInstance);\n return false;\n },\n\n commitMount() {\n // if finalizeInitialChildren = true\n debug(\"commitMount\");\n },\n\n prepareForCommit(_container: Container) {\n debug(\"prepareForCommit\");\n return null;\n },\n\n resetAfterCommit(container: Container) {\n debug(\"resetAfterCommit\");\n container.redraw();\n },\n\n getPublicInstance(node: Instance) {\n debug(\"getPublicInstance\");\n return node;\n },\n\n commitTextUpdate: (\n _textInstance: TextInstance,\n _oldText: string,\n _newText: string\n ) => {\n // textInstance.instance = newText;\n },\n\n clearContainer: (_container) => {\n debug(\"clearContainer\");\n },\n\n prepareUpdate(\n _instance: Instance,\n _type: string,\n oldProps: Props,\n newProps: Props,\n container: Container,\n _hostContext: HostContext\n ) {\n debug(\"prepareUpdate\");\n const propsAreEqual = shallowEq(oldProps, newProps);\n if (propsAreEqual) {\n return null;\n }\n return container;\n },\n\n preparePortalMount: () => {\n debug(\"preparePortalMount\");\n },\n\n cloneInstance(\n instance,\n _type,\n _oldProps,\n newProps,\n _updatePayload,\n _internalInstanceHandle,\n keepChildren: boolean,\n _recyclableInstance: null | Instance\n ) {\n debug(\"cloneInstance\");\n return {\n type: instance.type,\n props: { ...newProps },\n children: keepChildren ? [...instance.children] : [],\n };\n },\n\n createContainerChildSet(): ChildSet {\n debug(\"createContainerChildSet\");\n return [];\n },\n\n appendChildToContainerChildSet(\n childSet: ChildSet,\n child: Instance | TextInstance\n ): void {\n childSet.push(child);\n },\n\n finalizeContainerChildren(container: Container, newChildren: ChildSet) {\n debug(\"finalizeContainerChildren\");\n container.root = newChildren;\n },\n\n replaceContainerChildren(container: Container, newChildren: ChildSet) {\n container.root = newChildren;\n },\n\n cloneHiddenInstance(\n _instance: Instance,\n _type: string,\n _props: Props\n ): Instance {\n debug(\"cloneHiddenInstance\");\n throw new Error(\"Not yet implemented.\");\n },\n\n cloneHiddenTextInstance(_instance: Instance, _text: string): TextInstance {\n debug(\"cloneHiddenTextInstance\");\n throw new Error(\"Not yet implemented.\");\n },\n // see https://github.com/pmndrs/react-three-fiber/pull/2360#discussion_r916356874\n getCurrentEventPriority: () => DefaultEventPriority,\n beforeActiveInstanceBlur: () => {},\n afterActiveInstanceBlur: () => {},\n detachDeletedInstance: (_node: Instance) => {},\n getInstanceFromNode: function (_node): Fiber | null | undefined {\n throw new Error(\"Function not implemented.\");\n },\n prepareScopeUpdate: function (_scopeInstance, _instance): void {\n throw new Error(\"Function not implemented.\");\n },\n getInstanceFromScope: function (_scopeInstance): Instance | null {\n throw new Error(\"Function not implemented.\");\n },\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-expect-error\n shouldAttemptEagerTransition: () => false,\n trackSchedulerEvent: () => {},\n resolveEventType: () => null,\n resolveEventTimeStamp: () => -1.1,\n requestPostPaintCallback() {},\n maySuspendCommit: () => false,\n preloadInstance: () => true, // true indicates already loaded\n startSuspendingCommit() {},\n suspendInstance() {},\n waitForCommitToBeReady: () => null,\n NotPendingTransition: null,\n HostTransitionContext: createContext(null),\n setCurrentUpdatePriority(newPriority: number) {\n currentUpdatePriority = newPriority;\n },\n getCurrentUpdatePriority() {\n return currentUpdatePriority;\n },\n resolveUpdatePriority() {\n if (currentUpdatePriority !== NoEventPriority) {\n return currentUpdatePriority;\n }\n return DefaultEventPriority;\n },\n resetFormInstance() {},\n};\n"],"mappings":"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","ignoreList":[]}
@@ -1,8 +1,6 @@
1
- import type { ReactElement } from "react";
1
+ import type { DependencyList, ReactElement } from "react";
2
2
  import type { SharedValue } from "react-native-reanimated";
3
3
  import type { DataSourceParam, SkImage, SkPicture, SkSize } from "../../skia/types";
4
- export declare const useTexture: (element: ReactElement, size: SkSize) => SharedValue<SkImage | null>;
5
- export declare const useTextureAsValue: (element: ReactElement, size: SkSize) => SharedValue<SkImage | null>;
6
- export declare const useTextureValueFromPicture: (picture: SkPicture | null, size: SkSize) => SharedValue<SkImage | null>;
4
+ export declare const useTexture: (element: ReactElement, size: SkSize, deps?: DependencyList) => SharedValue<SkImage | null>;
7
5
  export declare const usePictureAsTexture: (picture: SkPicture | null, size: SkSize) => SharedValue<SkImage | null>;
8
6
  export declare const useImageAsTexture: (source: DataSourceParam) => SharedValue<SkImage | null>;
@@ -7,7 +7,7 @@ const createTexture = (texture, picture, size) => {
7
7
 
8
8
  texture.value = drawAsImageFromPicture(picture, size);
9
9
  };
10
- export const useTexture = (element, size) => {
10
+ export const useTexture = (element, size, deps) => {
11
11
  const {
12
12
  width,
13
13
  height
@@ -19,16 +19,11 @@ export const useTexture = (element, size) => {
19
19
  y: 0,
20
20
  width,
21
21
  height
22
- }).then(pic => setPicture(pic));
23
- }, [element, width, height]);
24
- return usePictureAsTexture(picture, size);
25
- };
26
- export const useTextureAsValue = (element, size) => {
27
- console.warn("useTextureAsValue has been renamed to use useTexture");
28
- return useTexture(element, size);
29
- };
30
- export const useTextureValueFromPicture = (picture, size) => {
31
- console.warn("useTextureValueFromPicture has been renamed to use usePictureAsTexture");
22
+ }).then(pic => {
23
+ setPicture(pic);
24
+ });
25
+ // eslint-disable-next-line react-hooks/exhaustive-deps
26
+ }, deps !== null && deps !== void 0 ? deps : []);
32
27
  return usePictureAsTexture(picture, size);
33
28
  };
34
29
  export const usePictureAsTexture = (picture, size) => {
@@ -37,7 +32,7 @@ export const usePictureAsTexture = (picture, size) => {
37
32
  if (picture !== null) {
38
33
  Rea.runOnUI(createTexture)(texture, picture, size);
39
34
  }
40
- }, [texture, picture, size]);
35
+ }, [picture, size, texture]);
41
36
  return texture;
42
37
  };
43
38
  export const useImageAsTexture = source => {
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useMemo","useState","drawAsImageFromPicture","drawAsPicture","Skia","useImage","Rea","createTexture","texture","picture","size","value","useTexture","element","width","height","setPicture","x","y","then","pic","usePictureAsTexture","useTextureAsValue","console","warn","useTextureValueFromPicture","useSharedValue","runOnUI","useImageAsTexture","source","image","recorder","PictureRecorder","canvas","beginRecording","drawImage","finishRecordingAsPicture"],"sources":["textures.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport type { ReactElement } from \"react\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n DataSourceParam,\n SkImage,\n SkPicture,\n SkSize,\n} from \"../../skia/types\";\nimport {\n drawAsImageFromPicture,\n drawAsPicture,\n} from \"../../renderer/Offscreen\";\nimport { Skia, useImage } from \"../../skia\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst createTexture = (\n texture: SharedValue<SkImage | null>,\n picture: SkPicture,\n size: SkSize\n) => {\n \"worklet\";\n texture.value = drawAsImageFromPicture(picture, size);\n};\n\nexport const useTexture = (element: ReactElement, size: SkSize) => {\n const { width, height } = size;\n const [picture, setPicture] = useState<SkPicture | null>(null);\n useEffect(() => {\n drawAsPicture(element, {\n x: 0,\n y: 0,\n width,\n height,\n }).then((pic) => setPicture(pic));\n }, [element, width, height]);\n return usePictureAsTexture(picture, size);\n};\n\nexport const useTextureAsValue = (element: ReactElement, size: SkSize) => {\n console.warn(\"useTextureAsValue has been renamed to use useTexture\");\n return useTexture(element, size);\n};\n\nexport const useTextureValueFromPicture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n console.warn(\n \"useTextureValueFromPicture has been renamed to use usePictureAsTexture\"\n );\n return usePictureAsTexture(picture, size);\n};\n\nexport const usePictureAsTexture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (picture !== null) {\n Rea.runOnUI(createTexture)(texture, picture, size);\n }\n }, [texture, picture, size]);\n return texture;\n};\n\nexport const useImageAsTexture = (source: DataSourceParam) => {\n const image = useImage(source);\n const size = useMemo(() => {\n if (image) {\n return { width: image.width(), height: image.height() };\n }\n return { width: 0, height: 0 };\n }, [image]);\n const picture = useMemo(() => {\n if (image) {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording({\n x: 0,\n y: 0,\n width: size.width,\n height: size.height,\n });\n canvas.drawImage(image, 0, 0);\n return recorder.finishRecordingAsPicture();\n } else {\n return null;\n }\n }, [size, image]);\n return usePictureAsTexture(picture, size);\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useMemo","useState","drawAsImageFromPicture","drawAsPicture","Skia","useImage","Rea","createTexture","texture","picture","size","value","useTexture","element","deps","width","height","setPicture","x","y","then","pic","usePictureAsTexture","useSharedValue","runOnUI","useImageAsTexture","source","image","recorder","PictureRecorder","canvas","beginRecording","drawImage","finishRecordingAsPicture"],"sources":["textures.tsx"],"sourcesContent":["import { useEffect, useMemo, useState } from \"react\";\nimport type { DependencyList, ReactElement } from \"react\";\nimport type { SharedValue } from \"react-native-reanimated\";\n\nimport type {\n DataSourceParam,\n SkImage,\n SkPicture,\n SkSize,\n} from \"../../skia/types\";\nimport {\n drawAsImageFromPicture,\n drawAsPicture,\n} from \"../../renderer/Offscreen\";\nimport { Skia, useImage } from \"../../skia\";\n\nimport Rea from \"./ReanimatedProxy\";\n\nconst createTexture = (\n texture: SharedValue<SkImage | null>,\n picture: SkPicture,\n size: SkSize\n) => {\n \"worklet\";\n texture.value = drawAsImageFromPicture(picture, size);\n};\n\nexport const useTexture = (\n element: ReactElement,\n size: SkSize,\n deps?: DependencyList\n) => {\n const { width, height } = size;\n const [picture, setPicture] = useState<SkPicture | null>(null);\n useEffect(() => {\n drawAsPicture(element, {\n x: 0,\n y: 0,\n width,\n height,\n }).then((pic) => {\n setPicture(pic);\n });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps ?? []);\n return usePictureAsTexture(picture, size);\n};\n\nexport const usePictureAsTexture = (\n picture: SkPicture | null,\n size: SkSize\n) => {\n const texture = Rea.useSharedValue<SkImage | null>(null);\n useEffect(() => {\n if (picture !== null) {\n Rea.runOnUI(createTexture)(texture, picture, size);\n }\n }, [picture, size, texture]);\n return texture;\n};\n\nexport const useImageAsTexture = (source: DataSourceParam) => {\n const image = useImage(source);\n const size = useMemo(() => {\n if (image) {\n return { width: image.width(), height: image.height() };\n }\n return { width: 0, height: 0 };\n }, [image]);\n const picture = useMemo(() => {\n if (image) {\n const recorder = Skia.PictureRecorder();\n const canvas = recorder.beginRecording({\n x: 0,\n y: 0,\n width: size.width,\n height: size.height,\n });\n canvas.drawImage(image, 0, 0);\n return recorder.finishRecordingAsPicture();\n } else {\n return null;\n }\n }, [size, image]);\n return usePictureAsTexture(picture, size);\n};\n"],"mappings":"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","ignoreList":[]}
@@ -67,8 +67,9 @@ export const sksgHostConfig = {
67
67
  debug("prepareForCommit");
68
68
  return null;
69
69
  },
70
- resetAfterCommit(_container) {
70
+ resetAfterCommit(container) {
71
71
  debug("resetAfterCommit");
72
+ container.redraw();
72
73
  },
73
74
  getPublicInstance(node) {
74
75
  debug("getPublicInstance");