@shopify/react-native-skia 0.1.118 → 0.1.121

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 (58) hide show
  1. package/android/CMakeLists.txt +30 -16
  2. package/android/build.gradle +81 -34
  3. package/android/src/main/java/com/shopify/reactnative/skia/PlatformContext.java +1 -1
  4. package/ios/RNSkia-iOS/RNSkDrawViewImpl.h +3 -6
  5. package/ios/RNSkia-iOS/RNSkDrawViewImpl.mm +2 -4
  6. package/ios/RNSkia-iOS/SkiaDrawView.mm +3 -2
  7. package/lib/commonjs/renderer/HostConfig.js +1 -1
  8. package/lib/commonjs/renderer/HostConfig.js.map +1 -1
  9. package/lib/commonjs/renderer/components/Group.js +6 -3
  10. package/lib/commonjs/renderer/components/Group.js.map +1 -1
  11. package/lib/commonjs/renderer/components/Paint.js +1 -21
  12. package/lib/commonjs/renderer/components/Paint.js.map +1 -1
  13. package/lib/commonjs/renderer/components/index.js +0 -13
  14. package/lib/commonjs/renderer/components/index.js.map +1 -1
  15. package/lib/commonjs/renderer/nodes/Declaration.js +5 -1
  16. package/lib/commonjs/renderer/nodes/Declaration.js.map +1 -1
  17. package/lib/commonjs/renderer/nodes/Drawing.js +4 -16
  18. package/lib/commonjs/renderer/nodes/Drawing.js.map +1 -1
  19. package/lib/commonjs/renderer/nodes/Node.js +9 -16
  20. package/lib/commonjs/renderer/nodes/Node.js.map +1 -1
  21. package/lib/commonjs/renderer/processors/Paint.js +24 -26
  22. package/lib/commonjs/renderer/processors/Paint.js.map +1 -1
  23. package/lib/module/renderer/HostConfig.js +1 -1
  24. package/lib/module/renderer/HostConfig.js.map +1 -1
  25. package/lib/module/renderer/components/Group.js +7 -5
  26. package/lib/module/renderer/components/Group.js.map +1 -1
  27. package/lib/module/renderer/components/Paint.js +2 -22
  28. package/lib/module/renderer/components/Paint.js.map +1 -1
  29. package/lib/module/renderer/components/index.js +0 -1
  30. package/lib/module/renderer/components/index.js.map +1 -1
  31. package/lib/module/renderer/nodes/Declaration.js +1 -0
  32. package/lib/module/renderer/nodes/Declaration.js.map +1 -1
  33. package/lib/module/renderer/nodes/Drawing.js +5 -17
  34. package/lib/module/renderer/nodes/Drawing.js.map +1 -1
  35. package/lib/module/renderer/nodes/Node.js +9 -15
  36. package/lib/module/renderer/nodes/Node.js.map +1 -1
  37. package/lib/module/renderer/processors/Paint.js +22 -21
  38. package/lib/module/renderer/processors/Paint.js.map +1 -1
  39. package/lib/typescript/src/renderer/Canvas.d.ts +1 -1
  40. package/lib/typescript/src/renderer/components/index.d.ts +0 -1
  41. package/lib/typescript/src/renderer/nodes/Declaration.d.ts +1 -0
  42. package/lib/typescript/src/renderer/nodes/Node.d.ts +2 -2
  43. package/lib/typescript/src/renderer/processors/Paint.d.ts +2 -2
  44. package/package.json +1 -1
  45. package/src/renderer/HostConfig.ts +1 -1
  46. package/src/renderer/components/Group.tsx +24 -14
  47. package/src/renderer/components/Paint.tsx +5 -35
  48. package/src/renderer/components/index.ts +0 -1
  49. package/src/renderer/nodes/Declaration.tsx +4 -0
  50. package/src/renderer/nodes/Drawing.tsx +10 -20
  51. package/src/renderer/nodes/Node.ts +9 -12
  52. package/src/renderer/processors/Paint.ts +34 -31
  53. package/lib/commonjs/renderer/components/Defs.js +0 -30
  54. package/lib/commonjs/renderer/components/Defs.js.map +0 -1
  55. package/lib/module/renderer/components/Defs.js +0 -16
  56. package/lib/module/renderer/components/Defs.js.map +0 -1
  57. package/lib/typescript/src/renderer/components/Defs.d.ts +0 -5
  58. package/src/renderer/components/Defs.tsx +0 -19
@@ -10,12 +10,20 @@ set (SKIA_SVG_LIB "svg")
10
10
  set (SKIA_SKSHAPER_LIB "skshaper")
11
11
 
12
12
  set(build_DIR ${CMAKE_SOURCE_DIR}/build)
13
- file (GLOB LIBRN_DIR "${build_DIR}/react-native-0*/jni/${ANDROID_ABI}")
13
+ file(GLOB LIBRN_DIR "${PREBUILT_DIR}/${ANDROID_ABI}")
14
14
  file(GLOB libfbjni_link_DIRS "${build_DIR}/fbjni*.aar/jni/${ANDROID_ABI}")
15
15
  file(GLOB libfbjni_include_DIRS "${build_DIR}/fbjni-*-headers.jar/")
16
16
 
17
17
  link_directories(../libs/android/${ANDROID_ABI}/)
18
18
 
19
+ if(${REACT_NATIVE_VERSION} LESS 66)
20
+ file(
21
+ TO_CMAKE_PATH
22
+ "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi/jsi/jsi.cpp"
23
+ INCLUDE_JSI_CPP
24
+ )
25
+ endif()
26
+
19
27
  add_library(
20
28
  ${PACKAGE_NAME}
21
29
  SHARED
@@ -39,16 +47,10 @@ target_include_directories(
39
47
  PRIVATE
40
48
 
41
49
  # When installed in the development environment
42
- "../node_modules/react-native/ReactCommon/callinvoker"
43
- "../node_modules/react-native/ReactCommon/jsi"
44
- "../node_modules/react-native/ReactCommon/react/nativemodule/core"
45
- "../node_modules/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni"
46
-
47
- # When installed as a package the paths are a bit different
48
- "../../../react-native/ReactCommon/callinvoker"
49
- "../../../react-native/ReactCommon/jsi"
50
- "../../../react-native/ReactCommon/react/nativemodule/core"
51
- "../../../react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni"
50
+ "${NODE_MODULES_DIR}/react-native/ReactCommon/callinvoker"
51
+ "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi"
52
+ "${NODE_MODULES_DIR}/react-native/ReactCommon/react/nativemodule/core"
53
+ "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni"
52
54
 
53
55
  cpp/skia/include/config/
54
56
  cpp/skia/include/core/
@@ -87,11 +89,23 @@ find_library(
87
89
  )
88
90
 
89
91
  find_library(
90
- JSI_LIB
91
- jsi
92
- PATHS ${LIBRN_DIR}
93
- NO_CMAKE_FIND_ROOT_PATH
94
- )
92
+ JSI_LIB
93
+ jsi
94
+ PATHS ${LIBRN_DIR}
95
+ NO_CMAKE_FIND_ROOT_PATH
96
+ )
97
+ if(${REACT_NATIVE_VERSION} LESS 66)
98
+ # JSI lib didn't exist on RN 0.65 and before. Simply omit it.
99
+ set (JSI_LIB "")
100
+ else()
101
+ # RN 0.66 distributes libjsi.so, can be used instead of compiling jsi.cpp manually.
102
+ find_library(
103
+ JSI_LIB
104
+ jsi
105
+ PATHS ${LIBRN_DIR}
106
+ NO_CMAKE_FIND_ROOT_PATH
107
+ )
108
+ endif()
95
109
 
96
110
  find_library(
97
111
  REACT_LIB
@@ -1,3 +1,5 @@
1
+ import java.nio.file.Paths
2
+
1
3
  // android/build.gradle
2
4
 
3
5
  // based on:
@@ -26,6 +28,60 @@ def safeExtGet(prop, fallback) {
26
28
 
27
29
  apply plugin: 'com.android.library'
28
30
 
31
+ static def findNodeModules(baseDir) {
32
+ def basePath = baseDir.toPath().normalize()
33
+ // Node's module resolution algorithm searches up to the root directory,
34
+ // after which the base path will be null
35
+ while (basePath) {
36
+ def nodeModulesPath = Paths.get(basePath.toString(), "node_modules")
37
+ def reactNativePath = Paths.get(nodeModulesPath.toString(), "react-native")
38
+ if (nodeModulesPath.toFile().exists() && reactNativePath.toFile().exists()) {
39
+ return nodeModulesPath.toString()
40
+ }
41
+ basePath = basePath.getParent()
42
+ }
43
+ throw new GradleException("React-Native-Skia: Failed to find node_modules/ path!")
44
+ }
45
+
46
+ def nodeModules = findNodeModules(projectDir)
47
+ logger.warn("react-native-skia: node_modules/ found at: ${nodeModules}")
48
+
49
+ def sourceBuild = false
50
+ def defaultDir = null
51
+ def androidSourcesDir = null
52
+ def androidSourcesName = 'React Native sources'
53
+
54
+ if (rootProject.ext.has('reactNativeAndroidRoot')) {
55
+ defaultDir = rootProject.ext.get('reactNativeAndroidRoot')
56
+ androidSourcesDir = defaultDir.parentFile.toString()
57
+ } else if (findProject(':ReactAndroid') != null) {
58
+ sourceBuild = true
59
+ defaultDir = project(':ReactAndroid').projectDir
60
+ androidSourcesDir = defaultDir.parentFile.toString()
61
+ } else {
62
+ defaultDir = file("$nodeModules/react-native/android")
63
+ androidSourcesDir = defaultDir.parentFile.toString()
64
+ }
65
+
66
+ if (!defaultDir.exists()) {
67
+ throw new GradleException(
68
+ "${project.name}: React Native android directory (node_modules/react-native/android) does not exist! Resolved node_modules to: ${nodeModules}"
69
+ )
70
+ }
71
+
72
+ def prebuiltDir = sourceBuild
73
+ ? "$nodeModules/react-native/ReactAndroid/src/main/jni/prebuilt/lib"
74
+ : "$buildDir/react-native-0*/jni"
75
+
76
+
77
+ def reactProperties = new Properties()
78
+ file("$nodeModules/react-native/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
79
+ def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME").split("\\.")[1].toInteger()
80
+
81
+ logger.warn("react-native-skia: React Native version: ${REACT_NATIVE_VERSION}")
82
+ logger.warn("react-native-skia: Is Source build: ${sourceBuild}")
83
+ logger.warn("react-native-skia: Prebuilt dir: ${prebuiltDir}")
84
+
29
85
  buildscript {
30
86
  // The Android Gradle plugin is only required when opening the android folder stand-alone.
31
87
  // This avoids unnecessary downloads and potential conflicts when the library is included as a
@@ -56,7 +112,10 @@ android {
56
112
  cmake {
57
113
  cppFlags "-fexceptions", "-frtti", "-std=c++1y", "-DONANDROID"
58
114
  abiFilters 'x86', 'x86_64', 'armeabi-v7a', 'arm64-v8a'
59
- arguments '-DANDROID_STL=c++_shared'
115
+ arguments '-DANDROID_STL=c++_shared',
116
+ "-DREACT_NATIVE_VERSION=${REACT_NATIVE_VERSION}",
117
+ "-DNODE_MODULES_DIR=${nodeModules}",
118
+ "-DPREBUILT_DIR=${prebuiltDir}"
60
119
  }
61
120
  }
62
121
  }
@@ -72,7 +131,13 @@ android {
72
131
  }
73
132
 
74
133
  packagingOptions {
75
- excludes = ["**/libc++_shared.so"]
134
+ excludes = [
135
+ "**/libc++_shared.so",
136
+ "**/libfbjni.so",
137
+ "**/libjsi.so",
138
+ "**/libreact_nativemodule_core.so",
139
+ "**/libturbomodulejsijni.so"
140
+ ]
76
141
  }
77
142
 
78
143
 
@@ -114,33 +179,6 @@ dependencies {
114
179
  extractJNI(files(rnAAR))
115
180
  }
116
181
 
117
- def configureReactNativePom(def pom) {
118
- def packageJson = new groovy.json.JsonSlurper().parseText(file('../package.json').text)
119
-
120
- pom.project {
121
- name packageJson.title
122
- artifactId packageJson.name
123
- version = packageJson.version
124
- group = "com.shopify.reactnative.skia"
125
- description packageJson.description
126
- url packageJson.repository.baseUrl
127
-
128
- licenses {
129
- license {
130
- name packageJson.license
131
- url packageJson.repository.baseUrl + '/blob/master/' + packageJson.licenseFilename
132
- distribution 'repo'
133
- }
134
- }
135
-
136
- developers {
137
- developer {
138
- name packageJson.author
139
- }
140
- }
141
- }
142
- }
143
-
144
182
  afterEvaluate { project ->
145
183
  task androidSourcesJar(type: Jar) {
146
184
  classifier = 'sources'
@@ -188,9 +226,18 @@ task extractJNIFiles {
188
226
  }
189
227
  }
190
228
 
191
- tasks.whenTaskAdded { task ->
192
- if (task.name.contains('externalNativeBuild')) {
193
- task.dependsOn(extractAARHeaders)
194
- task.dependsOn(extractJNIFiles)
195
- }
229
+ extractJNIFiles.mustRunAfter extractAARHeaders
230
+
231
+ def nativeBuildDependsOn(dependsOnTask, variant) {
232
+ def buildTasks = tasks.findAll({ task ->
233
+ !task.name.contains("Clean") && (task.name.contains("externalNative") || task.name.contains("CMake")) })
234
+ if (variant != null) {
235
+ buildTasks = buildTasks.findAll({ task -> task.name.contains(variant) })
236
+ }
237
+ buildTasks.forEach { task -> task.dependsOn(dependsOnTask) }
196
238
  }
239
+
240
+ afterEvaluate {
241
+ nativeBuildDependsOn(extractAARHeaders, null)
242
+ nativeBuildDependsOn(extractJNIFiles, null)
243
+ }
@@ -66,7 +66,7 @@ public class PlatformContext {
66
66
  Choreographer.getInstance().postFrameCallback(frameCallback);
67
67
  }
68
68
 
69
- public void raise(String message) {
69
+ public void raise(final String message) {
70
70
  new Handler(Looper.getMainLooper()).post(new Runnable() {
71
71
  @Override
72
72
  public void run() {
@@ -18,14 +18,13 @@
18
18
 
19
19
  #pragma clang diagnostic pop
20
20
 
21
- @class SkiaDrawView;
22
-
23
21
  class RNSkDrawViewImpl : public RNSkia::RNSkDrawView {
24
22
  public:
25
- RNSkDrawViewImpl(SkiaDrawView *view,
26
- std::shared_ptr<RNSkia::RNSkPlatformContext> context);
23
+ RNSkDrawViewImpl(std::shared_ptr<RNSkia::RNSkPlatformContext> context);
27
24
 
28
25
  void setSize(int width, int height);
26
+
27
+ CALayer* getLayer() { return _layer; };
29
28
 
30
29
  protected:
31
30
  int getWidth() override { return _width * _context->getPixelDensity(); };
@@ -42,8 +41,6 @@ private:
42
41
  int _width = -1;
43
42
  int _height = -1;
44
43
 
45
- SkiaDrawView *_view;
46
-
47
44
  #pragma clang diagnostic push
48
45
  #pragma clang diagnostic ignored "-Wunguarded-availability-new"
49
46
  CAMetalLayer *_layer;
@@ -17,8 +17,8 @@ id<MTLCommandQueue> RNSkDrawViewImpl::_commandQueue = id<MTLCommandQueue>(CFReta
17
17
 
18
18
  sk_sp<GrDirectContext> RNSkDrawViewImpl::_skContext = nullptr;
19
19
 
20
- RNSkDrawViewImpl::RNSkDrawViewImpl(SkiaDrawView* view, std::shared_ptr<RNSkia::RNSkPlatformContext> context):
21
- _view(view), _context(context), RNSkia::RNSkDrawView(context) {
20
+ RNSkDrawViewImpl::RNSkDrawViewImpl(std::shared_ptr<RNSkia::RNSkPlatformContext> context):
21
+ _context(context), RNSkia::RNSkDrawView(context) {
22
22
 
23
23
  #pragma clang diagnostic push
24
24
  #pragma clang diagnostic ignored "-Wunguarded-availability-new"
@@ -30,8 +30,6 @@ RNSkDrawViewImpl::RNSkDrawViewImpl(SkiaDrawView* view, std::shared_ptr<RNSkia::R
30
30
  _layer.opaque = false;
31
31
  _layer.contentsScale = _context->getPixelDensity();
32
32
  _layer.pixelFormat = MTLPixelFormatBGRA8Unorm;
33
- _layer.frame = _view.bounds;
34
- [_view.layer addSublayer:_layer];
35
33
 
36
34
  setNativeDrawFunc(std::bind(&RNSkDrawViewImpl::drawFrame, this, std::placeholders::_1));
37
35
  }
@@ -56,13 +56,14 @@
56
56
  if(_nativeId != 0 && _manager != nullptr) {
57
57
  _manager->setSkiaDrawView(_nativeId, nullptr);
58
58
  }
59
+ [_impl->getLayer() removeFromSuperlayer];
59
60
  _impl = nullptr;
60
61
  }
61
62
  } else {
62
63
  // Create implementation view when the parent view is set
63
64
  if(_impl == nullptr && _manager != nullptr) {
64
- __weak decltype(self) weakSelf = self;
65
- _impl = std::make_shared<RNSkDrawViewImpl>(weakSelf, _manager->getPlatformContext());
65
+ _impl = std::make_shared<RNSkDrawViewImpl>(_manager->getPlatformContext());
66
+ [self.layer addSublayer:_impl->getLayer()];
66
67
  if(_nativeId != 0) {
67
68
  _manager->setSkiaDrawView(_nativeId, _impl.get());
68
69
  }
@@ -39,7 +39,7 @@ const bustBranchMemoization = parent => {
39
39
  let ancestor = parent;
40
40
 
41
41
  while (ancestor) {
42
- ancestor.memoized = false;
42
+ ancestor.memoized = null;
43
43
  ancestor = ancestor.parent;
44
44
  }
45
45
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["HostConfig.ts"],"names":["DEBUG","debug","console","log","allChildrenAreMemoized","node","memoizable","child","children","memoized","bustBranchMemoization","parent","ancestor","bustBranchMemoizable","appendNode","push","removeNode","index","indexOf","splice","depMgr","unSubscribeNode","c","insertBefore","before","beforeIndex","createNode","container","type","props","NodeType","Drawing","onDraw","skipProcessing","p1","DrawingNode","Declaration","onDeclare","p2","DeclarationNode","skHostConfig","now","performance","supportsMutation","isPrimaryRenderer","supportsPersistence","supportsHydration","scheduleTimeout","setTimeout","cancelTimeout","clearTimeout","noTimeout","appendChildToContainer","appendChild","getRootHostContext","_rootContainerInstance","getChildHostContext","_parentHostContext","_type","shouldSetTextContent","_props","createTextInstance","_text","_hostContext","_internalInstanceHandle","Error","createInstance","appendInitialChild","parentInstance","finalizeInitialChildren","commitMount","prepareForCommit","_containerInfo","finalizeContainerChildren","resetAfterCommit","redraw","getPublicInstance","prepareUpdate","instance","oldProps","newProps","propsAreEqual","commitUpdate","_updatePayload","prevProps","nextProps","_internalHandle","commitTextUpdate","_textInstance","_oldText","_newText","clearContainer","preparePortalMount","removeChild","removeChildFromContainer","insertInContainerBefore"],"mappings":"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","sourcesContent":["/*global NodeJS, performance*/\nimport type { HostConfig } from \"react-reconciler\";\n\nimport type { Node, Container, DeclarationProps, DrawingProps } from \"./nodes\";\nimport { DeclarationNode, DrawingNode, NodeType } from \"./nodes\";\nimport { exhaustiveCheck, shallowEq } from \"./typeddash\";\n\nconst DEBUG = false;\nexport const debug = (...args: Parameters<typeof console.log>) => {\n if (DEBUG) {\n console.log(...args);\n }\n};\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n skDeclaration: DeclarationProps<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n skDrawing: DrawingProps<any>;\n }\n }\n}\n\ntype Instance = Node;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Props = any;\ntype TextInstance = Node;\ntype SuspenseInstance = Instance;\ntype HydratableInstance = Instance;\ntype PublicInstance = Instance;\ntype HostContext = null;\ntype UpdatePayload = true;\ntype ChildSet = unknown;\ntype TimeoutHandle = NodeJS.Timeout;\ntype NoTimeout = -1;\n\ntype SkiaHostConfig = HostConfig<\n NodeType,\n Props,\n Container,\n Instance,\n TextInstance,\n SuspenseInstance,\n HydratableInstance,\n PublicInstance,\n HostContext,\n UpdatePayload,\n ChildSet,\n TimeoutHandle,\n NoTimeout\n>;\n\nconst allChildrenAreMemoized = (node: Instance) => {\n if (!node.memoizable) {\n return false;\n }\n for (const child of node.children) {\n if (!child.memoized) {\n return false;\n }\n }\n return true;\n};\n\nconst bustBranchMemoization = (parent: Node) => {\n if (parent.memoizable) {\n let ancestor: Node | undefined = parent;\n while (ancestor) {\n ancestor.memoized = false;\n ancestor = ancestor.parent;\n }\n }\n};\n\nconst bustBranchMemoizable = (parent: Node) => {\n if (parent.memoizable) {\n let ancestor: Node | undefined = parent;\n while (ancestor) {\n ancestor.memoizable = false;\n ancestor = ancestor.parent;\n }\n }\n};\n\nconst appendNode = (parent: Node, child: Node) => {\n child.parent = parent;\n bustBranchMemoization(parent);\n if (!child.memoizable) {\n bustBranchMemoizable(parent);\n }\n if (!parent.memoizable) {\n child.memoizable = false;\n }\n parent.children.push(child);\n};\n\nconst removeNode = (parent: Node, child: Node) => {\n bustBranchMemoization(parent);\n const index = parent.children.indexOf(child);\n parent.children.splice(index, 1);\n child.depMgr.unSubscribeNode(child);\n // unsubscribe to all children as well\n for (const c of child.children) {\n removeNode(child, c);\n }\n};\n\nconst insertBefore = (parent: Node, child: Node, before: Node) => {\n bustBranchMemoization(parent);\n const index = parent.children.indexOf(child);\n if (index !== -1) {\n parent.children.splice(index, 1);\n }\n const beforeIndex = parent.children.indexOf(before);\n parent.children.splice(beforeIndex, 0, child);\n};\n\nconst createNode = (container: Container, type: NodeType, props: Props) => {\n switch (type) {\n case NodeType.Drawing:\n const { onDraw, skipProcessing, ...p1 } = props;\n return new DrawingNode(container.depMgr, onDraw, skipProcessing, p1);\n case NodeType.Declaration:\n const { onDeclare, ...p2 } = props;\n return new DeclarationNode(container.depMgr, onDeclare, p2);\n default:\n // TODO: here we need to throw a nice error message\n // This is the error that will show up when the user uses nodes not supported by Skia (View, Audio, etc)\n return exhaustiveCheck(type);\n }\n};\n\nexport const skHostConfig: SkiaHostConfig = {\n /**\n * This function is used by the reconciler in order to calculate current time for prioritising work.\n */\n now: performance.now,\n\n supportsMutation: true,\n isPrimaryRenderer: false,\n supportsPersistence: false,\n supportsHydration: false,\n //supportsMicrotask: true,\n\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n\n appendChildToContainer(container, child) {\n debug(\"appendChildToContainer\", container, child);\n appendNode(container, child);\n },\n\n appendChild(parent, child) {\n debug(\"appendChild\", parent, child);\n appendNode(parent, child);\n },\n\n getRootHostContext: (_rootContainerInstance: Node) => {\n debug(\"getRootHostContext\");\n return null;\n },\n\n getChildHostContext(_parentHostContext, _type, _rootContainerInstance) {\n debug(\"getChildHostContext\");\n return null;\n },\n\n shouldSetTextContent(_type, _props) {\n return false;\n },\n\n createTextInstance(\n _text,\n _rootContainerInstance,\n _hostContext,\n _internalInstanceHandle\n ) {\n debug(\"createTextInstance\");\n // return SpanNode({}, text) as SkNode;\n throw new Error(\"Text nodes are not supported yet\");\n },\n\n createInstance(\n type,\n props,\n container,\n _hostContext,\n _internalInstanceHandle\n ) {\n debug(\"createInstance\", type);\n return createNode(container, type, props) as Node;\n },\n\n appendInitialChild(parentInstance, child) {\n debug(\"appendInitialChild\");\n appendNode(parentInstance, child);\n },\n\n finalizeInitialChildren(\n parentInstance,\n _type,\n _props,\n _rootContainerInstance,\n _hostContext\n ) {\n debug(\"finalizeInitialChildren\", parentInstance);\n return false;\n },\n\n commitMount() {\n // if finalizeInitialChildren = true\n debug(\"commitMount\");\n },\n\n prepareForCommit(_containerInfo) {\n debug(\"prepareForCommit\");\n return null;\n },\n\n finalizeContainerChildren: () => {\n debug(\"finalizeContainerChildren\");\n },\n\n resetAfterCommit(container) {\n debug(\"resetAfterCommit\");\n container.redraw();\n },\n\n getPublicInstance(node: Instance) {\n debug(\"getPublicInstance\");\n return node;\n },\n\n prepareUpdate: (\n instance,\n type,\n oldProps,\n newProps,\n _rootContainerInstance,\n _hostContext\n ) => {\n debug(\"prepareUpdate\");\n const propsAreEqual = shallowEq(oldProps, newProps);\n if (propsAreEqual && !instance.memoizable) {\n return null;\n }\n debug(\"update \", type);\n return true;\n },\n\n commitUpdate(\n instance,\n _updatePayload,\n type,\n prevProps,\n nextProps,\n _internalHandle\n ) {\n debug(\"commitUpdate: \", type);\n if (shallowEq(prevProps, nextProps) && allChildrenAreMemoized(instance)) {\n return;\n }\n bustBranchMemoization(instance);\n instance.props = nextProps;\n },\n\n commitTextUpdate: (\n _textInstance: TextInstance,\n _oldText: string,\n _newText: string\n ) => {\n // textInstance.instance = newText;\n },\n\n clearContainer: (container) => {\n debug(\"clearContainer\");\n container.children.splice(0);\n },\n\n preparePortalMount: () => {\n debug(\"preparePortalMount\");\n },\n\n removeChild: (parent, child) => {\n removeNode(parent, child);\n },\n\n removeChildFromContainer: (parent, child) => {\n removeNode(parent, child);\n },\n\n insertInContainerBefore: (parent, child, before) => {\n insertBefore(parent, child, before);\n },\n\n insertBefore: (parent, child, before) => {\n insertBefore(parent, child, before);\n },\n};\n"]}
1
+ {"version":3,"sources":["HostConfig.ts"],"names":["DEBUG","debug","console","log","allChildrenAreMemoized","node","memoizable","child","children","memoized","bustBranchMemoization","parent","ancestor","bustBranchMemoizable","appendNode","push","removeNode","index","indexOf","splice","depMgr","unSubscribeNode","c","insertBefore","before","beforeIndex","createNode","container","type","props","NodeType","Drawing","onDraw","skipProcessing","p1","DrawingNode","Declaration","onDeclare","p2","DeclarationNode","skHostConfig","now","performance","supportsMutation","isPrimaryRenderer","supportsPersistence","supportsHydration","scheduleTimeout","setTimeout","cancelTimeout","clearTimeout","noTimeout","appendChildToContainer","appendChild","getRootHostContext","_rootContainerInstance","getChildHostContext","_parentHostContext","_type","shouldSetTextContent","_props","createTextInstance","_text","_hostContext","_internalInstanceHandle","Error","createInstance","appendInitialChild","parentInstance","finalizeInitialChildren","commitMount","prepareForCommit","_containerInfo","finalizeContainerChildren","resetAfterCommit","redraw","getPublicInstance","prepareUpdate","instance","oldProps","newProps","propsAreEqual","commitUpdate","_updatePayload","prevProps","nextProps","_internalHandle","commitTextUpdate","_textInstance","_oldText","_newText","clearContainer","preparePortalMount","removeChild","removeChildFromContainer","insertInContainerBefore"],"mappings":"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","sourcesContent":["/*global NodeJS, performance*/\nimport type { HostConfig } from \"react-reconciler\";\n\nimport type { Node, Container, DeclarationProps, DrawingProps } from \"./nodes\";\nimport { DeclarationNode, DrawingNode, NodeType } from \"./nodes\";\nimport { exhaustiveCheck, shallowEq } from \"./typeddash\";\n\nconst DEBUG = false;\nexport const debug = (...args: Parameters<typeof console.log>) => {\n if (DEBUG) {\n console.log(...args);\n }\n};\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace JSX {\n interface IntrinsicElements {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n skDeclaration: DeclarationProps<any>;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n skDrawing: DrawingProps<any>;\n }\n }\n}\n\ntype Instance = Node;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Props = any;\ntype TextInstance = Node;\ntype SuspenseInstance = Instance;\ntype HydratableInstance = Instance;\ntype PublicInstance = Instance;\ntype HostContext = null;\ntype UpdatePayload = true;\ntype ChildSet = unknown;\ntype TimeoutHandle = NodeJS.Timeout;\ntype NoTimeout = -1;\n\ntype SkiaHostConfig = HostConfig<\n NodeType,\n Props,\n Container,\n Instance,\n TextInstance,\n SuspenseInstance,\n HydratableInstance,\n PublicInstance,\n HostContext,\n UpdatePayload,\n ChildSet,\n TimeoutHandle,\n NoTimeout\n>;\n\nconst allChildrenAreMemoized = (node: Instance) => {\n if (!node.memoizable) {\n return false;\n }\n for (const child of node.children) {\n if (!child.memoized) {\n return false;\n }\n }\n return true;\n};\n\nconst bustBranchMemoization = (parent: Node) => {\n if (parent.memoizable) {\n let ancestor: Node | undefined = parent;\n while (ancestor) {\n ancestor.memoized = null;\n ancestor = ancestor.parent;\n }\n }\n};\n\nconst bustBranchMemoizable = (parent: Node) => {\n if (parent.memoizable) {\n let ancestor: Node | undefined = parent;\n while (ancestor) {\n ancestor.memoizable = false;\n ancestor = ancestor.parent;\n }\n }\n};\n\nconst appendNode = (parent: Node, child: Node) => {\n child.parent = parent;\n bustBranchMemoization(parent);\n if (!child.memoizable) {\n bustBranchMemoizable(parent);\n }\n if (!parent.memoizable) {\n child.memoizable = false;\n }\n parent.children.push(child);\n};\n\nconst removeNode = (parent: Node, child: Node) => {\n bustBranchMemoization(parent);\n const index = parent.children.indexOf(child);\n parent.children.splice(index, 1);\n child.depMgr.unSubscribeNode(child);\n // unsubscribe to all children as well\n for (const c of child.children) {\n removeNode(child, c);\n }\n};\n\nconst insertBefore = (parent: Node, child: Node, before: Node) => {\n bustBranchMemoization(parent);\n const index = parent.children.indexOf(child);\n if (index !== -1) {\n parent.children.splice(index, 1);\n }\n const beforeIndex = parent.children.indexOf(before);\n parent.children.splice(beforeIndex, 0, child);\n};\n\nconst createNode = (container: Container, type: NodeType, props: Props) => {\n switch (type) {\n case NodeType.Drawing:\n const { onDraw, skipProcessing, ...p1 } = props;\n return new DrawingNode(container.depMgr, onDraw, skipProcessing, p1);\n case NodeType.Declaration:\n const { onDeclare, ...p2 } = props;\n return new DeclarationNode(container.depMgr, onDeclare, p2);\n default:\n // TODO: here we need to throw a nice error message\n // This is the error that will show up when the user uses nodes not supported by Skia (View, Audio, etc)\n return exhaustiveCheck(type);\n }\n};\n\nexport const skHostConfig: SkiaHostConfig = {\n /**\n * This function is used by the reconciler in order to calculate current time for prioritising work.\n */\n now: performance.now,\n\n supportsMutation: true,\n isPrimaryRenderer: false,\n supportsPersistence: false,\n supportsHydration: false,\n //supportsMicrotask: true,\n\n scheduleTimeout: setTimeout,\n cancelTimeout: clearTimeout,\n noTimeout: -1,\n\n appendChildToContainer(container, child) {\n debug(\"appendChildToContainer\", container, child);\n appendNode(container, child);\n },\n\n appendChild(parent, child) {\n debug(\"appendChild\", parent, child);\n appendNode(parent, child);\n },\n\n getRootHostContext: (_rootContainerInstance: Node) => {\n debug(\"getRootHostContext\");\n return null;\n },\n\n getChildHostContext(_parentHostContext, _type, _rootContainerInstance) {\n debug(\"getChildHostContext\");\n return null;\n },\n\n shouldSetTextContent(_type, _props) {\n return false;\n },\n\n createTextInstance(\n _text,\n _rootContainerInstance,\n _hostContext,\n _internalInstanceHandle\n ) {\n debug(\"createTextInstance\");\n // return SpanNode({}, text) as SkNode;\n throw new Error(\"Text nodes are not supported yet\");\n },\n\n createInstance(\n type,\n props,\n container,\n _hostContext,\n _internalInstanceHandle\n ) {\n debug(\"createInstance\", type);\n return createNode(container, type, props) as Node;\n },\n\n appendInitialChild(parentInstance, child) {\n debug(\"appendInitialChild\");\n appendNode(parentInstance, child);\n },\n\n finalizeInitialChildren(\n parentInstance,\n _type,\n _props,\n _rootContainerInstance,\n _hostContext\n ) {\n debug(\"finalizeInitialChildren\", parentInstance);\n return false;\n },\n\n commitMount() {\n // if finalizeInitialChildren = true\n debug(\"commitMount\");\n },\n\n prepareForCommit(_containerInfo) {\n debug(\"prepareForCommit\");\n return null;\n },\n\n finalizeContainerChildren: () => {\n debug(\"finalizeContainerChildren\");\n },\n\n resetAfterCommit(container) {\n debug(\"resetAfterCommit\");\n container.redraw();\n },\n\n getPublicInstance(node: Instance) {\n debug(\"getPublicInstance\");\n return node;\n },\n\n prepareUpdate: (\n instance,\n type,\n oldProps,\n newProps,\n _rootContainerInstance,\n _hostContext\n ) => {\n debug(\"prepareUpdate\");\n const propsAreEqual = shallowEq(oldProps, newProps);\n if (propsAreEqual && !instance.memoizable) {\n return null;\n }\n debug(\"update \", type);\n return true;\n },\n\n commitUpdate(\n instance,\n _updatePayload,\n type,\n prevProps,\n nextProps,\n _internalHandle\n ) {\n debug(\"commitUpdate: \", type);\n if (shallowEq(prevProps, nextProps) && allChildrenAreMemoized(instance)) {\n return;\n }\n bustBranchMemoization(instance);\n instance.props = nextProps;\n },\n\n commitTextUpdate: (\n _textInstance: TextInstance,\n _oldText: string,\n _newText: string\n ) => {\n // textInstance.instance = newText;\n },\n\n clearContainer: (container) => {\n debug(\"clearContainer\");\n container.children.splice(0);\n },\n\n preparePortalMount: () => {\n debug(\"preparePortalMount\");\n },\n\n removeChild: (parent, child) => {\n removeNode(parent, child);\n },\n\n removeChildFromContainer: (parent, child) => {\n removeNode(parent, child);\n },\n\n insertInContainerBefore: (parent, child, before) => {\n insertBefore(parent, child, before);\n },\n\n insertBefore: (parent, child, before) => {\n insertBefore(parent, child, before);\n },\n};\n"]}
@@ -13,6 +13,8 @@ var _processors = require("../processors");
13
13
 
14
14
  var _nodes = require("../nodes");
15
15
 
16
+ var _Declaration = require("../nodes/Declaration");
17
+
16
18
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
19
 
18
20
  function _extends() { _extends = Object.assign || 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); }
@@ -30,8 +32,9 @@ const onDraw = (0, _nodes.createDrawing)((ctx, _ref, node) => {
30
32
  canvas,
31
33
  opacity
32
34
  } = ctx;
33
- const paint = (0, _processors.selectPaint)(ctx.paint, groupProps);
34
- (0, _processors.processPaint)(paint, opacity, groupProps);
35
+ const declarations = node.children.filter(_Declaration.isDeclarationNode).map(child => child.draw(ctx));
36
+ const drawings = node.children.filter(child => child instanceof _nodes.DrawingNode);
37
+ const paint = (0, _processors.processPaint)(ctx.paint.copy(), opacity, groupProps, declarations);
35
38
  const hasTransform = !!groupProps.transform || !!groupProps.matrix;
36
39
  const hasClip = !!clip;
37
40
  const shouldSave = hasTransform || hasClip || !!layer;
@@ -62,7 +65,7 @@ const onDraw = (0, _nodes.createDrawing)((ctx, _ref, node) => {
62
65
  node.visit({ ...ctx,
63
66
  paint,
64
67
  opacity: groupProps.opacity ? groupProps.opacity * opacity : opacity
65
- });
68
+ }, drawings);
66
69
 
67
70
  if (shouldSave) {
68
71
  canvas.restore();
@@ -1 +1 @@
1
- {"version":3,"sources":["Group.tsx"],"names":["isSkPaint","obj","__typename__","onDraw","ctx","node","layer","clip","invertClip","groupProps","canvas","opacity","paint","hasTransform","transform","matrix","hasClip","shouldSave","saveLayer","current","undefined","save","op","ClipOp","Difference","Intersect","visit","restore","Group","props"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;AAYA;;;;;;AAEA,MAAMA,SAAS,GAAIC,GAAD,IAChB,kBAAkBA,GAAlB,IAAyBA,GAAG,CAACC,YAAJ,KAAqB,OADhD;;AASA,MAAMC,MAAM,GAAG,0BACb,CAACC,GAAD,QAAkDC,IAAlD,KAA2D;AAAA,MAArD;AAAEC,IAAAA,KAAF;AAASC,IAAAA,IAAT;AAAeC,IAAAA,UAAf;AAA2B,OAAGC;AAA9B,GAAqD;AACzD,QAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,MAAsBP,GAA5B;AACA,QAAMQ,KAAK,GAAG,6BAAYR,GAAG,CAACQ,KAAhB,EAAuBH,UAAvB,CAAd;AACA,gCAAaG,KAAb,EAAoBD,OAApB,EAA6BF,UAA7B;AACA,QAAMI,YAAY,GAAG,CAAC,CAACJ,UAAU,CAACK,SAAb,IAA0B,CAAC,CAACL,UAAU,CAACM,MAA5D;AACA,QAAMC,OAAO,GAAG,CAAC,CAACT,IAAlB;AACA,QAAMU,UAAU,GAAGJ,YAAY,IAAIG,OAAhB,IAA2B,CAAC,CAACV,KAAhD;;AACA,MAAIW,UAAJ,EAAgB;AACd,QAAIX,KAAJ,EAAW;AACT,UAAI,OAAOA,KAAP,KAAiB,SAArB,EAAgC;AAC9BI,QAAAA,MAAM,CAACQ,SAAP;AACD,OAFD,MAEO,IAAIlB,SAAS,CAACM,KAAD,CAAb,EAAsB;AAC3BI,QAAAA,MAAM,CAACQ,SAAP,CAAiBZ,KAAjB;AACD,OAFM,MAEA;AAAA;;AACLI,QAAAA,MAAM,CAACQ,SAAP,mBAAiBZ,KAAK,CAACa,OAAvB,2DAAkCC,SAAlC;AACD;AACF,KARD,MAQO;AACLV,MAAAA,MAAM,CAACW,IAAP;AACD;;AACD,sCAAiBjB,GAAjB,EAAsBK,UAAtB;;AACA,QAAIF,IAAJ,EAAU;AACR,YAAMe,EAAE,GAAGd,UAAU,GAAGe,aAAOC,UAAV,GAAuBD,aAAOE,SAAnD;AACA,mCAAYf,MAAZ,EAAoBH,IAApB,EAA0Be,EAA1B;AACD;AACF;;AACDjB,EAAAA,IAAI,CAACqB,KAAL,CAAW,EACT,GAAGtB,GADM;AAETQ,IAAAA,KAFS;AAGTD,IAAAA,OAAO,EAAEF,UAAU,CAACE,OAAX,GAAqBF,UAAU,CAACE,OAAX,GAAqBA,OAA1C,GAAoDA;AAHpD,GAAX;;AAKA,MAAIM,UAAJ,EAAgB;AACdP,IAAAA,MAAM,CAACiB,OAAP;AACD;AACF,CAlCY,CAAf;;AAqCO,MAAMC,KAAK,GAAIC,KAAD,IAAsC;AACzD,sBAAO;AAAW,IAAA,MAAM,EAAE1B;AAAnB,KAA+B0B,KAA/B;AAAsC,IAAA,cAAc;AAApD,KAAP;AACD,CAFM","sourcesContent":["import React from \"react\";\nimport type { RefObject } from \"react\";\n\nimport type { SkPaint } from \"../../skia\";\nimport { ClipOp } from \"../../skia\";\nimport {\n processTransform,\n selectPaint,\n processPaint,\n processClip,\n} from \"../processors\";\nimport type {\n CustomPaintProps,\n TransformProps,\n AnimatedProps,\n ClipDef,\n} from \"../processors\";\nimport { createDrawing } from \"../nodes\";\n\nconst isSkPaint = (obj: RefObject<SkPaint> | SkPaint): obj is SkPaint =>\n \"__typename__\" in obj && obj.__typename__ === \"Paint\";\n\nexport interface GroupProps extends CustomPaintProps, TransformProps {\n clip?: ClipDef;\n invertClip?: boolean;\n layer?: RefObject<SkPaint> | SkPaint | boolean;\n}\n\nconst onDraw = createDrawing<GroupProps>(\n (ctx, { layer, clip, invertClip, ...groupProps }, node) => {\n const { canvas, opacity } = ctx;\n const paint = selectPaint(ctx.paint, groupProps);\n processPaint(paint, opacity, groupProps);\n const hasTransform = !!groupProps.transform || !!groupProps.matrix;\n const hasClip = !!clip;\n const shouldSave = hasTransform || hasClip || !!layer;\n if (shouldSave) {\n if (layer) {\n if (typeof layer === \"boolean\") {\n canvas.saveLayer();\n } else if (isSkPaint(layer)) {\n canvas.saveLayer(layer);\n } else {\n canvas.saveLayer(layer.current ?? undefined);\n }\n } else {\n canvas.save();\n }\n processTransform(ctx, groupProps);\n if (clip) {\n const op = invertClip ? ClipOp.Difference : ClipOp.Intersect;\n processClip(canvas, clip, op);\n }\n }\n node.visit({\n ...ctx,\n paint,\n opacity: groupProps.opacity ? groupProps.opacity * opacity : opacity,\n });\n if (shouldSave) {\n canvas.restore();\n }\n }\n);\n\nexport const Group = (props: AnimatedProps<GroupProps>) => {\n return <skDrawing onDraw={onDraw} {...props} skipProcessing />;\n};\n"]}
1
+ {"version":3,"sources":["Group.tsx"],"names":["isSkPaint","obj","__typename__","onDraw","ctx","node","layer","clip","invertClip","groupProps","canvas","opacity","declarations","children","filter","isDeclarationNode","map","child","draw","drawings","DrawingNode","paint","copy","hasTransform","transform","matrix","hasClip","shouldSave","saveLayer","current","undefined","save","op","ClipOp","Difference","Intersect","visit","restore","Group","props"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;AAOA;;AACA;;;;;;AAEA,MAAMA,SAAS,GAAIC,GAAD,IAChB,kBAAkBA,GAAlB,IAAyBA,GAAG,CAACC,YAAJ,KAAqB,OADhD;;AASA,MAAMC,MAAM,GAAG,0BACb,CAACC,GAAD,QAAkDC,IAAlD,KAA2D;AAAA,MAArD;AAAEC,IAAAA,KAAF;AAASC,IAAAA,IAAT;AAAeC,IAAAA,UAAf;AAA2B,OAAGC;AAA9B,GAAqD;AACzD,QAAM;AAAEC,IAAAA,MAAF;AAAUC,IAAAA;AAAV,MAAsBP,GAA5B;AACA,QAAMQ,YAAY,GAAGP,IAAI,CAACQ,QAAL,CAClBC,MADkB,CACXC,8BADW,EAElBC,GAFkB,CAEbC,KAAD,IAAWA,KAAK,CAACC,IAAN,CAAWd,GAAX,CAFG,CAArB;AAIA,QAAMe,QAAQ,GAAGd,IAAI,CAACQ,QAAL,CAAcC,MAAd,CACdG,KAAD,IAAWA,KAAK,YAAYG,kBADb,CAAjB;AAGA,QAAMC,KAAK,GAAG,8BACZjB,GAAG,CAACiB,KAAJ,CAAUC,IAAV,EADY,EAEZX,OAFY,EAGZF,UAHY,EAIZG,YAJY,CAAd;AAMA,QAAMW,YAAY,GAAG,CAAC,CAACd,UAAU,CAACe,SAAb,IAA0B,CAAC,CAACf,UAAU,CAACgB,MAA5D;AACA,QAAMC,OAAO,GAAG,CAAC,CAACnB,IAAlB;AACA,QAAMoB,UAAU,GAAGJ,YAAY,IAAIG,OAAhB,IAA2B,CAAC,CAACpB,KAAhD;;AACA,MAAIqB,UAAJ,EAAgB;AACd,QAAIrB,KAAJ,EAAW;AACT,UAAI,OAAOA,KAAP,KAAiB,SAArB,EAAgC;AAC9BI,QAAAA,MAAM,CAACkB,SAAP;AACD,OAFD,MAEO,IAAI5B,SAAS,CAACM,KAAD,CAAb,EAAsB;AAC3BI,QAAAA,MAAM,CAACkB,SAAP,CAAiBtB,KAAjB;AACD,OAFM,MAEA;AAAA;;AACLI,QAAAA,MAAM,CAACkB,SAAP,mBAAiBtB,KAAK,CAACuB,OAAvB,2DAAkCC,SAAlC;AACD;AACF,KARD,MAQO;AACLpB,MAAAA,MAAM,CAACqB,IAAP;AACD;;AACD,sCAAiB3B,GAAjB,EAAsBK,UAAtB;;AACA,QAAIF,IAAJ,EAAU;AACR,YAAMyB,EAAE,GAAGxB,UAAU,GAAGyB,aAAOC,UAAV,GAAuBD,aAAOE,SAAnD;AACA,mCAAYzB,MAAZ,EAAoBH,IAApB,EAA0ByB,EAA1B;AACD;AACF;;AACD3B,EAAAA,IAAI,CAAC+B,KAAL,CACE,EACE,GAAGhC,GADL;AAEEiB,IAAAA,KAFF;AAGEV,IAAAA,OAAO,EAAEF,UAAU,CAACE,OAAX,GAAqBF,UAAU,CAACE,OAAX,GAAqBA,OAA1C,GAAoDA;AAH/D,GADF,EAMEQ,QANF;;AAQA,MAAIQ,UAAJ,EAAgB;AACdjB,IAAAA,MAAM,CAAC2B,OAAP;AACD;AACF,CAhDY,CAAf;;AAmDO,MAAMC,KAAK,GAAIC,KAAD,IAAsC;AACzD,sBAAO;AAAW,IAAA,MAAM,EAAEpC;AAAnB,KAA+BoC,KAA/B;AAAsC,IAAA,cAAc;AAApD,KAAP;AACD,CAFM","sourcesContent":["import React from \"react\";\nimport type { RefObject } from \"react\";\n\nimport type { SkPaint } from \"../../skia\";\nimport { ClipOp } from \"../../skia\";\nimport { processTransform, processPaint, processClip } from \"../processors\";\nimport type {\n CustomPaintProps,\n TransformProps,\n AnimatedProps,\n ClipDef,\n} from \"../processors\";\nimport { createDrawing, DrawingNode } from \"../nodes\";\nimport { isDeclarationNode } from \"../nodes/Declaration\";\n\nconst isSkPaint = (obj: RefObject<SkPaint> | SkPaint): obj is SkPaint =>\n \"__typename__\" in obj && obj.__typename__ === \"Paint\";\n\nexport interface GroupProps extends CustomPaintProps, TransformProps {\n clip?: ClipDef;\n invertClip?: boolean;\n layer?: RefObject<SkPaint> | SkPaint | boolean;\n}\n\nconst onDraw = createDrawing<GroupProps>(\n (ctx, { layer, clip, invertClip, ...groupProps }, node) => {\n const { canvas, opacity } = ctx;\n const declarations = node.children\n .filter(isDeclarationNode)\n .map((child) => child.draw(ctx));\n\n const drawings = node.children.filter(\n (child) => child instanceof DrawingNode\n );\n const paint = processPaint(\n ctx.paint.copy(),\n opacity,\n groupProps,\n declarations\n );\n const hasTransform = !!groupProps.transform || !!groupProps.matrix;\n const hasClip = !!clip;\n const shouldSave = hasTransform || hasClip || !!layer;\n if (shouldSave) {\n if (layer) {\n if (typeof layer === \"boolean\") {\n canvas.saveLayer();\n } else if (isSkPaint(layer)) {\n canvas.saveLayer(layer);\n } else {\n canvas.saveLayer(layer.current ?? undefined);\n }\n } else {\n canvas.save();\n }\n processTransform(ctx, groupProps);\n if (clip) {\n const op = invertClip ? ClipOp.Difference : ClipOp.Intersect;\n processClip(canvas, clip, op);\n }\n }\n node.visit(\n {\n ...ctx,\n paint,\n opacity: groupProps.opacity ? groupProps.opacity * opacity : opacity,\n },\n drawings\n );\n if (shouldSave) {\n canvas.restore();\n }\n }\n);\n\nexport const Group = (props: AnimatedProps<GroupProps>) => {\n return <skDrawing onDraw={onDraw} {...props} skipProcessing />;\n};\n"]}
@@ -25,27 +25,7 @@ exports.usePaintRef = usePaintRef;
25
25
  const Paint = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
26
26
  const paint = (0, _react.useMemo)(() => _skia.Skia.Paint(), []);
27
27
  (0, _react.useImperativeHandle)(ref, () => paint, [paint]);
28
- const onDeclare = (0, _react.useMemo)(() => (0, _nodes.createDeclaration)((paintProps, children, ctx) => {
29
- (0, _processors.processPaint)(paint, ctx.opacity, paintProps);
30
- children.forEach(child => {
31
- if ((0, _skia.isShader)(child)) {
32
- paint.setShader(child);
33
- } else if ((0, _skia.isMaskFilter)(child)) {
34
- paint.setMaskFilter(child);
35
- } else if ((0, _skia.isColorFilter)(child)) {
36
- paint.setColorFilter(child);
37
- } else if ((0, _skia.isPathEffect)(child)) {
38
- paint.setPathEffect(child);
39
- }
40
- });
41
- const filters = children.filter(_skia.isImageFilter);
42
-
43
- if (filters.length > 0) {
44
- paint.setImageFilter(filters.reverse().reduce(_skia.Skia.ImageFilter.MakeCompose, null));
45
- }
46
-
47
- return paint;
48
- }), [paint]);
28
+ const onDeclare = (0, _react.useMemo)(() => (0, _nodes.createDeclaration)((paintProps, children, ctx) => (0, _processors.processPaint)(paint, ctx.opacity, paintProps, children)), [paint]);
49
29
  return /*#__PURE__*/_react.default.createElement("skDeclaration", _extends({
50
30
  onDeclare: onDeclare
51
31
  }, props));
@@ -1 +1 @@
1
- {"version":3,"sources":["Paint.tsx"],"names":["usePaintRef","Paint","props","ref","paint","Skia","onDeclare","paintProps","children","ctx","opacity","forEach","child","setShader","setMaskFilter","setColorFilter","setPathEffect","filters","filter","isImageFilter","length","setImageFilter","reverse","reduce","ImageFilter","MakeCompose"],"mappings":";;;;;;;AACA;;AAGA;;AASA;;AACA;;;;;;;;AAEO,MAAMA,WAAW,GAAG,MAAM,mBAAgB,IAAhB,CAA1B;;;AAMA,MAAMC,KAAK,gBAAG,uBACnB,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACd,QAAMC,KAAK,GAAG,oBAAQ,MAAMC,WAAKJ,KAAL,EAAd,EAA4B,EAA5B,CAAd;AACA,kCAAoBE,GAApB,EAAyB,MAAMC,KAA/B,EAAsC,CAACA,KAAD,CAAtC;AACA,QAAME,SAAS,GAAG,oBAChB,MACE,8BAA8B,CAACC,UAAD,EAAaC,QAAb,EAAuBC,GAAvB,KAA+B;AAC3D,kCAAaL,KAAb,EAAoBK,GAAG,CAACC,OAAxB,EAAiCH,UAAjC;AACAC,IAAAA,QAAQ,CAACG,OAAT,CAAkBC,KAAD,IAAW;AAC1B,UAAI,oBAASA,KAAT,CAAJ,EAAqB;AACnBR,QAAAA,KAAK,CAACS,SAAN,CAAgBD,KAAhB;AACD,OAFD,MAEO,IAAI,wBAAaA,KAAb,CAAJ,EAAyB;AAC9BR,QAAAA,KAAK,CAACU,aAAN,CAAoBF,KAApB;AACD,OAFM,MAEA,IAAI,yBAAcA,KAAd,CAAJ,EAA0B;AAC/BR,QAAAA,KAAK,CAACW,cAAN,CAAqBH,KAArB;AACD,OAFM,MAEA,IAAI,wBAAaA,KAAb,CAAJ,EAAyB;AAC9BR,QAAAA,KAAK,CAACY,aAAN,CAAoBJ,KAApB;AACD;AACF,KAVD;AAWA,UAAMK,OAAO,GAAGT,QAAQ,CAACU,MAAT,CAAgBC,mBAAhB,CAAhB;;AACA,QAAIF,OAAO,CAACG,MAAR,GAAiB,CAArB,EAAwB;AACtBhB,MAAAA,KAAK,CAACiB,cAAN,CACEJ,OAAO,CACJK,OADH,GAEGC,MAFH,CAGIlB,WAAKmB,WAAL,CAAiBC,WAHrB,EAII,IAJJ,CADF;AAQD;;AACD,WAAOrB,KAAP;AACD,GAzBD,CAFc,EA4BhB,CAACA,KAAD,CA5BgB,CAAlB;AA8BA,sBAAO;AAAe,IAAA,SAAS,EAAEE;AAA1B,KAAyCJ,KAAzC,EAAP;AACD,CAnCkB,CAAd","sourcesContent":["import type { ReactNode } from \"react\";\nimport React, { useRef, useMemo, forwardRef, useImperativeHandle } from \"react\";\n\nimport type { SkPaint, SkImageFilter } from \"../../skia\";\nimport {\n isShader,\n isMaskFilter,\n isColorFilter,\n Skia,\n isImageFilter,\n isPathEffect,\n} from \"../../skia\";\nimport type { CustomPaintProps, AnimatedProps } from \"../processors\";\nimport { processPaint } from \"../processors\";\nimport { createDeclaration } from \"../nodes\";\n\nexport const usePaintRef = () => useRef<SkPaint>(null);\n\nexport interface PaintProps extends Omit<CustomPaintProps, \"paint\"> {\n children?: ReactNode | ReactNode[];\n}\n\nexport const Paint = forwardRef<SkPaint, AnimatedProps<PaintProps>>(\n (props, ref) => {\n const paint = useMemo(() => Skia.Paint(), []);\n useImperativeHandle(ref, () => paint, [paint]);\n const onDeclare = useMemo(\n () =>\n createDeclaration<PaintProps>((paintProps, children, ctx) => {\n processPaint(paint, ctx.opacity, paintProps);\n children.forEach((child) => {\n if (isShader(child)) {\n paint.setShader(child);\n } else if (isMaskFilter(child)) {\n paint.setMaskFilter(child);\n } else if (isColorFilter(child)) {\n paint.setColorFilter(child);\n } else if (isPathEffect(child)) {\n paint.setPathEffect(child);\n }\n });\n const filters = children.filter(isImageFilter);\n if (filters.length > 0) {\n paint.setImageFilter(\n filters\n .reverse()\n .reduce<SkImageFilter | null>(\n Skia.ImageFilter.MakeCompose,\n null\n )\n );\n }\n return paint;\n }),\n [paint]\n );\n return <skDeclaration onDeclare={onDeclare} {...props} />;\n }\n);\n"]}
1
+ {"version":3,"sources":["Paint.tsx"],"names":["usePaintRef","Paint","props","ref","paint","Skia","onDeclare","paintProps","children","ctx","opacity"],"mappings":";;;;;;;AACA;;AAGA;;AAEA;;AACA;;;;;;;;AAEO,MAAMA,WAAW,GAAG,MAAM,mBAAgB,IAAhB,CAA1B;;;AAMA,MAAMC,KAAK,gBAAG,uBACnB,CAACC,KAAD,EAAQC,GAAR,KAAgB;AACd,QAAMC,KAAK,GAAG,oBAAQ,MAAMC,WAAKJ,KAAL,EAAd,EAA4B,EAA5B,CAAd;AACA,kCAAoBE,GAApB,EAAyB,MAAMC,KAA/B,EAAsC,CAACA,KAAD,CAAtC;AACA,QAAME,SAAS,GAAG,oBAChB,MACE,8BAA8B,CAACC,UAAD,EAAaC,QAAb,EAAuBC,GAAvB,KAC5B,8BAAaL,KAAb,EAAoBK,GAAG,CAACC,OAAxB,EAAiCH,UAAjC,EAA6CC,QAA7C,CADF,CAFc,EAKhB,CAACJ,KAAD,CALgB,CAAlB;AAOA,sBAAO;AAAe,IAAA,SAAS,EAAEE;AAA1B,KAAyCJ,KAAzC,EAAP;AACD,CAZkB,CAAd","sourcesContent":["import type { ReactNode } from \"react\";\nimport React, { useRef, useMemo, forwardRef, useImperativeHandle } from \"react\";\n\nimport type { SkPaint } from \"../../skia\";\nimport { Skia } from \"../../skia\";\nimport type { CustomPaintProps, AnimatedProps } from \"../processors\";\nimport { processPaint } from \"../processors\";\nimport { createDeclaration } from \"../nodes\";\n\nexport const usePaintRef = () => useRef<SkPaint>(null);\n\nexport interface PaintProps extends Omit<CustomPaintProps, \"paint\"> {\n children?: ReactNode | ReactNode[];\n}\n\nexport const Paint = forwardRef<SkPaint, AnimatedProps<PaintProps>>(\n (props, ref) => {\n const paint = useMemo(() => Skia.Paint(), []);\n useImperativeHandle(ref, () => paint, [paint]);\n const onDeclare = useMemo(\n () =>\n createDeclaration<PaintProps>((paintProps, children, ctx) =>\n processPaint(paint, ctx.opacity, paintProps, children)\n ),\n [paint]\n );\n return <skDeclaration onDeclare={onDeclare} {...props} />;\n }\n);\n"]}
@@ -212,19 +212,6 @@ Object.keys(_Blend).forEach(function (key) {
212
212
  });
213
213
  });
214
214
 
215
- var _Defs = require("./Defs");
216
-
217
- Object.keys(_Defs).forEach(function (key) {
218
- if (key === "default" || key === "__esModule") return;
219
- if (key in exports && exports[key] === _Defs[key]) return;
220
- Object.defineProperty(exports, key, {
221
- enumerable: true,
222
- get: function () {
223
- return _Defs[key];
224
- }
225
- });
226
- });
227
-
228
215
  var _Drawing = require("./Drawing");
229
216
 
230
217
  Object.keys(_Drawing).forEach(function (key) {
@@ -1 +1 @@
1
- {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from \"./shapes\";\nexport * from \"./backdrop\";\nexport * from \"./image\";\nexport * from \"./shaders\";\nexport * from \"./text\";\nexport * from \"./colorFilters\";\nexport * from \"./maskFilters\";\nexport * from \"./imageFilters\";\nexport * from \"./pathEffects\";\nexport * from \"../processors\";\nexport * from \"./Picture\";\n\nexport * from \"./Group\";\nexport * from \"./Mask\";\nexport * from \"./Paint\";\nexport * from \"./Compose\";\nexport * from \"./Blend\";\nexport * from \"./Defs\";\nexport * from \"./Drawing\";\n"]}
1
+ {"version":3,"sources":["index.ts"],"names":[],"mappings":";;;;;;AAAA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAEA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AACA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA","sourcesContent":["export * from \"./shapes\";\nexport * from \"./backdrop\";\nexport * from \"./image\";\nexport * from \"./shaders\";\nexport * from \"./text\";\nexport * from \"./colorFilters\";\nexport * from \"./maskFilters\";\nexport * from \"./imageFilters\";\nexport * from \"./pathEffects\";\nexport * from \"../processors\";\nexport * from \"./Picture\";\n\nexport * from \"./Group\";\nexport * from \"./Mask\";\nexport * from \"./Paint\";\nexport * from \"./Compose\";\nexport * from \"./Blend\";\nexport * from \"./Drawing\";\n"]}
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.useDeclaration = exports.createDeclaration = exports.DeclarationNode = void 0;
6
+ exports.useDeclaration = exports.isDeclarationNode = exports.createDeclaration = exports.DeclarationNode = void 0;
7
7
 
8
8
  var _react = require("react");
9
9
 
@@ -22,6 +22,10 @@ const useDeclaration = (cb, deps) => // eslint-disable-next-line react-hooks/exh
22
22
 
23
23
  exports.useDeclaration = useDeclaration;
24
24
 
25
+ const isDeclarationNode = node => node instanceof DeclarationNode;
26
+
27
+ exports.isDeclarationNode = isDeclarationNode;
28
+
25
29
  class DeclarationNode extends _Node.Node {
26
30
  constructor(depMgr, onDeclare, props) {
27
31
  super(depMgr, props);
@@ -1 +1 @@
1
- {"version":3,"sources":["Declaration.tsx"],"names":["createDeclaration","cb","useDeclaration","deps","DeclarationNode","Node","constructor","depMgr","onDeclare","props","memoizable","_props","draw","ctx","children","visit","obj"],"mappings":";;;;;;;AACA;;AAKA;;AAGA;;;;AAUO,MAAMA,iBAAiB,GAC5BC,EAD+B,IAEJA,EAFtB;;;;AAIA,MAAMC,cAAc,GAAG,CAC5BD,EAD4B,EAE5BE,IAF4B,KAI5B;AACA,wBAAYF,EAAZ,EAAgBE,IAAhB,aAAgBA,IAAhB,cAAgBA,IAAhB,GAAwB,EAAxB,CALK;;;;AAWA,MAAMC,eAAN,SAAiCC,UAAjC,CAAyC;AAG9CC,EAAAA,WAAW,CACTC,MADS,EAETC,SAFS,EAGTC,KAHS,EAIT;AACA,UAAMF,MAAN,EAAcE,KAAd;;AADA;;AAEA,UAAMC,UAAN,GAAmB,CAAC,4BAAWD,KAAX,CAApB;AACA,SAAKD,SAAL,GAAiBA,SAAjB;AACD;;AAEQ,MAALC,KAAK,CAACA,KAAD,EAA0B;AACjC,SAAKC,UAAL,GAAkB,CAAC,4BAAWD,KAAX,CAAnB;AACA,UAAMA,KAAN,GAAcA,KAAd;AACD;;AAEQ,MAALA,KAAK,GAAG;AACV,WAAO,KAAKE,MAAZ;AACD;;AAEDC,EAAAA,IAAI,CAACC,GAAD,EAAsB;AACxB,UAAMC,QAAQ,GAAG,KAAKC,KAAL,CAAWF,GAAX,CAAjB;AACA,UAAMJ,KAAK,GAAG,6BAAY,KAAKA,KAAjB,CAAd;AACA,UAAMO,GAAG,GAAG,KAAKR,SAAL,CAAeC,KAAf,EAAsBK,QAAtB,EAAgCD,GAAhC,CAAZ;AACA,WAAOG,GAAP;AACD;;AA3B6C","sourcesContent":["import type { DependencyList } from \"react\";\nimport { useCallback } from \"react\";\n\nimport type { DrawingContext } from \"../DrawingContext\";\nimport type { SkJSIInstance } from \"../../skia/JsiInstance\";\nimport type { AnimatedProps } from \"../processors\";\nimport { isAnimated, materialize } from \"../processors\";\nimport type { DependencyManager } from \"../DependencyManager\";\n\nimport { Node } from \"./Node\";\n\nexport type DeclarationResult = SkJSIInstance<string> | null;\n\ntype DeclarationCallback<T> = (\n props: T,\n children: DeclarationResult[],\n ctx: DrawingContext\n) => DeclarationResult;\n\nexport const createDeclaration = <T,>(\n cb: DeclarationCallback<T>\n): DeclarationCallback<T> => cb;\n\nexport const useDeclaration = <P,>(\n cb: DeclarationCallback<P>,\n deps?: DependencyList\n) =>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useCallback(cb, deps ?? []);\n\nexport interface DeclarationProps<P> {\n onDeclare: DeclarationCallback<P>;\n}\n\nexport class DeclarationNode<P> extends Node<P> {\n private onDeclare: DeclarationCallback<P>;\n\n constructor(\n depMgr: DependencyManager,\n onDeclare: DeclarationCallback<P>,\n props: AnimatedProps<P>\n ) {\n super(depMgr, props);\n super.memoizable = !isAnimated(props);\n this.onDeclare = onDeclare;\n }\n\n set props(props: AnimatedProps<P>) {\n this.memoizable = !isAnimated(props);\n super.props = props;\n }\n\n get props() {\n return this._props;\n }\n\n draw(ctx: DrawingContext) {\n const children = this.visit(ctx);\n const props = materialize(this.props);\n const obj = this.onDeclare(props, children, ctx);\n return obj;\n }\n}\n"]}
1
+ {"version":3,"sources":["Declaration.tsx"],"names":["createDeclaration","cb","useDeclaration","deps","isDeclarationNode","node","DeclarationNode","Node","constructor","depMgr","onDeclare","props","memoizable","_props","draw","ctx","children","visit","obj"],"mappings":";;;;;;;AACA;;AAKA;;AAGA;;;;AAUO,MAAMA,iBAAiB,GAC5BC,EAD+B,IAEJA,EAFtB;;;;AAIA,MAAMC,cAAc,GAAG,CAC5BD,EAD4B,EAE5BE,IAF4B,KAI5B;AACA,wBAAYF,EAAZ,EAAgBE,IAAhB,aAAgBA,IAAhB,cAAgBA,IAAhB,GAAwB,EAAxB,CALK;;;;AAOA,MAAMC,iBAAiB,GAC5BC,IAD+B,IAEMA,IAAI,YAAYC,eAFhD;;;;AAQA,MAAMA,eAAN,SAAiCC,UAAjC,CAAyC;AAG9CC,EAAAA,WAAW,CACTC,MADS,EAETC,SAFS,EAGTC,KAHS,EAIT;AACA,UAAMF,MAAN,EAAcE,KAAd;;AADA;;AAEA,UAAMC,UAAN,GAAmB,CAAC,4BAAWD,KAAX,CAApB;AACA,SAAKD,SAAL,GAAiBA,SAAjB;AACD;;AAEQ,MAALC,KAAK,CAACA,KAAD,EAA0B;AACjC,SAAKC,UAAL,GAAkB,CAAC,4BAAWD,KAAX,CAAnB;AACA,UAAMA,KAAN,GAAcA,KAAd;AACD;;AAEQ,MAALA,KAAK,GAAG;AACV,WAAO,KAAKE,MAAZ;AACD;;AAEDC,EAAAA,IAAI,CAACC,GAAD,EAAsB;AACxB,UAAMC,QAAQ,GAAG,KAAKC,KAAL,CAAWF,GAAX,CAAjB;AACA,UAAMJ,KAAK,GAAG,6BAAY,KAAKA,KAAjB,CAAd;AACA,UAAMO,GAAG,GAAG,KAAKR,SAAL,CAAeC,KAAf,EAAsBK,QAAtB,EAAgCD,GAAhC,CAAZ;AACA,WAAOG,GAAP;AACD;;AA3B6C","sourcesContent":["import type { DependencyList } from \"react\";\nimport { useCallback } from \"react\";\n\nimport type { DrawingContext } from \"../DrawingContext\";\nimport type { SkJSIInstance } from \"../../skia/JsiInstance\";\nimport type { AnimatedProps } from \"../processors\";\nimport { isAnimated, materialize } from \"../processors\";\nimport type { DependencyManager } from \"../DependencyManager\";\n\nimport { Node } from \"./Node\";\n\nexport type DeclarationResult = SkJSIInstance<string> | null;\n\ntype DeclarationCallback<T> = (\n props: T,\n children: DeclarationResult[],\n ctx: DrawingContext\n) => DeclarationResult;\n\nexport const createDeclaration = <T,>(\n cb: DeclarationCallback<T>\n): DeclarationCallback<T> => cb;\n\nexport const useDeclaration = <P,>(\n cb: DeclarationCallback<P>,\n deps?: DependencyList\n) =>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useCallback(cb, deps ?? []);\n\nexport const isDeclarationNode = (\n node: Node\n): node is DeclarationNode<unknown> => node instanceof DeclarationNode;\n\nexport interface DeclarationProps<P> {\n onDeclare: DeclarationCallback<P>;\n}\n\nexport class DeclarationNode<P> extends Node<P> {\n private onDeclare: DeclarationCallback<P>;\n\n constructor(\n depMgr: DependencyManager,\n onDeclare: DeclarationCallback<P>,\n props: AnimatedProps<P>\n ) {\n super(depMgr, props);\n super.memoizable = !isAnimated(props);\n this.onDeclare = onDeclare;\n }\n\n set props(props: AnimatedProps<P>) {\n this.memoizable = !isAnimated(props);\n super.props = props;\n }\n\n get props() {\n return this._props;\n }\n\n draw(ctx: DrawingContext) {\n const children = this.visit(ctx);\n const props = materialize(this.props);\n const obj = this.onDeclare(props, children, ctx);\n return obj;\n }\n}\n"]}
@@ -44,23 +44,11 @@ class DrawingNode extends _Node.Node {
44
44
  if (this.skipProcessing) {
45
45
  this.onDraw(ctx, drawingProps, this);
46
46
  } else {
47
- const selectedPaint = (0, _processors.selectPaint)(ctx.paint, drawingProps);
48
- (0, _processors.processPaint)(selectedPaint, ctx.opacity, drawingProps); // to draw only once:
49
- // onDraw({ ...ctx, paint: selectedPaint }, children);
50
-
51
- [selectedPaint, ...this.children.map(child => {
52
- //if (child.type === NodeType.Declaration) {
53
- const ret = child.draw(ctx);
54
-
55
- if (ret) {
56
- return ret;
57
- } //}
58
-
59
-
60
- return null;
61
- }).filter(_skia.isPaint)].forEach(paint => {
47
+ const declarations = this.visit(ctx);
48
+ const paint = (0, _processors.processPaint)(ctx.paint.copy(), ctx.opacity, drawingProps, declarations);
49
+ [paint, ...declarations.filter(_skia.isPaint)].forEach(currentPaint => {
62
50
  this.onDraw({ ...ctx,
63
- paint
51
+ paint: currentPaint
64
52
  }, drawingProps, this);
65
53
  });
66
54
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["Drawing.tsx"],"names":["createDrawing","cb","useDrawing","deps","DrawingNode","Node","constructor","depMgr","onDraw","skipProcessing","props","draw","ctx","drawingProps","selectedPaint","paint","opacity","children","map","child","ret","filter","isPaint","forEach"],"mappings":";;;;;;;AACA;;AAGA;;AAEA;;AACA;;AAGA;;;;AAUO,MAAMA,aAAa,GAAQC,EAAL,IAC3BA,EADK;;;;AAGA,MAAMC,UAAU,GAAG,CAAKD,EAAL,EAA4BE,IAA5B,KACxB;AACA,wBAAYF,EAAZ,EAAgBE,IAAhB,aAAgBA,IAAhB,cAAgBA,IAAhB,GAAwB,EAAxB,CAFK;;;;AAUA,MAAMC,WAAN,SAA6BC,UAA7B,CAAqC;AAI1CC,EAAAA,WAAW,CACTC,MADS,EAETC,MAFS,EAGTC,cAHS,EAITC,KAJS,EAKT;AACA,UAAMH,MAAN,EAAcG,KAAd;;AADA;;AAAA;;AAEA,SAAKF,MAAL,GAAcA,MAAd;AACA,SAAKC,cAAL,GAAsBA,cAAtB;AACD;;AAEDE,EAAAA,IAAI,CAACC,GAAD,EAAsB;AACxB,UAAMC,YAAY,GAAG,6BAAY,KAAKH,KAAjB,CAArB;;AACA,QAAI,KAAKD,cAAT,EAAyB;AACvB,WAAKD,MAAL,CAAYI,GAAZ,EAAiBC,YAAjB,EAA+B,IAA/B;AACD,KAFD,MAEO;AACL,YAAMC,aAAa,GAAG,6BAAYF,GAAG,CAACG,KAAhB,EAAuBF,YAAvB,CAAtB;AACA,oCAAaC,aAAb,EAA4BF,GAAG,CAACI,OAAhC,EAAyCH,YAAzC,EAFK,CAGL;AACA;;AACA,OACEC,aADF,EAEE,GAAG,KAAKG,QAAL,CACAC,GADA,CACKC,KAAD,IAAW;AACd;AACA,cAAMC,GAAG,GAAGD,KAAK,CAACR,IAAN,CAAWC,GAAX,CAAZ;;AACA,YAAIQ,GAAJ,EAAS;AACP,iBAAOA,GAAP;AACD,SALa,CAMd;;;AACA,eAAO,IAAP;AACD,OATA,EAUAC,MAVA,CAUOC,aAVP,CAFL,EAaEC,OAbF,CAaWR,KAAD,IAAW;AACnB,aAAKP,MAAL,CAAY,EAAE,GAAGI,GAAL;AAAUG,UAAAA;AAAV,SAAZ,EAA+BF,YAA/B,EAA6C,IAA7C;AACD,OAfD;AAgBD;AACF;;AAzCyC","sourcesContent":["import type { DependencyList, ReactNode } from \"react\";\nimport { useCallback } from \"react\";\n\nimport type { DrawingContext } from \"../DrawingContext\";\nimport { processPaint, selectPaint } from \"../processors\";\nimport type { AnimatedProps } from \"../processors/Animations/Animations\";\nimport { materialize } from \"../processors/Animations/Animations\";\nimport { isPaint } from \"../../skia\";\nimport type { DependencyManager } from \"../DependencyManager\";\n\nimport { Node } from \"./Node\";\n\ntype DrawingCallback<P> = (\n ctx: DrawingContext,\n props: P,\n node: Node<P>\n) => void;\n\ntype OnDrawCallback<P> = (ctx: DrawingContext, props: P, node: Node<P>) => void;\n\nexport const createDrawing = <P,>(cb: OnDrawCallback<P>): DrawingCallback<P> =>\n cb;\n\nexport const useDrawing = <P,>(cb: OnDrawCallback<P>, deps?: DependencyList) =>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useCallback(cb, deps ?? []);\n\nexport type DrawingProps<T> = {\n onDraw: DrawingCallback<T>;\n skipProcessing?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\nexport class DrawingNode<P> extends Node<P> {\n onDraw: DrawingCallback<P>;\n skipProcessing: boolean;\n\n constructor(\n depMgr: DependencyManager,\n onDraw: DrawingCallback<P>,\n skipProcessing: boolean,\n props: AnimatedProps<P>\n ) {\n super(depMgr, props);\n this.onDraw = onDraw;\n this.skipProcessing = skipProcessing;\n }\n\n draw(ctx: DrawingContext) {\n const drawingProps = materialize(this.props);\n if (this.skipProcessing) {\n this.onDraw(ctx, drawingProps, this);\n } else {\n const selectedPaint = selectPaint(ctx.paint, drawingProps);\n processPaint(selectedPaint, ctx.opacity, drawingProps);\n // to draw only once:\n // onDraw({ ...ctx, paint: selectedPaint }, children);\n [\n selectedPaint,\n ...this.children\n .map((child) => {\n //if (child.type === NodeType.Declaration) {\n const ret = child.draw(ctx);\n if (ret) {\n return ret;\n }\n //}\n return null;\n })\n .filter(isPaint),\n ].forEach((paint) => {\n this.onDraw({ ...ctx, paint }, drawingProps, this);\n });\n }\n }\n}\n"]}
1
+ {"version":3,"sources":["Drawing.tsx"],"names":["createDrawing","cb","useDrawing","deps","DrawingNode","Node","constructor","depMgr","onDraw","skipProcessing","props","draw","ctx","drawingProps","declarations","visit","paint","copy","opacity","filter","isPaint","forEach","currentPaint"],"mappings":";;;;;;;AACA;;AAGA;;AAEA;;AACA;;AAGA;;;;AAUO,MAAMA,aAAa,GAAQC,EAAL,IAC3BA,EADK;;;;AAGA,MAAMC,UAAU,GAAG,CAAKD,EAAL,EAA4BE,IAA5B,KACxB;AACA,wBAAYF,EAAZ,EAAgBE,IAAhB,aAAgBA,IAAhB,cAAgBA,IAAhB,GAAwB,EAAxB,CAFK;;;;AAUA,MAAMC,WAAN,SAA6BC,UAA7B,CAAqC;AAI1CC,EAAAA,WAAW,CACTC,MADS,EAETC,MAFS,EAGTC,cAHS,EAITC,KAJS,EAKT;AACA,UAAMH,MAAN,EAAcG,KAAd;;AADA;;AAAA;;AAEA,SAAKF,MAAL,GAAcA,MAAd;AACA,SAAKC,cAAL,GAAsBA,cAAtB;AACD;;AAEDE,EAAAA,IAAI,CAACC,GAAD,EAAsB;AACxB,UAAMC,YAAY,GAAG,6BAAY,KAAKH,KAAjB,CAArB;;AACA,QAAI,KAAKD,cAAT,EAAyB;AACvB,WAAKD,MAAL,CAAYI,GAAZ,EAAiBC,YAAjB,EAA+B,IAA/B;AACD,KAFD,MAEO;AACL,YAAMC,YAAY,GAAG,KAAKC,KAAL,CAAWH,GAAX,CAArB;AACA,YAAMI,KAAK,GAAG,8BACZJ,GAAG,CAACI,KAAJ,CAAUC,IAAV,EADY,EAEZL,GAAG,CAACM,OAFQ,EAGZL,YAHY,EAIZC,YAJY,CAAd;AAMA,OAACE,KAAD,EAAQ,GAAGF,YAAY,CAACK,MAAb,CAAoBC,aAApB,CAAX,EAAyCC,OAAzC,CAAkDC,YAAD,IAAkB;AACjE,aAAKd,MAAL,CAAY,EAAE,GAAGI,GAAL;AAAUI,UAAAA,KAAK,EAAEM;AAAjB,SAAZ,EAA6CT,YAA7C,EAA2D,IAA3D;AACD,OAFD;AAGD;AACF;;AA/ByC","sourcesContent":["import type { DependencyList, ReactNode } from \"react\";\nimport { useCallback } from \"react\";\n\nimport type { DrawingContext } from \"../DrawingContext\";\nimport { processPaint } from \"../processors\";\nimport type { AnimatedProps } from \"../processors/Animations/Animations\";\nimport { materialize } from \"../processors/Animations/Animations\";\nimport { isPaint } from \"../../skia\";\nimport type { DependencyManager } from \"../DependencyManager\";\n\nimport { Node } from \"./Node\";\n\ntype DrawingCallback<P> = (\n ctx: DrawingContext,\n props: P,\n node: Node<P>\n) => void;\n\ntype OnDrawCallback<P> = (ctx: DrawingContext, props: P, node: Node<P>) => void;\n\nexport const createDrawing = <P,>(cb: OnDrawCallback<P>): DrawingCallback<P> =>\n cb;\n\nexport const useDrawing = <P,>(cb: OnDrawCallback<P>, deps?: DependencyList) =>\n // eslint-disable-next-line react-hooks/exhaustive-deps\n useCallback(cb, deps ?? []);\n\nexport type DrawingProps<T> = {\n onDraw: DrawingCallback<T>;\n skipProcessing?: boolean;\n children?: ReactNode | ReactNode[];\n};\n\nexport class DrawingNode<P> extends Node<P> {\n onDraw: DrawingCallback<P>;\n skipProcessing: boolean;\n\n constructor(\n depMgr: DependencyManager,\n onDraw: DrawingCallback<P>,\n skipProcessing: boolean,\n props: AnimatedProps<P>\n ) {\n super(depMgr, props);\n this.onDraw = onDraw;\n this.skipProcessing = skipProcessing;\n }\n\n draw(ctx: DrawingContext) {\n const drawingProps = materialize(this.props);\n if (this.skipProcessing) {\n this.onDraw(ctx, drawingProps, this);\n } else {\n const declarations = this.visit(ctx);\n const paint = processPaint(\n ctx.paint.copy(),\n ctx.opacity,\n drawingProps,\n declarations\n );\n [paint, ...declarations.filter(isPaint)].forEach((currentPaint) => {\n this.onDraw({ ...ctx, paint: currentPaint }, drawingProps, this);\n });\n }\n }\n}\n"]}