@shopify/react-native-skia 0.1.164 → 0.1.166
Sign up to get free protection for your applications and to get access to all the features.
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +16 -5
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +34 -0
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomViewManager.java +2 -47
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawViewManager.java +2 -44
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureViewManager.java +2 -47
- package/cpp/api/JsiSkRuntimeEffect.h +7 -2
- package/cpp/rnskia/RNSkDomView.cpp +1 -1
- package/cpp/rnskia/RNSkPlatformContext.h +2 -6
- package/cpp/rnskia/dom/base/DerivedNodeProp.h +4 -4
- package/cpp/rnskia/dom/base/DrawingContext.cpp +5 -38
- package/cpp/rnskia/dom/base/DrawingContext.h +3 -17
- package/cpp/rnskia/dom/nodes/JsiBoxNode.h +4 -4
- package/cpp/rnskia/dom/nodes/JsiCircleNode.h +0 -2
- package/cpp/rnskia/dom/nodes/JsiCustomDrawingNode.h +1 -3
- package/cpp/rnskia/dom/nodes/JsiImageFilterNodes.h +2 -2
- package/cpp/rnskia/dom/nodes/JsiPathNode.h +12 -5
- package/cpp/rnskia/dom/nodes/JsiShaderNodes.h +17 -7
- package/cpp/rnskia/dom/props/CircleProp.h +2 -0
- package/cpp/rnskia/dom/props/ClipProp.h +6 -6
- package/cpp/rnskia/dom/props/ColorProp.h +9 -4
- package/cpp/rnskia/dom/props/ImageProps.h +6 -3
- package/cpp/rnskia/dom/props/PaintProps.h +15 -22
- package/cpp/rnskia/dom/props/RectProp.h +11 -4
- package/cpp/rnskia/dom/props/UniformsProp.h +86 -123
- package/cpp/rnskia/dom/props/VerticesProps.h +2 -2
- package/cpp/rnskia/values/RNSkReadonlyValue.h +2 -6
- package/lib/commonjs/dom/nodes/datatypes/Circle.js +6 -1
- package/lib/commonjs/dom/nodes/datatypes/Circle.js.map +1 -1
- package/lib/commonjs/dom/nodes/datatypes/Rect.js +3 -3
- package/lib/commonjs/dom/nodes/datatypes/Rect.js.map +1 -1
- package/lib/commonjs/dom/nodes/drawings/Box.js +1 -1
- package/lib/commonjs/dom/nodes/drawings/Box.js.map +1 -1
- package/lib/commonjs/dom/nodes/drawings/ImageNode.js +2 -2
- package/lib/commonjs/dom/nodes/drawings/ImageNode.js.map +1 -1
- package/lib/commonjs/dom/nodes/paint/ImageFilters.js +1 -1
- package/lib/commonjs/dom/nodes/paint/ImageFilters.js.map +1 -1
- package/lib/commonjs/dom/nodes/paint/Shaders.js +5 -2
- package/lib/commonjs/dom/nodes/paint/Shaders.js.map +1 -1
- package/lib/commonjs/dom/types/Common.js.map +1 -1
- package/lib/commonjs/dom/types/Drawings.js.map +1 -1
- package/lib/commonjs/renderer/components/Mask.js +2 -6
- package/lib/commonjs/renderer/components/Mask.js.map +1 -1
- package/lib/commonjs/renderer/components/image/Image.js +0 -5
- package/lib/commonjs/renderer/components/image/Image.js.map +1 -1
- package/lib/commonjs/renderer/components/image/ImageShader.js +20 -10
- package/lib/commonjs/renderer/components/image/ImageShader.js.map +1 -1
- package/lib/commonjs/renderer/components/imageFilters/Blur.js +10 -5
- package/lib/commonjs/renderer/components/imageFilters/Blur.js.map +1 -1
- package/lib/commonjs/renderer/components/imageFilters/Morphology.js +10 -5
- package/lib/commonjs/renderer/components/imageFilters/Morphology.js.map +1 -1
- package/lib/commonjs/renderer/components/imageFilters/Offset.js +12 -6
- package/lib/commonjs/renderer/components/imageFilters/Offset.js.map +1 -1
- package/lib/commonjs/renderer/components/maskFilters/Blur.js +12 -6
- package/lib/commonjs/renderer/components/maskFilters/Blur.js.map +1 -1
- package/lib/commonjs/renderer/components/pathEffects/Discrete.js +10 -5
- package/lib/commonjs/renderer/components/pathEffects/Discrete.js.map +1 -1
- package/lib/commonjs/renderer/components/shaders/FractalNoise.js +14 -7
- package/lib/commonjs/renderer/components/shaders/FractalNoise.js.map +1 -1
- package/lib/commonjs/renderer/components/shaders/Shader.js +10 -5
- package/lib/commonjs/renderer/components/shaders/Shader.js.map +1 -1
- package/lib/commonjs/renderer/components/shaders/Turbulence.js +14 -7
- package/lib/commonjs/renderer/components/shaders/Turbulence.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/Circle.js +0 -6
- package/lib/commonjs/renderer/components/shapes/Circle.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/FitBox.js +1 -4
- package/lib/commonjs/renderer/components/shapes/FitBox.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/Oval.js +0 -4
- package/lib/commonjs/renderer/components/shapes/Oval.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/Path.js +12 -6
- package/lib/commonjs/renderer/components/shapes/Path.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/Points.js +10 -5
- package/lib/commonjs/renderer/components/shapes/Points.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/RoundedRect.js +0 -3
- package/lib/commonjs/renderer/components/shapes/RoundedRect.js.map +1 -1
- package/lib/commonjs/renderer/components/shapes/Vertices.js +10 -5
- package/lib/commonjs/renderer/components/shapes/Vertices.js.map +1 -1
- package/lib/commonjs/renderer/components/text/Glyphs.js +12 -6
- package/lib/commonjs/renderer/components/text/Glyphs.js.map +1 -1
- package/lib/commonjs/renderer/components/text/Text.js +12 -6
- package/lib/commonjs/renderer/components/text/Text.js.map +1 -1
- package/lib/commonjs/renderer/components/text/TextBlob.js +12 -6
- package/lib/commonjs/renderer/components/text/TextBlob.js.map +1 -1
- package/lib/commonjs/renderer/components/text/TextPath.js +10 -5
- package/lib/commonjs/renderer/components/text/TextPath.js.map +1 -1
- package/lib/commonjs/renderer/processors/Animations/Animations.js.map +1 -1
- package/lib/commonjs/skia/types/RuntimeEffect/RuntimeEffect.js.map +1 -1
- package/lib/commonjs/skia/types/Shader/Shader.js +25 -25
- package/lib/commonjs/skia/types/Shader/Shader.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkRuntimeEffect.js +6 -1
- package/lib/commonjs/skia/web/JsiSkRuntimeEffect.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkRuntimeEffectFactory.js +1 -1
- package/lib/commonjs/skia/web/JsiSkRuntimeEffectFactory.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Circle.js +8 -1
- package/lib/module/dom/nodes/datatypes/Circle.js.map +1 -1
- package/lib/module/dom/nodes/datatypes/Rect.js +7 -3
- package/lib/module/dom/nodes/datatypes/Rect.js.map +1 -1
- package/lib/module/dom/nodes/drawings/Box.js +1 -1
- package/lib/module/dom/nodes/drawings/Box.js.map +1 -1
- package/lib/module/dom/nodes/drawings/ImageNode.js +4 -2
- package/lib/module/dom/nodes/drawings/ImageNode.js.map +1 -1
- package/lib/module/dom/nodes/paint/ImageFilters.js +1 -1
- package/lib/module/dom/nodes/paint/ImageFilters.js.map +1 -1
- package/lib/module/dom/nodes/paint/Shaders.js +5 -4
- package/lib/module/dom/nodes/paint/Shaders.js.map +1 -1
- package/lib/module/dom/types/Common.js.map +1 -1
- package/lib/module/dom/types/Drawings.js.map +1 -1
- package/lib/module/renderer/components/Mask.js +2 -6
- package/lib/module/renderer/components/Mask.js.map +1 -1
- package/lib/module/renderer/components/image/Image.js +0 -5
- package/lib/module/renderer/components/image/Image.js.map +1 -1
- package/lib/module/renderer/components/image/ImageShader.js +20 -10
- package/lib/module/renderer/components/image/ImageShader.js.map +1 -1
- package/lib/module/renderer/components/imageFilters/Blur.js +10 -5
- package/lib/module/renderer/components/imageFilters/Blur.js.map +1 -1
- package/lib/module/renderer/components/imageFilters/Morphology.js +10 -5
- package/lib/module/renderer/components/imageFilters/Morphology.js.map +1 -1
- package/lib/module/renderer/components/imageFilters/Offset.js +12 -6
- package/lib/module/renderer/components/imageFilters/Offset.js.map +1 -1
- package/lib/module/renderer/components/maskFilters/Blur.js +12 -6
- package/lib/module/renderer/components/maskFilters/Blur.js.map +1 -1
- package/lib/module/renderer/components/pathEffects/Discrete.js +10 -5
- package/lib/module/renderer/components/pathEffects/Discrete.js.map +1 -1
- package/lib/module/renderer/components/shaders/FractalNoise.js +14 -7
- package/lib/module/renderer/components/shaders/FractalNoise.js.map +1 -1
- package/lib/module/renderer/components/shaders/Shader.js +10 -5
- package/lib/module/renderer/components/shaders/Shader.js.map +1 -1
- package/lib/module/renderer/components/shaders/Turbulence.js +14 -7
- package/lib/module/renderer/components/shaders/Turbulence.js.map +1 -1
- package/lib/module/renderer/components/shapes/Circle.js +0 -6
- package/lib/module/renderer/components/shapes/Circle.js.map +1 -1
- package/lib/module/renderer/components/shapes/FitBox.js +1 -4
- package/lib/module/renderer/components/shapes/FitBox.js.map +1 -1
- package/lib/module/renderer/components/shapes/Oval.js +0 -4
- package/lib/module/renderer/components/shapes/Oval.js.map +1 -1
- package/lib/module/renderer/components/shapes/Path.js +12 -6
- package/lib/module/renderer/components/shapes/Path.js.map +1 -1
- package/lib/module/renderer/components/shapes/Points.js +10 -5
- package/lib/module/renderer/components/shapes/Points.js.map +1 -1
- package/lib/module/renderer/components/shapes/RoundedRect.js +0 -3
- package/lib/module/renderer/components/shapes/RoundedRect.js.map +1 -1
- package/lib/module/renderer/components/shapes/Vertices.js +10 -5
- package/lib/module/renderer/components/shapes/Vertices.js.map +1 -1
- package/lib/module/renderer/components/text/Glyphs.js +12 -6
- package/lib/module/renderer/components/text/Glyphs.js.map +1 -1
- package/lib/module/renderer/components/text/Text.js +12 -6
- package/lib/module/renderer/components/text/Text.js.map +1 -1
- package/lib/module/renderer/components/text/TextBlob.js +12 -6
- package/lib/module/renderer/components/text/TextBlob.js.map +1 -1
- package/lib/module/renderer/components/text/TextPath.js +10 -5
- package/lib/module/renderer/components/text/TextPath.js.map +1 -1
- package/lib/module/renderer/processors/Animations/Animations.js.map +1 -1
- package/lib/module/skia/types/RuntimeEffect/RuntimeEffect.js.map +1 -1
- package/lib/module/skia/types/Shader/Shader.js +25 -25
- package/lib/module/skia/types/Shader/Shader.js.map +1 -1
- package/lib/module/skia/web/JsiSkRuntimeEffect.js +6 -1
- package/lib/module/skia/web/JsiSkRuntimeEffect.js.map +1 -1
- package/lib/module/skia/web/JsiSkRuntimeEffectFactory.js +1 -1
- package/lib/module/skia/web/JsiSkRuntimeEffectFactory.js.map +1 -1
- package/lib/typescript/src/dom/nodes/datatypes/Circle.d.ts +4 -1
- package/lib/typescript/src/dom/types/Common.d.ts +4 -4
- package/lib/typescript/src/dom/types/Drawings.d.ts +1 -1
- package/lib/typescript/src/renderer/components/Mask.d.ts +3 -9
- package/lib/typescript/src/renderer/components/image/Image.d.ts +1 -8
- package/lib/typescript/src/renderer/components/image/ImageShader.d.ts +2 -12
- package/lib/typescript/src/renderer/components/imageFilters/Blur.d.ts +2 -7
- package/lib/typescript/src/renderer/components/imageFilters/Morphology.d.ts +2 -7
- package/lib/typescript/src/renderer/components/imageFilters/Offset.d.ts +2 -8
- package/lib/typescript/src/renderer/components/maskFilters/Blur.d.ts +2 -8
- package/lib/typescript/src/renderer/components/pathEffects/Discrete.d.ts +2 -7
- package/lib/typescript/src/renderer/components/shaders/FractalNoise.d.ts +2 -9
- package/lib/typescript/src/renderer/components/shaders/Shader.d.ts +2 -7
- package/lib/typescript/src/renderer/components/shaders/Turbulence.d.ts +2 -9
- package/lib/typescript/src/renderer/components/shapes/Circle.d.ts +1 -9
- package/lib/typescript/src/renderer/components/shapes/FitBox.d.ts +2 -7
- package/lib/typescript/src/renderer/components/shapes/Oval.d.ts +1 -7
- package/lib/typescript/src/renderer/components/shapes/Path.d.ts +2 -8
- package/lib/typescript/src/renderer/components/shapes/Points.d.ts +2 -7
- package/lib/typescript/src/renderer/components/shapes/RoundedRect.d.ts +1 -6
- package/lib/typescript/src/renderer/components/shapes/Vertices.d.ts +2 -7
- package/lib/typescript/src/renderer/components/text/Glyphs.d.ts +2 -8
- package/lib/typescript/src/renderer/components/text/Text.d.ts +2 -8
- package/lib/typescript/src/renderer/components/text/TextBlob.d.ts +2 -8
- package/lib/typescript/src/renderer/components/text/TextPath.d.ts +2 -7
- package/lib/typescript/src/renderer/processors/Animations/Animations.d.ts +5 -0
- package/lib/typescript/src/skia/types/RuntimeEffect/RuntimeEffect.d.ts +4 -0
- package/lib/typescript/src/skia/types/Shader/Shader.d.ts +1 -2
- package/lib/typescript/src/skia/web/JsiSkRuntimeEffect.d.ts +3 -1
- package/package.json +1 -1
- package/src/dom/nodes/datatypes/Circle.ts +1 -1
- package/src/dom/nodes/datatypes/Rect.ts +3 -3
- package/src/dom/nodes/drawings/Box.ts +1 -1
- package/src/dom/nodes/drawings/ImageNode.ts +2 -1
- package/src/dom/nodes/paint/ImageFilters.ts +1 -1
- package/src/dom/nodes/paint/Shaders.ts +5 -5
- package/src/dom/types/Common.ts +4 -4
- package/src/dom/types/Drawings.ts +1 -1
- package/src/renderer/components/Mask.tsx +8 -8
- package/src/renderer/components/image/Image.tsx +0 -6
- package/src/renderer/components/image/ImageShader.tsx +24 -12
- package/src/renderer/components/imageFilters/Blur.tsx +6 -7
- package/src/renderer/components/imageFilters/Morphology.tsx +6 -7
- package/src/renderer/components/imageFilters/Offset.tsx +7 -8
- package/src/renderer/components/maskFilters/Blur.tsx +7 -8
- package/src/renderer/components/pathEffects/Discrete.tsx +6 -9
- package/src/renderer/components/shaders/FractalNoise.tsx +18 -9
- package/src/renderer/components/shaders/Shader.tsx +6 -7
- package/src/renderer/components/shaders/Turbulence.tsx +15 -9
- package/src/renderer/components/shapes/Circle.tsx +0 -4
- package/src/renderer/components/shapes/FitBox.tsx +2 -6
- package/src/renderer/components/shapes/Oval.tsx +0 -5
- package/src/renderer/components/shapes/Path.tsx +7 -8
- package/src/renderer/components/shapes/Points.tsx +6 -7
- package/src/renderer/components/shapes/RoundedRect.tsx +0 -4
- package/src/renderer/components/shapes/Vertices.tsx +6 -7
- package/src/renderer/components/text/Glyphs.tsx +7 -8
- package/src/renderer/components/text/Text.tsx +7 -8
- package/src/renderer/components/text/TextBlob.tsx +7 -8
- package/src/renderer/components/text/TextPath.tsx +6 -7
- package/src/renderer/processors/Animations/Animations.ts +9 -3
- package/src/skia/types/RuntimeEffect/RuntimeEffect.ts +5 -0
- package/src/skia/types/Shader/Shader.ts +30 -36
- package/src/skia/web/JsiSkRuntimeEffect.ts +5 -1
- package/src/skia/web/JsiSkRuntimeEffectFactory.ts +1 -1
@@ -45,18 +45,18 @@ public:
|
|
45
45
|
return _pathProp->isSet() || _rectProp->isSet() || _rrectProp->isSet();
|
46
46
|
}
|
47
47
|
|
48
|
-
SkPath *getPath() { return _path.get(); }
|
49
|
-
SkRect *getRect() { return _rect.get(); }
|
50
|
-
SkRRect *getRRect() { return _rrect.get(); }
|
48
|
+
const SkPath *getPath() { return _path.get(); }
|
49
|
+
const SkRect *getRect() { return _rect.get(); }
|
50
|
+
const SkRRect *getRRect() { return _rrect.get(); }
|
51
51
|
|
52
52
|
private:
|
53
53
|
PathProp *_pathProp;
|
54
54
|
RectProp *_rectProp;
|
55
55
|
RRectProp *_rrectProp;
|
56
56
|
|
57
|
-
std::shared_ptr<SkPath> _path;
|
58
|
-
std::shared_ptr<SkRect> _rect;
|
59
|
-
std::shared_ptr<SkRRect> _rrect;
|
57
|
+
std::shared_ptr<const SkPath> _path;
|
58
|
+
std::shared_ptr<const SkRect> _rect;
|
59
|
+
std::shared_ptr<const SkRRect> _rrect;
|
60
60
|
};
|
61
61
|
|
62
62
|
} // namespace RNSkia
|
@@ -9,6 +9,11 @@
|
|
9
9
|
|
10
10
|
namespace RNSkia {
|
11
11
|
|
12
|
+
static PropId PropName0 = JsiPropId::get("0");
|
13
|
+
static PropId PropName1 = JsiPropId::get("1");
|
14
|
+
static PropId PropName2 = JsiPropId::get("2");
|
15
|
+
static PropId PropName3 = JsiPropId::get("3");
|
16
|
+
|
12
17
|
class ColorProp : public DerivedProp<SkColor> {
|
13
18
|
public:
|
14
19
|
explicit ColorProp(PropId name) : DerivedProp<SkColor>() {
|
@@ -28,10 +33,10 @@ public:
|
|
28
33
|
static SkColor parseColorValue(const JsiValue &color) {
|
29
34
|
if (color.getType() == PropType::Object) {
|
30
35
|
// Float array
|
31
|
-
auto r = color.getValue(
|
32
|
-
auto g = color.getValue(
|
33
|
-
auto b = color.getValue(
|
34
|
-
auto a = color.getValue(
|
36
|
+
auto r = color.getValue(PropName0);
|
37
|
+
auto g = color.getValue(PropName1);
|
38
|
+
auto b = color.getValue(PropName2);
|
39
|
+
auto a = color.getValue(PropName3);
|
35
40
|
return SkColorSetARGB(a.getAsNumber() * 255.0f, r.getAsNumber() * 255.0f,
|
36
41
|
g.getAsNumber() * 255.0f, b.getAsNumber() * 255.0f);
|
37
42
|
|
@@ -30,7 +30,8 @@ public:
|
|
30
30
|
}
|
31
31
|
|
32
32
|
void updateDerivedValue() override {
|
33
|
-
if (_imageProp->
|
33
|
+
if (!_imageProp->isSet() ||
|
34
|
+
_imageProp->value().getType() != PropType::HostObject) {
|
34
35
|
throw std::runtime_error("Expected SkImage object for the " +
|
35
36
|
std::string(getName()) + " property.");
|
36
37
|
}
|
@@ -67,13 +68,15 @@ public:
|
|
67
68
|
|
68
69
|
auto rect = _rectProp->getDerivedValue() ? *_rectProp->getDerivedValue()
|
69
70
|
: imageRect;
|
70
|
-
auto fit = _fitProp->isSet() ? _fitProp->value().getAsString() : "
|
71
|
+
auto fit = _fitProp->isSet() ? _fitProp->value().getAsString() : "contain";
|
71
72
|
|
72
73
|
setDerivedValue(fitRects(fit, imageRect, rect));
|
73
74
|
}
|
74
75
|
|
75
76
|
sk_sp<SkImage> getImage() { return _imageProp->getDerivedValue(); }
|
76
|
-
std::shared_ptr<SkRect> getRect() {
|
77
|
+
std::shared_ptr<const SkRect> getRect() {
|
78
|
+
return _rectProp->getDerivedValue();
|
79
|
+
}
|
77
80
|
|
78
81
|
SkRect rect2rect(SkRect src, SkRect dst) {
|
79
82
|
auto scaleX = dst.width() / src.width();
|
@@ -19,8 +19,6 @@
|
|
19
19
|
|
20
20
|
namespace RNSkia {
|
21
21
|
|
22
|
-
static PropId PropNameCurrent = JsiPropId::get("current");
|
23
|
-
|
24
22
|
class PaintProp : public DerivedProp<SkPaint> {
|
25
23
|
public:
|
26
24
|
explicit PaintProp(PropId name) : DerivedProp<SkPaint>() {
|
@@ -40,20 +38,6 @@ public:
|
|
40
38
|
throw std::runtime_error("Expected SkPaint object, got unknown "
|
41
39
|
"object when reading paint property.");
|
42
40
|
}
|
43
|
-
} else if (_paintProp->value().getType() == PropType::Object) {
|
44
|
-
// We have a JS object - is it a ref?
|
45
|
-
auto ref = _paintProp->value().getValue(PropNameCurrent);
|
46
|
-
if (ref.getType() == PropType::HostObject) {
|
47
|
-
auto ptr = ref.getAs<JsiSkPaint>();
|
48
|
-
if (ptr != nullptr) {
|
49
|
-
// Update the local paint for the current context
|
50
|
-
setDerivedValue(ptr->getObject());
|
51
|
-
} else {
|
52
|
-
throw std::runtime_error(
|
53
|
-
"Expected reference to a SkPaint object, got unknown object "
|
54
|
-
"when reading paint property.");
|
55
|
-
}
|
56
|
-
}
|
57
41
|
} else {
|
58
42
|
setDerivedValue(nullptr);
|
59
43
|
}
|
@@ -92,22 +76,31 @@ public:
|
|
92
76
|
|
93
77
|
// Opacity
|
94
78
|
if (_opacity->isChanged() || context->isChanged()) {
|
79
|
+
auto parent = context->getParent();
|
80
|
+
auto paint = context->getMutablePaint();
|
95
81
|
if (_opacity->isSet()) {
|
96
|
-
|
82
|
+
auto currentOpacity = _opacity->value().getAsNumber();
|
83
|
+
auto parent = context->getParent();
|
84
|
+
if (parent != nullptr) {
|
85
|
+
currentOpacity *= parent->getPaint()->getAlphaf();
|
86
|
+
}
|
87
|
+
paint->setAlphaf(currentOpacity);
|
97
88
|
} else {
|
98
|
-
|
89
|
+
if (parent != nullptr) {
|
90
|
+
paint->setAlphaf(parent->getPaint()->getAlphaf());
|
91
|
+
} else {
|
92
|
+
paint->setAlphaf(1.0);
|
93
|
+
}
|
99
94
|
}
|
100
95
|
}
|
101
96
|
|
102
97
|
// COLOR
|
103
98
|
if (_color->isSet() && (_color->isChanged() || context->isChanged())) {
|
104
99
|
auto paint = context->getMutablePaint();
|
100
|
+
auto opacity = paint->getAlphaf();
|
105
101
|
paint->setShader(nullptr);
|
106
102
|
paint->setColor(*_color->getDerivedValue());
|
107
|
-
paint->setAlphaf(
|
108
|
-
} else if (context->isChanged()) {
|
109
|
-
auto paint = context->getMutablePaint();
|
110
|
-
paint->setAlphaf(context->getOpacity());
|
103
|
+
paint->setAlphaf(opacity * paint->getColor4f().fA);
|
111
104
|
}
|
112
105
|
|
113
106
|
// Style
|
@@ -76,10 +76,17 @@ public:
|
|
76
76
|
}
|
77
77
|
|
78
78
|
void updateDerivedValue() override {
|
79
|
-
if (
|
80
|
-
|
81
|
-
|
82
|
-
|
79
|
+
if (_width->isSet() && _height->isSet()) {
|
80
|
+
auto x = 0.0;
|
81
|
+
auto y = 0.0;
|
82
|
+
if (_x->isSet()) {
|
83
|
+
x = _x->value().getAsNumber();
|
84
|
+
}
|
85
|
+
if (_y->isSet()) {
|
86
|
+
y = _y->value().getAsNumber();
|
87
|
+
}
|
88
|
+
setDerivedValue(SkRect::MakeXYWH(x, y, _width->value().getAsNumber(),
|
89
|
+
_height->value().getAsNumber()));
|
83
90
|
}
|
84
91
|
}
|
85
92
|
|
@@ -16,6 +16,68 @@
|
|
16
16
|
|
17
17
|
namespace RNSkia {
|
18
18
|
|
19
|
+
bool isJSPoint(const JsiValue &value) {
|
20
|
+
return value.getType() == PropType::Object && value.hasValue(PropNameX) &&
|
21
|
+
value.hasValue(PropNameY);
|
22
|
+
}
|
23
|
+
|
24
|
+
bool isSkPoint(const JsiValue &value) {
|
25
|
+
return value.getType() == PropType::HostObject &&
|
26
|
+
std::dynamic_pointer_cast<JsiSkPoint>(value.getAsHostObject()) !=
|
27
|
+
nullptr;
|
28
|
+
}
|
29
|
+
|
30
|
+
bool isIndexable(const JsiValue &value) {
|
31
|
+
return value.getType() == PropType::Object && value.hasValue(PropName0);
|
32
|
+
}
|
33
|
+
|
34
|
+
void processValue(std::vector<SkScalar> &values, const JsiValue &value) {
|
35
|
+
if (value.getType() == PropType::Number) {
|
36
|
+
auto n = value.getAsNumber();
|
37
|
+
values.push_back(n);
|
38
|
+
} else if (value.getType() == PropType::Array) {
|
39
|
+
auto arrayValue = value.getAsArray();
|
40
|
+
for (size_t i = 0; i < arrayValue.size(); ++i) {
|
41
|
+
auto a = arrayValue[i];
|
42
|
+
processValue(values, a);
|
43
|
+
}
|
44
|
+
} else if (isJSPoint(value) || isSkPoint(value)) {
|
45
|
+
auto pointValue = PointProp::processValue(value);
|
46
|
+
values.push_back(pointValue.x());
|
47
|
+
values.push_back(pointValue.y());
|
48
|
+
} else if (isIndexable(value)) {
|
49
|
+
auto length = value.getKeys().size();
|
50
|
+
for (size_t i = 0; i < length; ++i) {
|
51
|
+
values.push_back(
|
52
|
+
value.getValue(JsiPropId::get(std::to_string(i))).getAsNumber());
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
void processUniform(std::vector<SkScalar> &values, SkRuntimeEffect *source,
|
58
|
+
const JsiValue &uniforms, SkRuntimeShaderBuilder *rtb) {
|
59
|
+
auto uniformsCount = source->uniforms().size();
|
60
|
+
for (size_t i = 0; i < uniformsCount; ++i) {
|
61
|
+
auto it = source->uniforms().begin() + i;
|
62
|
+
auto name = JsiPropId::get(std::string(it->name));
|
63
|
+
if (!uniforms.hasValue(name)) {
|
64
|
+
throw std::runtime_error("The runtime effect has the uniform value \"" +
|
65
|
+
std::string(name) +
|
66
|
+
"\" declared, but it is missing from the "
|
67
|
+
"uniforms property of the Runtime effect.");
|
68
|
+
}
|
69
|
+
auto value = uniforms.getValue(name);
|
70
|
+
if (rtb == nullptr) {
|
71
|
+
processValue(values, value);
|
72
|
+
} else {
|
73
|
+
std::vector<SkScalar> uniformValue;
|
74
|
+
processValue(uniformValue, value);
|
75
|
+
rtb->uniform(name).set(uniformValue.data(),
|
76
|
+
static_cast<int>(uniformValue.size()));
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
19
81
|
class UniformsProp : public DerivedSkProp<SkData> {
|
20
82
|
public:
|
21
83
|
UniformsProp(PropId name, NodeProp *sourceProp) : DerivedSkProp<SkData>() {
|
@@ -32,7 +94,9 @@ public:
|
|
32
94
|
auto source = _sourceProp->value().getAs<JsiSkRuntimeEffect>()->getObject();
|
33
95
|
|
34
96
|
// Flatten uniforms from property
|
35
|
-
|
97
|
+
std::vector<SkScalar> uniformValues;
|
98
|
+
processUniform(uniformValues, source.get(), _uniformsProp->value(),
|
99
|
+
nullptr);
|
36
100
|
|
37
101
|
// Cast uniforms according to the declaration in the shader
|
38
102
|
auto uniformsData = castUniforms(source.get(), uniformValues);
|
@@ -41,11 +105,30 @@ public:
|
|
41
105
|
setDerivedValue(uniformsData);
|
42
106
|
}
|
43
107
|
|
108
|
+
void processUniforms(SkRuntimeShaderBuilder &rtb) {
|
109
|
+
if (!_uniformsProp->isSet()) {
|
110
|
+
return;
|
111
|
+
}
|
112
|
+
|
113
|
+
// Get the effect
|
114
|
+
auto source = _sourceProp->value().getAs<JsiSkRuntimeEffect>()->getObject();
|
115
|
+
// Flatten uniforms from property
|
116
|
+
std::vector<SkScalar> uniformValues;
|
117
|
+
processUniform(uniformValues, source.get(), _uniformsProp->value(), &rtb);
|
118
|
+
}
|
119
|
+
|
44
120
|
private:
|
45
121
|
sk_sp<SkData> castUniforms(SkRuntimeEffect *source,
|
46
122
|
const std::vector<SkScalar> &values) {
|
47
123
|
// Create memory for uniforms
|
48
|
-
auto
|
124
|
+
auto uniformSize = source->uniformSize();
|
125
|
+
if (values.size() * sizeof(float) != uniformSize) {
|
126
|
+
throw std::runtime_error(
|
127
|
+
"Uniforms size differs from effect's uniform size. Received " +
|
128
|
+
std::to_string(values.size()) + " expected " +
|
129
|
+
std::to_string(uniformSize / sizeof(float)));
|
130
|
+
}
|
131
|
+
auto uniformsData = SkData::MakeUninitialized(uniformSize);
|
49
132
|
|
50
133
|
// Loop through all uniforms in the effect and load data from the flattened
|
51
134
|
// array of values
|
@@ -57,7 +140,7 @@ private:
|
|
57
140
|
const std::size_t offset = reu.slot + j;
|
58
141
|
float fValue = values.at(offset);
|
59
142
|
int iValue = static_cast<int>(fValue);
|
60
|
-
auto value = reu.isInteger ? iValue : fValue;
|
143
|
+
auto value = reu.isInteger ? SkBits2Float(iValue) : fValue;
|
61
144
|
memcpy(SkTAddOffset<void>(uniformsData->writable_data(),
|
62
145
|
offset * sizeof(value)),
|
63
146
|
&value, sizeof(value));
|
@@ -67,126 +150,6 @@ private:
|
|
67
150
|
return uniformsData;
|
68
151
|
}
|
69
152
|
|
70
|
-
std::vector<SkScalar> flattenUniforms(SkRuntimeEffect *source,
|
71
|
-
const JsiValue &propObject) {
|
72
|
-
auto uniformsCount = source->uniforms().size();
|
73
|
-
std::vector<SkScalar> uniformValues;
|
74
|
-
|
75
|
-
for (size_t i = 0; i < uniformsCount; ++i) {
|
76
|
-
auto it = source->uniforms().begin() + i;
|
77
|
-
auto name = JsiPropId::get(std::string(it->name));
|
78
|
-
|
79
|
-
if (!propObject.hasValue(name)) {
|
80
|
-
throw std::runtime_error("The runtime effect has the uniform value \"" +
|
81
|
-
std::string(name) +
|
82
|
-
"\" declared, but it is missing from the "
|
83
|
-
"uniforms property of the Runtime effect.");
|
84
|
-
}
|
85
|
-
|
86
|
-
auto value = propObject.getValue(name);
|
87
|
-
|
88
|
-
// A uniform value can be a single number, a vector or an array of numbers
|
89
|
-
// Or an array of the above
|
90
|
-
if (value.getType() == PropType::Number) {
|
91
|
-
// Set numeric uniform
|
92
|
-
uniformValues.push_back(value.getAsNumber());
|
93
|
-
} else if (value.getType() == PropType::Array) {
|
94
|
-
// Array
|
95
|
-
auto arrayValue = value.getAsArray();
|
96
|
-
for (size_t n = 0; n < arrayValue.size(); ++n) {
|
97
|
-
auto a = arrayValue[n];
|
98
|
-
if (a.getType() == PropType::Number) {
|
99
|
-
uniformValues.push_back(a.getAsNumber());
|
100
|
-
} else {
|
101
|
-
for (size_t j = 0; j < a.getAsArray().size(); ++j) {
|
102
|
-
uniformValues.push_back(a.getAsArray()[j].getAsNumber());
|
103
|
-
}
|
104
|
-
}
|
105
|
-
}
|
106
|
-
} else if (value.getType() == PropType::HostObject ||
|
107
|
-
value.getType() == PropType::Object) {
|
108
|
-
// Vector (JsiSkPoint / JsiSkRect)
|
109
|
-
auto pointValue = PointProp::processValue(value);
|
110
|
-
uniformValues.push_back(pointValue.x());
|
111
|
-
uniformValues.push_back(pointValue.y());
|
112
|
-
}
|
113
|
-
}
|
114
|
-
return uniformValues;
|
115
|
-
}
|
116
|
-
|
117
|
-
NodeProp *_uniformsProp;
|
118
|
-
NodeProp *_sourceProp;
|
119
|
-
};
|
120
|
-
|
121
|
-
class SimpleUniformsProp : public BaseDerivedProp {
|
122
|
-
public:
|
123
|
-
SimpleUniformsProp(PropId name, NodeProp *sourceProp) : BaseDerivedProp() {
|
124
|
-
_uniformsProp = addProperty(std::make_shared<NodeProp>(name));
|
125
|
-
_sourceProp = sourceProp;
|
126
|
-
}
|
127
|
-
|
128
|
-
void processUniforms(SkRuntimeShaderBuilder &rtb) {
|
129
|
-
if (!_uniformsProp->isSet()) {
|
130
|
-
return;
|
131
|
-
}
|
132
|
-
|
133
|
-
auto propObject = _uniformsProp->value();
|
134
|
-
auto source = _sourceProp->value().getAs<JsiSkRuntimeEffect>()->getObject();
|
135
|
-
|
136
|
-
auto uniformsCount = source->uniforms().size();
|
137
|
-
|
138
|
-
for (size_t i = 0; i < uniformsCount; ++i) {
|
139
|
-
auto it = source->uniforms().begin() + i;
|
140
|
-
auto name = JsiPropId::get(std::string(it->name));
|
141
|
-
|
142
|
-
if (!propObject.hasValue(name)) {
|
143
|
-
throw std::runtime_error("The runtime effect has the uniform value \"" +
|
144
|
-
std::string(name) +
|
145
|
-
"\" declared, but it is missing from the "
|
146
|
-
"uniforms property of the Runtime effect.");
|
147
|
-
}
|
148
|
-
|
149
|
-
auto value = propObject.getValue(name);
|
150
|
-
|
151
|
-
// A uniform value can be a single number, a vector or an array of numbers
|
152
|
-
// Or an array of the above
|
153
|
-
if (value.getType() == PropType::Number) {
|
154
|
-
// Set numeric uniform
|
155
|
-
rtb.uniform(name) = value.getAsNumber();
|
156
|
-
} else if (value.getType() == PropType::Array) {
|
157
|
-
// Array
|
158
|
-
auto arrayValue = value.getAsArray();
|
159
|
-
std::vector<SkScalar> set;
|
160
|
-
for (size_t n = 0; n < arrayValue.size(); ++n) {
|
161
|
-
auto a = arrayValue[n];
|
162
|
-
if (a.getType() == PropType::Number) {
|
163
|
-
set.push_back(a.getAsNumber());
|
164
|
-
} else {
|
165
|
-
for (size_t j = 0; j < a.getAsArray().size(); ++j) {
|
166
|
-
set.push_back(a.getAsArray()[j].getAsNumber());
|
167
|
-
}
|
168
|
-
}
|
169
|
-
}
|
170
|
-
rtb.uniform(name).set(set.data(), static_cast<int>(set.size()));
|
171
|
-
|
172
|
-
} else if (value.getType() == PropType::HostObject ||
|
173
|
-
value.getType() == PropType::Object) {
|
174
|
-
// Vector (JsiSkPoint / JsiSkRect)
|
175
|
-
auto pointValue = PointProp::processValue(value);
|
176
|
-
std::vector<SkScalar> set = {pointValue.x(), pointValue.y()};
|
177
|
-
|
178
|
-
rtb.uniform(name).set(set.data(), static_cast<int>(set.size()));
|
179
|
-
} else {
|
180
|
-
throw std::runtime_error("Unexpected type for uniform prop \"" +
|
181
|
-
std::string(name) + "\". Got " +
|
182
|
-
value.getTypeAsString(value.getType()));
|
183
|
-
}
|
184
|
-
}
|
185
|
-
}
|
186
|
-
|
187
|
-
void updateDerivedValue() override {}
|
188
|
-
|
189
|
-
private:
|
190
153
|
NodeProp *_uniformsProp;
|
191
154
|
NodeProp *_sourceProp;
|
192
155
|
};
|
@@ -40,9 +40,9 @@ public:
|
|
40
40
|
bool hasColors() { return _colorsProp->isSet(); }
|
41
41
|
|
42
42
|
void updateDerivedValue() override {
|
43
|
-
SkVertices::VertexMode *vertextMode =
|
43
|
+
const SkVertices::VertexMode *vertextMode =
|
44
44
|
_vertexModeProp->getDerivedValue().get();
|
45
|
-
std::vector<SkColor> *colors = _colorsProp->getDerivedValue().get();
|
45
|
+
const std::vector<SkColor> *colors = _colorsProp->getDerivedValue().get();
|
46
46
|
auto vertices = _verticesProp->getDerivedValue();
|
47
47
|
auto textures = _texturesProp->getDerivedValue();
|
48
48
|
auto indices = _indicesProp->getDerivedValue();
|
@@ -142,12 +142,8 @@ protected:
|
|
142
142
|
@param runtime Current JS Runtime
|
143
143
|
*/
|
144
144
|
void notifyListeners(jsi::Runtime &runtime) {
|
145
|
-
std::
|
146
|
-
{
|
147
|
-
std::lock_guard<std::mutex> lock(_mutex);
|
148
|
-
tmp.insert(_listeners.cbegin(), _listeners.cend());
|
149
|
-
}
|
150
|
-
for (const auto &listener : tmp) {
|
145
|
+
std::lock_guard<std::mutex> lock(_mutex);
|
146
|
+
for (const auto &listener : _listeners) {
|
151
147
|
listener.second(runtime);
|
152
148
|
}
|
153
149
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["isCircleScalarDef","def","cx","undefined","processCircle","Skia","c","Point","cy","r"],"sources":["Circle.ts"],"sourcesContent":["import type { Skia } from \"../../../skia/types\";\nimport type { CircleDef, ScalarCircleDef } from \"../../types\";\n\nexport const isCircleScalarDef = (def: CircleDef): def is ScalarCircleDef =>\n // We have an issue to check property existence on JSI backed instances\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (def as any).cx !== undefined;\n\nexport const processCircle = (Skia: Skia, def: CircleDef) => {\n if (isCircleScalarDef(def)) {\n return { c: Skia.Point(def.cx, def.cy), r: def.r };\n }\n return def;\n};\n"],"mappings":";;;;;;;AAGO,MAAMA,iBAAiB,GAAIC,GAAD,IAC/B;AACA;AACCA,GAAD,CAAaC,EAAb,KAAoBC,SAHf;;;;AAKA,MAAMC,aAAa,GAAG,CAACC,IAAD,EAAaJ,GAAb,KAAgC;EAC3D,IAAID,iBAAiB,CAACC,GAAD,CAArB,EAA4B;IAC1B,OAAO;MAAEK,CAAC,EAAED,IAAI,CAACE,KAAL,CAAWN,GAAG,CAACC,EAAf,EAAmBD,GAAG,CAACO,EAAvB,CAAL;MAAiCC,CAAC,EAAER,GAAG,CAACQ;IAAxC,CAAP;EACD;;EACD,
|
1
|
+
{"version":3,"names":["isCircleScalarDef","def","cx","undefined","processCircle","Skia","c","Point","cy","r","x","y"],"sources":["Circle.ts"],"sourcesContent":["import type { Skia } from \"../../../skia/types\";\nimport type { CircleDef, ScalarCircleDef } from \"../../types\";\n\nexport const isCircleScalarDef = (def: CircleDef): def is ScalarCircleDef =>\n // We have an issue to check property existence on JSI backed instances\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (def as any).cx !== undefined;\n\nexport const processCircle = (Skia: Skia, def: CircleDef) => {\n if (isCircleScalarDef(def)) {\n return { c: Skia.Point(def.cx, def.cy), r: def.r };\n }\n return { ...def, c: def.c ?? { x: 0, y: 0 } };\n};\n"],"mappings":";;;;;;;AAGO,MAAMA,iBAAiB,GAAIC,GAAD,IAC/B;AACA;AACCA,GAAD,CAAaC,EAAb,KAAoBC,SAHf;;;;AAKA,MAAMC,aAAa,GAAG,CAACC,IAAD,EAAaJ,GAAb,KAAgC;EAC3D,IAAID,iBAAiB,CAACC,GAAD,CAArB,EAA4B;IAC1B,OAAO;MAAEK,CAAC,EAAED,IAAI,CAACE,KAAL,CAAWN,GAAG,CAACC,EAAf,EAAmBD,GAAG,CAACO,EAAvB,CAAL;MAAiCC,CAAC,EAAER,GAAG,CAACQ;IAAxC,CAAP;EACD;;EACD,OAAO,EAAE,GAAGR,GAAL;IAAUK,CAAC,EAAEL,GAAG,CAACK,CAAJ,IAAS;MAAEI,CAAC,EAAE,CAAL;MAAQC,CAAC,EAAE;IAAX;EAAtB,CAAP;AACD,CALM"}
|
@@ -20,7 +20,7 @@ const isRectCtor = def => def.rect === undefined;
|
|
20
20
|
|
21
21
|
const processRect = (Skia, def) => {
|
22
22
|
if (isRectCtor(def)) {
|
23
|
-
return Skia.XYWHRect(def.x, def.y, def.width, def.height);
|
23
|
+
return Skia.XYWHRect(def.x ?? 0, def.y ?? 0, def.width, def.height);
|
24
24
|
} else {
|
25
25
|
return def.rect;
|
26
26
|
}
|
@@ -30,8 +30,8 @@ exports.processRect = processRect;
|
|
30
30
|
|
31
31
|
const processRRect = (Skia, def) => {
|
32
32
|
if (isRRectCtor(def)) {
|
33
|
-
const r = (0, _Radius.processRadius)(Skia, def.r);
|
34
|
-
return Skia.RRectXY(Skia.XYWHRect(def.x, def.y, def.width, def.height), r.x, r.y);
|
33
|
+
const r = (0, _Radius.processRadius)(Skia, def.r ?? 0);
|
34
|
+
return Skia.RRectXY(Skia.XYWHRect(def.x ?? 0, def.y ?? 0, def.width, def.height), r.x, r.y);
|
35
35
|
} else {
|
36
36
|
return def.rect;
|
37
37
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["isEdge","pos","b","x","y","width","height","isRRectCtor","def","rect","undefined","isRectCtor","processRect","Skia","XYWHRect","processRRect","r","processRadius","RRectXY"],"sources":["Rect.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Skia, SkRect, Vector } from \"../../../skia/types\";\nimport type { RectCtor, RectDef, RRectCtor, RRectDef } from \"../../types\";\n\nimport { processRadius } from \"./Radius\";\n\nexport const isEdge = (pos: Vector, b: SkRect) =>\n pos.x === b.x || pos.y === b.y || pos.x === b.width || pos.y === b.height;\n\n// We have an issue to check property existence on JSI backed instances\nconst isRRectCtor = (def: RRectDef): def is RRectCtor =>\n (def as any).rect === undefined;\n// We have an issue to check property existence on JSI backed instances\nconst isRectCtor = (def: RectDef): def is RectCtor =>\n (def as any).rect === undefined;\n\nexport const processRect = (Skia: Skia, def: RectDef) => {\n if (isRectCtor(def)) {\n return Skia.XYWHRect(def.x, def.y, def.width, def.height);\n } else {\n return def.rect;\n }\n};\n\nexport const processRRect = (Skia: Skia, def: RRectDef) => {\n if (isRRectCtor(def)) {\n const r = processRadius(Skia, def.r);\n return Skia.RRectXY(\n Skia.XYWHRect(def.x, def.y, def.width, def.height),\n r.x,\n r.y\n );\n } else {\n return def.rect;\n }\n};\n"],"mappings":";;;;;;;AAIA;;AAJA;AAMO,MAAMA,MAAM,GAAG,CAACC,GAAD,EAAcC,CAAd,KACpBD,GAAG,CAACE,CAAJ,KAAUD,CAAC,CAACC,CAAZ,IAAiBF,GAAG,CAACG,CAAJ,KAAUF,CAAC,CAACE,CAA7B,IAAkCH,GAAG,CAACE,CAAJ,KAAUD,CAAC,CAACG,KAA9C,IAAuDJ,GAAG,CAACG,CAAJ,KAAUF,CAAC,CAACI,MAD9D,C,CAGP;;;;;AACA,MAAMC,WAAW,GAAIC,GAAD,IACjBA,GAAD,CAAaC,IAAb,KAAsBC,SADxB,C,CAEA;;;AACA,MAAMC,UAAU,GAAIH,GAAD,IAChBA,GAAD,CAAaC,IAAb,KAAsBC,SADxB;;AAGO,MAAME,WAAW,GAAG,CAACC,IAAD,EAAaL,GAAb,KAA8B;EACvD,IAAIG,UAAU,CAACH,GAAD,CAAd,EAAqB;IACnB,OAAOK,IAAI,CAACC,QAAL,CAAcN,GAAG,CAACL,
|
1
|
+
{"version":3,"names":["isEdge","pos","b","x","y","width","height","isRRectCtor","def","rect","undefined","isRectCtor","processRect","Skia","XYWHRect","processRRect","r","processRadius","RRectXY"],"sources":["Rect.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport type { Skia, SkRect, Vector } from \"../../../skia/types\";\nimport type { RectCtor, RectDef, RRectCtor, RRectDef } from \"../../types\";\n\nimport { processRadius } from \"./Radius\";\n\nexport const isEdge = (pos: Vector, b: SkRect) =>\n pos.x === b.x || pos.y === b.y || pos.x === b.width || pos.y === b.height;\n\n// We have an issue to check property existence on JSI backed instances\nconst isRRectCtor = (def: RRectDef): def is RRectCtor =>\n (def as any).rect === undefined;\n// We have an issue to check property existence on JSI backed instances\nconst isRectCtor = (def: RectDef): def is RectCtor =>\n (def as any).rect === undefined;\n\nexport const processRect = (Skia: Skia, def: RectDef) => {\n if (isRectCtor(def)) {\n return Skia.XYWHRect(def.x ?? 0, def.y ?? 0, def.width, def.height);\n } else {\n return def.rect;\n }\n};\n\nexport const processRRect = (Skia: Skia, def: RRectDef) => {\n if (isRRectCtor(def)) {\n const r = processRadius(Skia, def.r ?? 0);\n return Skia.RRectXY(\n Skia.XYWHRect(def.x ?? 0, def.y ?? 0, def.width, def.height),\n r.x,\n r.y\n );\n } else {\n return def.rect;\n }\n};\n"],"mappings":";;;;;;;AAIA;;AAJA;AAMO,MAAMA,MAAM,GAAG,CAACC,GAAD,EAAcC,CAAd,KACpBD,GAAG,CAACE,CAAJ,KAAUD,CAAC,CAACC,CAAZ,IAAiBF,GAAG,CAACG,CAAJ,KAAUF,CAAC,CAACE,CAA7B,IAAkCH,GAAG,CAACE,CAAJ,KAAUD,CAAC,CAACG,KAA9C,IAAuDJ,GAAG,CAACG,CAAJ,KAAUF,CAAC,CAACI,MAD9D,C,CAGP;;;;;AACA,MAAMC,WAAW,GAAIC,GAAD,IACjBA,GAAD,CAAaC,IAAb,KAAsBC,SADxB,C,CAEA;;;AACA,MAAMC,UAAU,GAAIH,GAAD,IAChBA,GAAD,CAAaC,IAAb,KAAsBC,SADxB;;AAGO,MAAME,WAAW,GAAG,CAACC,IAAD,EAAaL,GAAb,KAA8B;EACvD,IAAIG,UAAU,CAACH,GAAD,CAAd,EAAqB;IACnB,OAAOK,IAAI,CAACC,QAAL,CAAcN,GAAG,CAACL,CAAJ,IAAS,CAAvB,EAA0BK,GAAG,CAACJ,CAAJ,IAAS,CAAnC,EAAsCI,GAAG,CAACH,KAA1C,EAAiDG,GAAG,CAACF,MAArD,CAAP;EACD,CAFD,MAEO;IACL,OAAOE,GAAG,CAACC,IAAX;EACD;AACF,CANM;;;;AAQA,MAAMM,YAAY,GAAG,CAACF,IAAD,EAAaL,GAAb,KAA+B;EACzD,IAAID,WAAW,CAACC,GAAD,CAAf,EAAsB;IACpB,MAAMQ,CAAC,GAAG,IAAAC,qBAAA,EAAcJ,IAAd,EAAoBL,GAAG,CAACQ,CAAJ,IAAS,CAA7B,CAAV;IACA,OAAOH,IAAI,CAACK,OAAL,CACLL,IAAI,CAACC,QAAL,CAAcN,GAAG,CAACL,CAAJ,IAAS,CAAvB,EAA0BK,GAAG,CAACJ,CAAJ,IAAS,CAAnC,EAAsCI,GAAG,CAACH,KAA1C,EAAiDG,GAAG,CAACF,MAArD,CADK,EAELU,CAAC,CAACb,CAFG,EAGLa,CAAC,CAACZ,CAHG,CAAP;EAKD,CAPD,MAOO;IACL,OAAOI,GAAG,CAACC,IAAX;EACD;AACF,CAXM"}
|
@@ -27,7 +27,7 @@ const deflate = function (Skia, box, dx, dy) {
|
|
27
27
|
|
28
28
|
class BoxShadowNode extends _Node.JsiDeclarationNode {
|
29
29
|
constructor(ctx, props) {
|
30
|
-
super(ctx, _types2.DeclarationType.Unknown, _types2.NodeType.
|
30
|
+
super(ctx, _types2.DeclarationType.Unknown, _types2.NodeType.BoxShadow, props);
|
31
31
|
}
|
32
32
|
|
33
33
|
materialize() {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["inflate","Skia","box","dx","dy","tx","ty","RRectXY","XYWHRect","rect","x","y","width","height","rx","ry","deflate","BoxShadowNode","JsiDeclarationNode","constructor","ctx","props","DeclarationType","Unknown","NodeType","
|
1
|
+
{"version":3,"names":["inflate","Skia","box","dx","dy","tx","ty","RRectXY","XYWHRect","rect","x","y","width","height","rx","ry","deflate","BoxShadowNode","JsiDeclarationNode","constructor","ctx","props","DeclarationType","Unknown","NodeType","BoxShadow","materialize","BoxNode","JsiRenderNode","Box","renderNode","canvas","paint","defaultBox","opacity","getAlphaf","isRRect","shadows","_children","map","node","filter","n","shadow","inner","color","blur","spread","lPaint","Paint","setColor","Color","setAlphaf","setMaskFilter","MaskFilter","MakeBlur","BlurStyle","Normal","drawRRect","delta","Point","Math","abs","save","clipRRect","ClipOp","Intersect","outer","drawDRRect","restore"],"sources":["Box.ts"],"sourcesContent":["import type { SkRRect, Skia } from \"../../../skia/types\";\nimport { BlurStyle, ClipOp, isRRect } from \"../../../skia/types\";\nimport type { DrawingContext } from \"../../types\";\nimport { DeclarationType, NodeType } from \"../../types\";\nimport type { BoxShadowProps, BoxProps } from \"../../types/Drawings\";\nimport type { NodeContext } from \"../Node\";\nimport { JsiDeclarationNode } from \"../Node\";\nimport { JsiRenderNode } from \"../RenderNode\";\n\nconst inflate = (\n Skia: Skia,\n box: SkRRect,\n dx: number,\n dy: number,\n tx = 0,\n ty = 0\n) =>\n Skia.RRectXY(\n Skia.XYWHRect(\n box.rect.x - dx + tx,\n box.rect.y - dy + ty,\n box.rect.width + 2 * dx,\n box.rect.height + 2 * dy\n ),\n box.rx + dx,\n box.ry + dy\n );\n\nconst deflate = (\n Skia: Skia,\n box: SkRRect,\n dx: number,\n dy: number,\n tx = 0,\n ty = 0\n) => inflate(Skia, box, -dx, -dy, tx, ty);\n\nexport class BoxShadowNode extends JsiDeclarationNode<\n BoxShadowProps,\n BoxShadowProps\n> {\n constructor(ctx: NodeContext, props: BoxShadowProps) {\n super(ctx, DeclarationType.Unknown, NodeType.BoxShadow, props);\n }\n\n materialize() {\n return this.props;\n }\n}\n\nexport class BoxNode extends JsiRenderNode<BoxProps> {\n constructor(ctx: NodeContext, props: BoxProps) {\n super(ctx, NodeType.Box, props);\n }\n\n renderNode({ canvas, paint }: DrawingContext) {\n const { box: defaultBox } = this.props;\n const opacity = paint.getAlphaf();\n const box = isRRect(defaultBox)\n ? defaultBox\n : this.Skia.RRectXY(defaultBox, 0, 0);\n const shadows = this._children\n .map((node) => {\n if (node instanceof BoxShadowNode) {\n return node.materialize();\n }\n return null;\n })\n .filter((n): n is BoxShadowProps => n !== null);\n shadows\n .filter((shadow) => !shadow.inner)\n .map((shadow) => {\n const { color = \"black\", blur, spread = 0, dx = 0, dy = 0 } = shadow;\n const lPaint = this.Skia.Paint();\n lPaint.setColor(this.Skia.Color(color));\n lPaint.setAlphaf(paint.getAlphaf() * opacity);\n lPaint.setMaskFilter(\n this.Skia.MaskFilter.MakeBlur(BlurStyle.Normal, blur, true)\n );\n canvas.drawRRect(\n inflate(this.Skia, box, spread, spread, dx, dy),\n lPaint\n );\n });\n\n canvas.drawRRect(box, paint);\n\n shadows\n .filter((shadow) => shadow.inner)\n .map((shadow) => {\n const { color = \"black\", blur, spread = 0, dx = 0, dy = 0 } = shadow;\n const delta = this.Skia.Point(10 + Math.abs(dx), 10 + Math.abs(dy));\n canvas.save();\n canvas.clipRRect(box, ClipOp.Intersect, false);\n const lPaint = this.Skia.Paint();\n lPaint.setColor(this.Skia.Color(color));\n lPaint.setAlphaf(paint.getAlphaf() * opacity);\n\n lPaint.setMaskFilter(\n this.Skia.MaskFilter.MakeBlur(BlurStyle.Normal, blur, true)\n );\n const inner = deflate(this.Skia, box, spread, spread, dx, dy);\n const outer = inflate(this.Skia, box, delta.x, delta.y);\n canvas.drawDRRect(outer, inner, lPaint);\n canvas.restore();\n });\n }\n}\n"],"mappings":"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"}
|
@@ -18,9 +18,9 @@ class ImageNode extends _DrawingNode.JsiDrawingNode {
|
|
18
18
|
|
19
19
|
deriveProps() {
|
20
20
|
const {
|
21
|
-
image
|
22
|
-
fit
|
21
|
+
image
|
23
22
|
} = this.props;
|
23
|
+
const fit = this.props.fit ?? "contain";
|
24
24
|
const rect = (0, _datatypes.processRect)(this.Skia, this.props);
|
25
25
|
const {
|
26
26
|
src,
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["ImageNode","JsiDrawingNode","constructor","ctx","props","NodeType","Image","deriveProps","image","fit","rect","processRect","Skia","src","dst","fitRects","x","y","width","height","draw","canvas","paint","derived","Error","drawImageRect"],"sources":["ImageNode.ts"],"sourcesContent":["import type { SkRect } from \"../../../skia/types\";\nimport type { DrawingContext, ImageProps } from \"../../types\";\nimport { NodeType } from \"../../types\";\nimport { fitRects, processRect } from \"../datatypes\";\nimport { JsiDrawingNode } from \"../DrawingNode\";\nimport type { NodeContext } from \"../Node\";\n\nexport class ImageNode extends JsiDrawingNode<\n ImageProps,\n { src: SkRect; dst: SkRect }\n> {\n constructor(ctx: NodeContext, props: ImageProps) {\n super(ctx, NodeType.Image, props);\n }\n\n deriveProps() {\n const { image
|
1
|
+
{"version":3,"names":["ImageNode","JsiDrawingNode","constructor","ctx","props","NodeType","Image","deriveProps","image","fit","rect","processRect","Skia","src","dst","fitRects","x","y","width","height","draw","canvas","paint","derived","Error","drawImageRect"],"sources":["ImageNode.ts"],"sourcesContent":["import type { SkRect } from \"../../../skia/types\";\nimport type { DrawingContext, ImageProps } from \"../../types\";\nimport { NodeType } from \"../../types\";\nimport { fitRects, processRect } from \"../datatypes\";\nimport { JsiDrawingNode } from \"../DrawingNode\";\nimport type { NodeContext } from \"../Node\";\n\nexport class ImageNode extends JsiDrawingNode<\n ImageProps,\n { src: SkRect; dst: SkRect }\n> {\n constructor(ctx: NodeContext, props: ImageProps) {\n super(ctx, NodeType.Image, props);\n }\n\n deriveProps() {\n const { image } = this.props;\n const fit = this.props.fit ?? \"contain\";\n const rect = processRect(this.Skia, this.props);\n const { src, dst } = fitRects(\n fit,\n {\n x: 0,\n y: 0,\n width: image.width(),\n height: image.height(),\n },\n rect\n );\n return { src, dst };\n }\n\n draw({ canvas, paint }: DrawingContext) {\n const { image } = this.props;\n if (!this.derived) {\n throw new Error(\"ImageNode: src and dst are undefined\");\n }\n const { src, dst } = this.derived;\n canvas.drawImageRect(image, src, dst, paint);\n }\n}\n"],"mappings":";;;;;;;AAEA;;AACA;;AACA;;AAGO,MAAMA,SAAN,SAAwBC,2BAAxB,CAGL;EACAC,WAAW,CAACC,GAAD,EAAmBC,KAAnB,EAAsC;IAC/C,MAAMD,GAAN,EAAWE,eAAA,CAASC,KAApB,EAA2BF,KAA3B;EACD;;EAEDG,WAAW,GAAG;IACZ,MAAM;MAAEC;IAAF,IAAY,KAAKJ,KAAvB;IACA,MAAMK,GAAG,GAAG,KAAKL,KAAL,CAAWK,GAAX,IAAkB,SAA9B;IACA,MAAMC,IAAI,GAAG,IAAAC,sBAAA,EAAY,KAAKC,IAAjB,EAAuB,KAAKR,KAA5B,CAAb;IACA,MAAM;MAAES,GAAF;MAAOC;IAAP,IAAe,IAAAC,mBAAA,EACnBN,GADmB,EAEnB;MACEO,CAAC,EAAE,CADL;MAEEC,CAAC,EAAE,CAFL;MAGEC,KAAK,EAAEV,KAAK,CAACU,KAAN,EAHT;MAIEC,MAAM,EAAEX,KAAK,CAACW,MAAN;IAJV,CAFmB,EAQnBT,IARmB,CAArB;IAUA,OAAO;MAAEG,GAAF;MAAOC;IAAP,CAAP;EACD;;EAEDM,IAAI,OAAoC;IAAA,IAAnC;MAAEC,MAAF;MAAUC;IAAV,CAAmC;IACtC,MAAM;MAAEd;IAAF,IAAY,KAAKJ,KAAvB;;IACA,IAAI,CAAC,KAAKmB,OAAV,EAAmB;MACjB,MAAM,IAAIC,KAAJ,CAAU,sCAAV,CAAN;IACD;;IACD,MAAM;MAAEX,GAAF;MAAOC;IAAP,IAAe,KAAKS,OAA1B;IACAF,MAAM,CAACI,aAAP,CAAqBjB,KAArB,EAA4BK,GAA5B,EAAiCC,GAAjC,EAAsCQ,KAAtC;EACD;;AA7BD"}
|
@@ -122,7 +122,7 @@ exports.BlurImageFilterNode = BlurImageFilterNode;
|
|
122
122
|
|
123
123
|
class DropShadowImageFilterNode extends ImageFilterDeclaration {
|
124
124
|
constructor(ctx, props) {
|
125
|
-
super(ctx, _types2.NodeType.
|
125
|
+
super(ctx, _types2.NodeType.DropShadowImageFilter, props);
|
126
126
|
}
|
127
127
|
|
128
128
|
materialize() {
|