@shopify/react-native-skia 0.1.162 → 0.1.163

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 (86) hide show
  1. package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +2 -0
  2. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +2 -2
  3. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.h +2 -2
  4. package/android/cpp/rnskia-android/SkiaOpenGLRenderer.h +5 -5
  5. package/cpp/api/JsiSkCanvas.h +8 -8
  6. package/cpp/api/JsiSkColor.h +1 -1
  7. package/cpp/api/JsiSkColorFilter.h +1 -1
  8. package/cpp/api/JsiSkColorFilterFactory.h +2 -2
  9. package/cpp/api/JsiSkContourMeasure.h +1 -1
  10. package/cpp/api/JsiSkContourMeasureIter.h +2 -2
  11. package/cpp/api/JsiSkData.h +2 -2
  12. package/cpp/api/JsiSkDataFactory.h +1 -1
  13. package/cpp/api/JsiSkFont.h +2 -2
  14. package/cpp/api/JsiSkImage.h +3 -3
  15. package/cpp/api/JsiSkImageFilter.h +1 -1
  16. package/cpp/api/JsiSkImageFilterFactory.h +1 -1
  17. package/cpp/api/JsiSkImageInfo.h +1 -1
  18. package/cpp/api/JsiSkMaskFilter.h +1 -1
  19. package/cpp/api/JsiSkMaskFilterFactory.h +1 -1
  20. package/cpp/api/JsiSkMatrix.h +1 -1
  21. package/cpp/api/JsiSkPaint.h +1 -1
  22. package/cpp/api/JsiSkPath.h +15 -15
  23. package/cpp/api/JsiSkPathEffect.h +1 -1
  24. package/cpp/api/JsiSkPathEffectFactory.h +4 -4
  25. package/cpp/api/JsiSkPathFactory.h +2 -2
  26. package/cpp/api/JsiSkPicture.h +1 -1
  27. package/cpp/api/JsiSkPictureFactory.h +2 -2
  28. package/cpp/api/JsiSkPictureRecorder.h +2 -2
  29. package/cpp/api/JsiSkPoint.h +1 -1
  30. package/cpp/api/JsiSkRRect.h +1 -1
  31. package/cpp/api/JsiSkRSXform.h +1 -1
  32. package/cpp/api/JsiSkRect.h +1 -1
  33. package/cpp/api/JsiSkRuntimeEffect.h +1 -1
  34. package/cpp/api/JsiSkRuntimeShaderBuilder.h +1 -1
  35. package/cpp/api/JsiSkSVGFactory.h +1 -1
  36. package/cpp/api/JsiSkShader.h +2 -2
  37. package/cpp/api/JsiSkShaderFactory.h +3 -3
  38. package/cpp/api/JsiSkSurface.h +1 -1
  39. package/cpp/api/JsiSkSurfaceFactory.h +2 -2
  40. package/cpp/api/JsiSkTextBlob.h +1 -1
  41. package/cpp/api/JsiSkTextBlobFactory.h +1 -1
  42. package/cpp/api/JsiSkTypeface.h +2 -2
  43. package/cpp/api/JsiSkVertices.h +1 -1
  44. package/cpp/rnskia/RNSkJsView.h +3 -3
  45. package/cpp/rnskia/RNSkPictureView.h +3 -3
  46. package/cpp/rnskia/RNSkPlatformContext.h +5 -3
  47. package/cpp/rnskia/RNSkView.h +2 -2
  48. package/cpp/rnskia/dom/nodes/JsiBlendNode.h +6 -7
  49. package/cpp/rnskia/dom/nodes/JsiPathNode.h +10 -8
  50. package/cpp/rnskia/dom/props/BlendModeProp.h +2 -2
  51. package/cpp/rnskia/dom/props/PaintProps.h +5 -1
  52. package/ios/RNSkia-iOS/RNSkMetalCanvasProvider.mm +8 -7
  53. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +2 -1
  54. package/ios/RNSkia-iOS/SkiaDrawViewManager.mm +4 -4
  55. package/ios/RNSkia-iOS/SkiaManager.mm +5 -5
  56. package/ios/RNSkia-iOS/SkiaPictureViewManager.mm +3 -3
  57. package/ios/RNSkia-iOS/SkiaUIView.mm +10 -10
  58. package/lib/commonjs/renderer/Canvas.js +2 -11
  59. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  60. package/lib/commonjs/renderer/Container.js +2 -1
  61. package/lib/commonjs/renderer/Container.js.map +1 -1
  62. package/lib/commonjs/renderer/components/Mask.js +11 -25
  63. package/lib/commonjs/renderer/components/Mask.js.map +1 -1
  64. package/lib/commonjs/renderer/index.js +0 -13
  65. package/lib/commonjs/renderer/index.js.map +1 -1
  66. package/lib/module/renderer/Canvas.js +3 -10
  67. package/lib/module/renderer/Canvas.js.map +1 -1
  68. package/lib/module/renderer/Container.js +2 -1
  69. package/lib/module/renderer/Container.js.map +1 -1
  70. package/lib/module/renderer/components/Mask.js +9 -21
  71. package/lib/module/renderer/components/Mask.js.map +1 -1
  72. package/lib/module/renderer/index.js +0 -1
  73. package/lib/module/renderer/index.js.map +1 -1
  74. package/lib/typescript/src/renderer/Container.d.ts +1 -1
  75. package/lib/typescript/src/renderer/index.d.ts +0 -1
  76. package/package.json +1 -1
  77. package/src/renderer/Canvas.tsx +2 -12
  78. package/src/renderer/Container.tsx +1 -1
  79. package/src/renderer/components/Mask.tsx +11 -20
  80. package/src/renderer/index.ts +0 -1
  81. package/lib/commonjs/renderer/useCanvas.js +0 -32
  82. package/lib/commonjs/renderer/useCanvas.js.map +0 -1
  83. package/lib/module/renderer/useCanvas.js +0 -15
  84. package/lib/module/renderer/useCanvas.js.map +0 -1
  85. package/lib/typescript/src/renderer/useCanvas.d.ts +0 -9
  86. package/src/renderer/useCanvas.ts +0 -21
@@ -41,19 +41,18 @@ protected:
41
41
  auto maybeImageFilter =
42
42
  std::dynamic_pointer_cast<JsiBaseImageFilterNode>(child);
43
43
 
44
- if (asShader) {
44
+ if (maybeShader) {
45
45
  sk_sp<SkShader> outer = maybeShader->getCurrent();
46
46
  if (innerShader != nullptr) {
47
- innerShader = SkShaders::Blend(blendMode, innerShader, outer);
47
+ innerShader = SkShaders::Blend(blendMode, outer, innerShader);
48
48
  } else {
49
49
  innerShader = outer;
50
50
  }
51
-
52
- } else {
51
+ } else if (maybeImageFilter) {
53
52
  sk_sp<SkImageFilter> outer = maybeImageFilter->getCurrent();
54
- if (innerImageFilter != nullptr) {
55
- innerImageFilter = SkImageFilters::Blend(
56
- blendMode, innerImageFilter, outer, nullptr);
53
+ if (outer != nullptr) {
54
+ innerImageFilter = SkImageFilters::Blend(blendMode, outer,
55
+ innerImageFilter, nullptr);
57
56
  } else {
58
57
  innerImageFilter = outer;
59
58
  }
@@ -43,25 +43,27 @@ protected:
43
43
  _strokeOptsProp->isSet() &&
44
44
  _strokeOptsProp->value().getType() == PropType::Object;
45
45
 
46
- auto willMutatePath =
47
- hasStartOffset || hasEndOffset || hasFillStyle || hasStrokeOptions;
46
+ auto willMutatePath = hasStartOffset == true || hasEndOffset == true ||
47
+ hasFillStyle == true || hasStrokeOptions == true;
48
48
 
49
49
  if (willMutatePath) {
50
50
  // We'll trim the path
51
51
  SkPath filteredPath(*_pathProp->getDerivedValue());
52
- auto pe = SkTrimPathEffect::Make(_startProp->value().getAsNumber(),
53
- _endProp->value().getAsNumber(),
54
- SkTrimPathEffect::Mode::kNormal);
52
+ auto start =
53
+ _startProp->isSet() ? _startProp->value().getAsNumber() : 0.0;
54
+ auto end = _endProp->isSet() ? _endProp->value().getAsNumber() : 1.0;
55
+ auto pe =
56
+ SkTrimPathEffect::Make(start, end, SkTrimPathEffect::Mode::kNormal);
55
57
 
56
58
  if (pe != nullptr) {
57
59
  SkStrokeRec rec(SkStrokeRec::InitStyle::kHairline_InitStyle);
58
- if (!pe->filterPath(_pathProp->getDerivedValue().get(), filteredPath,
59
- &rec, nullptr)) {
60
+ if (!pe->filterPath(&filteredPath, filteredPath, &rec, nullptr)) {
60
61
  throw std::runtime_error(
61
62
  "Failed trimming path with parameters start: " +
62
63
  std::to_string(_startProp->value().getAsNumber()) +
63
64
  ", end: " + std::to_string(_endProp->value().getAsNumber()));
64
65
  }
66
+ filteredPath.swap(filteredPath);
65
67
  _path = std::make_shared<SkPath>(filteredPath);
66
68
  } else if (hasStartOffset || hasEndOffset) {
67
69
  throw std::runtime_error(
@@ -69,7 +71,7 @@ protected:
69
71
  std::to_string(_startProp->value().getAsNumber()) +
70
72
  ", end: " + std::to_string(_endProp->value().getAsNumber()));
71
73
  } else {
72
- _path = std::make_shared<SkPath>(*_pathProp->getDerivedValue());
74
+ _path = std::make_shared<SkPath>(filteredPath);
73
75
  }
74
76
 
75
77
  // Set fill style
@@ -43,11 +43,11 @@ private:
43
43
  return SkBlendMode::kDstOver;
44
44
  } else if (value == "srcIn") {
45
45
  return SkBlendMode::kSrcIn;
46
- } else if (value == "kDstIn") {
46
+ } else if (value == "dstIn") {
47
47
  return SkBlendMode::kDstIn;
48
48
  } else if (value == "srcOut") {
49
49
  return SkBlendMode::kSrcOut;
50
- } else if (value == "dtsOut") {
50
+ } else if (value == "dstOut") {
51
51
  return SkBlendMode::kDstOut;
52
52
  } else if (value == "srcATop") {
53
53
  return SkBlendMode::kSrcATop;
@@ -93,7 +93,8 @@ public:
93
93
  // Opacity
94
94
  if (_opacity->isChanged() || context->isChanged()) {
95
95
  if (_opacity->isSet()) {
96
- context->setOpacity(_opacity->value().getAsNumber());
96
+ context->setOpacity(context->getOpacity() *
97
+ _opacity->value().getAsNumber());
97
98
  } else {
98
99
  context->clearOpacity();
99
100
  }
@@ -105,6 +106,9 @@ public:
105
106
  paint->setShader(nullptr);
106
107
  paint->setColor(*_color->getDerivedValue());
107
108
  paint->setAlphaf(context->getOpacity() * paint->getColor4f().fA);
109
+ } else if (context->isChanged()) {
110
+ auto paint = context->getMutablePaint();
111
+ paint->setAlphaf(context->getOpacity());
108
112
  }
109
113
 
110
114
  // Style
@@ -4,9 +4,9 @@
4
4
  #pragma clang diagnostic push
5
5
  #pragma clang diagnostic ignored "-Wdocumentation"
6
6
 
7
- #import <SkColorSpace.h>
8
- #import <SkSurface.h>
9
- #import <SkCanvas.h>
7
+ #import "SkColorSpace.h"
8
+ #import "SkSurface.h"
9
+ #import "SkCanvas.h"
10
10
 
11
11
  #import <include/gpu/GrDirectContext.h>
12
12
 
@@ -33,9 +33,9 @@ RNSkCanvasProvider(requestRedraw),
33
33
  #pragma clang diagnostic ignored "-Wunguarded-availability-new"
34
34
  _layer = [CAMetalLayer layer];
35
35
  #pragma clang diagnostic pop
36
-
36
+
37
37
  auto device = MTLCreateSystemDefaultDevice();
38
-
38
+
39
39
  _layer.framebufferOnly = NO;
40
40
  _layer.device = device;
41
41
  _layer.opaque = false;
@@ -74,12 +74,13 @@ void RNSkMetalCanvasProvider::renderToCanvas(const std::function<void(SkCanvas*)
74
74
  renderContext->commandQueue = id<MTLCommandQueue>(CFRetain((GrMTLHandle)[device newCommandQueue]));
75
75
  renderContext->skContext = GrDirectContext::MakeMetal((__bridge void*)device, (__bridge void*)renderContext->commandQueue);
76
76
  }
77
-
77
+
78
78
  // Wrap in auto release pool since we want the system to clean up after rendering
79
79
  // and not wait until later - we've seen some example of memory usage growing very
80
80
  // fast in the simulator without this.
81
81
  @autoreleasepool
82
82
  {
83
+
83
84
  GrMTLHandle drawableHandle;
84
85
  auto skSurface = SkSurface::MakeFromCAMetalLayer(renderContext->skContext.get(),
85
86
  (__bridge GrMTLHandle)_layer,
@@ -114,7 +115,7 @@ void RNSkMetalCanvasProvider::setSize(int width, int height) {
114
115
  _layer.frame = CGRectMake(0, 0, width, height);
115
116
  _layer.drawableSize = CGSizeMake(width * _context->getPixelDensity(),
116
117
  height* _context->getPixelDensity());
117
-
118
+
118
119
  _requestRedraw();
119
120
  }
120
121
 
@@ -12,7 +12,7 @@
12
12
  #pragma clang diagnostic push
13
13
  #pragma clang diagnostic ignored "-Wdocumentation"
14
14
 
15
- #include <SkStream.h>
15
+ #include "SkStream.h"
16
16
 
17
17
  #pragma clang diagnostic pop
18
18
 
@@ -48,6 +48,7 @@ public:
48
48
  ~RNSkiOSPlatformContext() {
49
49
  CFNotificationCenterRemoveEveryObserver(
50
50
  CFNotificationCenterGetLocalCenter(), this);
51
+ stopDrawLoop();
51
52
  }
52
53
 
53
54
  void startDrawLoop() override;
@@ -1,13 +1,13 @@
1
- #include <SkiaDrawViewManager.h>
1
+ #include "SkiaDrawViewManager.h"
2
2
  #include <React/RCTBridge+Private.h>
3
3
 
4
4
  #include <RNSkPlatformContext.h>
5
5
  #include <RNSkJsView.h>
6
6
  #include <RNSkIOSView.h>
7
7
 
8
- #include <SkiaManager.h>
8
+ #include "SkiaManager.h"
9
9
  #include <RNSkiaModule.h>
10
- #include <SkiaUIView.h>
10
+ #include "SkiaUIView.h"
11
11
 
12
12
 
13
13
 
@@ -24,7 +24,7 @@ RCT_EXPORT_MODULE(SkiaDrawView)
24
24
  RCT_CUSTOM_VIEW_PROPERTY(nativeID, NSNumber, SkiaUIView) {
25
25
  // Get parameter
26
26
  int nativeId = [[RCTConvert NSString:json] intValue];
27
- [(SkiaUIView*)view setNativeId:nativeId];
27
+ [(SkiaUIView*)view setNativeId:nativeId];
28
28
  }
29
29
 
30
30
  RCT_CUSTOM_VIEW_PROPERTY(mode, NSString, SkiaUIView) {
@@ -1,4 +1,4 @@
1
- #import <SkiaManager.h>
1
+ #import "SkiaManager.h"
2
2
 
3
3
  #import <Foundation/Foundation.h>
4
4
 
@@ -32,16 +32,16 @@
32
32
  if (self) {
33
33
  RCTCxxBridge *cxxBridge = (RCTCxxBridge *)bridge;
34
34
  if (cxxBridge.runtime) {
35
-
35
+
36
36
  auto callInvoker = bridge.jsCallInvoker;
37
37
  facebook::jsi::Runtime* jsRuntime = (facebook::jsi::Runtime*)cxxBridge.runtime;
38
-
38
+
39
39
  // Create platform context
40
40
  _platformContext = std::make_shared<RNSkia::RNSkiOSPlatformContext>(jsRuntime, callInvoker);
41
-
41
+
42
42
  // Create the RNSkiaManager (cross platform)
43
43
  _skManager = std::make_shared<RNSkia::RNSkManager>(jsRuntime, callInvoker, _platformContext);
44
-
44
+
45
45
  }
46
46
  }
47
47
  return self;
@@ -1,14 +1,14 @@
1
1
 
2
- #include <SkiaPictureViewManager.h>
2
+ #include "SkiaPictureViewManager.h"
3
3
  #include <React/RCTBridge+Private.h>
4
4
 
5
5
  #include <RNSkPlatformContext.h>
6
6
  #include <RNSkPictureView.h>
7
7
  #include <RNSkIOSView.h>
8
8
 
9
- #include <SkiaManager.h>
9
+ #include "SkiaManager.h"
10
10
  #include <RNSkiaModule.h>
11
- #include <SkiaUIView.h>
11
+ #include "SkiaUIView.h"
12
12
 
13
13
 
14
14
 
@@ -1,6 +1,6 @@
1
1
  #import <React/RCTBridge.h>
2
2
 
3
- #import <SkiaUIView.h>
3
+ #import "SkiaUIView.h"
4
4
 
5
5
  #include <utility>
6
6
  #include <vector>
@@ -29,7 +29,7 @@
29
29
  _debugMode = false;
30
30
  _drawingMode = RNSkia::RNSkDrawingMode::Default;
31
31
  _factory = factory;
32
-
32
+
33
33
  // Listen to notifications about module invalidation
34
34
  [[NSNotificationCenter defaultCenter] addObserver:self
35
35
  selector:@selector(willInvalidateModules)
@@ -51,11 +51,11 @@
51
51
  // Remove implementation view when the parent view is not set
52
52
  if(_impl != nullptr) {
53
53
  [_impl->getLayer() removeFromSuperlayer];
54
-
54
+
55
55
  if(_nativeId != 0 && _manager != nullptr) {
56
56
  _manager->setSkiaView(_nativeId, nullptr);
57
57
  }
58
-
58
+
59
59
  _impl = nullptr;
60
60
  }
61
61
  } else {
@@ -79,9 +79,9 @@
79
79
  if(_manager != nullptr && _nativeId != 0) {
80
80
  _manager->unregisterSkiaView(_nativeId);
81
81
  }
82
-
82
+
83
83
  [[NSNotificationCenter defaultCenter] removeObserver:self name:RCTBridgeWillInvalidateModulesNotification object:nil];
84
-
84
+
85
85
  assert(_impl == nullptr);
86
86
  }
87
87
 
@@ -98,7 +98,7 @@
98
98
 
99
99
  -(void) setDrawingMode:(std::string) mode {
100
100
  _drawingMode = mode.compare("continuous") == 0 ? RNSkia::RNSkDrawingMode::Continuous : RNSkia::RNSkDrawingMode::Default;
101
-
101
+
102
102
  if(_impl != nullptr) {
103
103
  _impl->getDrawView()->setDrawingMode(_drawingMode);
104
104
  }
@@ -113,7 +113,7 @@
113
113
 
114
114
  - (void) setNativeId:(size_t) nativeId {
115
115
  _nativeId = nativeId;
116
-
116
+
117
117
  if(_impl != nullptr) {
118
118
  _manager->registerSkiaView(nativeId, _impl->getDrawView());
119
119
  }
@@ -147,7 +147,7 @@
147
147
  RNSkia::RNSkTouchInfo nextTouch;
148
148
  nextTouch.x = position.x;
149
149
  nextTouch.y = position.y;
150
- nextTouch.force = [touch force];
150
+ nextTouch.force = [touch force];
151
151
  nextTouch.id = [touch hash];
152
152
  auto phase = [touch phase];
153
153
  switch(phase) {
@@ -167,7 +167,7 @@
167
167
  nextTouch.type = RNSkia::RNSkTouchInfo::TouchType::Active;
168
168
  break;
169
169
  }
170
-
170
+
171
171
  nextTouches.push_back(nextTouch);
172
172
  }
173
173
  if(_impl != nullptr) {
@@ -9,8 +9,6 @@ var _react = _interopRequireWildcard(require("react"));
9
9
 
10
10
  var _reactReconciler = _interopRequireDefault(require("react-reconciler"));
11
11
 
12
- var _reactNative = require("react-native");
13
-
14
12
  var _views = require("../views");
15
13
 
16
14
  var _Skia = require("../skia/Skia");
@@ -21,8 +19,6 @@ var _Container = require("./Container");
21
19
 
22
20
  var _DependencyManager = require("./DependencyManager");
23
21
 
24
- var _useCanvas = require("./useCanvas");
25
-
26
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
23
 
28
24
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
@@ -64,11 +60,10 @@ const Canvas = /*#__PURE__*/(0, _react.forwardRef)((_ref, forwardedRef) => {
64
60
  } = _ref;
65
61
  const innerRef = useCanvasRef();
66
62
  const ref = useCombinedRefs(forwardedRef, innerRef);
67
- const [, setTick] = (0, _react.useState)(0);
68
63
  const redraw = (0, _react.useCallback)(() => {
69
64
  var _innerRef$current;
70
65
 
71
- _reactNative.Platform.OS === "web" ? setTick(tick => tick + 1) : (_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 ? void 0 : _innerRef$current.redraw();
66
+ (_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 ? void 0 : _innerRef$current.redraw();
72
67
  }, [innerRef]);
73
68
  const registerValues = (0, _react.useCallback)(values => {
74
69
  if (ref.current === null) {
@@ -83,11 +78,7 @@ const Canvas = /*#__PURE__*/(0, _react.forwardRef)((_ref, forwardedRef) => {
83
78
  const root = (0, _react.useMemo)(() => skiaReconciler.createContainer(container, 0, null, true, null, "", console.error, null), [container]); // Render effect
84
79
 
85
80
  (0, _react.useEffect)(() => {
86
- render( /*#__PURE__*/_react.default.createElement(_useCanvas.CanvasProvider, {
87
- value: {
88
- Skia: _Skia.Skia
89
- }
90
- }, children), root, container);
81
+ render(children, root, container);
91
82
  }, [children, root, redraw, container]);
92
83
  (0, _react.useEffect)(() => {
93
84
  return () => {
@@ -1 +1 @@
1
- {"version":3,"names":["skiaReconciler","ReactReconciler","skHostConfig","injectIntoDevTools","bundleType","version","rendererPackageName","render","element","root","container","updateContainer","hostDebug","depMgr","update","useCanvasRef","useRef","createDependencyManager","registerValues","global","SkiaDomApi","DependencyManager","Canvas","forwardRef","forwardedRef","children","style","debug","mode","onTouch","onSize","props","innerRef","ref","useCombinedRefs","setTick","useState","redraw","useCallback","Platform","OS","tick","current","values","Error","useMemo","Container","Skia","createContainer","console","error","useEffect","remove","refs","targetRef","React","forEach"],"sources":["Canvas.tsx"],"sourcesContent":["import React, {\n useEffect,\n useCallback,\n useMemo,\n forwardRef,\n useRef,\n useState,\n} from \"react\";\nimport type {\n RefObject,\n ReactNode,\n ComponentProps,\n MutableRefObject,\n ForwardedRef,\n} from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\nimport { Platform } from \"react-native\";\n\nimport { SkiaDomView } from \"../views\";\nimport type { TouchHandler } from \"../views\";\nimport { Skia } from \"../skia/Skia\";\nimport type { SkiaValue } from \"../values\";\n\nimport { debug as hostDebug, skHostConfig } from \"./HostConfig\";\n// import { debugTree } from \"./nodes\";\nimport { Container } from \"./Container\";\nimport { DependencyManager } from \"./DependencyManager\";\nimport { CanvasProvider } from \"./useCanvas\";\n\nexport const skiaReconciler = ReactReconciler(skHostConfig);\n\nskiaReconciler.injectIntoDevTools({\n bundleType: 1,\n version: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n});\n\nconst render = (element: ReactNode, root: OpaqueRoot, container: Container) => {\n skiaReconciler.updateContainer(element, root, null, () => {\n hostDebug(\"updateContainer\");\n container.depMgr.update();\n });\n};\n\nexport const useCanvasRef = () => useRef<SkiaDomView>(null);\n\nconst createDependencyManager = (\n registerValues: (values: Array<SkiaValue<unknown>>) => () => void\n) =>\n global.SkiaDomApi && global.SkiaDomApi.DependencyManager\n ? global.SkiaDomApi.DependencyManager(registerValues)\n : new DependencyManager(registerValues);\n\nexport interface CanvasProps extends ComponentProps<typeof SkiaDomView> {\n ref?: RefObject<SkiaDomView>;\n children: ReactNode;\n onTouch?: TouchHandler;\n}\n\nexport const Canvas = forwardRef<SkiaDomView, CanvasProps>(\n (\n { children, style, debug, mode, onTouch, onSize, ...props },\n forwardedRef\n ) => {\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const [, setTick] = useState(0);\n const redraw = useCallback(() => {\n Platform.OS === \"web\"\n ? setTick((tick) => tick + 1)\n : innerRef.current?.redraw();\n }, [innerRef]);\n\n const registerValues = useCallback(\n (values: Array<SkiaValue<unknown>>) => {\n if (ref.current === null) {\n throw new Error(\"Canvas ref is not set\");\n }\n return ref.current.registerValues(values);\n },\n [ref]\n );\n\n const container = useMemo(() => {\n return new Container(\n Skia,\n createDependencyManager(registerValues),\n redraw\n );\n }, [redraw, registerValues]);\n\n const root = useMemo(\n () =>\n skiaReconciler.createContainer(\n container,\n 0,\n null,\n true,\n null,\n \"\",\n console.error,\n null\n ),\n [container]\n );\n\n // Render effect\n useEffect(() => {\n render(\n <CanvasProvider value={{ Skia }}>{children}</CanvasProvider>,\n root,\n container\n );\n }, [children, root, redraw, container]);\n\n useEffect(() => {\n return () => {\n skiaReconciler.updateContainer(null, root, null, () => {\n container.depMgr.remove();\n });\n };\n }, [container, root]);\n\n return (\n <SkiaDomView\n ref={ref}\n style={style}\n root={container.root}\n onTouch={onTouch}\n onSize={onSize}\n mode={mode}\n debug={debug}\n {...props}\n />\n );\n }\n);\n\n/**\n * Combines a list of refs into a single ref. This can be used to provide\n * both a forwarded ref and an internal ref keeping the same functionality\n * on both of the refs.\n * @param refs Array of refs to combine\n * @returns A single ref that can be used in a ref prop.\n */\nconst useCombinedRefs = <T,>(\n ...refs: Array<MutableRefObject<T> | ForwardedRef<T>>\n) => {\n const targetRef = React.useRef<T>(null);\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (ref) {\n if (typeof ref === \"function\") {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n }\n });\n }, [refs]);\n return targetRef;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["skiaReconciler","ReactReconciler","skHostConfig","injectIntoDevTools","bundleType","version","rendererPackageName","render","element","root","container","updateContainer","hostDebug","depMgr","update","useCanvasRef","useRef","createDependencyManager","registerValues","global","SkiaDomApi","DependencyManager","Canvas","forwardRef","forwardedRef","children","style","debug","mode","onTouch","onSize","props","innerRef","ref","useCombinedRefs","redraw","useCallback","current","values","Error","useMemo","Container","Skia","createContainer","console","error","useEffect","remove","refs","targetRef","React","forEach"],"sources":["Canvas.tsx"],"sourcesContent":["import React, {\n useEffect,\n useCallback,\n useMemo,\n forwardRef,\n useRef,\n} from \"react\";\nimport type {\n RefObject,\n ReactNode,\n ComponentProps,\n MutableRefObject,\n ForwardedRef,\n} from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\n\nimport { SkiaDomView } from \"../views\";\nimport type { TouchHandler } from \"../views\";\nimport { Skia } from \"../skia/Skia\";\nimport type { SkiaValue } from \"../values\";\n\nimport { debug as hostDebug, skHostConfig } from \"./HostConfig\";\n// import { debugTree } from \"./nodes\";\nimport { Container } from \"./Container\";\nimport { DependencyManager } from \"./DependencyManager\";\n\nexport const skiaReconciler = ReactReconciler(skHostConfig);\n\nskiaReconciler.injectIntoDevTools({\n bundleType: 1,\n version: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n});\n\nconst render = (element: ReactNode, root: OpaqueRoot, container: Container) => {\n skiaReconciler.updateContainer(element, root, null, () => {\n hostDebug(\"updateContainer\");\n container.depMgr.update();\n });\n};\n\nexport const useCanvasRef = () => useRef<SkiaDomView>(null);\n\nconst createDependencyManager = (\n registerValues: (values: Array<SkiaValue<unknown>>) => () => void\n) =>\n global.SkiaDomApi && global.SkiaDomApi.DependencyManager\n ? global.SkiaDomApi.DependencyManager(registerValues)\n : new DependencyManager(registerValues);\n\nexport interface CanvasProps extends ComponentProps<typeof SkiaDomView> {\n ref?: RefObject<SkiaDomView>;\n children: ReactNode;\n onTouch?: TouchHandler;\n}\n\nexport const Canvas = forwardRef<SkiaDomView, CanvasProps>(\n (\n { children, style, debug, mode, onTouch, onSize, ...props },\n forwardedRef\n ) => {\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const redraw = useCallback(() => {\n innerRef.current?.redraw();\n }, [innerRef]);\n\n const registerValues = useCallback(\n (values: Array<SkiaValue<unknown>>) => {\n if (ref.current === null) {\n throw new Error(\"Canvas ref is not set\");\n }\n return ref.current.registerValues(values);\n },\n [ref]\n );\n\n const container = useMemo(() => {\n return new Container(\n Skia,\n createDependencyManager(registerValues),\n redraw\n );\n }, [redraw, registerValues]);\n\n const root = useMemo(\n () =>\n skiaReconciler.createContainer(\n container,\n 0,\n null,\n true,\n null,\n \"\",\n console.error,\n null\n ),\n [container]\n );\n\n // Render effect\n useEffect(() => {\n render(children, root, container);\n }, [children, root, redraw, container]);\n\n useEffect(() => {\n return () => {\n skiaReconciler.updateContainer(null, root, null, () => {\n container.depMgr.remove();\n });\n };\n }, [container, root]);\n\n return (\n <SkiaDomView\n ref={ref}\n style={style}\n root={container.root}\n onTouch={onTouch}\n onSize={onSize}\n mode={mode}\n debug={debug}\n {...props}\n />\n );\n }\n);\n\n/**\n * Combines a list of refs into a single ref. This can be used to provide\n * both a forwarded ref and an internal ref keeping the same functionality\n * on both of the refs.\n * @param refs Array of refs to combine\n * @returns A single ref that can be used in a ref prop.\n */\nconst useCombinedRefs = <T,>(\n ...refs: Array<MutableRefObject<T> | ForwardedRef<T>>\n) => {\n const targetRef = React.useRef<T>(null);\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (ref) {\n if (typeof ref === \"function\") {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n }\n });\n }, [refs]);\n return targetRef;\n};\n"],"mappings":"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"}
@@ -10,7 +10,8 @@ var _nodes = require("../dom/nodes");
10
10
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
11
11
 
12
12
  class Container {
13
- constructor(Skia, depMgr, redraw) {
13
+ constructor(Skia, depMgr) {
14
+ let redraw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
14
15
  this.depMgr = depMgr;
15
16
  this.redraw = redraw;
16
17
 
@@ -1 +1 @@
1
- {"version":3,"names":["Container","constructor","Skia","depMgr","redraw","Sk","JsiSkDOM","_root","Group","draw","ctx","render","root"],"sources":["Container.tsx"],"sourcesContent":["import { JsiSkDOM } from \"../dom/nodes\";\nimport type {\n GroupProps,\n DrawingContext,\n RenderNode,\n SkDOM,\n} from \"../dom/types\";\nimport type { Skia } from \"../skia/types\";\n\nimport type { DependencyManager } from \"./DependencyManager\";\n\nexport class Container {\n private _root: RenderNode<GroupProps>;\n public Sk: SkDOM;\n constructor(\n Skia: Skia,\n public depMgr: DependencyManager,\n public redraw: () => void\n ) {\n this.Sk = new JsiSkDOM({ Skia, depMgr });\n this._root = this.Sk.Group();\n }\n\n draw(ctx: DrawingContext) {\n this._root.render(ctx);\n }\n\n get root() {\n return this._root;\n }\n}\n"],"mappings":";;;;;;;AAAA;;;;AAWO,MAAMA,SAAN,CAAgB;EAGrBC,WAAW,CACTC,IADS,EAEFC,MAFE,EAGFC,MAHE,EAIT;IAAA,KAFOD,MAEP,GAFOA,MAEP;IAAA,KADOC,MACP,GADOA,MACP;;IAAA;;IAAA;;IACA,KAAKC,EAAL,GAAU,IAAIC,eAAJ,CAAa;MAAEJ,IAAF;MAAQC;IAAR,CAAb,CAAV;IACA,KAAKI,KAAL,GAAa,KAAKF,EAAL,CAAQG,KAAR,EAAb;EACD;;EAEDC,IAAI,CAACC,GAAD,EAAsB;IACxB,KAAKH,KAAL,CAAWI,MAAX,CAAkBD,GAAlB;EACD;;EAEO,IAAJE,IAAI,GAAG;IACT,OAAO,KAAKL,KAAZ;EACD;;AAlBoB"}
1
+ {"version":3,"names":["Container","constructor","Skia","depMgr","redraw","Sk","JsiSkDOM","_root","Group","draw","ctx","render","root"],"sources":["Container.tsx"],"sourcesContent":["import { JsiSkDOM } from \"../dom/nodes\";\nimport type {\n GroupProps,\n DrawingContext,\n RenderNode,\n SkDOM,\n} from \"../dom/types\";\nimport type { Skia } from \"../skia/types\";\n\nimport type { DependencyManager } from \"./DependencyManager\";\n\nexport class Container {\n private _root: RenderNode<GroupProps>;\n public Sk: SkDOM;\n constructor(\n Skia: Skia,\n public depMgr: DependencyManager,\n public redraw: () => void = () => {}\n ) {\n this.Sk = new JsiSkDOM({ Skia, depMgr });\n this._root = this.Sk.Group();\n }\n\n draw(ctx: DrawingContext) {\n this._root.render(ctx);\n }\n\n get root() {\n return this._root;\n }\n}\n"],"mappings":";;;;;;;AAAA;;;;AAWO,MAAMA,SAAN,CAAgB;EAGrBC,WAAW,CACTC,IADS,EAEFC,MAFE,EAIT;IAAA,IADOC,MACP,uEAD4B,MAAM,CAAE,CACpC;IAAA,KAFOD,MAEP,GAFOA,MAEP;IAAA,KADOC,MACP,GADOA,MACP;;IAAA;;IAAA;;IACA,KAAKC,EAAL,GAAU,IAAIC,eAAJ,CAAa;MAAEJ,IAAF;MAAQC;IAAR,CAAb,CAAV;IACA,KAAKI,KAAL,GAAa,KAAKF,EAAL,CAAQG,KAAR,EAAb;EACD;;EAEDC,IAAI,CAACC,GAAD,EAAsB;IACxB,KAAKH,KAAL,CAAWI,MAAX,CAAkBD,GAAlB;EACD;;EAEO,IAAJE,IAAI,GAAG;IACT,OAAO,KAAKL,KAAZ;EACD;;AAlBoB"}
@@ -5,17 +5,15 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.Mask = void 0;
7
7
 
8
- var _react = _interopRequireWildcard(require("react"));
9
-
10
- var _types = require("../../skia/types");
11
-
12
- var _useCanvas = require("../useCanvas");
8
+ var _react = _interopRequireDefault(require("react"));
13
9
 
14
10
  var _Group = require("./Group");
15
11
 
16
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
12
+ var _LumaColorFilter = require("./colorFilters/LumaColorFilter");
13
+
14
+ var _Paint = require("./Paint");
17
15
 
18
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
17
 
20
18
  const Mask = _ref => {
21
19
  let {
@@ -24,28 +22,16 @@ const Mask = _ref => {
24
22
  mode,
25
23
  clip
26
24
  } = _ref;
27
- const Skia = (0, _useCanvas.useSkiaPrivate)();
28
- const maskPaint = (0, _react.useMemo)(() => {
29
- const paint = Skia.Paint();
30
- paint.setBlendMode(_types.BlendMode.Src);
31
-
32
- if (mode === "luminance") {
33
- paint.setColorFilter(Skia.ColorFilter.MakeLumaColorFilter());
34
- }
35
-
36
- return paint;
37
- }, [Skia, mode]);
38
- const clippingPaint = (0, _react.useMemo)(() => {
39
- const paint = Skia.Paint();
40
- paint.setBlendMode(_types.BlendMode.DstIn);
41
- return paint;
42
- }, [Skia]);
43
25
  return /*#__PURE__*/_react.default.createElement(_Group.Group, {
44
26
  layer: true
45
27
  }, /*#__PURE__*/_react.default.createElement(_Group.Group, {
46
- layer: maskPaint
28
+ layer: /*#__PURE__*/_react.default.createElement(_Paint.Paint, {
29
+ blendMode: "src"
30
+ }, mode === "luminance" && /*#__PURE__*/_react.default.createElement(_LumaColorFilter.LumaColorFilter, null))
47
31
  }, mask, clip && /*#__PURE__*/_react.default.createElement(_Group.Group, {
48
- layer: clippingPaint
32
+ layer: /*#__PURE__*/_react.default.createElement(_Paint.Paint, {
33
+ blendMode: "dstIn"
34
+ })
49
35
  }, children)), /*#__PURE__*/_react.default.createElement(_Group.Group, {
50
36
  blendMode: "srcIn"
51
37
  }, children));
@@ -1 +1 @@
1
- {"version":3,"names":["Mask","children","mask","mode","clip","Skia","useSkiaPrivate","maskPaint","useMemo","paint","Paint","setBlendMode","BlendMode","Src","setColorFilter","ColorFilter","MakeLumaColorFilter","clippingPaint","DstIn","defaultProps"],"sources":["Mask.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport React, { useMemo } from \"react\";\n\nimport { BlendMode } from \"../../skia/types\";\nimport { useSkiaPrivate } from \"../useCanvas\";\n\nimport { Group } from \"./Group\";\n\ninterface MaskProps {\n mode: \"luminance\" | \"alpha\";\n clip: boolean;\n mask: ReactNode | ReactNode[];\n children: ReactNode | ReactNode[];\n}\n\nexport const Mask = ({ children, mask, mode, clip }: MaskProps) => {\n const Skia = useSkiaPrivate();\n const maskPaint = useMemo(() => {\n const paint = Skia.Paint();\n paint.setBlendMode(BlendMode.Src);\n if (mode === \"luminance\") {\n paint.setColorFilter(Skia.ColorFilter.MakeLumaColorFilter());\n }\n return paint;\n }, [Skia, mode]);\n const clippingPaint = useMemo(() => {\n const paint = Skia.Paint();\n paint.setBlendMode(BlendMode.DstIn);\n return paint;\n }, [Skia]);\n return (\n <Group layer>\n <Group layer={maskPaint}>\n {mask}\n {clip && <Group layer={clippingPaint}>{children}</Group>}\n </Group>\n <Group blendMode=\"srcIn\">{children}</Group>\n </Group>\n );\n};\n\nMask.defaultProps = {\n mode: \"alpha\",\n clip: true,\n};\n"],"mappings":";;;;;;;AACA;;AAEA;;AACA;;AAEA;;;;;;AASO,MAAMA,IAAI,GAAG,QAA+C;EAAA,IAA9C;IAAEC,QAAF;IAAYC,IAAZ;IAAkBC,IAAlB;IAAwBC;EAAxB,CAA8C;EACjE,MAAMC,IAAI,GAAG,IAAAC,yBAAA,GAAb;EACA,MAAMC,SAAS,GAAG,IAAAC,cAAA,EAAQ,MAAM;IAC9B,MAAMC,KAAK,GAAGJ,IAAI,CAACK,KAAL,EAAd;IACAD,KAAK,CAACE,YAAN,CAAmBC,gBAAA,CAAUC,GAA7B;;IACA,IAAIV,IAAI,KAAK,WAAb,EAA0B;MACxBM,KAAK,CAACK,cAAN,CAAqBT,IAAI,CAACU,WAAL,CAAiBC,mBAAjB,EAArB;IACD;;IACD,OAAOP,KAAP;EACD,CAPiB,EAOf,CAACJ,IAAD,EAAOF,IAAP,CAPe,CAAlB;EAQA,MAAMc,aAAa,GAAG,IAAAT,cAAA,EAAQ,MAAM;IAClC,MAAMC,KAAK,GAAGJ,IAAI,CAACK,KAAL,EAAd;IACAD,KAAK,CAACE,YAAN,CAAmBC,gBAAA,CAAUM,KAA7B;IACA,OAAOT,KAAP;EACD,CAJqB,EAInB,CAACJ,IAAD,CAJmB,CAAtB;EAKA,oBACE,6BAAC,YAAD;IAAO,KAAK;EAAZ,gBACE,6BAAC,YAAD;IAAO,KAAK,EAAEE;EAAd,GACGL,IADH,EAEGE,IAAI,iBAAI,6BAAC,YAAD;IAAO,KAAK,EAAEa;EAAd,GAA8BhB,QAA9B,CAFX,CADF,eAKE,6BAAC,YAAD;IAAO,SAAS,EAAC;EAAjB,GAA0BA,QAA1B,CALF,CADF;AASD,CAxBM;;;AA0BPD,IAAI,CAACmB,YAAL,GAAoB;EAClBhB,IAAI,EAAE,OADY;EAElBC,IAAI,EAAE;AAFY,CAApB"}
1
+ {"version":3,"names":["Mask","children","mask","mode","clip","defaultProps"],"sources":["Mask.tsx"],"sourcesContent":["import type { ReactNode } from \"react\";\nimport React from \"react\";\n\nimport { Group } from \"./Group\";\nimport { LumaColorFilter } from \"./colorFilters/LumaColorFilter\";\nimport { Paint } from \"./Paint\";\n\ninterface MaskProps {\n mode: \"luminance\" | \"alpha\";\n clip: boolean;\n mask: ReactNode | ReactNode[];\n children: ReactNode | ReactNode[];\n}\n\nexport const Mask = ({ children, mask, mode, clip }: MaskProps) => {\n return (\n <Group layer>\n <Group\n layer={\n <Paint blendMode=\"src\">\n {mode === \"luminance\" && <LumaColorFilter />}\n </Paint>\n }\n >\n {mask}\n {clip && <Group layer={<Paint blendMode=\"dstIn\" />}>{children}</Group>}\n </Group>\n <Group blendMode=\"srcIn\">{children}</Group>\n </Group>\n );\n};\n\nMask.defaultProps = {\n mode: \"alpha\",\n clip: true,\n};\n"],"mappings":";;;;;;;AACA;;AAEA;;AACA;;AACA;;;;AASO,MAAMA,IAAI,GAAG,QAA+C;EAAA,IAA9C;IAAEC,QAAF;IAAYC,IAAZ;IAAkBC,IAAlB;IAAwBC;EAAxB,CAA8C;EACjE,oBACE,6BAAC,YAAD;IAAO,KAAK;EAAZ,gBACE,6BAAC,YAAD;IACE,KAAK,eACH,6BAAC,YAAD;MAAO,SAAS,EAAC;IAAjB,GACGD,IAAI,KAAK,WAAT,iBAAwB,6BAAC,gCAAD,OAD3B;EAFJ,GAOGD,IAPH,EAQGE,IAAI,iBAAI,6BAAC,YAAD;IAAO,KAAK,eAAE,6BAAC,YAAD;MAAO,SAAS,EAAC;IAAjB;EAAd,GAA4CH,QAA5C,CARX,CADF,eAWE,6BAAC,YAAD;IAAO,SAAS,EAAC;EAAjB,GAA0BA,QAA1B,CAXF,CADF;AAeD,CAhBM;;;AAkBPD,IAAI,CAACK,YAAL,GAAoB;EAClBF,IAAI,EAAE,OADY;EAElBC,IAAI,EAAE;AAFY,CAApB"}
@@ -42,17 +42,4 @@ Object.keys(_DependencyManager).forEach(function (key) {
42
42
  }
43
43
  });
44
44
  });
45
-
46
- var _useCanvas = require("./useCanvas");
47
-
48
- Object.keys(_useCanvas).forEach(function (key) {
49
- if (key === "default" || key === "__esModule") return;
50
- if (key in exports && exports[key] === _useCanvas[key]) return;
51
- Object.defineProperty(exports, key, {
52
- enumerable: true,
53
- get: function () {
54
- return _useCanvas[key];
55
- }
56
- });
57
- });
58
45
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./useContextBridge\";\nexport * from \"./DependencyManager\";\nexport * from \"./useCanvas\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
1
+ {"version":3,"names":[],"sources":["index.ts"],"sourcesContent":["export * from \"./components\";\nexport * from \"./useContextBridge\";\nexport * from \"./DependencyManager\";\n"],"mappings":";;;;;;AAAA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;;AACA;;AAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA"}
@@ -1,15 +1,13 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
- import React, { useEffect, useCallback, useMemo, forwardRef, useRef, useState } from "react";
3
+ import React, { useEffect, useCallback, useMemo, forwardRef, useRef } from "react";
4
4
  import ReactReconciler from "react-reconciler";
5
- import { Platform } from "react-native";
6
5
  import { SkiaDomView } from "../views";
7
6
  import { Skia } from "../skia/Skia";
8
7
  import { debug as hostDebug, skHostConfig } from "./HostConfig"; // import { debugTree } from "./nodes";
9
8
 
10
9
  import { Container } from "./Container";
11
10
  import { DependencyManager } from "./DependencyManager";
12
- import { CanvasProvider } from "./useCanvas";
13
11
  export const skiaReconciler = ReactReconciler(skHostConfig);
14
12
  skiaReconciler.injectIntoDevTools({
15
13
  bundleType: 1,
@@ -40,11 +38,10 @@ export const Canvas = /*#__PURE__*/forwardRef((_ref, forwardedRef) => {
40
38
  } = _ref;
41
39
  const innerRef = useCanvasRef();
42
40
  const ref = useCombinedRefs(forwardedRef, innerRef);
43
- const [, setTick] = useState(0);
44
41
  const redraw = useCallback(() => {
45
42
  var _innerRef$current;
46
43
 
47
- Platform.OS === "web" ? setTick(tick => tick + 1) : (_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 ? void 0 : _innerRef$current.redraw();
44
+ (_innerRef$current = innerRef.current) === null || _innerRef$current === void 0 ? void 0 : _innerRef$current.redraw();
48
45
  }, [innerRef]);
49
46
  const registerValues = useCallback(values => {
50
47
  if (ref.current === null) {
@@ -59,11 +56,7 @@ export const Canvas = /*#__PURE__*/forwardRef((_ref, forwardedRef) => {
59
56
  const root = useMemo(() => skiaReconciler.createContainer(container, 0, null, true, null, "", console.error, null), [container]); // Render effect
60
57
 
61
58
  useEffect(() => {
62
- render( /*#__PURE__*/React.createElement(CanvasProvider, {
63
- value: {
64
- Skia
65
- }
66
- }, children), root, container);
59
+ render(children, root, container);
67
60
  }, [children, root, redraw, container]);
68
61
  useEffect(() => {
69
62
  return () => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useCallback","useMemo","forwardRef","useRef","useState","ReactReconciler","Platform","SkiaDomView","Skia","debug","hostDebug","skHostConfig","Container","DependencyManager","CanvasProvider","skiaReconciler","injectIntoDevTools","bundleType","version","rendererPackageName","render","element","root","container","updateContainer","depMgr","update","useCanvasRef","createDependencyManager","registerValues","global","SkiaDomApi","Canvas","forwardedRef","children","style","mode","onTouch","onSize","props","innerRef","ref","useCombinedRefs","setTick","redraw","OS","tick","current","values","Error","createContainer","console","error","remove","refs","targetRef","forEach"],"sources":["Canvas.tsx"],"sourcesContent":["import React, {\n useEffect,\n useCallback,\n useMemo,\n forwardRef,\n useRef,\n useState,\n} from \"react\";\nimport type {\n RefObject,\n ReactNode,\n ComponentProps,\n MutableRefObject,\n ForwardedRef,\n} from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\nimport { Platform } from \"react-native\";\n\nimport { SkiaDomView } from \"../views\";\nimport type { TouchHandler } from \"../views\";\nimport { Skia } from \"../skia/Skia\";\nimport type { SkiaValue } from \"../values\";\n\nimport { debug as hostDebug, skHostConfig } from \"./HostConfig\";\n// import { debugTree } from \"./nodes\";\nimport { Container } from \"./Container\";\nimport { DependencyManager } from \"./DependencyManager\";\nimport { CanvasProvider } from \"./useCanvas\";\n\nexport const skiaReconciler = ReactReconciler(skHostConfig);\n\nskiaReconciler.injectIntoDevTools({\n bundleType: 1,\n version: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n});\n\nconst render = (element: ReactNode, root: OpaqueRoot, container: Container) => {\n skiaReconciler.updateContainer(element, root, null, () => {\n hostDebug(\"updateContainer\");\n container.depMgr.update();\n });\n};\n\nexport const useCanvasRef = () => useRef<SkiaDomView>(null);\n\nconst createDependencyManager = (\n registerValues: (values: Array<SkiaValue<unknown>>) => () => void\n) =>\n global.SkiaDomApi && global.SkiaDomApi.DependencyManager\n ? global.SkiaDomApi.DependencyManager(registerValues)\n : new DependencyManager(registerValues);\n\nexport interface CanvasProps extends ComponentProps<typeof SkiaDomView> {\n ref?: RefObject<SkiaDomView>;\n children: ReactNode;\n onTouch?: TouchHandler;\n}\n\nexport const Canvas = forwardRef<SkiaDomView, CanvasProps>(\n (\n { children, style, debug, mode, onTouch, onSize, ...props },\n forwardedRef\n ) => {\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const [, setTick] = useState(0);\n const redraw = useCallback(() => {\n Platform.OS === \"web\"\n ? setTick((tick) => tick + 1)\n : innerRef.current?.redraw();\n }, [innerRef]);\n\n const registerValues = useCallback(\n (values: Array<SkiaValue<unknown>>) => {\n if (ref.current === null) {\n throw new Error(\"Canvas ref is not set\");\n }\n return ref.current.registerValues(values);\n },\n [ref]\n );\n\n const container = useMemo(() => {\n return new Container(\n Skia,\n createDependencyManager(registerValues),\n redraw\n );\n }, [redraw, registerValues]);\n\n const root = useMemo(\n () =>\n skiaReconciler.createContainer(\n container,\n 0,\n null,\n true,\n null,\n \"\",\n console.error,\n null\n ),\n [container]\n );\n\n // Render effect\n useEffect(() => {\n render(\n <CanvasProvider value={{ Skia }}>{children}</CanvasProvider>,\n root,\n container\n );\n }, [children, root, redraw, container]);\n\n useEffect(() => {\n return () => {\n skiaReconciler.updateContainer(null, root, null, () => {\n container.depMgr.remove();\n });\n };\n }, [container, root]);\n\n return (\n <SkiaDomView\n ref={ref}\n style={style}\n root={container.root}\n onTouch={onTouch}\n onSize={onSize}\n mode={mode}\n debug={debug}\n {...props}\n />\n );\n }\n);\n\n/**\n * Combines a list of refs into a single ref. This can be used to provide\n * both a forwarded ref and an internal ref keeping the same functionality\n * on both of the refs.\n * @param refs Array of refs to combine\n * @returns A single ref that can be used in a ref prop.\n */\nconst useCombinedRefs = <T,>(\n ...refs: Array<MutableRefObject<T> | ForwardedRef<T>>\n) => {\n const targetRef = React.useRef<T>(null);\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (ref) {\n if (typeof ref === \"function\") {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n }\n });\n }, [refs]);\n return targetRef;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useEffect","useCallback","useMemo","forwardRef","useRef","ReactReconciler","SkiaDomView","Skia","debug","hostDebug","skHostConfig","Container","DependencyManager","skiaReconciler","injectIntoDevTools","bundleType","version","rendererPackageName","render","element","root","container","updateContainer","depMgr","update","useCanvasRef","createDependencyManager","registerValues","global","SkiaDomApi","Canvas","forwardedRef","children","style","mode","onTouch","onSize","props","innerRef","ref","useCombinedRefs","redraw","current","values","Error","createContainer","console","error","remove","refs","targetRef","forEach"],"sources":["Canvas.tsx"],"sourcesContent":["import React, {\n useEffect,\n useCallback,\n useMemo,\n forwardRef,\n useRef,\n} from \"react\";\nimport type {\n RefObject,\n ReactNode,\n ComponentProps,\n MutableRefObject,\n ForwardedRef,\n} from \"react\";\nimport type { OpaqueRoot } from \"react-reconciler\";\nimport ReactReconciler from \"react-reconciler\";\n\nimport { SkiaDomView } from \"../views\";\nimport type { TouchHandler } from \"../views\";\nimport { Skia } from \"../skia/Skia\";\nimport type { SkiaValue } from \"../values\";\n\nimport { debug as hostDebug, skHostConfig } from \"./HostConfig\";\n// import { debugTree } from \"./nodes\";\nimport { Container } from \"./Container\";\nimport { DependencyManager } from \"./DependencyManager\";\n\nexport const skiaReconciler = ReactReconciler(skHostConfig);\n\nskiaReconciler.injectIntoDevTools({\n bundleType: 1,\n version: \"0.0.1\",\n rendererPackageName: \"react-native-skia\",\n});\n\nconst render = (element: ReactNode, root: OpaqueRoot, container: Container) => {\n skiaReconciler.updateContainer(element, root, null, () => {\n hostDebug(\"updateContainer\");\n container.depMgr.update();\n });\n};\n\nexport const useCanvasRef = () => useRef<SkiaDomView>(null);\n\nconst createDependencyManager = (\n registerValues: (values: Array<SkiaValue<unknown>>) => () => void\n) =>\n global.SkiaDomApi && global.SkiaDomApi.DependencyManager\n ? global.SkiaDomApi.DependencyManager(registerValues)\n : new DependencyManager(registerValues);\n\nexport interface CanvasProps extends ComponentProps<typeof SkiaDomView> {\n ref?: RefObject<SkiaDomView>;\n children: ReactNode;\n onTouch?: TouchHandler;\n}\n\nexport const Canvas = forwardRef<SkiaDomView, CanvasProps>(\n (\n { children, style, debug, mode, onTouch, onSize, ...props },\n forwardedRef\n ) => {\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const redraw = useCallback(() => {\n innerRef.current?.redraw();\n }, [innerRef]);\n\n const registerValues = useCallback(\n (values: Array<SkiaValue<unknown>>) => {\n if (ref.current === null) {\n throw new Error(\"Canvas ref is not set\");\n }\n return ref.current.registerValues(values);\n },\n [ref]\n );\n\n const container = useMemo(() => {\n return new Container(\n Skia,\n createDependencyManager(registerValues),\n redraw\n );\n }, [redraw, registerValues]);\n\n const root = useMemo(\n () =>\n skiaReconciler.createContainer(\n container,\n 0,\n null,\n true,\n null,\n \"\",\n console.error,\n null\n ),\n [container]\n );\n\n // Render effect\n useEffect(() => {\n render(children, root, container);\n }, [children, root, redraw, container]);\n\n useEffect(() => {\n return () => {\n skiaReconciler.updateContainer(null, root, null, () => {\n container.depMgr.remove();\n });\n };\n }, [container, root]);\n\n return (\n <SkiaDomView\n ref={ref}\n style={style}\n root={container.root}\n onTouch={onTouch}\n onSize={onSize}\n mode={mode}\n debug={debug}\n {...props}\n />\n );\n }\n);\n\n/**\n * Combines a list of refs into a single ref. This can be used to provide\n * both a forwarded ref and an internal ref keeping the same functionality\n * on both of the refs.\n * @param refs Array of refs to combine\n * @returns A single ref that can be used in a ref prop.\n */\nconst useCombinedRefs = <T,>(\n ...refs: Array<MutableRefObject<T> | ForwardedRef<T>>\n) => {\n const targetRef = React.useRef<T>(null);\n React.useEffect(() => {\n refs.forEach((ref) => {\n if (ref) {\n if (typeof ref === \"function\") {\n ref(targetRef.current);\n } else {\n ref.current = targetRef.current;\n }\n }\n });\n }, [refs]);\n return targetRef;\n};\n"],"mappings":"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"}
@@ -2,7 +2,8 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
2
2
 
3
3
  import { JsiSkDOM } from "../dom/nodes";
4
4
  export class Container {
5
- constructor(Skia, depMgr, redraw) {
5
+ constructor(Skia, depMgr) {
6
+ let redraw = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : () => {};
6
7
  this.depMgr = depMgr;
7
8
  this.redraw = redraw;
8
9