@shopify/react-native-skia 0.1.162 → 0.1.163

Sign up to get free protection for your applications and to get access to all the features.
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