@shopify/react-native-skia 1.5.7 → 1.5.9

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 (112) hide show
  1. package/android/CMakeLists.txt +1 -2
  2. package/android/cpp/jni/JniPlatformContext.cpp +0 -49
  3. package/android/cpp/jni/include/JniPlatformContext.h +1 -17
  4. package/android/cpp/jni/include/JniSkiaBaseView.h +0 -2
  5. package/android/cpp/jni/include/JniSkiaDomView.h +0 -3
  6. package/android/cpp/jni/include/JniSkiaManager.h +0 -2
  7. package/android/cpp/jni/include/JniSkiaPictureView.h +0 -3
  8. package/android/cpp/rnskia-android/MainThreadDispatcher.h +69 -0
  9. package/android/cpp/rnskia-android/OpenGLContext.h +3 -1
  10. package/android/cpp/rnskia-android/OpenGLWindowContext.cpp +1 -1
  11. package/android/cpp/rnskia-android/OpenGLWindowContext.h +4 -5
  12. package/android/cpp/rnskia-android/RNSkAndroidPlatformContext.h +10 -11
  13. package/android/cpp/rnskia-android/RNSkAndroidView.h +3 -13
  14. package/android/cpp/rnskia-android/RNSkOpenGLCanvasProvider.cpp +0 -1
  15. package/android/src/main/java/com/shopify/reactnative/skia/PlatformContext.java +0 -85
  16. package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaModule.java +1 -21
  17. package/android/src/main/java/com/shopify/reactnative/skia/SkiaManager.java +0 -4
  18. package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerDelegate.java +1 -4
  19. package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerInterface.java +0 -1
  20. package/cpp/api/JsiSkImage.h +20 -4
  21. package/cpp/rnskia/RNSkManager.cpp +2 -3
  22. package/cpp/rnskia/RNSkPlatformContext.h +6 -114
  23. package/cpp/rnskia/RNSkView.h +21 -77
  24. package/ios/RNSkia-iOS/MetalContext.h +2 -0
  25. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.h +4 -10
  26. package/ios/RNSkia-iOS/RNSkiOSPlatformContext.mm +6 -16
  27. package/ios/RNSkia-iOS/SkiaDomView.mm +0 -1
  28. package/ios/RNSkia-iOS/SkiaDomViewManager.mm +0 -6
  29. package/ios/RNSkia-iOS/SkiaPictureView.mm +0 -1
  30. package/ios/RNSkia-iOS/SkiaPictureViewManager.mm +0 -6
  31. package/ios/RNSkia-iOS/SkiaUIView.h +0 -1
  32. package/ios/RNSkia-iOS/SkiaUIView.mm +1 -14
  33. package/lib/commonjs/renderer/Canvas.d.ts +1 -0
  34. package/lib/commonjs/renderer/Canvas.js +5 -5
  35. package/lib/commonjs/renderer/Canvas.js.map +1 -1
  36. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
  37. package/lib/commonjs/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  38. package/lib/commonjs/views/SkiaBaseWebView.d.ts +1 -12
  39. package/lib/commonjs/views/SkiaBaseWebView.js +1 -19
  40. package/lib/commonjs/views/SkiaBaseWebView.js.map +1 -1
  41. package/lib/commonjs/views/SkiaDomView.d.ts +8 -1
  42. package/lib/commonjs/views/SkiaDomView.js +14 -2
  43. package/lib/commonjs/views/SkiaDomView.js.map +1 -1
  44. package/lib/commonjs/views/SkiaDomView.web.d.ts +3 -3
  45. package/lib/commonjs/views/SkiaDomView.web.js.map +1 -1
  46. package/lib/commonjs/views/SkiaJSDomView.d.ts +12 -6
  47. package/lib/commonjs/views/SkiaJSDomView.js +12 -3
  48. package/lib/commonjs/views/SkiaJSDomView.js.map +1 -1
  49. package/lib/commonjs/views/SkiaPictureView.d.ts +8 -1
  50. package/lib/commonjs/views/SkiaPictureView.js +14 -1
  51. package/lib/commonjs/views/SkiaPictureView.js.map +1 -1
  52. package/lib/commonjs/views/SkiaPictureView.web.d.ts +3 -3
  53. package/lib/commonjs/views/SkiaPictureView.web.js.map +1 -1
  54. package/lib/commonjs/views/types.d.ts +2 -12
  55. package/lib/commonjs/views/types.js.map +1 -1
  56. package/lib/module/renderer/Canvas.d.ts +1 -0
  57. package/lib/module/renderer/Canvas.js +5 -5
  58. package/lib/module/renderer/Canvas.js.map +1 -1
  59. package/lib/module/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
  60. package/lib/module/specs/SkiaPictureViewNativeComponent.js.map +1 -1
  61. package/lib/module/views/SkiaBaseWebView.d.ts +1 -12
  62. package/lib/module/views/SkiaBaseWebView.js +1 -19
  63. package/lib/module/views/SkiaBaseWebView.js.map +1 -1
  64. package/lib/module/views/SkiaDomView.d.ts +8 -1
  65. package/lib/module/views/SkiaDomView.js +14 -2
  66. package/lib/module/views/SkiaDomView.js.map +1 -1
  67. package/lib/module/views/SkiaDomView.web.d.ts +3 -3
  68. package/lib/module/views/SkiaDomView.web.js.map +1 -1
  69. package/lib/module/views/SkiaJSDomView.d.ts +12 -6
  70. package/lib/module/views/SkiaJSDomView.js +12 -3
  71. package/lib/module/views/SkiaJSDomView.js.map +1 -1
  72. package/lib/module/views/SkiaPictureView.d.ts +8 -1
  73. package/lib/module/views/SkiaPictureView.js +14 -1
  74. package/lib/module/views/SkiaPictureView.js.map +1 -1
  75. package/lib/module/views/SkiaPictureView.web.d.ts +3 -3
  76. package/lib/module/views/SkiaPictureView.web.js.map +1 -1
  77. package/lib/module/views/types.d.ts +2 -12
  78. package/lib/module/views/types.js.map +1 -1
  79. package/lib/typescript/lib/commonjs/views/SkiaBaseWebView.d.ts +0 -11
  80. package/lib/typescript/lib/commonjs/views/SkiaDomView.d.ts +3 -0
  81. package/lib/typescript/lib/commonjs/views/SkiaJSDomView.d.ts +2 -0
  82. package/lib/typescript/lib/commonjs/views/SkiaPictureView.d.ts +3 -0
  83. package/lib/typescript/lib/module/views/SkiaBaseWebView.d.ts +0 -11
  84. package/lib/typescript/lib/module/views/SkiaDomView.d.ts +3 -0
  85. package/lib/typescript/lib/module/views/SkiaJSDomView.d.ts +2 -0
  86. package/lib/typescript/lib/module/views/SkiaPictureView.d.ts +3 -0
  87. package/lib/typescript/src/renderer/Canvas.d.ts +1 -0
  88. package/lib/typescript/src/specs/SkiaPictureViewNativeComponent.d.ts +0 -1
  89. package/lib/typescript/src/views/SkiaBaseWebView.d.ts +1 -12
  90. package/lib/typescript/src/views/SkiaDomView.d.ts +8 -1
  91. package/lib/typescript/src/views/SkiaDomView.web.d.ts +3 -3
  92. package/lib/typescript/src/views/SkiaJSDomView.d.ts +12 -6
  93. package/lib/typescript/src/views/SkiaPictureView.d.ts +8 -1
  94. package/lib/typescript/src/views/SkiaPictureView.web.d.ts +3 -3
  95. package/lib/typescript/src/views/types.d.ts +2 -12
  96. package/package.json +1 -1
  97. package/react-native-skia.podspec +2 -2
  98. package/src/renderer/Canvas.tsx +4 -3
  99. package/src/renderer/__tests__/e2e/Image.spec.tsx +2 -64
  100. package/src/skia/__tests__/assets/oslo-mini.jpg +0 -0
  101. package/src/specs/SkiaPictureViewNativeComponent.ts +0 -1
  102. package/src/views/SkiaBaseWebView.tsx +3 -19
  103. package/src/views/SkiaDomView.tsx +23 -4
  104. package/src/views/SkiaDomView.web.tsx +3 -3
  105. package/src/views/SkiaJSDomView.tsx +30 -9
  106. package/src/views/SkiaPictureView.tsx +22 -2
  107. package/src/views/SkiaPictureView.web.tsx +3 -3
  108. package/src/views/types.ts +2 -13
  109. package/cpp/rnskia/RNSkDispatchQueue.cpp +0 -73
  110. package/cpp/rnskia/RNSkDispatchQueue.h +0 -49
  111. package/ios/RNSkia-iOS/DisplayLink.h +0 -17
  112. package/ios/RNSkia-iOS/DisplayLink.mm +0 -41
@@ -47,13 +47,12 @@ void RNSkManager::invalidate() {
47
47
 
48
48
  // Invalidate members
49
49
  _viewApi->unregisterAll();
50
- _platformContext->invalidate();
51
50
  }
52
51
 
53
52
  void RNSkManager::registerSkiaView(size_t nativeId,
54
53
  std::shared_ptr<RNSkView> view) {
55
54
  if (!_isInvalidated && _viewApi != nullptr)
56
- _viewApi->registerSkiaView(nativeId, view);
55
+ _viewApi->registerSkiaView(nativeId, std::move(view));
57
56
  }
58
57
 
59
58
  void RNSkManager::unregisterSkiaView(size_t nativeId) {
@@ -63,7 +62,7 @@ void RNSkManager::unregisterSkiaView(size_t nativeId) {
63
62
 
64
63
  void RNSkManager::setSkiaView(size_t nativeId, std::shared_ptr<RNSkView> view) {
65
64
  if (!_isInvalidated && _viewApi != nullptr)
66
- _viewApi->setSkiaView(nativeId, view);
65
+ _viewApi->setSkiaView(nativeId, std::move(view));
67
66
  }
68
67
 
69
68
  void RNSkManager::installBindings() {
@@ -9,7 +9,6 @@
9
9
  #include <unordered_map>
10
10
  #include <utility>
11
11
 
12
- #include "RNSkDispatchQueue.h"
13
12
  #include "RNSkVideo.h"
14
13
  #include "WindowContext.h"
15
14
 
@@ -42,57 +41,19 @@ public:
42
41
  std::shared_ptr<react::CallInvoker> callInvoker,
43
42
  float pixelDensity)
44
43
  : _pixelDensity(pixelDensity), _jsRuntime(runtime),
45
- _callInvoker(callInvoker),
46
- _dispatchQueue(
47
- std::make_unique<RNSkDispatchQueue>("skia-render-thread")) {
48
- _jsThreadId = std::this_thread::get_id();
44
+ _callInvoker(callInvoker) {
49
45
  }
50
46
 
51
- /**
52
- * Destructor
53
- */
54
- virtual ~RNSkPlatformContext() { invalidate(); }
55
-
56
- void invalidate() {
57
- if (!_isValid) {
58
- return;
59
- }
60
- // Stop the refresh loop
61
- stopDrawLoop();
62
- // Notify draw loop listeners once with the invalidated parameter
63
- // set to true signalling that we are done and can clean up.
64
- notifyDrawLoop(true);
65
- _isValid = false;
66
- }
67
-
68
- /*
69
- Returns true if the current execution context is the javascript thread.
70
- */
71
- bool isOnJavascriptThread() {
72
- return _jsThreadId == std::this_thread::get_id();
73
- }
47
+ virtual ~RNSkPlatformContext() = default;
74
48
 
75
49
  /**
76
50
  * Schedules the function to be run on the javascript thread async
77
51
  * @param func Function to run
78
52
  */
79
53
  void runOnJavascriptThread(std::function<void()> func) {
80
- if (!_isValid) {
81
- return;
82
- }
83
54
  _callInvoker->invokeAsync(std::move(func));
84
55
  }
85
56
 
86
- /**
87
- Runs the function on the render thread
88
- */
89
- void runOnRenderThread(std::function<void()> func) {
90
- if (!_isValid) {
91
- return;
92
- }
93
- _dispatchQueue->dispatch(std::move(func));
94
- }
95
-
96
57
  /**
97
58
  * Runs the passed function on the main thread
98
59
  * @param func Function to run.
@@ -147,6 +108,10 @@ public:
147
108
  */
148
109
  virtual sk_sp<SkImage> makeImageFromNativeBuffer(void *buffer) = 0;
149
110
 
111
+ #if !defined(SK_GRAPHITE)
112
+ virtual GrDirectContext *getDirectContext() = 0;
113
+ #endif
114
+
150
115
  virtual void releaseNativeBuffer(uint64_t pointer) = 0;
151
116
 
152
117
  virtual uint64_t makeNativeBuffer(sk_sp<SkImage> image) = 0;
@@ -188,82 +153,9 @@ public:
188
153
  */
189
154
  float getPixelDensity() { return _pixelDensity; }
190
155
 
191
- /**
192
- * Starts (if not started) a loop that will call back on display sync
193
- * @param callback Callback to call on sync
194
- * @returns Identifier of the draw loop entry
195
- */
196
- size_t beginDrawLoop(size_t nativeId, std::function<void(bool)> callback) {
197
- if (!_isValid) {
198
- return 0;
199
- }
200
- auto shouldStart = false;
201
- {
202
- std::lock_guard<std::mutex> lock(_drawCallbacksLock);
203
- _drawCallbacks.emplace(nativeId, std::move(callback));
204
- shouldStart = _drawCallbacks.size() == 1;
205
- }
206
- if (shouldStart) {
207
- // Start
208
- startDrawLoop();
209
- }
210
- return nativeId;
211
- }
212
-
213
- /**
214
- * Ends (if running) the drawing loop that was started with beginDrawLoop.
215
- * This method must be called symmetrically with the beginDrawLoop method.
216
- * @param nativeId Identifier of view to end
217
- */
218
- void endDrawLoop(size_t nativeId) {
219
- if (!_isValid) {
220
- return;
221
- }
222
- auto shouldStop = false;
223
- {
224
- std::lock_guard<std::mutex> lock(_drawCallbacksLock);
225
- if (_drawCallbacks.count(nativeId) > 0) {
226
- _drawCallbacks.erase(nativeId);
227
- }
228
- shouldStop = _drawCallbacks.size() == 0;
229
- }
230
- if (shouldStop) {
231
- stopDrawLoop();
232
- }
233
- }
234
-
235
- /**
236
- * Notifies all drawing callbacks
237
- * @param invalidated True if the context was invalidated, otherwise false.
238
- * This can be used to receive a notification that we have stopped the main
239
- * drawloop
240
- */
241
- void notifyDrawLoop(bool invalidated) {
242
- if (!_isValid) {
243
- return;
244
- }
245
- std::lock_guard<std::mutex> lock(_drawCallbacksLock);
246
- for (auto it = _drawCallbacks.begin(); it != _drawCallbacks.end(); it++) {
247
- it->second(invalidated);
248
- }
249
- }
250
-
251
- // default implementation does nothing, so it can be called from virtual
252
- // destructor.
253
- virtual void startDrawLoop() {}
254
- virtual void stopDrawLoop() {}
255
-
256
156
  private:
257
157
  float _pixelDensity;
258
-
259
- std::thread::id _jsThreadId;
260
-
261
158
  jsi::Runtime *_jsRuntime;
262
159
  std::shared_ptr<react::CallInvoker> _callInvoker;
263
- std::unique_ptr<RNSkDispatchQueue> _dispatchQueue;
264
-
265
- std::unordered_map<size_t, std::function<void(bool)>> _drawCallbacks;
266
- std::mutex _drawCallbacksLock;
267
- std::atomic<bool> _isValid = {true};
268
160
  };
269
161
  } // namespace RNSkia
@@ -90,7 +90,8 @@ public:
90
90
  RNSkOffscreenCanvasProvider(std::shared_ptr<RNSkPlatformContext> context,
91
91
  std::function<void()> requestRedraw, float width,
92
92
  float height)
93
- : RNSkCanvasProvider(requestRedraw), _width(width), _height(height) {
93
+ : RNSkCanvasProvider(requestRedraw), _context(context), _width(width),
94
+ _height(height) {
94
95
  _surface = context->makeOffscreenSurface(_width, _height);
95
96
  _pd = context->getPixelDensity();
96
97
  }
@@ -113,7 +114,8 @@ public:
113
114
  _surface->recorder()->snap().get());
114
115
  return DawnContext::getInstance().MakeRasterImage(image);
115
116
  #else
116
- return image->makeNonTextureImage();
117
+ auto grContext = _context->getDirectContext();
118
+ return image->makeRasterImage(grContext);
117
119
  #endif
118
120
  }
119
121
 
@@ -140,10 +142,9 @@ private:
140
142
  float _height;
141
143
  float _pd = 1.0f;
142
144
  sk_sp<SkSurface> _surface;
145
+ std::shared_ptr<RNSkPlatformContext> _context;
143
146
  };
144
147
 
145
- enum RNSkDrawingMode { Default, Continuous };
146
-
147
148
  class RNSkView : public std::enable_shared_from_this<RNSkView> {
148
149
  public:
149
150
  /**
@@ -158,7 +159,7 @@ public:
158
159
  /**
159
160
  Destructor
160
161
  */
161
- virtual ~RNSkView() { endDrawingLoop(); }
162
+ virtual ~RNSkView() {}
162
163
 
163
164
  /**
164
165
  Sets custom properties. Custom properties are properties that are set
@@ -169,43 +170,33 @@ public:
169
170
  // Nothing here...
170
171
  }
171
172
 
172
- /**
173
- * Repaints the Skia view using the underlying context and the drawcallback.
174
- * This method schedules a draw request that will be run on the correct
175
- * thread and js runtime.
176
- */
177
- void requestRedraw() { _redrawRequestCounter++; }
173
+ void requestRedraw() {
174
+ if (!_redrawRequested) {
175
+ _redrawRequested = true;
176
+ _platformContext->runOnMainThread([this]() {
177
+ if (_renderer) {
178
+ _renderer->renderImmediate(_canvasProvider);
179
+ _redrawRequested = false;
180
+ }
181
+ });
182
+ }
183
+ }
178
184
 
179
- /**
180
- Renders immediate. Be carefull to not call this method from another thread
181
- than the UI thread
182
- */
183
- void renderImmediate() {
185
+ void redraw() {
184
186
  _renderer->renderImmediate(_canvasProvider);
185
- _redrawRequestCounter = 0;
187
+ _redrawRequested = false;
186
188
  }
187
189
 
188
190
  /**
189
191
  Sets the native id of the view
190
192
  */
191
- virtual void setNativeId(size_t nativeId) {
192
- _nativeId = nativeId;
193
- beginDrawingLoop();
194
- }
193
+ virtual void setNativeId(size_t nativeId) { _nativeId = nativeId; }
195
194
 
196
195
  /**
197
196
  Returns the native id
198
197
  */
199
198
  size_t getNativeId() { return _nativeId; }
200
199
 
201
- /**
202
- Sets the drawing mode for the view
203
- */
204
- void setDrawingMode(RNSkDrawingMode mode) {
205
- _drawingMode = mode;
206
- requestRedraw();
207
- }
208
-
209
200
  /**
210
201
  * Set to true to show the debug overlays on render
211
202
  */
@@ -237,61 +228,14 @@ protected:
237
228
  return _canvasProvider;
238
229
  }
239
230
 
240
- /**
241
- Ends an ongoing beginDrawCallback loop for this view. This method is made
242
- protected if the drawing loop should be stopped before reaching the
243
- destructor (like we do for Android views)
244
- */
245
- void endDrawingLoop() {
246
- if (_drawingLoopId != 0) {
247
- _drawingLoopId = 0;
248
- _platformContext->endDrawLoop(_nativeId);
249
- }
250
- }
251
-
252
231
  private:
253
- /**
254
- Starts beginDrawCallback loop if the drawing mode is continuous
255
- */
256
- void beginDrawingLoop() {
257
- if (_drawingLoopId != 0 || _nativeId == 0) {
258
- return;
259
- }
260
- // Set to zero to avoid calling beginDrawLoop before we return
261
- _drawingLoopId = _platformContext->beginDrawLoop(
262
- _nativeId, [weakSelf = weak_from_this()](bool invalidated) {
263
- auto self = weakSelf.lock();
264
- if (self) {
265
- self->drawLoopCallback(invalidated);
266
- }
267
- });
268
- }
269
-
270
- /**
271
- Draw loop callback
272
- */
273
- void drawLoopCallback(bool invalidated) {
274
- if (_redrawRequestCounter > 0 ||
275
- _drawingMode == RNSkDrawingMode::Continuous) {
276
- _redrawRequestCounter = 0;
277
-
278
- if (!_renderer->tryRender(_canvasProvider)) {
279
- // The renderer could not render cause it was busy, just schedule
280
- // redrawing on the next frame.
281
- requestRedraw();
282
- }
283
- }
284
- }
285
-
286
232
  std::shared_ptr<RNSkPlatformContext> _platformContext;
287
233
  std::shared_ptr<RNSkCanvasProvider> _canvasProvider;
288
234
  std::shared_ptr<RNSkRenderer> _renderer;
289
235
 
290
- RNSkDrawingMode _drawingMode = RNSkDrawingMode::Default;
291
236
  size_t _nativeId;
292
237
 
293
- size_t _drawingLoopId = 0;
294
- std::atomic<int> _redrawRequestCounter = {1};
238
+ std::atomic<bool> _redrawRequested = {false};
295
239
  };
296
240
 
297
241
  } // namespace RNSkia
@@ -37,6 +37,8 @@ public:
37
37
  height);
38
38
  }
39
39
 
40
+ GrDirectContext *getDirectContext() { return _context.skContext.get(); }
41
+
40
42
  private:
41
43
  friend class RNSkia::RNSkiOSPlatformContext;
42
44
  id<MTLDevice> _device;
@@ -7,7 +7,6 @@
7
7
  #include <memory>
8
8
  #include <string>
9
9
 
10
- #include "DisplayLink.h"
11
10
  #include "RNSkPlatformContext.h"
12
11
  #include "ViewScreenshotService.h"
13
12
 
@@ -49,12 +48,8 @@ public:
49
48
  ~RNSkiOSPlatformContext() {
50
49
  CFNotificationCenterRemoveEveryObserver(
51
50
  CFNotificationCenterGetLocalCenter(), this);
52
- stopDrawLoop();
53
51
  }
54
52
 
55
- void startDrawLoop() override;
56
- void stopDrawLoop() override;
57
-
58
53
  void runOnMainThread(std::function<void()>) override;
59
54
 
60
55
  sk_sp<SkImage> takeScreenshotFromViewTag(size_t tag) override;
@@ -76,15 +71,14 @@ public:
76
71
 
77
72
  void raiseError(const std::exception &err) override;
78
73
  sk_sp<SkSurface> makeOffscreenSurface(int width, int height) override;
74
+ #if !defined(SK_GRAPHITE)
75
+ GrDirectContext *getDirectContext() override;
76
+ #endif
79
77
  sk_sp<SkFontMgr> createFontMgr() override;
80
78
 
81
- void willInvalidateModules() {
82
- // We need to do some house-cleaning here!
83
- invalidate();
84
- }
79
+ void willInvalidateModules() {}
85
80
 
86
81
  private:
87
- DisplayLink *_displayLink;
88
82
  ViewScreenshotService *_screenshotService;
89
83
  };
90
84
 
@@ -192,6 +192,12 @@ sk_sp<SkImage> RNSkiOSPlatformContext::makeImageFromNativeBuffer(void *buffer) {
192
192
  #endif
193
193
  }
194
194
 
195
+ #if !defined(SK_GRAPHITE)
196
+ GrDirectContext *RNSkiOSPlatformContext::getDirectContext() {
197
+ return MetalContext::getInstance().getDirectContext();
198
+ }
199
+ #endif
200
+
195
201
  sk_sp<SkFontMgr> RNSkiOSPlatformContext::createFontMgr() {
196
202
  return SkFontMgr_New_CoreText(nullptr);
197
203
  }
@@ -208,20 +214,4 @@ RNSkiOSPlatformContext::takeScreenshotFromViewTag(size_t viewTag) {
208
214
  screenshotOfViewWithTag:[NSNumber numberWithLong:viewTag]];
209
215
  }
210
216
 
211
- void RNSkiOSPlatformContext::startDrawLoop() {
212
- if (_displayLink == nullptr) {
213
- _displayLink = [[DisplayLink alloc] init];
214
- [_displayLink start:^(double time) {
215
- notifyDrawLoop(false);
216
- }];
217
- }
218
- }
219
-
220
- void RNSkiOSPlatformContext::stopDrawLoop() {
221
- if (_displayLink != nullptr) {
222
- [_displayLink stop];
223
- _displayLink = nullptr;
224
- }
225
- }
226
-
227
217
  } // namespace RNSkia
@@ -51,7 +51,6 @@ using namespace facebook::react;
51
51
  int nativeId =
52
52
  [[RCTConvert NSString:RCTNSStringFromString(newProps.nativeId)] intValue];
53
53
  [self setNativeId:nativeId];
54
- [self setDrawingMode:newProps.mode];
55
54
  [self setDebugMode:newProps.debug];
56
55
  }
57
56
 
@@ -26,12 +26,6 @@ RCT_CUSTOM_VIEW_PROPERTY(nativeID, NSNumber, SkiaUIView) {
26
26
  [(SkiaUIView *)view setNativeId:nativeId];
27
27
  }
28
28
 
29
- RCT_CUSTOM_VIEW_PROPERTY(mode, NSString, SkiaUIView) {
30
- std::string mode =
31
- json != NULL ? [[RCTConvert NSString:json] UTF8String] : "default";
32
- [(SkiaUIView *)view setDrawingMode:mode];
33
- }
34
-
35
29
  RCT_CUSTOM_VIEW_PROPERTY(debug, BOOL, SkiaUIView) {
36
30
  bool debug = json != NULL ? [RCTConvert BOOL:json] : false;
37
31
  [(SkiaUIView *)view setDebugMode:debug];
@@ -53,7 +53,6 @@ using namespace facebook::react;
53
53
  int nativeId =
54
54
  [[RCTConvert NSString:RCTNSStringFromString(newProps.nativeId)] intValue];
55
55
  [self setNativeId:nativeId];
56
- [self setDrawingMode:newProps.mode];
57
56
  [self setDebugMode:newProps.debug];
58
57
  }
59
58
 
@@ -26,12 +26,6 @@ RCT_CUSTOM_VIEW_PROPERTY(nativeID, NSNumber, SkiaUIView) {
26
26
  [(SkiaUIView *)view setNativeId:nativeId];
27
27
  }
28
28
 
29
- RCT_CUSTOM_VIEW_PROPERTY(mode, NSString, SkiaUIView) {
30
- std::string mode =
31
- json != NULL ? [[RCTConvert NSString:json] UTF8String] : "default";
32
- [(SkiaUIView *)view setDrawingMode:mode];
33
- }
34
-
35
29
  RCT_CUSTOM_VIEW_PROPERTY(debug, BOOL, SkiaUIView) {
36
30
  bool debug = json != NULL ? [RCTConvert BOOL:json] : false;
37
31
  [(SkiaUIView *)view setDebugMode:debug];
@@ -31,7 +31,6 @@
31
31
  - (std::shared_ptr<RNSkBaseiOSView>)impl;
32
32
  - (SkiaManager *)skiaManager;
33
33
 
34
- - (void)setDrawingMode:(std::string)mode;
35
34
  - (void)setDebugMode:(bool)debugMode;
36
35
  - (void)setNativeId:(size_t)nativeId;
37
36
 
@@ -11,7 +11,6 @@
11
11
  @implementation SkiaUIView {
12
12
  std::shared_ptr<RNSkBaseiOSView> _impl;
13
13
  RNSkia::RNSkManager *_manager;
14
- RNSkia::RNSkDrawingMode _drawingMode;
15
14
  std::function<std::shared_ptr<RNSkBaseiOSView>(
16
15
  std::shared_ptr<RNSkia::RNSkPlatformContext>)>
17
16
  _factory;
@@ -45,7 +44,6 @@
45
44
  _manager = manager;
46
45
  _nativeId = 0;
47
46
  _debugMode = false;
48
- _drawingMode = RNSkia::RNSkDrawingMode::Default;
49
47
  _factory = factory;
50
48
  }
51
49
 
@@ -86,7 +84,6 @@
86
84
  if (_nativeId != 0) {
87
85
  _manager->setSkiaView(_nativeId, _impl->getDrawView());
88
86
  }
89
- _impl->getDrawView()->setDrawingMode(_drawingMode);
90
87
  _impl->getDrawView()->setShowDebugOverlays(_debugMode);
91
88
  }
92
89
  }
@@ -131,7 +128,7 @@
131
128
  // We override drawRect to ensure we to direct rendering when the
132
129
  // underlying OS view needs to render:
133
130
  if (_impl != nullptr) {
134
- _impl->getDrawView()->renderImmediate();
131
+ _impl->getDrawView()->redraw();
135
132
  }
136
133
  }
137
134
 
@@ -146,16 +143,6 @@
146
143
 
147
144
  #pragma mark Properties
148
145
 
149
- - (void)setDrawingMode:(std::string)mode {
150
- _drawingMode = mode.compare("continuous") == 0
151
- ? RNSkia::RNSkDrawingMode::Continuous
152
- : RNSkia::RNSkDrawingMode::Default;
153
-
154
- if (_impl != nullptr) {
155
- _impl->getDrawView()->setDrawingMode(_drawingMode);
156
- }
157
- }
158
-
159
146
  - (void)setDebugMode:(bool)debugMode {
160
147
  _debugMode = debugMode;
161
148
  if (_impl != nullptr) {
@@ -6,5 +6,6 @@ export declare const useCanvasRef: () => React.RefObject<SkiaDomView>;
6
6
  export interface CanvasProps extends SkiaBaseViewProps {
7
7
  ref?: RefObject<SkiaDomView>;
8
8
  children: ReactNode;
9
+ mode?: "default" | "continuous";
9
10
  }
10
11
  export declare const Canvas: FunctionComponent<CanvasProps & React.RefAttributes<SkiaDomView>>;
@@ -36,7 +36,7 @@ const Canvas = exports.Canvas = /*#__PURE__*/(0, _react.forwardRef)(({
36
36
  children,
37
37
  style,
38
38
  debug,
39
- mode,
39
+ mode = "default",
40
40
  onSize: _onSize,
41
41
  onLayout: _onLayout,
42
42
  ...props
@@ -70,19 +70,19 @@ const Canvas = exports.Canvas = /*#__PURE__*/(0, _react.forwardRef)(({
70
70
  style: style,
71
71
  root: root.dom,
72
72
  onLayout: onLayout,
73
- mode: mode,
74
- debug: debug
73
+ debug: debug,
74
+ mode: mode
75
75
  }, props));
76
76
  } else {
77
77
  return /*#__PURE__*/_react.default.createElement(_SkiaJSDomView.SkiaJSDomView, _extends({
78
- Skia: _Skia.Skia
78
+ Skia: _Skia.Skia,
79
+ mode: mode
79
80
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
80
81
  ,
81
82
  ref: ref,
82
83
  style: style,
83
84
  root: root.dom,
84
85
  onLayout: onLayout,
85
- mode: mode,
86
86
  debug: debug
87
87
  }, props));
88
88
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_views","_Skia","_SkiaJSDomView","_Reconciler","_HostComponents","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","useCanvasRef","useRef","exports","useOnSizeEvent","resultValue","onLayout","useCallback","event","width","height","nativeEvent","layout","value","Canvas","forwardRef","children","style","debug","mode","onSize","_onSize","_onLayout","props","forwardedRef","innerRef","ref","useCombinedRefs","redraw","_innerRef$current","current","getNativeId","_innerRef$current$nat","_innerRef$current2","id","nativeId","root","useMemo","SkiaRoot","Skia","NATIVE_DOM","useEffect","render","unmount","createElement","SkiaDomView","dom","SkiaJSDomView","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 MutableRefObject,\n ForwardedRef,\n FunctionComponent,\n} from \"react\";\nimport type { LayoutChangeEvent } from \"react-native\";\n\nimport { SkiaDomView } from \"../views\";\nimport { Skia } from \"../skia/Skia\";\nimport type { SkiaBaseViewProps } from \"../views\";\nimport { SkiaJSDomView } from \"../views/SkiaJSDomView\";\n\nimport { SkiaRoot } from \"./Reconciler\";\nimport { NATIVE_DOM } from \"./HostComponents\";\n\nexport const useCanvasRef = () => useRef<SkiaDomView>(null);\n\nexport interface CanvasProps extends SkiaBaseViewProps {\n ref?: RefObject<SkiaDomView>;\n children: ReactNode;\n}\n\nconst useOnSizeEvent = (\n resultValue: SkiaBaseViewProps[\"onSize\"],\n onLayout?: (event: LayoutChangeEvent) => void\n) => {\n return useCallback(\n (event: LayoutChangeEvent) => {\n if (onLayout) {\n onLayout(event);\n }\n const { width, height } = event.nativeEvent.layout;\n\n if (resultValue) {\n resultValue.value = { width, height };\n }\n },\n [onLayout, resultValue]\n );\n};\n\nexport const Canvas = forwardRef<SkiaDomView, CanvasProps>(\n (\n {\n children,\n style,\n debug,\n mode,\n onSize: _onSize,\n onLayout: _onLayout,\n ...props\n },\n forwardedRef\n ) => {\n const onLayout = useOnSizeEvent(_onSize, _onLayout);\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const redraw = useCallback(() => {\n innerRef.current?.redraw();\n }, [innerRef]);\n const getNativeId = useCallback(() => {\n const id = innerRef.current?.nativeId ?? -1;\n return id;\n }, [innerRef]);\n\n const root = useMemo(\n () => new SkiaRoot(Skia, NATIVE_DOM, redraw, getNativeId),\n [redraw, getNativeId]\n );\n\n // Render effect\n useEffect(() => {\n root.render(children);\n }, [children, root, redraw]);\n\n useEffect(() => {\n return () => {\n root.unmount();\n };\n }, [root]);\n\n if (NATIVE_DOM) {\n return (\n <SkiaDomView\n ref={ref}\n style={style}\n root={root.dom}\n onLayout={onLayout}\n mode={mode}\n debug={debug}\n {...props}\n />\n );\n } else {\n return (\n <SkiaJSDomView\n Skia={Skia}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n style={style}\n root={root.dom}\n onLayout={onLayout}\n mode={mode}\n debug={debug}\n {...props}\n />\n );\n }\n }\n) as FunctionComponent<CanvasProps & React.RefAttributes<SkiaDomView>>;\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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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_views","_Skia","_SkiaJSDomView","_Reconciler","_HostComponents","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","useCanvasRef","useRef","exports","useOnSizeEvent","resultValue","onLayout","useCallback","event","width","height","nativeEvent","layout","value","Canvas","forwardRef","children","style","debug","mode","onSize","_onSize","_onLayout","props","forwardedRef","innerRef","ref","useCombinedRefs","redraw","_innerRef$current","current","getNativeId","_innerRef$current$nat","_innerRef$current2","id","nativeId","root","useMemo","SkiaRoot","Skia","NATIVE_DOM","useEffect","render","unmount","createElement","SkiaDomView","dom","SkiaJSDomView","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 MutableRefObject,\n ForwardedRef,\n FunctionComponent,\n} from \"react\";\nimport type { LayoutChangeEvent } from \"react-native\";\n\nimport { SkiaDomView } from \"../views\";\nimport { Skia } from \"../skia/Skia\";\nimport type { SkiaBaseViewProps } from \"../views\";\nimport { SkiaJSDomView } from \"../views/SkiaJSDomView\";\n\nimport { SkiaRoot } from \"./Reconciler\";\nimport { NATIVE_DOM } from \"./HostComponents\";\n\nexport const useCanvasRef = () => useRef<SkiaDomView>(null);\n\nexport interface CanvasProps extends SkiaBaseViewProps {\n ref?: RefObject<SkiaDomView>;\n children: ReactNode;\n mode?: \"default\" | \"continuous\";\n}\n\nconst useOnSizeEvent = (\n resultValue: SkiaBaseViewProps[\"onSize\"],\n onLayout?: (event: LayoutChangeEvent) => void\n) => {\n return useCallback(\n (event: LayoutChangeEvent) => {\n if (onLayout) {\n onLayout(event);\n }\n const { width, height } = event.nativeEvent.layout;\n\n if (resultValue) {\n resultValue.value = { width, height };\n }\n },\n [onLayout, resultValue]\n );\n};\n\nexport const Canvas = forwardRef<SkiaDomView, CanvasProps>(\n (\n {\n children,\n style,\n debug,\n mode = \"default\",\n onSize: _onSize,\n onLayout: _onLayout,\n ...props\n },\n forwardedRef\n ) => {\n const onLayout = useOnSizeEvent(_onSize, _onLayout);\n const innerRef = useCanvasRef();\n const ref = useCombinedRefs(forwardedRef, innerRef);\n const redraw = useCallback(() => {\n innerRef.current?.redraw();\n }, [innerRef]);\n const getNativeId = useCallback(() => {\n const id = innerRef.current?.nativeId ?? -1;\n return id;\n }, [innerRef]);\n\n const root = useMemo(\n () => new SkiaRoot(Skia, NATIVE_DOM, redraw, getNativeId),\n [redraw, getNativeId]\n );\n\n // Render effect\n useEffect(() => {\n root.render(children);\n }, [children, root, redraw]);\n\n useEffect(() => {\n return () => {\n root.unmount();\n };\n }, [root]);\n\n if (NATIVE_DOM) {\n return (\n <SkiaDomView\n ref={ref}\n style={style}\n root={root.dom}\n onLayout={onLayout}\n debug={debug}\n mode={mode}\n {...props}\n />\n );\n } else {\n return (\n <SkiaJSDomView\n Skia={Skia}\n mode={mode}\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref={ref as any}\n style={style}\n root={root.dom}\n onLayout={onLayout}\n debug={debug}\n {...props}\n />\n );\n }\n }\n) as FunctionComponent<CanvasProps & React.RefAttributes<SkiaDomView>>;\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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","ignoreList":[]}
@@ -1,6 +1,5 @@
1
1
  import type { ViewProps } from "react-native";
2
2
  export interface NativeProps extends ViewProps {
3
- mode: string;
4
3
  debug?: boolean;
5
4
  }
6
5
  declare const _default: import("react-native/Libraries/Utilities/codegenNativeComponent").NativeComponentType<NativeProps>;
@@ -1 +1 @@
1
- {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sources":["SkiaPictureViewNativeComponent.ts"],"sourcesContent":["import codegenNativeComponent from \"react-native/Libraries/Utilities/codegenNativeComponent\";\nimport type { ViewProps } from \"react-native\";\n\nexport interface NativeProps extends ViewProps {\n mode: string;\n debug?: boolean;\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default codegenNativeComponent<NativeProps>(\"SkiaPictureView\");\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAQ7F;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GACe,IAAAG,+BAAsB,EAAc,iBAAiB,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_codegenNativeComponent","_interopRequireDefault","require","e","__esModule","default","_default","exports","codegenNativeComponent"],"sources":["SkiaPictureViewNativeComponent.ts"],"sourcesContent":["import codegenNativeComponent from \"react-native/Libraries/Utilities/codegenNativeComponent\";\nimport type { ViewProps } from \"react-native\";\n\nexport interface NativeProps extends ViewProps {\n debug?: boolean;\n}\n\n// eslint-disable-next-line import/no-default-export\nexport default codegenNativeComponent<NativeProps>(\"SkiaPictureView\");\n"],"mappings":";;;;;;AAAA,IAAAA,uBAAA,GAAAC,sBAAA,CAAAC,OAAA;AAA6F,SAAAD,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAO7F;AAAA,IAAAG,QAAA,GAAAC,OAAA,CAAAF,OAAA,GACe,IAAAG,+BAAsB,EAAc,iBAAiB,CAAC","ignoreList":[]}
@@ -1,13 +1,12 @@
1
1
  import React from "react";
2
2
  import type { SkRect, SkCanvas } from "../skia/types";
3
- import type { DrawMode, SkiaBaseViewProps } from "./types";
3
+ import type { SkiaBaseViewProps } from "./types";
4
4
  export declare abstract class SkiaBaseWebView<TProps extends SkiaBaseViewProps> extends React.Component<TProps> {
5
5
  constructor(props: TProps);
6
6
  private _surface;
7
7
  private _unsubscriptions;
8
8
  private _canvas;
9
9
  private _canvasRef;
10
- private _mode;
11
10
  private _redrawRequests;
12
11
  private requestId;
13
12
  protected width: number;
@@ -36,16 +35,6 @@ export declare abstract class SkiaBaseWebView<TProps extends SkiaBaseViewProps>
36
35
  */
37
36
  private tick;
38
37
  redraw(): void;
39
- /**
40
- * Updates the drawing mode for the skia view. This is the same
41
- * as declaratively setting the mode property on the SkiaView.
42
- * There are two drawing modes, "continuous" and "default",
43
- * where the continuous mode will continuously redraw the view and
44
- * the default mode will only redraw when any of the regular react
45
- * properties are changed like size and margins.
46
- * @param mode Drawing mode to use.
47
- */
48
- setDrawMode(mode: DrawMode): void;
49
38
  private onLayout;
50
39
  render(): React.JSX.Element;
51
40
  }