@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,196 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "DerivedNodeProp.h"
|
|
4
|
-
|
|
5
|
-
#include "JsiSkImage.h"
|
|
6
|
-
|
|
7
|
-
#include <algorithm>
|
|
8
|
-
#include <memory>
|
|
9
|
-
#include <string>
|
|
10
|
-
|
|
11
|
-
namespace RNSkia {
|
|
12
|
-
|
|
13
|
-
struct FitSizes {
|
|
14
|
-
SkSize src;
|
|
15
|
-
SkSize dst;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
struct FitRects {
|
|
19
|
-
SkRect src;
|
|
20
|
-
SkRect dst;
|
|
21
|
-
};
|
|
22
|
-
|
|
23
|
-
static PropId PropNameImage = JsiPropId::get("image");
|
|
24
|
-
static PropId PropNameFit = JsiPropId::get("fit");
|
|
25
|
-
|
|
26
|
-
class ImageProp : public DerivedSkProp<SkImage> {
|
|
27
|
-
public:
|
|
28
|
-
explicit ImageProp(PropId name,
|
|
29
|
-
const std::function<void(BaseNodeProp *)> &onChange)
|
|
30
|
-
: DerivedSkProp<SkImage>(onChange) {
|
|
31
|
-
_imageProp = defineProperty<NodeProp>(name);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
void updateDerivedValue() override {
|
|
35
|
-
if (_imageProp->isSet()) {
|
|
36
|
-
// Check for host object
|
|
37
|
-
if (_imageProp->value().getType() == PropType::HostObject) {
|
|
38
|
-
// This should be an SkImage wrapper:
|
|
39
|
-
auto ptr = std::dynamic_pointer_cast<JsiSkImage>(
|
|
40
|
-
_imageProp->value().getAsHostObject());
|
|
41
|
-
if (ptr == nullptr) {
|
|
42
|
-
// If not - throw an exception
|
|
43
|
-
throw std::runtime_error("Expected SkImage object for the " +
|
|
44
|
-
std::string(getName()) +
|
|
45
|
-
" property. Got a " +
|
|
46
|
-
_imageProp->value().getTypeAsString(
|
|
47
|
-
_imageProp->value().getType()) +
|
|
48
|
-
".");
|
|
49
|
-
}
|
|
50
|
-
setDerivedValue(ptr->getObject());
|
|
51
|
-
} else {
|
|
52
|
-
// Should be a host object if set
|
|
53
|
-
throw std::runtime_error(
|
|
54
|
-
"Expected SkImage object or null/undefined for the " +
|
|
55
|
-
std::string(getName()) + " property.");
|
|
56
|
-
}
|
|
57
|
-
} else {
|
|
58
|
-
// Set to null
|
|
59
|
-
setDerivedValue(nullptr);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
private:
|
|
64
|
-
NodeProp *_imageProp;
|
|
65
|
-
};
|
|
66
|
-
|
|
67
|
-
class ImageProps : public DerivedProp<FitRects> {
|
|
68
|
-
public:
|
|
69
|
-
explicit ImageProps(const std::function<void(BaseNodeProp *)> &onChange)
|
|
70
|
-
: DerivedProp<FitRects>(onChange) {
|
|
71
|
-
_fitProp = defineProperty<NodeProp>(PropNameFit);
|
|
72
|
-
_imageProp = defineProperty<ImageProp>(PropNameImage);
|
|
73
|
-
_rectProp = defineProperty<RectProps>(PropNameRect);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
void updateDerivedValue() override {
|
|
77
|
-
auto image = _imageProp->getDerivedValue();
|
|
78
|
-
if (image == nullptr) {
|
|
79
|
-
setDerivedValue(nullptr);
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
auto imageRect = SkRect::MakeXYWH(0, 0, image->width(), image->height());
|
|
84
|
-
|
|
85
|
-
auto rect = _rectProp->getDerivedValue() ? *_rectProp->getDerivedValue()
|
|
86
|
-
: imageRect;
|
|
87
|
-
auto fit = _fitProp->isSet() ? _fitProp->value().getAsString() : "contain";
|
|
88
|
-
|
|
89
|
-
setDerivedValue(fitRects(fit, imageRect, rect));
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
sk_sp<SkImage> getImage() { return _imageProp->getDerivedValue(); }
|
|
93
|
-
|
|
94
|
-
std::shared_ptr<const SkRect> getRect() {
|
|
95
|
-
return _rectProp->getDerivedValue();
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
SkMatrix rect2rect(SkRect src, SkRect dst) {
|
|
99
|
-
auto sx = dst.width() / src.width();
|
|
100
|
-
auto sy = dst.height() / src.height();
|
|
101
|
-
auto tx = dst.x() - src.x() * sx;
|
|
102
|
-
auto ty = dst.y() - src.y() * sy;
|
|
103
|
-
SkMatrix m3;
|
|
104
|
-
m3.preTranslate(tx, ty);
|
|
105
|
-
m3.preScale(sx, sy);
|
|
106
|
-
return m3;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
private:
|
|
110
|
-
SkSize size(double width, double height) {
|
|
111
|
-
return SkSize::Make(width, height);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
FitRects fitRects(const std::string &fit, SkRect rect, SkRect rect2) {
|
|
115
|
-
auto sizes = applyBoxFit(fit, size(rect.width(), rect.height()),
|
|
116
|
-
size(rect2.width(), rect2.height()));
|
|
117
|
-
|
|
118
|
-
auto src = inscribe(sizes.src, rect);
|
|
119
|
-
auto dst = inscribe(sizes.dst, rect2);
|
|
120
|
-
|
|
121
|
-
return {.src = src, .dst = dst};
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
SkRect inscribe(SkSize size, SkRect rect) {
|
|
125
|
-
auto halfWidthDelta = (rect.width() - size.width()) / 2.0;
|
|
126
|
-
auto halfHeightDelta = (rect.height() - size.height()) / 2.0;
|
|
127
|
-
return SkRect::MakeXYWH(rect.x() + halfWidthDelta,
|
|
128
|
-
rect.y() + halfHeightDelta, size.width(),
|
|
129
|
-
size.height());
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
FitSizes applyBoxFit(const std::string fit, SkSize input, SkSize output) {
|
|
133
|
-
SkSize src = size(0, 0);
|
|
134
|
-
SkSize dst = size(0, 0);
|
|
135
|
-
|
|
136
|
-
if (input.height() <= 0.0 || input.width() <= 0.0 ||
|
|
137
|
-
output.height() <= 0.0 || output.width() <= 0.0) {
|
|
138
|
-
return {.src = src, .dst = dst};
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
if (fit == "fill") {
|
|
142
|
-
src = input;
|
|
143
|
-
dst = output;
|
|
144
|
-
} else if (fit == "contain") {
|
|
145
|
-
src = input;
|
|
146
|
-
if (output.width() / output.height() > src.width() / src.height()) {
|
|
147
|
-
dst = size((src.width() * output.height()) / src.height(),
|
|
148
|
-
output.height());
|
|
149
|
-
} else {
|
|
150
|
-
dst =
|
|
151
|
-
size(output.width(), (src.height() * output.width()) / src.width());
|
|
152
|
-
}
|
|
153
|
-
} else if (fit == "cover") {
|
|
154
|
-
if (output.width() / output.height() > input.width() / input.height()) {
|
|
155
|
-
src = size(input.width(),
|
|
156
|
-
(input.width() * output.height()) / output.width());
|
|
157
|
-
} else {
|
|
158
|
-
src = size((input.height() * output.width()) / output.height(),
|
|
159
|
-
input.height());
|
|
160
|
-
}
|
|
161
|
-
dst = output;
|
|
162
|
-
} else if (fit == "fitWidth") {
|
|
163
|
-
src = size(input.width(),
|
|
164
|
-
(input.width() * output.height()) / output.width());
|
|
165
|
-
dst = size(output.width(), (src.height() * output.width()) / src.width());
|
|
166
|
-
} else if (fit == "fitHeight") {
|
|
167
|
-
src = size((input.height() * output.width()) / output.height(),
|
|
168
|
-
input.height());
|
|
169
|
-
dst =
|
|
170
|
-
size((src.width() * output.height()) / src.height(), output.height());
|
|
171
|
-
} else if (fit == "none") {
|
|
172
|
-
src = size(std::min(input.width(), output.width()),
|
|
173
|
-
std::min(input.height(), output.height()));
|
|
174
|
-
dst = src;
|
|
175
|
-
} else if (fit == "scaleDown") {
|
|
176
|
-
src = input;
|
|
177
|
-
dst = input;
|
|
178
|
-
auto aspectRatio = input.width() / input.height();
|
|
179
|
-
if (dst.height() > output.height()) {
|
|
180
|
-
dst = size(output.height() * aspectRatio, output.height());
|
|
181
|
-
}
|
|
182
|
-
if (dst.width() > output.width()) {
|
|
183
|
-
dst = size(output.width(), output.width() / aspectRatio);
|
|
184
|
-
}
|
|
185
|
-
} else {
|
|
186
|
-
throw std::runtime_error("The value \"" + fit +
|
|
187
|
-
"\" is not a valid fit value.");
|
|
188
|
-
}
|
|
189
|
-
return {.src = src, .dst = dst};
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
NodeProp *_fitProp;
|
|
193
|
-
ImageProp *_imageProp;
|
|
194
|
-
RectProps *_rectProp;
|
|
195
|
-
};
|
|
196
|
-
} // namespace RNSkia
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "DerivedNodeProp.h"
|
|
4
|
-
|
|
5
|
-
#include <memory>
|
|
6
|
-
#include <string>
|
|
7
|
-
|
|
8
|
-
#pragma clang diagnostic push
|
|
9
|
-
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
10
|
-
|
|
11
|
-
#include "include/core/SkPaint.h"
|
|
12
|
-
|
|
13
|
-
#pragma clang diagnostic pop
|
|
14
|
-
|
|
15
|
-
namespace RNSkia {
|
|
16
|
-
|
|
17
|
-
class StrokeCapProp : public DerivedProp<SkPaint::Cap> {
|
|
18
|
-
public:
|
|
19
|
-
explicit StrokeCapProp(PropId name,
|
|
20
|
-
const std::function<void(BaseNodeProp *)> &onChange)
|
|
21
|
-
: DerivedProp<SkPaint::Cap>(onChange) {
|
|
22
|
-
_strokeCap = defineProperty<NodeProp>(name);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
void updateDerivedValue() override {
|
|
26
|
-
if (_strokeCap->isSet() && (_strokeCap->isChanged())) {
|
|
27
|
-
auto capValue = _strokeCap->value().getAsString();
|
|
28
|
-
setDerivedValue(getCapFromString(capValue));
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
static SkPaint::Cap getCapFromString(const std::string &value) {
|
|
33
|
-
if (value == "round") {
|
|
34
|
-
return SkPaint::Cap::kRound_Cap;
|
|
35
|
-
} else if (value == "butt") {
|
|
36
|
-
return SkPaint::Cap::kButt_Cap;
|
|
37
|
-
} else if (value == "square") {
|
|
38
|
-
return SkPaint::Cap::kSquare_Cap;
|
|
39
|
-
}
|
|
40
|
-
throw std::runtime_error("Property value \"" + value +
|
|
41
|
-
"\" is not a legal stroke cap.");
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
private:
|
|
45
|
-
NodeProp *_strokeCap;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
class StrokeJoinProp : public DerivedProp<SkPaint::Join> {
|
|
49
|
-
public:
|
|
50
|
-
explicit StrokeJoinProp(PropId name,
|
|
51
|
-
const std::function<void(BaseNodeProp *)> &onChange)
|
|
52
|
-
: DerivedProp<SkPaint::Join>(onChange) {
|
|
53
|
-
_strokeJoin = defineProperty<NodeProp>(name);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
void updateDerivedValue() override {
|
|
57
|
-
if (_strokeJoin->isSet() && (_strokeJoin->isChanged())) {
|
|
58
|
-
auto joinValue = _strokeJoin->value().getAsString();
|
|
59
|
-
setDerivedValue(getJoinFromString(joinValue));
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
static SkPaint::Join getJoinFromString(const std::string &value) {
|
|
64
|
-
if (value == "miter") {
|
|
65
|
-
return SkPaint::Join::kMiter_Join;
|
|
66
|
-
} else if (value == "round") {
|
|
67
|
-
return SkPaint::Join::kRound_Join;
|
|
68
|
-
} else if (value == "bevel") {
|
|
69
|
-
return SkPaint::Join::kBevel_Join;
|
|
70
|
-
}
|
|
71
|
-
throw std::runtime_error("Property value \"" + value +
|
|
72
|
-
"\" is not a legal stroke join.");
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
private:
|
|
76
|
-
NodeProp *_strokeJoin;
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
} // namespace RNSkia
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "DerivedNodeProp.h"
|
|
4
|
-
|
|
5
|
-
#include "JsiSkSVG.h"
|
|
6
|
-
|
|
7
|
-
#include <memory>
|
|
8
|
-
|
|
9
|
-
namespace RNSkia {
|
|
10
|
-
|
|
11
|
-
class SvgProp : public DerivedSkProp<SkSVGDOM> {
|
|
12
|
-
public:
|
|
13
|
-
explicit SvgProp(PropId name,
|
|
14
|
-
const std::function<void(BaseNodeProp *)> &onChange)
|
|
15
|
-
: DerivedSkProp<SkSVGDOM>(onChange) {
|
|
16
|
-
_imageSvgProp = defineProperty<NodeProp>(name);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
void updateDerivedValue() override {
|
|
20
|
-
if (_imageSvgProp->isSet()) {
|
|
21
|
-
|
|
22
|
-
if (_imageSvgProp->value().getType() == PropType::HostObject) {
|
|
23
|
-
|
|
24
|
-
auto ptr = std::dynamic_pointer_cast<JsiSkSVG>(
|
|
25
|
-
_imageSvgProp->value().getAsHostObject());
|
|
26
|
-
if (ptr == nullptr) {
|
|
27
|
-
throw std::runtime_error(
|
|
28
|
-
"Expected SkSvgDom object for the svg property.");
|
|
29
|
-
}
|
|
30
|
-
setDerivedValue(ptr->getObject());
|
|
31
|
-
} else {
|
|
32
|
-
throw std::runtime_error(
|
|
33
|
-
"Expected SkSvgDom object or null/undefined for the svg property.");
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
} else {
|
|
37
|
-
setDerivedValue(nullptr);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
private:
|
|
42
|
-
NodeProp *_imageSvgProp;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
} // namespace RNSkia
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "DerivedNodeProp.h"
|
|
4
|
-
|
|
5
|
-
#include "JsiSkTextBlob.h"
|
|
6
|
-
|
|
7
|
-
#include <memory>
|
|
8
|
-
#include <string>
|
|
9
|
-
#include <vector>
|
|
10
|
-
|
|
11
|
-
namespace RNSkia {
|
|
12
|
-
|
|
13
|
-
class TextBlobProp : public DerivedSkProp<SkTextBlob> {
|
|
14
|
-
public:
|
|
15
|
-
explicit TextBlobProp(PropId name,
|
|
16
|
-
const std::function<void(BaseNodeProp *)> &onChange)
|
|
17
|
-
: DerivedSkProp<SkTextBlob>(onChange) {
|
|
18
|
-
_textBlobProp = defineProperty<NodeProp>(name);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
void updateDerivedValue() override {
|
|
22
|
-
if (_textBlobProp->value().getType() != PropType::HostObject) {
|
|
23
|
-
throw std::runtime_error("Expected SkTextBlob object for the " +
|
|
24
|
-
std::string(getName()) + " property.");
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
auto ptr = _textBlobProp->value().getAs<JsiSkTextBlob>();
|
|
28
|
-
if (ptr == nullptr) {
|
|
29
|
-
throw std::runtime_error("Expected SkTextBlob object for the " +
|
|
30
|
-
std::string(getName()) + " property.");
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
setDerivedValue(ptr->getObject());
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
private:
|
|
37
|
-
NodeProp *_textBlobProp;
|
|
38
|
-
};
|
|
39
|
-
|
|
40
|
-
class TextPathBlobProp : public DerivedSkProp<SkTextBlob> {
|
|
41
|
-
public:
|
|
42
|
-
explicit TextPathBlobProp(const std::function<void(BaseNodeProp *)> &onChange)
|
|
43
|
-
: DerivedSkProp<SkTextBlob>(onChange) {
|
|
44
|
-
_fontProp = defineProperty<FontProp>("font");
|
|
45
|
-
_textProp = defineProperty<NodeProp>("text");
|
|
46
|
-
_pathProp = defineProperty<PathProp>("path");
|
|
47
|
-
_offsetProp = defineProperty<NodeProp>("initialOffset");
|
|
48
|
-
|
|
49
|
-
_textProp->require();
|
|
50
|
-
_pathProp->require();
|
|
51
|
-
_offsetProp->require();
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
void updateDerivedValue() override {
|
|
55
|
-
auto font = _fontProp->getDerivedValue();
|
|
56
|
-
auto text = _textProp->value().getAsString();
|
|
57
|
-
auto path = _pathProp->getDerivedValue();
|
|
58
|
-
auto offset = _offsetProp->value().getAsNumber();
|
|
59
|
-
|
|
60
|
-
if (font != nullptr) {
|
|
61
|
-
// Get glyphs
|
|
62
|
-
auto numGlyphIds =
|
|
63
|
-
font->countText(text.c_str(), text.length(), SkTextEncoding::kUTF8);
|
|
64
|
-
|
|
65
|
-
std::vector<SkGlyphID> glyphIds;
|
|
66
|
-
glyphIds.reserve(numGlyphIds);
|
|
67
|
-
auto ids = font->textToGlyphs(
|
|
68
|
-
text.c_str(), text.length(), SkTextEncoding::kUTF8,
|
|
69
|
-
static_cast<SkGlyphID *>(glyphIds.data()), numGlyphIds);
|
|
70
|
-
|
|
71
|
-
// Get glyph widths
|
|
72
|
-
int glyphsSize = static_cast<int>(ids);
|
|
73
|
-
std::vector<SkScalar> widthPtrs;
|
|
74
|
-
widthPtrs.resize(glyphsSize);
|
|
75
|
-
font->getWidthsBounds(glyphIds.data(), numGlyphIds,
|
|
76
|
-
static_cast<SkScalar *>(widthPtrs.data()), nullptr,
|
|
77
|
-
nullptr); // TODO: Should we use paint somehow here?
|
|
78
|
-
|
|
79
|
-
std::vector<SkRSXform> rsx;
|
|
80
|
-
SkContourMeasureIter meas(*path, false, 1);
|
|
81
|
-
|
|
82
|
-
auto cont = meas.next();
|
|
83
|
-
auto dist = offset;
|
|
84
|
-
|
|
85
|
-
for (size_t i = 0; i < text.length() && cont != nullptr; ++i) {
|
|
86
|
-
auto width = widthPtrs[i];
|
|
87
|
-
dist += width / 2;
|
|
88
|
-
if (dist > cont->length()) {
|
|
89
|
-
// jump to next contour
|
|
90
|
-
cont = meas.next();
|
|
91
|
-
if (cont == nullptr) {
|
|
92
|
-
// We have come to the end of the path - terminate the string
|
|
93
|
-
// right here.
|
|
94
|
-
text = text.substr(0, i);
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
dist = width / 2;
|
|
98
|
-
}
|
|
99
|
-
// Gives us the (x, y) coordinates as well as the cos/sin of the tangent
|
|
100
|
-
// line at that position.
|
|
101
|
-
SkPoint pos;
|
|
102
|
-
SkVector tan;
|
|
103
|
-
if (!cont->getPosTan(dist, &pos, &tan)) {
|
|
104
|
-
throw std::runtime_error(
|
|
105
|
-
"Could not calculate distance when resolving text path");
|
|
106
|
-
}
|
|
107
|
-
auto px = pos.x();
|
|
108
|
-
auto py = pos.y();
|
|
109
|
-
auto tx = tan.x();
|
|
110
|
-
auto ty = tan.y();
|
|
111
|
-
|
|
112
|
-
auto adjustedX = px - (width / 2) * tx;
|
|
113
|
-
auto adjustedY = py - (width / 2) * ty;
|
|
114
|
-
|
|
115
|
-
rsx.push_back(SkRSXform::Make(tx, ty, adjustedX, adjustedY));
|
|
116
|
-
dist += width / 2;
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
setDerivedValue(SkTextBlob::MakeFromRSXform(text.c_str(), text.length(),
|
|
120
|
-
rsx.data(), *font));
|
|
121
|
-
} else {
|
|
122
|
-
setDerivedValue(nullptr);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
private:
|
|
127
|
-
FontProp *_fontProp;
|
|
128
|
-
NodeProp *_textProp;
|
|
129
|
-
PathProp *_pathProp;
|
|
130
|
-
NodeProp *_offsetProp;
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
} // namespace RNSkia
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "DerivedNodeProp.h"
|
|
4
|
-
|
|
5
|
-
#pragma clang diagnostic push
|
|
6
|
-
#pragma clang diagnostic ignored "-Wdocumentation"
|
|
7
|
-
|
|
8
|
-
#include "include/core/SkTileMode.h"
|
|
9
|
-
|
|
10
|
-
#include <memory>
|
|
11
|
-
#include <string>
|
|
12
|
-
|
|
13
|
-
#pragma clang diagnostic pop
|
|
14
|
-
|
|
15
|
-
namespace RNSkia {
|
|
16
|
-
|
|
17
|
-
class TileModeProp : public DerivedProp<SkTileMode> {
|
|
18
|
-
public:
|
|
19
|
-
explicit TileModeProp(PropId name,
|
|
20
|
-
const std::function<void(BaseNodeProp *)> &onChange)
|
|
21
|
-
: DerivedProp<SkTileMode>(onChange) {
|
|
22
|
-
_tileModeProp = defineProperty<NodeProp>(name);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
void updateDerivedValue() override {
|
|
26
|
-
if (_tileModeProp->isSet()) {
|
|
27
|
-
setDerivedValue(
|
|
28
|
-
getTileModeFromStringValue(_tileModeProp->value().getAsString()));
|
|
29
|
-
} else {
|
|
30
|
-
setDerivedValue(nullptr);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
private:
|
|
35
|
-
SkTileMode getTileModeFromStringValue(const std::string &value) {
|
|
36
|
-
if (value == "clamp") {
|
|
37
|
-
return SkTileMode::kClamp;
|
|
38
|
-
} else if (value == "repeat") {
|
|
39
|
-
return SkTileMode::kRepeat;
|
|
40
|
-
} else if (value == "mirror") {
|
|
41
|
-
return SkTileMode::kMirror;
|
|
42
|
-
} else if (value == "decal") {
|
|
43
|
-
return SkTileMode::kDecal;
|
|
44
|
-
}
|
|
45
|
-
throw std::runtime_error("Value \"" + value +
|
|
46
|
-
"\" is not a valid tile mode.");
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
NodeProp *_tileModeProp;
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
} // namespace RNSkia
|
|
@@ -1,147 +0,0 @@
|
|
|
1
|
-
#pragma once
|
|
2
|
-
|
|
3
|
-
#include "DerivedNodeProp.h"
|
|
4
|
-
#include "JsiSkMatrix.h"
|
|
5
|
-
|
|
6
|
-
#include <memory>
|
|
7
|
-
#include <string>
|
|
8
|
-
|
|
9
|
-
namespace RNSkia {
|
|
10
|
-
|
|
11
|
-
static PropId PropNameTranslateX = JsiPropId::get("translateX");
|
|
12
|
-
static PropId PropNameTranslateY = JsiPropId::get("translateY");
|
|
13
|
-
static PropId PropNameTranslateZ = JsiPropId::get("translateZ");
|
|
14
|
-
static PropId PropNameTranslate = JsiPropId::get("translate");
|
|
15
|
-
static PropId PropNameScale = JsiPropId::get("scale");
|
|
16
|
-
static PropId PropNameScaleX = JsiPropId::get("scaleX");
|
|
17
|
-
static PropId PropNameScaleY = JsiPropId::get("scaleY");
|
|
18
|
-
static PropId PropNameSkewX = JsiPropId::get("skewX");
|
|
19
|
-
static PropId PropNameSkewY = JsiPropId::get("skewY");
|
|
20
|
-
static PropId PropNameRotate = JsiPropId::get("rotate");
|
|
21
|
-
static PropId PropNameRotateZ = JsiPropId::get("rotateZ");
|
|
22
|
-
static PropId PropNameRotateX = JsiPropId::get("rotateX");
|
|
23
|
-
static PropId PropNameRotateY = JsiPropId::get("rotateY");
|
|
24
|
-
static PropId PropNamePerspective = JsiPropId::get("perspective");
|
|
25
|
-
static PropId PropNameMatrix4 = JsiPropId::get("matrix");
|
|
26
|
-
|
|
27
|
-
class TransformProp : public DerivedProp<SkMatrix> {
|
|
28
|
-
public:
|
|
29
|
-
explicit TransformProp(PropId name,
|
|
30
|
-
const std::function<void(BaseNodeProp *)> &onChange)
|
|
31
|
-
: DerivedProp<SkMatrix>(onChange) {
|
|
32
|
-
_transformProp = defineProperty<NodeProp>(name);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
void updateDerivedValue() override {
|
|
36
|
-
if (!_transformProp->isSet()) {
|
|
37
|
-
setDerivedValue(nullptr);
|
|
38
|
-
} else if (_transformProp->value().getType() != PropType::Array) {
|
|
39
|
-
throw std::runtime_error(
|
|
40
|
-
"Expected array for transform property, got " +
|
|
41
|
-
JsiValue::getTypeAsString(_transformProp->value().getType()));
|
|
42
|
-
} else {
|
|
43
|
-
SkM44 m4;
|
|
44
|
-
auto m = std::make_shared<SkMatrix>(SkMatrix());
|
|
45
|
-
for (auto &el : _transformProp->value().getAsArray()) {
|
|
46
|
-
auto keys = el.getKeys();
|
|
47
|
-
if (keys.size() == 0) {
|
|
48
|
-
throw std::runtime_error(
|
|
49
|
-
"Empty value in transform. Expected translateX, translateY, "
|
|
50
|
-
"scale, "
|
|
51
|
-
"scaleX, scaleY, skewX, skewY, rotate or rotateZ.");
|
|
52
|
-
}
|
|
53
|
-
auto key = el.getKeys().at(0);
|
|
54
|
-
if (key == PropNameTranslateX) {
|
|
55
|
-
auto x = el.getValue(key).getAsNumber();
|
|
56
|
-
SkM44 trX(1, 0, 0, x, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
57
|
-
m4.preConcat(trX);
|
|
58
|
-
} else if (key == PropNameTranslateY) {
|
|
59
|
-
auto y = el.getValue(key).getAsNumber();
|
|
60
|
-
SkM44 trY(1, 0, 0, 0, 0, 1, 0, y, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
61
|
-
m4.preConcat(trY);
|
|
62
|
-
} else if (key == PropNameTranslateZ) {
|
|
63
|
-
auto z = el.getValue(key).getAsNumber();
|
|
64
|
-
SkM44 trZ(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, z, 0, 0, 0, 1);
|
|
65
|
-
m4.preConcat(trZ);
|
|
66
|
-
} else if (key == PropNameTranslate) {
|
|
67
|
-
auto arr = el.getValue(key).getAsArray();
|
|
68
|
-
double x = 0, y = 0, z = 0;
|
|
69
|
-
for (size_t i = 0; i < arr.size(); ++i) {
|
|
70
|
-
if (i == 0) {
|
|
71
|
-
x = arr[i].getAsNumber();
|
|
72
|
-
} else if (i == 1) {
|
|
73
|
-
y = arr[i].getAsNumber();
|
|
74
|
-
} else if (i == 2) {
|
|
75
|
-
z = arr[i].getAsNumber();
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
SkM44 tr(1, 0, 0, x, 0, 1, 0, y, 0, 0, 1, z, 0, 0, 0, 1);
|
|
79
|
-
m4.preConcat(tr);
|
|
80
|
-
} else if (key == PropNameScale) {
|
|
81
|
-
auto s = el.getValue(key).getAsNumber();
|
|
82
|
-
SkM44 scale(s, 0, 0, 0, 0, s, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
83
|
-
m4.preConcat(scale);
|
|
84
|
-
} else if (key == PropNameScaleX) {
|
|
85
|
-
auto s = el.getValue(key).getAsNumber();
|
|
86
|
-
SkM44 scale(s, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
87
|
-
m4.preConcat(scale);
|
|
88
|
-
} else if (key == PropNameScaleY) {
|
|
89
|
-
auto s = el.getValue(key).getAsNumber();
|
|
90
|
-
SkM44 scale(1, 0, 0, 0, 0, s, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);
|
|
91
|
-
m4.preConcat(scale);
|
|
92
|
-
} else if (key == PropNameSkewX) {
|
|
93
|
-
auto angle = el.getValue(key).getAsNumber();
|
|
94
|
-
SkM44 skewX(1, 0, 0, 0, std::tan(angle), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
|
|
95
|
-
1);
|
|
96
|
-
m4.preConcat(skewX);
|
|
97
|
-
} else if (key == PropNameSkewY) {
|
|
98
|
-
auto angle = el.getValue(key).getAsNumber();
|
|
99
|
-
SkM44 skewY(1, std::tan(angle), 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0,
|
|
100
|
-
1);
|
|
101
|
-
m4.preConcat(skewY);
|
|
102
|
-
} else if (key == PropNameRotate || key == PropNameRotateZ) {
|
|
103
|
-
auto angle = el.getValue(key).getAsNumber();
|
|
104
|
-
SkM44 rotate;
|
|
105
|
-
rotate.setRotateUnit({0, 0, 1}, angle);
|
|
106
|
-
m4.preConcat(rotate);
|
|
107
|
-
} else if (key == PropNameRotateY) {
|
|
108
|
-
auto angle = el.getValue(key).getAsNumber();
|
|
109
|
-
SkM44 rotate;
|
|
110
|
-
rotate.setRotateUnit({0, 1, 0}, angle);
|
|
111
|
-
m4.preConcat(rotate);
|
|
112
|
-
} else if (key == PropNameRotateX) {
|
|
113
|
-
auto angle = el.getValue(key).getAsNumber();
|
|
114
|
-
SkM44 rotate;
|
|
115
|
-
rotate.setRotateUnit({1, 0, 0}, angle);
|
|
116
|
-
m4.preConcat(rotate);
|
|
117
|
-
} else if (key == PropNamePerspective) {
|
|
118
|
-
auto p = el.getValue(key).getAsNumber();
|
|
119
|
-
SkM44 perspective(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, -1 / p,
|
|
120
|
-
1);
|
|
121
|
-
m4.preConcat(perspective);
|
|
122
|
-
} else if (key == PropNameMatrix4) {
|
|
123
|
-
auto arr = el.getValue(key).getAsArray();
|
|
124
|
-
SkM44 m44;
|
|
125
|
-
for (size_t i = 0; i < arr.size(); ++i) {
|
|
126
|
-
auto obj = arr[i];
|
|
127
|
-
m44.setRC(i / 4, i % 4, obj.getAsNumber());
|
|
128
|
-
}
|
|
129
|
-
m4.preConcat(m44);
|
|
130
|
-
} else {
|
|
131
|
-
throw std::runtime_error(
|
|
132
|
-
"Unknown key in transform. Expected translateX, translateY, "
|
|
133
|
-
"scale, "
|
|
134
|
-
"scaleX, scaleY, skewX, skewY, rotate or rotateZ - got " +
|
|
135
|
-
std::string(key) + ".");
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
m->preConcat(m4.asM33());
|
|
139
|
-
setDerivedValue(m);
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
private:
|
|
144
|
-
NodeProp *_transformProp;
|
|
145
|
-
};
|
|
146
|
-
|
|
147
|
-
} // namespace RNSkia
|