@shopify/react-native-skia 1.11.1 → 1.11.2
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.
- package/android/CMakeLists.txt +0 -8
- package/android/cpp/jni/JniLoad.cpp +0 -2
- package/android/src/main/java/com/shopify/reactnative/skia/RNSkiaPackage.java +1 -1
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaPictureViewManagerDelegate.java +4 -2
- package/cpp/jsi/ViewProperty.h +5 -16
- package/cpp/rnskia/RNSkManager.cpp +1 -7
- package/lib/commonjs/dom/nodes/index.d.ts +0 -1
- package/lib/commonjs/dom/nodes/index.js +0 -11
- package/lib/commonjs/dom/nodes/index.js.map +1 -1
- package/lib/commonjs/external/reanimated/renderHelpers.d.ts +0 -6
- package/lib/commonjs/external/reanimated/renderHelpers.js +0 -73
- package/lib/commonjs/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/commonjs/index.d.ts +0 -1
- package/lib/commonjs/index.js +0 -12
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/renderer/Canvas.d.ts +10 -1
- package/lib/commonjs/renderer/Canvas.js +3 -1
- package/lib/commonjs/renderer/Canvas.js.map +1 -1
- package/lib/commonjs/sksg/Container.d.ts +2 -0
- package/lib/commonjs/sksg/Container.js +10 -0
- package/lib/commonjs/sksg/Container.js.map +1 -1
- package/lib/commonjs/sksg/Elements.d.ts +65 -0
- package/lib/commonjs/sksg/Elements.js +6 -0
- package/lib/commonjs/sksg/Elements.js.map +1 -0
- package/lib/commonjs/sksg/Reconciler.d.ts +1 -0
- package/lib/commonjs/sksg/Reconciler.js +2 -0
- package/lib/commonjs/sksg/Reconciler.js.map +1 -1
- package/lib/commonjs/views/index.d.ts +0 -1
- package/lib/commonjs/views/index.js +0 -11
- package/lib/commonjs/views/index.js.map +1 -1
- package/lib/module/dom/nodes/index.d.ts +0 -1
- package/lib/module/dom/nodes/index.js +0 -1
- package/lib/module/dom/nodes/index.js.map +1 -1
- package/lib/module/external/reanimated/renderHelpers.d.ts +0 -6
- package/lib/module/external/reanimated/renderHelpers.js +0 -68
- package/lib/module/external/reanimated/renderHelpers.js.map +1 -1
- package/lib/module/index.d.ts +0 -1
- package/lib/module/index.js +0 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/renderer/Canvas.d.ts +10 -1
- package/lib/module/renderer/Canvas.js +1 -0
- package/lib/module/renderer/Canvas.js.map +1 -1
- package/lib/module/sksg/Container.d.ts +2 -0
- package/lib/module/sksg/Container.js +10 -0
- package/lib/module/sksg/Container.js.map +1 -1
- package/lib/module/sksg/Elements.d.ts +65 -0
- package/lib/module/sksg/Elements.js +2 -0
- package/lib/module/sksg/Elements.js.map +1 -0
- package/lib/module/sksg/Reconciler.d.ts +1 -0
- package/lib/module/sksg/Reconciler.js +2 -0
- package/lib/module/sksg/Reconciler.js.map +1 -1
- package/lib/module/views/index.d.ts +0 -1
- package/lib/module/views/index.js +0 -1
- package/lib/module/views/index.js.map +1 -1
- package/lib/typescript/lib/commonjs/external/reanimated/renderHelpers.d.ts +0 -3
- package/lib/typescript/lib/commonjs/renderer/Canvas.d.ts +1 -0
- package/lib/typescript/lib/commonjs/sksg/Container.d.ts +2 -0
- package/lib/typescript/lib/commonjs/sksg/Elements.d.ts +1 -0
- package/lib/typescript/lib/commonjs/sksg/Reconciler.d.ts +6 -0
- package/lib/typescript/lib/module/dom/nodes/index.d.ts +0 -1
- package/lib/typescript/lib/module/external/reanimated/renderHelpers.d.ts +0 -3
- package/lib/typescript/lib/module/index.d.ts +0 -1
- package/lib/typescript/lib/module/mock/index.d.ts +0 -1
- package/lib/typescript/lib/module/renderer/Canvas.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/Container.d.ts +2 -0
- package/lib/typescript/lib/module/sksg/Elements.d.ts +1 -0
- package/lib/typescript/lib/module/sksg/Reconciler.d.ts +6 -0
- package/lib/typescript/lib/module/views/index.d.ts +0 -1
- package/lib/typescript/src/dom/nodes/index.d.ts +0 -1
- package/lib/typescript/src/external/reanimated/renderHelpers.d.ts +0 -6
- package/lib/typescript/src/index.d.ts +0 -1
- package/lib/typescript/src/renderer/Canvas.d.ts +10 -1
- package/lib/typescript/src/sksg/Container.d.ts +2 -0
- package/lib/typescript/src/sksg/Elements.d.ts +65 -0
- package/lib/typescript/src/sksg/Reconciler.d.ts +1 -0
- package/lib/typescript/src/views/index.d.ts +0 -1
- package/package.json +1 -1
- package/src/dom/nodes/index.ts +0 -1
- package/src/external/reanimated/renderHelpers.ts +1 -78
- package/src/index.ts +0 -1
- package/src/renderer/Canvas.tsx +11 -1
- package/src/sksg/Container.ts +11 -0
- package/src/sksg/Elements.tsx +136 -0
- package/src/sksg/Reconciler.ts +2 -0
- package/src/views/index.ts +0 -1
- package/android/cpp/jni/include/JniSkiaDomView.h +0 -82
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +0 -41
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomViewManager.java +0 -32
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerDelegate.java +0 -34
- package/android/src/paper/java/com/facebook/react/viewmanagers/SkiaDomViewManagerInterface.java +0 -18
- package/cpp/rnskia/RNSkDomView.cpp +0 -121
- package/cpp/rnskia/RNSkDomView.h +0 -97
- package/cpp/rnskia/dom/JsiDomApi.h +0 -165
- package/cpp/rnskia/dom/base/BaseNodeProp.h +0 -72
- package/cpp/rnskia/dom/base/ConcatablePaint.cpp +0 -117
- package/cpp/rnskia/dom/base/ConcatablePaint.h +0 -49
- package/cpp/rnskia/dom/base/Declaration.h +0 -86
- package/cpp/rnskia/dom/base/DeclarationContext.h +0 -79
- package/cpp/rnskia/dom/base/DerivedNodeProp.h +0 -203
- package/cpp/rnskia/dom/base/DrawingContext.cpp +0 -55
- package/cpp/rnskia/dom/base/DrawingContext.h +0 -104
- package/cpp/rnskia/dom/base/JsiDomDeclarationNode.h +0 -119
- package/cpp/rnskia/dom/base/JsiDomDrawingNode.h +0 -71
- package/cpp/rnskia/dom/base/JsiDomNode.h +0 -572
- package/cpp/rnskia/dom/base/JsiDomRenderNode.h +0 -262
- package/cpp/rnskia/dom/base/NodeProp.h +0 -139
- package/cpp/rnskia/dom/base/NodePropsContainer.h +0 -158
- package/cpp/rnskia/dom/nodes/JsiAtlasNode.h +0 -64
- package/cpp/rnskia/dom/nodes/JsiBackdropFilterNode.h +0 -49
- package/cpp/rnskia/dom/nodes/JsiBlendNode.h +0 -94
- package/cpp/rnskia/dom/nodes/JsiBlurMaskNode.h +0 -75
- package/cpp/rnskia/dom/nodes/JsiBoxNode.h +0 -94
- package/cpp/rnskia/dom/nodes/JsiBoxShadowNode.h +0 -33
- package/cpp/rnskia/dom/nodes/JsiCircleNode.h +0 -35
- package/cpp/rnskia/dom/nodes/JsiColorFilterNodes.h +0 -164
- package/cpp/rnskia/dom/nodes/JsiDiffRectNode.h +0 -37
- package/cpp/rnskia/dom/nodes/JsiFillNode.h +0 -22
- package/cpp/rnskia/dom/nodes/JsiGlyphsNode.h +0 -53
- package/cpp/rnskia/dom/nodes/JsiGroupNode.h +0 -25
- package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +0 -361
- package/cpp/rnskia/dom/nodes/JsiImageNode.h +0 -43
- package/cpp/rnskia/dom/nodes/JsiImageSvgNode.h +0 -63
- package/cpp/rnskia/dom/nodes/JsiLayerNode.h +0 -74
- package/cpp/rnskia/dom/nodes/JsiLineNode.h +0 -38
- package/cpp/rnskia/dom/nodes/JsiOvalNode.h +0 -32
- package/cpp/rnskia/dom/nodes/JsiPaintNode.h +0 -119
- package/cpp/rnskia/dom/nodes/JsiParagraphNode.h +0 -62
- package/cpp/rnskia/dom/nodes/JsiPatchNode.h +0 -50
- package/cpp/rnskia/dom/nodes/JsiPathEffectNodes.h +0 -268
- package/cpp/rnskia/dom/nodes/JsiPathNode.h +0 -181
- package/cpp/rnskia/dom/nodes/JsiPictureNode.h +0 -31
- package/cpp/rnskia/dom/nodes/JsiPointsNode.h +0 -48
- package/cpp/rnskia/dom/nodes/JsiRRectNode.h +0 -33
- package/cpp/rnskia/dom/nodes/JsiRectNode.h +0 -33
- package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +0 -434
- package/cpp/rnskia/dom/nodes/JsiTextBlobNode.h +0 -44
- package/cpp/rnskia/dom/nodes/JsiTextNode.h +0 -51
- package/cpp/rnskia/dom/nodes/JsiTextPathNode.h +0 -33
- package/cpp/rnskia/dom/nodes/JsiVerticesNode.h +0 -41
- package/cpp/rnskia/dom/props/BezierProps.h +0 -65
- package/cpp/rnskia/dom/props/BlendModeProp.h +0 -103
- package/cpp/rnskia/dom/props/BoxShadowProps.h +0 -62
- package/cpp/rnskia/dom/props/CircleProp.h +0 -49
- package/cpp/rnskia/dom/props/ClipProp.h +0 -57
- package/cpp/rnskia/dom/props/ColorProp.h +0 -96
- package/cpp/rnskia/dom/props/FontProp.h +0 -42
- package/cpp/rnskia/dom/props/GlyphsProp.h +0 -55
- package/cpp/rnskia/dom/props/LayerProp.h +0 -52
- package/cpp/rnskia/dom/props/MatrixProp.h +0 -54
- package/cpp/rnskia/dom/props/NumbersProp.h +0 -67
- package/cpp/rnskia/dom/props/PaintProps.h +0 -133
- package/cpp/rnskia/dom/props/ParagraphProp.h +0 -45
- package/cpp/rnskia/dom/props/PathProp.h +0 -59
- package/cpp/rnskia/dom/props/PictureProp.h +0 -40
- package/cpp/rnskia/dom/props/PointProp.h +0 -65
- package/cpp/rnskia/dom/props/PointsProp.h +0 -81
- package/cpp/rnskia/dom/props/RRectProp.h +0 -222
- package/cpp/rnskia/dom/props/RSXformProp.h +0 -52
- package/cpp/rnskia/dom/props/RadiusProp.h +0 -43
- package/cpp/rnskia/dom/props/RectProp.h +0 -164
- package/cpp/rnskia/dom/props/SamplingProp.h +0 -54
- package/cpp/rnskia/dom/props/SkImageProps.h +0 -196
- package/cpp/rnskia/dom/props/StrokeProps.h +0 -79
- package/cpp/rnskia/dom/props/SvgProp.h +0 -45
- package/cpp/rnskia/dom/props/TextBlobProp.h +0 -133
- package/cpp/rnskia/dom/props/TileModeProp.h +0 -52
- package/cpp/rnskia/dom/props/TransformProp.h +0 -147
- package/cpp/rnskia/dom/props/TransformsProps.h +0 -66
- package/cpp/rnskia/dom/props/UniformsProp.h +0 -159
- package/cpp/rnskia/dom/props/VertexModeProp.h +0 -49
- package/cpp/rnskia/dom/props/VerticesProps.h +0 -63
- package/ios/RNSkia-iOS/SkiaDomView.h +0 -7
- package/ios/RNSkia-iOS/SkiaDomView.mm +0 -63
- package/ios/RNSkia-iOS/SkiaDomViewManager.h +0 -8
- package/ios/RNSkia-iOS/SkiaDomViewManager.mm +0 -51
- package/lib/commonjs/dom/nodes/JsiSkDOM.d.ts +0 -64
- package/lib/commonjs/dom/nodes/JsiSkDOM.js +0 -196
- package/lib/commonjs/dom/nodes/JsiSkDOM.js.map +0 -1
- package/lib/commonjs/renderer/CanvasOld.d.ts +0 -11
- package/lib/commonjs/renderer/CanvasOld.js +0 -96
- package/lib/commonjs/renderer/CanvasOld.js.map +0 -1
- package/lib/commonjs/renderer/Container.d.ts +0 -10
- package/lib/commonjs/renderer/Container.js +0 -26
- package/lib/commonjs/renderer/Container.js.map +0 -1
- package/lib/commonjs/renderer/HostComponents.d.ts +0 -129
- package/lib/commonjs/renderer/HostComponents.js +0 -141
- package/lib/commonjs/renderer/HostComponents.js.map +0 -1
- package/lib/commonjs/renderer/HostConfig.d.ts +0 -18
- package/lib/commonjs/renderer/HostConfig.js +0 -157
- package/lib/commonjs/renderer/HostConfig.js.map +0 -1
- package/lib/commonjs/renderer/Reconciler.d.ts +0 -9
- package/lib/commonjs/renderer/Reconciler.js +0 -44
- package/lib/commonjs/renderer/Reconciler.js.map +0 -1
- package/lib/commonjs/specs/SkiaDomViewNativeComponent.d.ts +0 -6
- package/lib/commonjs/specs/SkiaDomViewNativeComponent.js +0 -11
- package/lib/commonjs/specs/SkiaDomViewNativeComponent.js.map +0 -1
- package/lib/commonjs/views/SkiaDomView.d.ts +0 -33
- package/lib/commonjs/views/SkiaDomView.js +0 -119
- package/lib/commonjs/views/SkiaDomView.js.map +0 -1
- package/lib/commonjs/views/SkiaDomView.web.d.ts +0 -0
- package/lib/commonjs/views/SkiaDomView.web.js +0 -2
- package/lib/commonjs/views/SkiaDomView.web.js.map +0 -1
- package/lib/module/dom/nodes/JsiSkDOM.d.ts +0 -64
- package/lib/module/dom/nodes/JsiSkDOM.js +0 -189
- package/lib/module/dom/nodes/JsiSkDOM.js.map +0 -1
- package/lib/module/renderer/CanvasOld.d.ts +0 -11
- package/lib/module/renderer/CanvasOld.js +0 -87
- package/lib/module/renderer/CanvasOld.js.map +0 -1
- package/lib/module/renderer/Container.d.ts +0 -10
- package/lib/module/renderer/Container.js +0 -19
- package/lib/module/renderer/Container.js.map +0 -1
- package/lib/module/renderer/HostComponents.d.ts +0 -129
- package/lib/module/renderer/HostComponents.js +0 -134
- package/lib/module/renderer/HostComponents.js.map +0 -1
- package/lib/module/renderer/HostConfig.d.ts +0 -18
- package/lib/module/renderer/HostConfig.js +0 -150
- package/lib/module/renderer/HostConfig.js.map +0 -1
- package/lib/module/renderer/Reconciler.d.ts +0 -9
- package/lib/module/renderer/Reconciler.js +0 -36
- package/lib/module/renderer/Reconciler.js.map +0 -1
- package/lib/module/specs/SkiaDomViewNativeComponent.d.ts +0 -6
- package/lib/module/specs/SkiaDomViewNativeComponent.js +0 -4
- package/lib/module/specs/SkiaDomViewNativeComponent.js.map +0 -1
- package/lib/module/views/SkiaDomView.d.ts +0 -33
- package/lib/module/views/SkiaDomView.js +0 -111
- package/lib/module/views/SkiaDomView.js.map +0 -1
- package/lib/module/views/SkiaDomView.web.d.ts +0 -0
- package/lib/module/views/SkiaDomView.web.js +0 -2
- package/lib/module/views/SkiaDomView.web.js.map +0 -1
- package/lib/typescript/lib/commonjs/dom/nodes/JsiSkDOM.d.ts +0 -60
- package/lib/typescript/lib/commonjs/renderer/CanvasOld.d.ts +0 -3
- package/lib/typescript/lib/commonjs/renderer/Container.d.ts +0 -9
- package/lib/typescript/lib/commonjs/renderer/HostComponents.d.ts +0 -2
- package/lib/typescript/lib/commonjs/renderer/HostConfig.d.ts +0 -40
- package/lib/typescript/lib/commonjs/renderer/Reconciler.d.ts +0 -10
- package/lib/typescript/lib/commonjs/specs/SkiaDomViewNativeComponent.d.ts +0 -3
- package/lib/typescript/lib/commonjs/views/SkiaDomView.d.ts +0 -30
- package/lib/typescript/lib/commonjs/views/SkiaDomView.web.d.ts +0 -0
- package/lib/typescript/lib/module/dom/nodes/JsiSkDOM.d.ts +0 -59
- package/lib/typescript/lib/module/renderer/CanvasOld.d.ts +0 -3
- package/lib/typescript/lib/module/renderer/Container.d.ts +0 -9
- package/lib/typescript/lib/module/renderer/HostComponents.d.ts +0 -1
- package/lib/typescript/lib/module/renderer/HostConfig.d.ts +0 -39
- package/lib/typescript/lib/module/renderer/Reconciler.d.ts +0 -9
- package/lib/typescript/lib/module/specs/SkiaDomViewNativeComponent.d.ts +0 -2
- package/lib/typescript/lib/module/views/SkiaDomView.d.ts +0 -27
- package/lib/typescript/lib/module/views/SkiaDomView.web.d.ts +0 -0
- package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +0 -64
- package/lib/typescript/src/renderer/CanvasOld.d.ts +0 -11
- package/lib/typescript/src/renderer/Container.d.ts +0 -10
- package/lib/typescript/src/renderer/HostComponents.d.ts +0 -129
- package/lib/typescript/src/renderer/HostConfig.d.ts +0 -18
- package/lib/typescript/src/renderer/Reconciler.d.ts +0 -9
- package/lib/typescript/src/specs/SkiaDomViewNativeComponent.d.ts +0 -6
- package/lib/typescript/src/views/SkiaDomView.d.ts +0 -33
- package/lib/typescript/src/views/SkiaDomView.web.d.ts +0 -0
- package/src/dom/nodes/JsiSkDOM.ts +0 -298
- package/src/renderer/CanvasOld.tsx +0 -126
- package/src/renderer/Container.tsx +0 -19
- package/src/renderer/HostComponents.ts +0 -399
- package/src/renderer/HostConfig.ts +0 -258
- package/src/renderer/Reconciler.tsx +0 -54
- package/src/specs/SkiaDomViewNativeComponent.ts +0 -9
- package/src/views/SkiaDomView.tsx +0 -124
- package/src/views/SkiaDomView.web.tsx +0 -0
|
@@ -1,262 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
#pragma once
|
|
3
|
-
|
|
4
|
-
#include "ClipProp.h"
|
|
5
|
-
#include "DrawingContext.h"
|
|
6
|
-
#include "JsiDomDeclarationNode.h"
|
|
7
|
-
#include "JsiDomNode.h"
|
|
8
|
-
#include "LayerProp.h"
|
|
9
|
-
#include "MatrixProp.h"
|
|
10
|
-
#include "PaintProps.h"
|
|
11
|
-
#include "PointProp.h"
|
|
12
|
-
#include "RRectProp.h"
|
|
13
|
-
#include "RectProp.h"
|
|
14
|
-
#include "TransformProp.h"
|
|
15
|
-
|
|
16
|
-
#include <memory>
|
|
17
|
-
#include <string>
|
|
18
|
-
#include <vector>
|
|
19
|
-
|
|
20
|
-
namespace RNSkia {
|
|
21
|
-
|
|
22
|
-
class JsiDomRenderNode : public JsiDomNode {
|
|
23
|
-
public:
|
|
24
|
-
JsiDomRenderNode(std::shared_ptr<RNSkPlatformContext> context,
|
|
25
|
-
const char *type)
|
|
26
|
-
: JsiDomNode(context, type, NodeClass::RenderNode) {}
|
|
27
|
-
|
|
28
|
-
void render(DrawingContext *context) {
|
|
29
|
-
#if SKIA_DOM_DEBUG
|
|
30
|
-
printDebugInfo("Begin Render");
|
|
31
|
-
#endif
|
|
32
|
-
|
|
33
|
-
auto parentPaint = context->getPaint();
|
|
34
|
-
auto cache =
|
|
35
|
-
_paintCache.parent == parentPaint ? _paintCache.child : nullptr;
|
|
36
|
-
|
|
37
|
-
auto shouldRestore =
|
|
38
|
-
context->saveAndConcat(_paintProps, getChildren(), cache);
|
|
39
|
-
|
|
40
|
-
auto shouldTransform = _matrixProp->isSet() || _transformProp->isSet();
|
|
41
|
-
auto shouldSave =
|
|
42
|
-
shouldTransform || _clipProp->isSet() || _layerProp->isSet();
|
|
43
|
-
|
|
44
|
-
// Handle matrix/transforms
|
|
45
|
-
if (shouldSave) {
|
|
46
|
-
// Save canvas state
|
|
47
|
-
if (_layerProp->isSet()) {
|
|
48
|
-
if (_layerProp->isBool()) {
|
|
49
|
-
#if SKIA_DOM_DEBUG_VERBOSE
|
|
50
|
-
printDebugInfo("canvas->saveLayer()");
|
|
51
|
-
#endif
|
|
52
|
-
context->getCanvas()->saveLayer(
|
|
53
|
-
SkCanvas::SaveLayerRec(nullptr, nullptr, nullptr, 0));
|
|
54
|
-
} else {
|
|
55
|
-
#if SKIA_DOM_DEBUG_VERBOSE
|
|
56
|
-
printDebugInfo("canvas->saveLayer(paint)");
|
|
57
|
-
#endif
|
|
58
|
-
context->getCanvas()->saveLayer(SkCanvas::SaveLayerRec(
|
|
59
|
-
nullptr, _layerProp->getDerivedValue().get(), nullptr, 0));
|
|
60
|
-
}
|
|
61
|
-
} else {
|
|
62
|
-
#if SKIA_DOM_DEBUG_VERBOSE
|
|
63
|
-
printDebugInfo("canvas->save()");
|
|
64
|
-
#endif
|
|
65
|
-
context->getCanvas()->save();
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (_originProp->isSet()) {
|
|
69
|
-
#if SKIA_DOM_DEBUG_VERBOSE
|
|
70
|
-
printDebugInfo("canvas->translate(origin)");
|
|
71
|
-
#endif
|
|
72
|
-
// Handle origin
|
|
73
|
-
context->getCanvas()->translate(_originProp->getDerivedValue()->x(),
|
|
74
|
-
_originProp->getDerivedValue()->y());
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
if (shouldTransform) {
|
|
78
|
-
#if SKIA_DOM_DEBUG_VERBOSE
|
|
79
|
-
printDebugInfo(
|
|
80
|
-
"canvas->concat(" +
|
|
81
|
-
std::string(_matrixProp->isSet() ? "matrix" : "transform") +
|
|
82
|
-
std::string(")"));
|
|
83
|
-
#endif
|
|
84
|
-
auto matrix = _matrixProp->isSet() ? _matrixProp->getDerivedValue()
|
|
85
|
-
: _transformProp->getDerivedValue();
|
|
86
|
-
|
|
87
|
-
// Concat canvas' matrix with our matrix
|
|
88
|
-
context->getCanvas()->concat(*matrix);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// Clipping
|
|
92
|
-
if (_clipProp->isSet()) {
|
|
93
|
-
auto invert = _invertClip->isSet() && _invertClip->value().getAsBool();
|
|
94
|
-
clip(context, context->getCanvas(), invert);
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (_originProp->isSet()) {
|
|
98
|
-
#if SKIA_DOM_DEBUG_VERBOSE
|
|
99
|
-
printDebugInfo("canvas->translate(-origin)");
|
|
100
|
-
#endif
|
|
101
|
-
// Handle origin
|
|
102
|
-
context->getCanvas()->translate(-_originProp->getDerivedValue()->x(),
|
|
103
|
-
-_originProp->getDerivedValue()->y());
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// Render the node
|
|
108
|
-
renderNode(context);
|
|
109
|
-
|
|
110
|
-
// Restore if needed
|
|
111
|
-
if (shouldSave) {
|
|
112
|
-
#if SKIA_DOM_DEBUG_VERBOSE
|
|
113
|
-
printDebugInfo("canvas->restore()");
|
|
114
|
-
#endif
|
|
115
|
-
context->getCanvas()->restore();
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
if (shouldRestore) {
|
|
119
|
-
_paintCache.parent = parentPaint;
|
|
120
|
-
_paintCache.child = context->getPaint();
|
|
121
|
-
context->restore();
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
#if SKIA_DOM_DEBUG
|
|
125
|
-
printDebugInfo("End Render");
|
|
126
|
-
#endif
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
/**
|
|
130
|
-
Override reset (last thing that happens in the render cycle) to also reset
|
|
131
|
-
the changed flag on the local drawing context if necessary.
|
|
132
|
-
*/
|
|
133
|
-
void resetPendingChanges() override { JsiDomNode::resetPendingChanges(); }
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
Overridden dispose to release resources
|
|
137
|
-
*/
|
|
138
|
-
void dispose(bool immediate) override {
|
|
139
|
-
JsiDomNode::dispose(immediate);
|
|
140
|
-
_paintCache.clear();
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
protected:
|
|
144
|
-
/**
|
|
145
|
-
Invalidates and marks then context as changed.
|
|
146
|
-
*/
|
|
147
|
-
void invalidateContext() override {
|
|
148
|
-
enqueAsynOperation([weakSelf = weak_from_this()]() {
|
|
149
|
-
auto self = weakSelf.lock();
|
|
150
|
-
if (self) {
|
|
151
|
-
std::static_pointer_cast<JsiDomRenderNode>(self)->_paintCache.parent =
|
|
152
|
-
nullptr;
|
|
153
|
-
std::static_pointer_cast<JsiDomRenderNode>(self)->_paintCache.child =
|
|
154
|
-
nullptr;
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
Override to implement rendering where the current state of the drawing
|
|
161
|
-
context is correctly set.
|
|
162
|
-
*/
|
|
163
|
-
virtual void renderNode(DrawingContext *context) = 0;
|
|
164
|
-
|
|
165
|
-
/**
|
|
166
|
-
Define common properties for all render nodes
|
|
167
|
-
*/
|
|
168
|
-
void defineProperties(NodePropsContainer *container) override {
|
|
169
|
-
JsiDomNode::defineProperties(container);
|
|
170
|
-
|
|
171
|
-
_paintProps = container->defineProperty<PaintProps>();
|
|
172
|
-
|
|
173
|
-
_matrixProp = container->defineProperty<MatrixProp>("matrix");
|
|
174
|
-
_transformProp = container->defineProperty<TransformProp>("transform");
|
|
175
|
-
_originProp = container->defineProperty<PointProp>("origin");
|
|
176
|
-
_clipProp = container->defineProperty<ClipProp>("clip");
|
|
177
|
-
_invertClip = container->defineProperty<NodeProp>("invertClip");
|
|
178
|
-
_layerProp = container->defineProperty<LayerProp>("layer");
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
/**
|
|
182
|
-
Validates that only declaration nodes can be children
|
|
183
|
-
*/
|
|
184
|
-
void addChild(std::shared_ptr<JsiDomNode> child) override {
|
|
185
|
-
JsiDomNode::addChild(child);
|
|
186
|
-
_paintCache.parent = nullptr;
|
|
187
|
-
_paintCache.child = nullptr;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
Validates that only declaration nodes can be children
|
|
192
|
-
*/
|
|
193
|
-
void insertChildBefore(std::shared_ptr<JsiDomNode> child,
|
|
194
|
-
std::shared_ptr<JsiDomNode> before) override {
|
|
195
|
-
JsiDomNode::insertChildBefore(child, before);
|
|
196
|
-
_paintCache.parent = nullptr;
|
|
197
|
-
_paintCache.child = nullptr;
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
/**
|
|
201
|
-
A property changed
|
|
202
|
-
*/
|
|
203
|
-
void onPropertyChanged(BaseNodeProp *prop) override {
|
|
204
|
-
static std::vector<const char *> paintProps = {
|
|
205
|
-
JsiPropId::get("color"), JsiPropId::get("strokeWidth"),
|
|
206
|
-
JsiPropId::get("blendMode"), JsiPropId::get("strokeCap"),
|
|
207
|
-
JsiPropId::get("strokeJoin"), JsiPropId::get("strokeMiter"),
|
|
208
|
-
JsiPropId::get("style"), JsiPropId::get("antiAlias"),
|
|
209
|
-
JsiPropId::get("opacity"), JsiPropId::get("dither")};
|
|
210
|
-
|
|
211
|
-
// We'll invalidate paint if a prop change happened in a paint property
|
|
212
|
-
if (std::find(paintProps.begin(), paintProps.end(), prop->getName()) !=
|
|
213
|
-
paintProps.end()) {
|
|
214
|
-
invalidateContext();
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
private:
|
|
219
|
-
/**
|
|
220
|
-
Clips the canvas depending on the clip property
|
|
221
|
-
*/
|
|
222
|
-
void clip(DrawingContext *context, SkCanvas *canvas, bool invert) {
|
|
223
|
-
auto op = invert ? SkClipOp::kDifference : SkClipOp::kIntersect;
|
|
224
|
-
if (_clipProp->getRect() != nullptr) {
|
|
225
|
-
#if SKIA_DOM_DEBUG
|
|
226
|
-
printDebugInfo("canvas->clipRect()");
|
|
227
|
-
#endif
|
|
228
|
-
canvas->clipRect(*_clipProp->getRect(), op, true);
|
|
229
|
-
} else if (_clipProp->getRRect() != nullptr) {
|
|
230
|
-
#if SKIA_DOM_DEBUG
|
|
231
|
-
printDebugInfo("canvas->clipRRect()");
|
|
232
|
-
#endif
|
|
233
|
-
canvas->clipRRect(*_clipProp->getRRect(), op, true);
|
|
234
|
-
} else if (_clipProp->getPath() != nullptr) {
|
|
235
|
-
#if SKIA_DOM_DEBUG
|
|
236
|
-
printDebugInfo("canvas->clipPath()");
|
|
237
|
-
#endif
|
|
238
|
-
canvas->clipPath(*_clipProp->getPath(), op, true);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
struct PaintCache {
|
|
243
|
-
void clear() {
|
|
244
|
-
parent = nullptr;
|
|
245
|
-
child = nullptr;
|
|
246
|
-
}
|
|
247
|
-
std::shared_ptr<SkPaint> parent;
|
|
248
|
-
std::shared_ptr<SkPaint> child;
|
|
249
|
-
};
|
|
250
|
-
|
|
251
|
-
PaintCache _paintCache;
|
|
252
|
-
|
|
253
|
-
PointProp *_originProp;
|
|
254
|
-
MatrixProp *_matrixProp;
|
|
255
|
-
TransformProp *_transformProp;
|
|
256
|
-
NodeProp *_invertClip;
|
|
257
|
-
ClipProp *_clipProp;
|
|
258
|
-
LayerProp *_layerProp;
|
|
259
|
-
PaintProps *_paintProps;
|
|
260
|
-
};
|
|
261
|
-
|
|
262
|
-
} // namespace RNSkia
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "BaseNodeProp.h"
|
|
4
|
-
#include "JsiValue.h"
|
|
5
|
-
|
|
6
|
-
#include <chrono>
|
|
7
|
-
#include <memory>
|
|
8
|
-
#include <mutex>
|
|
9
|
-
#include <string>
|
|
10
|
-
|
|
11
|
-
namespace RNSkia {
|
|
12
|
-
|
|
13
|
-
/**
|
|
14
|
-
Simple class for reading a property by name from the Dom Node properties
|
|
15
|
-
object.
|
|
16
|
-
*/
|
|
17
|
-
class NodeProp : public BaseNodeProp,
|
|
18
|
-
public std::enable_shared_from_this<NodeProp> {
|
|
19
|
-
public:
|
|
20
|
-
/**
|
|
21
|
-
Constructs a new optional dom node properrty
|
|
22
|
-
*/
|
|
23
|
-
explicit NodeProp(const std::string &name,
|
|
24
|
-
const std::function<void(BaseNodeProp *)> &onChange)
|
|
25
|
-
: _name(JsiPropId::get(name)), _onChange(onChange), BaseNodeProp() {}
|
|
26
|
-
|
|
27
|
-
/**
|
|
28
|
-
Reads JS value and swaps out with a new value
|
|
29
|
-
*/
|
|
30
|
-
void readValueFromJs(jsi::Runtime &runtime,
|
|
31
|
-
const ReadPropFunc &read) override {
|
|
32
|
-
// If the value is a nullptr this is the first call to the
|
|
33
|
-
// readValueFromJS Function (which comes from the reconciler
|
|
34
|
-
// setting a new property value on the property
|
|
35
|
-
if (_value == nullptr) {
|
|
36
|
-
_value = std::make_unique<JsiValue>(runtime, read(runtime, _name, this));
|
|
37
|
-
_isChanged = true;
|
|
38
|
-
_hasNewValue = false;
|
|
39
|
-
} else {
|
|
40
|
-
// Otherwise we'll just update the buffer and commit it later.
|
|
41
|
-
std::lock_guard<std::mutex> lock(_swapMutex);
|
|
42
|
-
if (_buffer == nullptr) {
|
|
43
|
-
_buffer =
|
|
44
|
-
std::make_unique<JsiValue>(runtime, read(runtime, _name, this));
|
|
45
|
-
} else {
|
|
46
|
-
_buffer->setCurrent(runtime, read(runtime, _name, this));
|
|
47
|
-
}
|
|
48
|
-
_hasNewValue = *_buffer.get() != *_value.get();
|
|
49
|
-
if (_hasNewValue && _onChange != nullptr) {
|
|
50
|
-
_onChange(this);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
Property value has changed - let's save this as a change to be commited later
|
|
57
|
-
*/
|
|
58
|
-
void updateValue(jsi::Runtime &runtime, const jsi::Value &value) {
|
|
59
|
-
// Always use the next field since this method is called on the JS thread
|
|
60
|
-
// and we don't want to rip out the underlying value object.
|
|
61
|
-
std::lock_guard<std::mutex> lock(_swapMutex);
|
|
62
|
-
if (_buffer == nullptr) {
|
|
63
|
-
_buffer = std::make_unique<JsiValue>(runtime, value);
|
|
64
|
-
} else {
|
|
65
|
-
_buffer->setCurrent(runtime, value);
|
|
66
|
-
}
|
|
67
|
-
// This is almost always a change - meaning a swap is
|
|
68
|
-
// cheaper than comparing for equality.
|
|
69
|
-
_hasNewValue = true;
|
|
70
|
-
if (_onChange != nullptr) {
|
|
71
|
-
_onChange(this);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
Returns true if the property is set and is not undefined or null
|
|
77
|
-
*/
|
|
78
|
-
bool isSet() override {
|
|
79
|
-
return _value != nullptr && !_value->isUndefinedOrNull();
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
True if the property has changed since we last visited it
|
|
84
|
-
*/
|
|
85
|
-
bool isChanged() override { return _isChanged; }
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
Starts the process of updating and reading props
|
|
89
|
-
*/
|
|
90
|
-
void updatePendingChanges() override {
|
|
91
|
-
// If the value has changed we should swap the
|
|
92
|
-
// buffers
|
|
93
|
-
if (_hasNewValue && _buffer != nullptr) {
|
|
94
|
-
{
|
|
95
|
-
// Swap buffers
|
|
96
|
-
std::lock_guard<std::mutex> lock(_swapMutex);
|
|
97
|
-
_value.swap(_buffer);
|
|
98
|
-
|
|
99
|
-
// turn off pending changes flag
|
|
100
|
-
_hasNewValue = false;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
// Mark as changed.
|
|
104
|
-
_isChanged = true;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/*
|
|
109
|
-
Ends the visit cycle
|
|
110
|
-
*/
|
|
111
|
-
void markAsResolved() override { _isChanged = false; }
|
|
112
|
-
|
|
113
|
-
/**
|
|
114
|
-
Returns pointer to the value contained by the property if the property is
|
|
115
|
-
set.
|
|
116
|
-
*/
|
|
117
|
-
const JsiValue &value() {
|
|
118
|
-
assert(isSet());
|
|
119
|
-
return *_value;
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
/**
|
|
123
|
-
Returns the name of the property
|
|
124
|
-
*/
|
|
125
|
-
std::string getName() override { return std::string(_name); }
|
|
126
|
-
|
|
127
|
-
private:
|
|
128
|
-
PropId _name;
|
|
129
|
-
|
|
130
|
-
std::function<void(BaseNodeProp *)> _onChange;
|
|
131
|
-
|
|
132
|
-
std::unique_ptr<JsiValue> _value;
|
|
133
|
-
std::unique_ptr<JsiValue> _buffer;
|
|
134
|
-
std::atomic<bool> _isChanged = {false};
|
|
135
|
-
std::atomic<bool> _hasNewValue = {false};
|
|
136
|
-
std::mutex _swapMutex;
|
|
137
|
-
};
|
|
138
|
-
|
|
139
|
-
} // namespace RNSkia
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "DrawingContext.h"
|
|
4
|
-
#include "JsiValue.h"
|
|
5
|
-
#include "NodeProp.h"
|
|
6
|
-
|
|
7
|
-
#include <map>
|
|
8
|
-
#include <memory>
|
|
9
|
-
#include <string>
|
|
10
|
-
#include <utility>
|
|
11
|
-
#include <vector>
|
|
12
|
-
|
|
13
|
-
namespace RNSkia {
|
|
14
|
-
|
|
15
|
-
/**
|
|
16
|
-
This class manages marshalling from JS values over JSI to C++ values and is
|
|
17
|
-
typically called when a new node is created or an existing node is updated from
|
|
18
|
-
the reconciler.
|
|
19
|
-
*/
|
|
20
|
-
class NodePropsContainer {
|
|
21
|
-
public:
|
|
22
|
-
/**
|
|
23
|
-
Constructor for the node prop container
|
|
24
|
-
*/
|
|
25
|
-
explicit NodePropsContainer(
|
|
26
|
-
PropId componentType,
|
|
27
|
-
const std::function<void(BaseNodeProp *)> &onPropChanged)
|
|
28
|
-
: _onPropChanged(onPropChanged), _type(componentType) {}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
Returns true if there are any changes in the props container in the current
|
|
32
|
-
being/end visit
|
|
33
|
-
*/
|
|
34
|
-
bool isChanged() {
|
|
35
|
-
for (auto &prop : _properties) {
|
|
36
|
-
if (prop->isChanged()) {
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/**
|
|
44
|
-
Enumerate all mapped properties
|
|
45
|
-
*/
|
|
46
|
-
void enumerateMappedProps(
|
|
47
|
-
const std::function<void(const PropId name,
|
|
48
|
-
const std::vector<NodeProp *>)> &callback) {
|
|
49
|
-
std::lock_guard<std::mutex> lock(_mappedPropsLock);
|
|
50
|
-
for (auto &props : _mappedProperties) {
|
|
51
|
-
callback(props.first, props.second);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
Enumerates a named property instances from the mapped properties list
|
|
57
|
-
*/
|
|
58
|
-
void
|
|
59
|
-
enumerateMappedPropsByName(const std::string &name,
|
|
60
|
-
const std::function<void(NodeProp *)> &callback) {
|
|
61
|
-
std::lock_guard<std::mutex> lock(_mappedPropsLock);
|
|
62
|
-
auto propMapIt = _mappedProperties.find(JsiPropId::get(name));
|
|
63
|
-
if (propMapIt != _mappedProperties.end()) {
|
|
64
|
-
for (auto &prop : propMapIt->second) {
|
|
65
|
-
callback(prop);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
Updates any props that has changes waiting, updates props that have derived
|
|
72
|
-
values
|
|
73
|
-
*/
|
|
74
|
-
void updatePendingValues() {
|
|
75
|
-
for (auto &prop : _properties) {
|
|
76
|
-
prop->updatePendingChanges();
|
|
77
|
-
if (prop->isRequired() && !prop->isSet()) {
|
|
78
|
-
throw std::runtime_error("Missing one or more required properties " +
|
|
79
|
-
std::string(prop->getName()) + " in the " +
|
|
80
|
-
_type + " component.");
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/**
|
|
86
|
-
We're done, mark any changes as committed in all props
|
|
87
|
-
*/
|
|
88
|
-
void markAsResolved() {
|
|
89
|
-
for (auto &prop : _properties) {
|
|
90
|
-
prop->markAsResolved();
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
Clears all props and data from the container
|
|
96
|
-
*/
|
|
97
|
-
void dispose() {
|
|
98
|
-
std::lock_guard<std::mutex> lock(_mappedPropsLock);
|
|
99
|
-
_properties.clear();
|
|
100
|
-
_mappedProperties.clear();
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
Called when the React / JS side sets properties on a node
|
|
105
|
-
*/
|
|
106
|
-
void setProps(jsi::Runtime &runtime, const jsi::Value &maybePropsObject) {
|
|
107
|
-
std::lock_guard<std::mutex> lock(_mappedPropsLock);
|
|
108
|
-
|
|
109
|
-
// Clear property mapping
|
|
110
|
-
_mappedProperties.clear();
|
|
111
|
-
|
|
112
|
-
if (!maybePropsObject.isObject()) {
|
|
113
|
-
throw jsi::JSError(runtime, "Expected property object.");
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
auto props = maybePropsObject.asObject(runtime);
|
|
117
|
-
|
|
118
|
-
// Use specialized reader function to be able to intercept calls that
|
|
119
|
-
// reads specific named values from the js property object.
|
|
120
|
-
auto read = [&](jsi::Runtime &runtime, PropId name, NodeProp *prop) {
|
|
121
|
-
if (_mappedProperties.count(name) == 0) {
|
|
122
|
-
std::vector<NodeProp *> tmp;
|
|
123
|
-
_mappedProperties[name] = std::move(tmp);
|
|
124
|
-
}
|
|
125
|
-
_mappedProperties.at(name).push_back(prop);
|
|
126
|
-
return props.getProperty(runtime, name);
|
|
127
|
-
};
|
|
128
|
-
|
|
129
|
-
for (auto &prop : _properties) {
|
|
130
|
-
prop->readValueFromJs(runtime, read);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
Defines a property that will be added to the container
|
|
136
|
-
*/
|
|
137
|
-
template <class _Tp, class... _Args,
|
|
138
|
-
class = std::enable_if_t<!std::is_array<_Tp>::value>>
|
|
139
|
-
_Tp *defineProperty(_Args &&...__args) {
|
|
140
|
-
// Create property and set onChange callback
|
|
141
|
-
auto prop =
|
|
142
|
-
std::make_shared<_Tp>(std::forward<_Args>(__args)..., _onPropChanged);
|
|
143
|
-
|
|
144
|
-
// Add to props list
|
|
145
|
-
_properties.push_back(prop);
|
|
146
|
-
|
|
147
|
-
return prop.get();
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
private:
|
|
151
|
-
std::function<void(BaseNodeProp *)> _onPropChanged;
|
|
152
|
-
std::vector<std::shared_ptr<BaseNodeProp>> _properties;
|
|
153
|
-
std::map<PropId, std::vector<NodeProp *>> _mappedProperties;
|
|
154
|
-
PropId _type;
|
|
155
|
-
std::mutex _mappedPropsLock;
|
|
156
|
-
};
|
|
157
|
-
|
|
158
|
-
} // namespace RNSkia
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "JsiDomDrawingNode.h"
|
|
4
|
-
#include "RSXformProp.h"
|
|
5
|
-
#include "RectProp.h"
|
|
6
|
-
#include "SamplingProp.h"
|
|
7
|
-
#include "SkImageProps.h"
|
|
8
|
-
|
|
9
|
-
#include <memory>
|
|
10
|
-
#include <tuple>
|
|
11
|
-
|
|
12
|
-
namespace RNSkia {
|
|
13
|
-
|
|
14
|
-
class JsiAtlasNode : public JsiDomDrawingNode,
|
|
15
|
-
public JsiDomNodeCtor<JsiAtlasNode> {
|
|
16
|
-
public:
|
|
17
|
-
explicit JsiAtlasNode(std::shared_ptr<RNSkPlatformContext> context)
|
|
18
|
-
: JsiDomDrawingNode(context, "skAtlas") {}
|
|
19
|
-
|
|
20
|
-
protected:
|
|
21
|
-
void draw(DrawingContext *context) override {
|
|
22
|
-
if (_rectsProp->isSet() && _imageProp->isSet() && _rsxFormsProp->isSet()) {
|
|
23
|
-
const auto image = _imageProp->getDerivedValue();
|
|
24
|
-
const auto sprites = _rectsProp->getDerivedValue();
|
|
25
|
-
const auto transforms = _rsxFormsProp->getDerivedValue();
|
|
26
|
-
const auto colors =
|
|
27
|
-
_colorsProp->isSet() ? _colorsProp->getDerivedValue() : nullptr;
|
|
28
|
-
const auto blendMode = _blendModeProp->isSet()
|
|
29
|
-
? *_blendModeProp->getDerivedValue()
|
|
30
|
-
: SkBlendMode::kDstOver;
|
|
31
|
-
auto paint = *context->getPaint();
|
|
32
|
-
auto sampling = _samplingProp->isSet()
|
|
33
|
-
? *_samplingProp->getDerivedValue()
|
|
34
|
-
: SkSamplingOptions(SkFilterMode::kLinear);
|
|
35
|
-
context->getCanvas()->drawAtlas(
|
|
36
|
-
image.get(), transforms->data(), sprites->data(),
|
|
37
|
-
colors == nullptr ? nullptr : colors->data(), sprites->size(),
|
|
38
|
-
blendMode, sampling, nullptr, &paint);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
void defineProperties(NodePropsContainer *container) override {
|
|
43
|
-
JsiDomDrawingNode::defineProperties(container);
|
|
44
|
-
_rectsProp = container->defineProperty<RectsProp>("sprites");
|
|
45
|
-
_rsxFormsProp = container->defineProperty<RSXFormsProp>("transforms");
|
|
46
|
-
_imageProp = container->defineProperty<ImageProp>("image");
|
|
47
|
-
_colorsProp = container->defineProperty<ColorsProp>("colors");
|
|
48
|
-
_blendModeProp = container->defineProperty<BlendModeProp>("blendMode");
|
|
49
|
-
_samplingProp = container->defineProperty<SamplingProp>("sampling");
|
|
50
|
-
|
|
51
|
-
_rectsProp->require();
|
|
52
|
-
_rsxFormsProp->require();
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
private:
|
|
56
|
-
ImageProp *_imageProp;
|
|
57
|
-
RectsProp *_rectsProp;
|
|
58
|
-
RSXFormsProp *_rsxFormsProp;
|
|
59
|
-
ColorsProp *_colorsProp;
|
|
60
|
-
BlendModeProp *_blendModeProp;
|
|
61
|
-
SamplingProp *_samplingProp;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
} // namespace RNSkia
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "CircleProp.h"
|
|
4
|
-
#include "JsiDomDrawingNode.h"
|
|
5
|
-
|
|
6
|
-
#include <memory>
|
|
7
|
-
|
|
8
|
-
namespace RNSkia {
|
|
9
|
-
|
|
10
|
-
class JsiBackdropFilterNode : public JsiDomDrawingNode,
|
|
11
|
-
public JsiDomNodeCtor<JsiBackdropFilterNode> {
|
|
12
|
-
public:
|
|
13
|
-
explicit JsiBackdropFilterNode(std::shared_ptr<RNSkPlatformContext> context)
|
|
14
|
-
: JsiDomDrawingNode(context, "skBackdropFilter") {}
|
|
15
|
-
|
|
16
|
-
protected:
|
|
17
|
-
void draw(DrawingContext *context) override {
|
|
18
|
-
auto children = getChildren();
|
|
19
|
-
|
|
20
|
-
if (children.size() == 0) {
|
|
21
|
-
return;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
auto canvas = context->getCanvas();
|
|
25
|
-
auto firstChild = children[0];
|
|
26
|
-
sk_sp<SkImageFilter> imageFilter;
|
|
27
|
-
|
|
28
|
-
if (firstChild->getNodeClass() == NodeClass::DeclarationNode) {
|
|
29
|
-
context->getDeclarationContext()->save();
|
|
30
|
-
firstChild->decorateContext(context->getDeclarationContext());
|
|
31
|
-
auto imgF = context->getDeclarationContext()->getImageFilters()->pop();
|
|
32
|
-
if (imgF) {
|
|
33
|
-
imageFilter = imgF;
|
|
34
|
-
} else {
|
|
35
|
-
auto cf = context->getDeclarationContext()->getColorFilters()->pop();
|
|
36
|
-
if (cf) {
|
|
37
|
-
imageFilter = SkImageFilters::ColorFilter(cf, nullptr);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
context->getDeclarationContext()->restore();
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
canvas->saveLayer(
|
|
44
|
-
SkCanvas::SaveLayerRec(nullptr, nullptr, imageFilter.get(), 0));
|
|
45
|
-
canvas->restore();
|
|
46
|
-
}
|
|
47
|
-
};
|
|
48
|
-
|
|
49
|
-
} // namespace RNSkia
|