@shopify/react-native-skia 0.1.208 → 0.1.209
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/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +19 -12
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +1 -1
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +1 -1
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java +1 -1
- package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +1 -1
- package/android/src/main/java/com/shopify/reactnative/skia/ViewScreenshotService.java +2 -0
- package/cpp/api/JsiSkPaint.h +7 -0
- package/cpp/api/JsiSkPath.h +10 -7
- package/cpp/rnskia/dom/base/JsiDomRenderNode.h +1 -1
- package/cpp/rnskia/dom/nodes/JsiPaintNode.h +4 -0
- package/cpp/rnskia/dom/props/FontProp.h +3 -1
- package/cpp/rnskia/dom/props/PaintProps.h +3 -0
- package/lib/commonjs/dom/nodes/PaintContext.d.ts +1 -0
- package/lib/commonjs/dom/nodes/PaintContext.js.map +1 -1
- package/lib/commonjs/dom/nodes/PaintNode.js +6 -1
- package/lib/commonjs/dom/nodes/PaintNode.js.map +1 -1
- package/lib/commonjs/dom/nodes/RenderNode.js +1 -1
- package/lib/commonjs/dom/nodes/RenderNode.js.map +1 -1
- package/lib/commonjs/dom/nodes/drawings/Text.d.ts +3 -3
- package/lib/commonjs/dom/nodes/drawings/Text.js +26 -4
- package/lib/commonjs/dom/nodes/drawings/Text.js.map +1 -1
- package/lib/commonjs/dom/types/Common.d.ts +1 -0
- package/lib/commonjs/dom/types/Common.js.map +1 -1
- package/lib/commonjs/dom/types/DrawingContext.js +15 -0
- package/lib/commonjs/dom/types/DrawingContext.js.map +1 -1
- package/lib/commonjs/dom/types/Drawings.d.ts +1 -1
- package/lib/commonjs/dom/types/Drawings.js.map +1 -1
- package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +12 -11
- package/lib/commonjs/skia/types/Image/ImageFactory.js +12 -11
- package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/commonjs/skia/types/Paint/Paint.d.ts +5 -0
- package/lib/commonjs/skia/types/Paint/Paint.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkPaint.d.ts +1 -0
- package/lib/commonjs/skia/web/JsiSkPaint.js +4 -0
- package/lib/commonjs/skia/web/JsiSkPaint.js.map +1 -1
- package/lib/commonjs/skia/web/JsiSkPath.d.ts +1 -1
- package/lib/commonjs/skia/web/JsiSkPath.js +10 -1
- package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
- package/lib/module/dom/nodes/PaintContext.d.ts +1 -0
- package/lib/module/dom/nodes/PaintContext.js.map +1 -1
- package/lib/module/dom/nodes/PaintNode.js +6 -1
- package/lib/module/dom/nodes/PaintNode.js.map +1 -1
- package/lib/module/dom/nodes/RenderNode.js +1 -1
- package/lib/module/dom/nodes/RenderNode.js.map +1 -1
- package/lib/module/dom/nodes/drawings/Text.d.ts +3 -3
- package/lib/module/dom/nodes/drawings/Text.js +26 -4
- package/lib/module/dom/nodes/drawings/Text.js.map +1 -1
- package/lib/module/dom/types/Common.d.ts +1 -0
- package/lib/module/dom/types/Common.js.map +1 -1
- package/lib/module/dom/types/DrawingContext.js +15 -0
- package/lib/module/dom/types/DrawingContext.js.map +1 -1
- package/lib/module/dom/types/Drawings.d.ts +1 -1
- package/lib/module/dom/types/Drawings.js.map +1 -1
- package/lib/module/skia/types/Image/ImageFactory.d.ts +12 -11
- package/lib/module/skia/types/Image/ImageFactory.js +12 -11
- package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
- package/lib/module/skia/types/Paint/Paint.d.ts +5 -0
- package/lib/module/skia/types/Paint/Paint.js.map +1 -1
- package/lib/module/skia/web/JsiSkPaint.d.ts +1 -0
- package/lib/module/skia/web/JsiSkPaint.js +4 -0
- package/lib/module/skia/web/JsiSkPaint.js.map +1 -1
- package/lib/module/skia/web/JsiSkPath.d.ts +1 -1
- package/lib/module/skia/web/JsiSkPath.js +11 -1
- package/lib/module/skia/web/JsiSkPath.js.map +1 -1
- package/lib/typescript/src/dom/nodes/PaintContext.d.ts +1 -0
- package/lib/typescript/src/dom/nodes/drawings/Text.d.ts +3 -3
- package/lib/typescript/src/dom/types/Common.d.ts +1 -0
- package/lib/typescript/src/dom/types/Drawings.d.ts +1 -1
- package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +12 -11
- package/lib/typescript/src/skia/types/Paint/Paint.d.ts +5 -0
- package/lib/typescript/src/skia/web/JsiSkPaint.d.ts +1 -0
- package/lib/typescript/src/skia/web/JsiSkPath.d.ts +1 -1
- package/package.json +2 -2
- package/src/dom/nodes/PaintContext.ts +1 -0
- package/src/dom/nodes/PaintNode.ts +4 -0
- package/src/dom/nodes/RenderNode.ts +1 -0
- package/src/dom/nodes/drawings/Text.ts +31 -5
- package/src/dom/types/Common.ts +1 -0
- package/src/dom/types/DrawingContext.ts +13 -0
- package/src/dom/types/Drawings.ts +1 -1
- package/src/skia/types/Image/ImageFactory.ts +1 -0
- package/src/skia/types/Paint/Paint.ts +6 -0
- package/src/skia/web/JsiSkPaint.ts +4 -0
- package/src/skia/web/JsiSkPath.ts +8 -1
@@ -18,8 +18,11 @@ public abstract class SkiaBaseView extends ReactViewGroup implements TextureView
|
|
18
18
|
|
19
19
|
private String tag = "SkiaView";
|
20
20
|
|
21
|
-
|
21
|
+
private boolean manageTexture = false;
|
22
|
+
|
23
|
+
public SkiaBaseView(Context context, boolean manageTexture) {
|
22
24
|
super(context);
|
25
|
+
this.manageTexture = manageTexture;
|
23
26
|
mTexture = new TextureView(context);
|
24
27
|
mTexture.setSurfaceTextureListener(this);
|
25
28
|
mTexture.setOpaque(false);
|
@@ -27,19 +30,23 @@ public abstract class SkiaBaseView extends ReactViewGroup implements TextureView
|
|
27
30
|
}
|
28
31
|
|
29
32
|
public void destroySurface() {
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
33
|
+
if (mSurface != null) {
|
34
|
+
Log.i(tag, "destroySurface");
|
35
|
+
surfaceDestroyed();
|
36
|
+
mSurface.release();
|
37
|
+
mSurface = null;
|
38
|
+
}
|
34
39
|
}
|
35
40
|
|
36
41
|
private void createSurfaceTexture() {
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
42
|
+
if (manageTexture) {
|
43
|
+
// This API Level is >= 26, we created our own SurfaceTexture to have a faster time to first frame
|
44
|
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
|
45
|
+
Log.i(tag, "Create SurfaceTexture");
|
46
|
+
SurfaceTexture surface = new SurfaceTexture(false);
|
47
|
+
mTexture.setSurfaceTexture(surface);
|
48
|
+
this.onSurfaceTextureAvailable(surface, this.getMeasuredWidth(), this.getMeasuredHeight());
|
49
|
+
}
|
43
50
|
}
|
44
51
|
}
|
45
52
|
|
@@ -145,7 +152,7 @@ public abstract class SkiaBaseView extends ReactViewGroup implements TextureView
|
|
145
152
|
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
|
146
153
|
Log.i(tag, "onSurfaceTextureDestroyed");
|
147
154
|
// https://developer.android.com/reference/android/view/TextureView.SurfaceTextureListener#onSurfaceTextureDestroyed(android.graphics.SurfaceTexture)
|
148
|
-
|
155
|
+
destroySurface();
|
149
156
|
createSurfaceTexture();
|
150
157
|
return false;
|
151
158
|
}
|
@@ -29,7 +29,7 @@ public abstract class SkiaBaseViewManager extends ReactViewManager {
|
|
29
29
|
@Override
|
30
30
|
public void onDropViewInstance(@NonNull ReactViewGroup view) {
|
31
31
|
super.onDropViewInstance(view);
|
32
|
-
((SkiaBaseView)view).unregisterView();
|
33
32
|
((SkiaBaseView)view).destroySurface();
|
33
|
+
((SkiaBaseView)view).unregisterView();
|
34
34
|
}
|
35
35
|
}
|
@@ -11,7 +11,7 @@ public class SkiaDomView extends SkiaBaseView {
|
|
11
11
|
private HybridData mHybridData;
|
12
12
|
|
13
13
|
public SkiaDomView(Context context) {
|
14
|
-
super(context);
|
14
|
+
super(context, true);
|
15
15
|
RNSkiaModule skiaModule = ((ReactContext) context).getNativeModule(RNSkiaModule.class);
|
16
16
|
mHybridData = initHybrid(skiaModule.getSkiaManager());
|
17
17
|
}
|
@@ -11,7 +11,7 @@ public class SkiaDrawView extends SkiaBaseView {
|
|
11
11
|
private HybridData mHybridData;
|
12
12
|
|
13
13
|
public SkiaDrawView(Context context) {
|
14
|
-
super(context);
|
14
|
+
super(context, false);
|
15
15
|
RNSkiaModule skiaModule = ((ReactContext) context).getNativeModule(RNSkiaModule.class);
|
16
16
|
mHybridData = initHybrid(skiaModule.getSkiaManager());
|
17
17
|
}
|
@@ -11,7 +11,7 @@ public class SkiaPictureView extends SkiaBaseView {
|
|
11
11
|
private HybridData mHybridData;
|
12
12
|
|
13
13
|
public SkiaPictureView(Context context) {
|
14
|
-
super(context);
|
14
|
+
super(context, true);
|
15
15
|
RNSkiaModule skiaModule = ((ReactContext) context).getNativeModule(RNSkiaModule.class);
|
16
16
|
mHybridData = initHybrid(skiaModule.getSkiaManager());
|
17
17
|
}
|
@@ -93,7 +93,9 @@ public class ViewScreenshotService {
|
|
93
93
|
}
|
94
94
|
|
95
95
|
// Draw ourselves
|
96
|
+
canvas.saveLayerAlpha(null, Math.round(view.getAlpha() * 255));
|
96
97
|
view.draw(canvas);
|
98
|
+
canvas.restore();
|
97
99
|
|
98
100
|
// Enable children again
|
99
101
|
for (int i = 0; i < visibleChildren.size(); i++) {
|
package/cpp/api/JsiSkPaint.h
CHANGED
@@ -81,6 +81,12 @@ public:
|
|
81
81
|
return jsi::Value::undefined();
|
82
82
|
}
|
83
83
|
|
84
|
+
JSI_HOST_FUNCTION(setDither) {
|
85
|
+
bool dithered = arguments[0].getBool();
|
86
|
+
getObject()->setDither(dithered);
|
87
|
+
return jsi::Value::undefined();
|
88
|
+
}
|
89
|
+
|
84
90
|
JSI_HOST_FUNCTION(setStrokeWidth) {
|
85
91
|
SkScalar width = arguments[0].asNumber();
|
86
92
|
getObject()->setStrokeWidth(width);
|
@@ -175,6 +181,7 @@ public:
|
|
175
181
|
JSI_EXPORT_FUNC(JsiSkPaint, setStrokeJoin),
|
176
182
|
JSI_EXPORT_FUNC(JsiSkPaint, setStrokeCap),
|
177
183
|
JSI_EXPORT_FUNC(JsiSkPaint, setAntiAlias),
|
184
|
+
JSI_EXPORT_FUNC(JsiSkPaint, setDither),
|
178
185
|
JSI_EXPORT_FUNC(JsiSkPaint, setStrokeWidth),
|
179
186
|
JSI_EXPORT_FUNC(JsiSkPaint, setStyle),
|
180
187
|
JSI_EXPORT_FUNC(JsiSkPaint, setColor),
|
package/cpp/api/JsiSkPath.h
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
#pragma once
|
2
2
|
|
3
|
+
#include <algorithm>
|
3
4
|
#include <memory>
|
4
5
|
#include <utility>
|
5
6
|
#include <vector>
|
@@ -34,6 +35,11 @@ namespace RNSkia {
|
|
34
35
|
namespace jsi = facebook::jsi;
|
35
36
|
|
36
37
|
class JsiSkPath : public JsiSkWrappingSharedPtrHostObject<SkPath> {
|
38
|
+
private:
|
39
|
+
float pinT(double value) {
|
40
|
+
// Clamp the double value between 0 and 1 and then cast it to float
|
41
|
+
return static_cast<float>(std::clamp(value, 0.0, 1.0));
|
42
|
+
}
|
37
43
|
|
38
44
|
public:
|
39
45
|
JSI_HOST_FUNCTION(addPath) {
|
@@ -293,24 +299,21 @@ public:
|
|
293
299
|
}
|
294
300
|
|
295
301
|
JSI_HOST_FUNCTION(trim) {
|
296
|
-
auto start = arguments[0].asNumber();
|
297
|
-
auto end = arguments[1].asNumber();
|
302
|
+
auto start = pinT(arguments[0].asNumber());
|
303
|
+
auto end = pinT(arguments[1].asNumber());
|
298
304
|
auto isComplement = arguments[2].getBool();
|
299
305
|
auto path = *getObject();
|
300
306
|
auto mode = isComplement ? SkTrimPathEffect::Mode::kInverted
|
301
307
|
: SkTrimPathEffect::Mode::kNormal;
|
302
308
|
auto pe = SkTrimPathEffect::Make(start, end, mode);
|
309
|
+
SkStrokeRec rec(SkStrokeRec::InitStyle::kHairline_InitStyle);
|
303
310
|
if (!pe) {
|
304
|
-
|
305
|
-
// [0,1]\n");
|
306
|
-
return jsi::Value::null();
|
311
|
+
return thisValue.getObject(runtime);
|
307
312
|
}
|
308
|
-
SkStrokeRec rec(SkStrokeRec::InitStyle::kHairline_InitStyle);
|
309
313
|
if (pe->filterPath(&path, path, &rec, nullptr)) {
|
310
314
|
getObject()->swap(path);
|
311
315
|
return thisValue.getObject(runtime);
|
312
316
|
}
|
313
|
-
SkDebugf("Could not trim path\n");
|
314
317
|
return jsi::Value::null();
|
315
318
|
}
|
316
319
|
|
@@ -206,7 +206,7 @@ protected:
|
|
206
206
|
JsiPropId::get("blendMode"), JsiPropId::get("strokeCap"),
|
207
207
|
JsiPropId::get("strokeJoin"), JsiPropId::get("strokeMiter"),
|
208
208
|
JsiPropId::get("style"), JsiPropId::get("antiAlias"),
|
209
|
-
JsiPropId::get("opacity")};
|
209
|
+
JsiPropId::get("opacity"), JsiPropId::get("dither")};
|
210
210
|
|
211
211
|
// We'll invalidate paint if a prop change happened in a paint property
|
212
212
|
if (std::find(paintProps.begin(), paintProps.end(), prop->getName()) !=
|
@@ -67,6 +67,10 @@ public:
|
|
67
67
|
paint->setAntiAlias(_paintProps->getAntiAlias()->value().getAsBool());
|
68
68
|
}
|
69
69
|
|
70
|
+
if (_paintProps->getDither()->isSet()) {
|
71
|
+
paint->setDither(_paintProps->getDither()->value().getAsBool());
|
72
|
+
}
|
73
|
+
|
70
74
|
context->save();
|
71
75
|
decorateChildren(context);
|
72
76
|
|
@@ -100,6 +100,7 @@ public:
|
|
100
100
|
_strokeCap = defineProperty<StrokeCapProp>("strokeCap");
|
101
101
|
_strokeMiter = defineProperty<NodeProp>("strokeMiter");
|
102
102
|
_antiAlias = defineProperty<NodeProp>("antiAlias");
|
103
|
+
_dither = defineProperty<NodeProp>("dither");
|
103
104
|
_opacity = defineProperty<NodeProp>("opacity");
|
104
105
|
}
|
105
106
|
|
@@ -113,6 +114,7 @@ public:
|
|
113
114
|
StrokeCapProp *getStrokeCap() { return _strokeCap; }
|
114
115
|
NodeProp *getStrokeMiter() { return _strokeMiter; }
|
115
116
|
NodeProp *getAntiAlias() { return _antiAlias; }
|
117
|
+
NodeProp *getDither() { return _dither; }
|
116
118
|
NodeProp *getOpacity() { return _opacity; }
|
117
119
|
|
118
120
|
private:
|
@@ -124,6 +126,7 @@ private:
|
|
124
126
|
StrokeCapProp *_strokeCap;
|
125
127
|
NodeProp *_strokeMiter;
|
126
128
|
NodeProp *_antiAlias;
|
129
|
+
NodeProp *_dither;
|
127
130
|
NodeProp *_opacity;
|
128
131
|
};
|
129
132
|
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":[],"sources":["PaintContext.ts"],"sourcesContent":["import type {\n BlendMode,\n PaintStyle,\n SkColorFilter,\n SkImageFilter,\n SkMaskFilter,\n SkPathEffect,\n SkShader,\n StrokeCap,\n StrokeJoin,\n} from \"../../skia/types\";\nimport type { SkColor } from \"../../skia/types/Color\";\n\n// TODO: to remove\nexport interface PaintContext {\n color?: SkColor;\n strokeWidth?: number;\n blendMode?: BlendMode;\n style?: PaintStyle;\n strokeJoin?: StrokeJoin;\n strokeCap?: StrokeCap;\n strokeMiter?: number;\n opacity?: number;\n antiAlias?: boolean;\n\n shader?: SkShader;\n colorFilter?: SkColorFilter;\n imageFilter?: SkImageFilter;\n maskFilter?: SkMaskFilter;\n pathEffect?: SkPathEffect;\n}\n"],"mappings":""}
|
1
|
+
{"version":3,"names":[],"sources":["PaintContext.ts"],"sourcesContent":["import type {\n BlendMode,\n PaintStyle,\n SkColorFilter,\n SkImageFilter,\n SkMaskFilter,\n SkPathEffect,\n SkShader,\n StrokeCap,\n StrokeJoin,\n} from \"../../skia/types\";\nimport type { SkColor } from \"../../skia/types/Color\";\n\n// TODO: to remove\nexport interface PaintContext {\n color?: SkColor;\n strokeWidth?: number;\n blendMode?: BlendMode;\n style?: PaintStyle;\n strokeJoin?: StrokeJoin;\n strokeCap?: StrokeCap;\n strokeMiter?: number;\n opacity?: number;\n antiAlias?: boolean;\n dither?: boolean;\n\n shader?: SkShader;\n colorFilter?: SkColorFilter;\n imageFilter?: SkImageFilter;\n maskFilter?: SkMaskFilter;\n pathEffect?: SkPathEffect;\n}\n"],"mappings":""}
|
@@ -29,7 +29,8 @@ class PaintNode extends _Node.JsiDeclarationNode {
|
|
29
29
|
strokeCap,
|
30
30
|
strokeMiter,
|
31
31
|
opacity,
|
32
|
-
antiAlias
|
32
|
+
antiAlias,
|
33
|
+
dither
|
33
34
|
} = this.props;
|
34
35
|
const paint = this.Skia.Paint();
|
35
36
|
|
@@ -69,6 +70,10 @@ class PaintNode extends _Node.JsiDeclarationNode {
|
|
69
70
|
paint.setAntiAlias(antiAlias);
|
70
71
|
}
|
71
72
|
|
73
|
+
if (dither !== undefined) {
|
74
|
+
paint.setDither(dither);
|
75
|
+
}
|
76
|
+
|
72
77
|
ctx.save();
|
73
78
|
|
74
79
|
this._children.forEach(child => {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["PaintNode","JsiDeclarationNode","constructor","ctx","props","DeclarationType","Paint","NodeType","decorate","color","strokeWidth","blendMode","style","strokeJoin","strokeCap","strokeMiter","opacity","antiAlias","paint","Skia","undefined","setColor","Color","setStrokeWidth","setBlendMode","BlendMode","enumKey","setStyle","PaintStyle","setStrokeJoin","StrokeJoin","setStrokeCap","StrokeCap","setStrokeMiter","setAlphaf","setAntiAlias","save","_children","forEach","child","colorFilter","colorFilters","popAllAsOne","imageFilter","imageFilters","shader","shaders","pop","maskFilter","maskFilters","pathEffect","pathEffects","restore","setImageFilter","setShader","setPathEffect","setColorFilter","setMaskFilter","paints","push"],"sources":["PaintNode.ts"],"sourcesContent":["import { StrokeCap, StrokeJoin, PaintStyle, BlendMode } from \"../../skia/types\";\nimport type { DeclarationNode, PaintProps } from \"../types\";\nimport { DeclarationType, NodeType } from \"../types\";\nimport type { DeclarationContext } from \"../types/DeclarationContext\";\n\nimport { enumKey } from \"./datatypes\";\nimport type { NodeContext } from \"./Node\";\nimport { JsiDeclarationNode } from \"./Node\";\n\nexport class PaintNode\n extends JsiDeclarationNode<PaintProps>\n implements DeclarationNode<PaintProps>\n{\n constructor(ctx: NodeContext, props: PaintProps = {}) {\n super(ctx, DeclarationType.Paint, NodeType.Paint, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const {\n color,\n strokeWidth,\n blendMode,\n style,\n strokeJoin,\n strokeCap,\n strokeMiter,\n opacity,\n antiAlias,\n } = this.props;\n const paint = this.Skia.Paint();\n if (color !== undefined) {\n paint.setColor(this.Skia.Color(color));\n }\n if (strokeWidth !== undefined) {\n paint.setStrokeWidth(strokeWidth);\n }\n if (blendMode !== undefined) {\n paint.setBlendMode(BlendMode[enumKey(blendMode)]);\n }\n if (style !== undefined) {\n paint.setStyle(PaintStyle[enumKey(style)]);\n }\n if (strokeJoin !== undefined) {\n paint.setStrokeJoin(StrokeJoin[enumKey(strokeJoin)]);\n }\n if (strokeCap !== undefined) {\n paint.setStrokeCap(StrokeCap[enumKey(strokeCap)]);\n }\n if (strokeMiter !== undefined) {\n paint.setStrokeMiter(strokeMiter);\n }\n if (opacity !== undefined) {\n paint.setAlphaf(opacity);\n }\n if (antiAlias !== undefined) {\n paint.setAntiAlias(antiAlias);\n }\n ctx.save();\n this._children.forEach((child) => {\n if (child instanceof JsiDeclarationNode) {\n child.decorate(ctx);\n }\n });\n const colorFilter = ctx.colorFilters.popAllAsOne();\n const imageFilter = ctx.imageFilters.popAllAsOne();\n const shader = ctx.shaders.pop();\n const maskFilter = ctx.maskFilters.pop();\n const pathEffect = ctx.pathEffects.popAllAsOne();\n ctx.restore();\n if (imageFilter) {\n paint.setImageFilter(imageFilter);\n }\n if (shader) {\n paint.setShader(shader);\n }\n if (pathEffect) {\n paint.setPathEffect(pathEffect);\n }\n if (colorFilter) {\n paint.setColorFilter(colorFilter);\n }\n if (maskFilter) {\n paint.setMaskFilter(maskFilter);\n }\n ctx.paints.push(paint);\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAEA;;AAGA;;AAEA;;AAEO,MAAMA,SAAN,SACGC,wBADH,CAGP;EACEC,WAAW,CAACC,GAAD,EAA2C;IAAA,IAAxBC,KAAwB,uEAAJ,EAAI;IACpD,MAAMD,GAAN,EAAWE,uBAAA,CAAgBC,KAA3B,EAAkCC,gBAAA,CAASD,KAA3C,EAAkDF,KAAlD;EACD;;EAEDI,QAAQ,CAACL,GAAD,EAA0B;IAChC,MAAM;MACJM,KADI;MAEJC,WAFI;MAGJC,SAHI;MAIJC,KAJI;MAKJC,UALI;MAMJC,SANI;MAOJC,WAPI;MAQJC,OARI;MASJC;
|
1
|
+
{"version":3,"names":["PaintNode","JsiDeclarationNode","constructor","ctx","props","DeclarationType","Paint","NodeType","decorate","color","strokeWidth","blendMode","style","strokeJoin","strokeCap","strokeMiter","opacity","antiAlias","dither","paint","Skia","undefined","setColor","Color","setStrokeWidth","setBlendMode","BlendMode","enumKey","setStyle","PaintStyle","setStrokeJoin","StrokeJoin","setStrokeCap","StrokeCap","setStrokeMiter","setAlphaf","setAntiAlias","setDither","save","_children","forEach","child","colorFilter","colorFilters","popAllAsOne","imageFilter","imageFilters","shader","shaders","pop","maskFilter","maskFilters","pathEffect","pathEffects","restore","setImageFilter","setShader","setPathEffect","setColorFilter","setMaskFilter","paints","push"],"sources":["PaintNode.ts"],"sourcesContent":["import { StrokeCap, StrokeJoin, PaintStyle, BlendMode } from \"../../skia/types\";\nimport type { DeclarationNode, PaintProps } from \"../types\";\nimport { DeclarationType, NodeType } from \"../types\";\nimport type { DeclarationContext } from \"../types/DeclarationContext\";\n\nimport { enumKey } from \"./datatypes\";\nimport type { NodeContext } from \"./Node\";\nimport { JsiDeclarationNode } from \"./Node\";\n\nexport class PaintNode\n extends JsiDeclarationNode<PaintProps>\n implements DeclarationNode<PaintProps>\n{\n constructor(ctx: NodeContext, props: PaintProps = {}) {\n super(ctx, DeclarationType.Paint, NodeType.Paint, props);\n }\n\n decorate(ctx: DeclarationContext) {\n const {\n color,\n strokeWidth,\n blendMode,\n style,\n strokeJoin,\n strokeCap,\n strokeMiter,\n opacity,\n antiAlias,\n dither,\n } = this.props;\n const paint = this.Skia.Paint();\n if (color !== undefined) {\n paint.setColor(this.Skia.Color(color));\n }\n if (strokeWidth !== undefined) {\n paint.setStrokeWidth(strokeWidth);\n }\n if (blendMode !== undefined) {\n paint.setBlendMode(BlendMode[enumKey(blendMode)]);\n }\n if (style !== undefined) {\n paint.setStyle(PaintStyle[enumKey(style)]);\n }\n if (strokeJoin !== undefined) {\n paint.setStrokeJoin(StrokeJoin[enumKey(strokeJoin)]);\n }\n if (strokeCap !== undefined) {\n paint.setStrokeCap(StrokeCap[enumKey(strokeCap)]);\n }\n if (strokeMiter !== undefined) {\n paint.setStrokeMiter(strokeMiter);\n }\n if (opacity !== undefined) {\n paint.setAlphaf(opacity);\n }\n if (antiAlias !== undefined) {\n paint.setAntiAlias(antiAlias);\n }\n if (dither !== undefined) {\n paint.setDither(dither);\n }\n ctx.save();\n this._children.forEach((child) => {\n if (child instanceof JsiDeclarationNode) {\n child.decorate(ctx);\n }\n });\n const colorFilter = ctx.colorFilters.popAllAsOne();\n const imageFilter = ctx.imageFilters.popAllAsOne();\n const shader = ctx.shaders.pop();\n const maskFilter = ctx.maskFilters.pop();\n const pathEffect = ctx.pathEffects.popAllAsOne();\n ctx.restore();\n if (imageFilter) {\n paint.setImageFilter(imageFilter);\n }\n if (shader) {\n paint.setShader(shader);\n }\n if (pathEffect) {\n paint.setPathEffect(pathEffect);\n }\n if (colorFilter) {\n paint.setColorFilter(colorFilter);\n }\n if (maskFilter) {\n paint.setMaskFilter(maskFilter);\n }\n ctx.paints.push(paint);\n }\n}\n"],"mappings":";;;;;;;AAAA;;AAEA;;AAGA;;AAEA;;AAEO,MAAMA,SAAN,SACGC,wBADH,CAGP;EACEC,WAAW,CAACC,GAAD,EAA2C;IAAA,IAAxBC,KAAwB,uEAAJ,EAAI;IACpD,MAAMD,GAAN,EAAWE,uBAAA,CAAgBC,KAA3B,EAAkCC,gBAAA,CAASD,KAA3C,EAAkDF,KAAlD;EACD;;EAEDI,QAAQ,CAACL,GAAD,EAA0B;IAChC,MAAM;MACJM,KADI;MAEJC,WAFI;MAGJC,SAHI;MAIJC,KAJI;MAKJC,UALI;MAMJC,SANI;MAOJC,WAPI;MAQJC,OARI;MASJC,SATI;MAUJC;IAVI,IAWF,KAAKd,KAXT;IAYA,MAAMe,KAAK,GAAG,KAAKC,IAAL,CAAUd,KAAV,EAAd;;IACA,IAAIG,KAAK,KAAKY,SAAd,EAAyB;MACvBF,KAAK,CAACG,QAAN,CAAe,KAAKF,IAAL,CAAUG,KAAV,CAAgBd,KAAhB,CAAf;IACD;;IACD,IAAIC,WAAW,KAAKW,SAApB,EAA+B;MAC7BF,KAAK,CAACK,cAAN,CAAqBd,WAArB;IACD;;IACD,IAAIC,SAAS,KAAKU,SAAlB,EAA6B;MAC3BF,KAAK,CAACM,YAAN,CAAmBC,gBAAA,CAAU,IAAAC,kBAAA,EAAQhB,SAAR,CAAV,CAAnB;IACD;;IACD,IAAIC,KAAK,KAAKS,SAAd,EAAyB;MACvBF,KAAK,CAACS,QAAN,CAAeC,iBAAA,CAAW,IAAAF,kBAAA,EAAQf,KAAR,CAAX,CAAf;IACD;;IACD,IAAIC,UAAU,KAAKQ,SAAnB,EAA8B;MAC5BF,KAAK,CAACW,aAAN,CAAoBC,iBAAA,CAAW,IAAAJ,kBAAA,EAAQd,UAAR,CAAX,CAApB;IACD;;IACD,IAAIC,SAAS,KAAKO,SAAlB,EAA6B;MAC3BF,KAAK,CAACa,YAAN,CAAmBC,gBAAA,CAAU,IAAAN,kBAAA,EAAQb,SAAR,CAAV,CAAnB;IACD;;IACD,IAAIC,WAAW,KAAKM,SAApB,EAA+B;MAC7BF,KAAK,CAACe,cAAN,CAAqBnB,WAArB;IACD;;IACD,IAAIC,OAAO,KAAKK,SAAhB,EAA2B;MACzBF,KAAK,CAACgB,SAAN,CAAgBnB,OAAhB;IACD;;IACD,IAAIC,SAAS,KAAKI,SAAlB,EAA6B;MAC3BF,KAAK,CAACiB,YAAN,CAAmBnB,SAAnB;IACD;;IACD,IAAIC,MAAM,KAAKG,SAAf,EAA0B;MACxBF,KAAK,CAACkB,SAAN,CAAgBnB,MAAhB;IACD;;IACDf,GAAG,CAACmC,IAAJ;;IACA,KAAKC,SAAL,CAAeC,OAAf,CAAwBC,KAAD,IAAW;MAChC,IAAIA,KAAK,YAAYxC,wBAArB,EAAyC;QACvCwC,KAAK,CAACjC,QAAN,CAAeL,GAAf;MACD;IACF,CAJD;;IAKA,MAAMuC,WAAW,GAAGvC,GAAG,CAACwC,YAAJ,CAAiBC,WAAjB,EAApB;IACA,MAAMC,WAAW,GAAG1C,GAAG,CAAC2C,YAAJ,CAAiBF,WAAjB,EAApB;IACA,MAAMG,MAAM,GAAG5C,GAAG,CAAC6C,OAAJ,CAAYC,GAAZ,EAAf;IACA,MAAMC,UAAU,GAAG/C,GAAG,CAACgD,WAAJ,CAAgBF,GAAhB,EAAnB;IACA,MAAMG,UAAU,GAAGjD,GAAG,CAACkD,WAAJ,CAAgBT,WAAhB,EAAnB;IACAzC,GAAG,CAACmD,OAAJ;;IACA,IAAIT,WAAJ,EAAiB;MACf1B,KAAK,CAACoC,cAAN,CAAqBV,WAArB;IACD;;IACD,IAAIE,MAAJ,EAAY;MACV5B,KAAK,CAACqC,SAAN,CAAgBT,MAAhB;IACD;;IACD,IAAIK,UAAJ,EAAgB;MACdjC,KAAK,CAACsC,aAAN,CAAoBL,UAApB;IACD;;IACD,IAAIV,WAAJ,EAAiB;MACfvB,KAAK,CAACuC,cAAN,CAAqBhB,WAArB;IACD;;IACD,IAAIQ,UAAJ,EAAgB;MACd/B,KAAK,CAACwC,aAAN,CAAoBT,UAApB;IACD;;IACD/C,GAAG,CAACyD,MAAJ,CAAWC,IAAX,CAAgB1C,KAAhB;EACD;;AA7EH"}
|
@@ -13,7 +13,7 @@ var _Node = require("./Node");
|
|
13
13
|
|
14
14
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
15
15
|
|
16
|
-
const paintProps = ["color", "strokeWidth", "blendMode", "strokeCap", "strokeJoin", "strokeMiter", "style", "antiAlias", "opacity"];
|
16
|
+
const paintProps = ["color", "strokeWidth", "blendMode", "strokeCap", "strokeJoin", "strokeMiter", "style", "antiAlias", "dither", "opacity"];
|
17
17
|
|
18
18
|
class JsiRenderNode extends _Node.JsiNode {
|
19
19
|
constructor(ctx, type, props) {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["paintProps","JsiRenderNode","JsiNode","constructor","ctx","type","props","matrix","Skia","Matrix","onPropChange","setProps","setProp","key","value","hasChanged","includes","paintCache","identity","clipPath","undefined","clipRect","clipRRect","computeMatrix","computeClip","addChild","child","JsiDeclarationNode","setInvalidate","insertChildBefore","before","clip","isPathDef","processPath","isRRect","processTransformProps","render","invertClip","layer","transform","canvas","parentPaint","paint","cache","parent","shouldRestore","saveAndConcat","hasTransform","hasClip","shouldSave","op","ClipOp","Difference","Intersect","saveLayer","save","concat","renderNode","restore"],"sources":["RenderNode.ts"],"sourcesContent":["import type {\n SkMatrix,\n SkRect,\n SkRRect,\n SkPath,\n SkPaint,\n} from \"../../skia/types\";\nimport { ClipOp, isRRect } from \"../../skia/types\";\nimport type {\n RenderNode,\n GroupProps,\n NodeType,\n Node,\n DrawingContext,\n} from \"../types\";\n\nimport { isPathDef, processPath, processTransformProps } from \"./datatypes\";\nimport type { NodeContext } from \"./Node\";\nimport { JsiNode, JsiDeclarationNode } from \"./Node\";\n\nconst paintProps = [\n \"color\",\n \"strokeWidth\",\n \"blendMode\",\n \"strokeCap\",\n \"strokeJoin\",\n \"strokeMiter\",\n \"style\",\n \"antiAlias\",\n \"opacity\",\n];\n\ninterface PaintCache {\n parent: SkPaint;\n child: SkPaint;\n}\n\nexport abstract class JsiRenderNode<P extends GroupProps>\n extends JsiNode<P>\n implements RenderNode<P>\n{\n paintCache: PaintCache | null = null;\n\n matrix: SkMatrix;\n clipRect?: SkRect;\n clipRRect?: SkRRect;\n clipPath?: SkPath;\n\n constructor(ctx: NodeContext, type: NodeType, props: P) {\n super(ctx, type, props);\n this.matrix = this.Skia.Matrix();\n this.onPropChange();\n }\n\n setProps(props: P) {\n super.setProps(props);\n this.onPropChange();\n }\n\n setProp<K extends keyof P>(key: K, value: P[K]) {\n const hasChanged = super.setProp(key, value);\n if (hasChanged) {\n this.onPropChange();\n if (paintProps.includes(key as string)) {\n this.paintCache = null;\n }\n }\n return hasChanged;\n }\n\n protected onPropChange() {\n this.matrix.identity();\n this.clipPath = undefined;\n this.clipRect = undefined;\n this.clipRRect = undefined;\n this.computeMatrix();\n this.computeClip();\n }\n\n addChild(child: Node<unknown>) {\n if (child instanceof JsiDeclarationNode) {\n child.setInvalidate(() => {\n this.paintCache = null;\n });\n }\n super.addChild(child);\n }\n\n insertChildBefore(child: Node<unknown>, before: Node<unknown>) {\n if (child instanceof JsiDeclarationNode) {\n child.setInvalidate(() => {\n this.paintCache = null;\n });\n }\n super.insertChildBefore(child, before);\n }\n\n private computeClip() {\n const { clip } = this.props;\n if (clip) {\n if (isPathDef(clip)) {\n this.clipPath = processPath(this.Skia, clip);\n } else if (isRRect(clip)) {\n this.clipRRect = clip;\n } else {\n this.clipRect = clip;\n }\n }\n }\n\n private computeMatrix() {\n processTransformProps(this.matrix, this.props);\n }\n\n render(ctx: DrawingContext) {\n const { invertClip, layer, matrix, transform } = this.props;\n const { canvas } = ctx;\n const parentPaint = ctx.paint;\n\n const cache =\n this.paintCache !== null && this.paintCache.parent === ctx.paint\n ? this.paintCache.child\n : undefined;\n const shouldRestore = ctx.saveAndConcat(this, cache);\n\n const hasTransform = matrix !== undefined || transform !== undefined;\n const hasClip =\n this.clipRect !== undefined ||\n this.clipPath !== undefined ||\n this.clipRRect !== undefined;\n const shouldSave = hasTransform || hasClip || !!layer;\n const op = invertClip ? ClipOp.Difference : ClipOp.Intersect;\n if (shouldSave) {\n if (layer) {\n if (typeof layer === \"boolean\") {\n canvas.saveLayer();\n } else {\n canvas.saveLayer(layer);\n }\n } else {\n canvas.save();\n }\n }\n\n if (this.matrix) {\n canvas.concat(this.matrix);\n }\n if (this.clipRect) {\n canvas.clipRect(this.clipRect, op, true);\n } else if (this.clipRRect) {\n canvas.clipRRect(this.clipRRect, op, true);\n } else if (this.clipPath) {\n canvas.clipPath(this.clipPath, op, true);\n }\n\n this.renderNode(ctx);\n\n if (shouldSave) {\n canvas.restore();\n }\n if (shouldRestore) {\n this.paintCache = {\n parent: parentPaint,\n child: ctx.paint,\n };\n ctx.restore();\n }\n }\n\n abstract renderNode(ctx: DrawingContext): void;\n}\n"],"mappings":";;;;;;;AAOA;;AASA;;AAEA;;;;AAEA,MAAMA,UAAU,GAAG,CACjB,OADiB,EAEjB,aAFiB,EAGjB,WAHiB,EAIjB,WAJiB,EAKjB,YALiB,EAMjB,aANiB,EAOjB,OAPiB,EAQjB,WARiB,EASjB,
|
1
|
+
{"version":3,"names":["paintProps","JsiRenderNode","JsiNode","constructor","ctx","type","props","matrix","Skia","Matrix","onPropChange","setProps","setProp","key","value","hasChanged","includes","paintCache","identity","clipPath","undefined","clipRect","clipRRect","computeMatrix","computeClip","addChild","child","JsiDeclarationNode","setInvalidate","insertChildBefore","before","clip","isPathDef","processPath","isRRect","processTransformProps","render","invertClip","layer","transform","canvas","parentPaint","paint","cache","parent","shouldRestore","saveAndConcat","hasTransform","hasClip","shouldSave","op","ClipOp","Difference","Intersect","saveLayer","save","concat","renderNode","restore"],"sources":["RenderNode.ts"],"sourcesContent":["import type {\n SkMatrix,\n SkRect,\n SkRRect,\n SkPath,\n SkPaint,\n} from \"../../skia/types\";\nimport { ClipOp, isRRect } from \"../../skia/types\";\nimport type {\n RenderNode,\n GroupProps,\n NodeType,\n Node,\n DrawingContext,\n} from \"../types\";\n\nimport { isPathDef, processPath, processTransformProps } from \"./datatypes\";\nimport type { NodeContext } from \"./Node\";\nimport { JsiNode, JsiDeclarationNode } from \"./Node\";\n\nconst paintProps = [\n \"color\",\n \"strokeWidth\",\n \"blendMode\",\n \"strokeCap\",\n \"strokeJoin\",\n \"strokeMiter\",\n \"style\",\n \"antiAlias\",\n \"dither\",\n \"opacity\",\n];\n\ninterface PaintCache {\n parent: SkPaint;\n child: SkPaint;\n}\n\nexport abstract class JsiRenderNode<P extends GroupProps>\n extends JsiNode<P>\n implements RenderNode<P>\n{\n paintCache: PaintCache | null = null;\n\n matrix: SkMatrix;\n clipRect?: SkRect;\n clipRRect?: SkRRect;\n clipPath?: SkPath;\n\n constructor(ctx: NodeContext, type: NodeType, props: P) {\n super(ctx, type, props);\n this.matrix = this.Skia.Matrix();\n this.onPropChange();\n }\n\n setProps(props: P) {\n super.setProps(props);\n this.onPropChange();\n }\n\n setProp<K extends keyof P>(key: K, value: P[K]) {\n const hasChanged = super.setProp(key, value);\n if (hasChanged) {\n this.onPropChange();\n if (paintProps.includes(key as string)) {\n this.paintCache = null;\n }\n }\n return hasChanged;\n }\n\n protected onPropChange() {\n this.matrix.identity();\n this.clipPath = undefined;\n this.clipRect = undefined;\n this.clipRRect = undefined;\n this.computeMatrix();\n this.computeClip();\n }\n\n addChild(child: Node<unknown>) {\n if (child instanceof JsiDeclarationNode) {\n child.setInvalidate(() => {\n this.paintCache = null;\n });\n }\n super.addChild(child);\n }\n\n insertChildBefore(child: Node<unknown>, before: Node<unknown>) {\n if (child instanceof JsiDeclarationNode) {\n child.setInvalidate(() => {\n this.paintCache = null;\n });\n }\n super.insertChildBefore(child, before);\n }\n\n private computeClip() {\n const { clip } = this.props;\n if (clip) {\n if (isPathDef(clip)) {\n this.clipPath = processPath(this.Skia, clip);\n } else if (isRRect(clip)) {\n this.clipRRect = clip;\n } else {\n this.clipRect = clip;\n }\n }\n }\n\n private computeMatrix() {\n processTransformProps(this.matrix, this.props);\n }\n\n render(ctx: DrawingContext) {\n const { invertClip, layer, matrix, transform } = this.props;\n const { canvas } = ctx;\n const parentPaint = ctx.paint;\n\n const cache =\n this.paintCache !== null && this.paintCache.parent === ctx.paint\n ? this.paintCache.child\n : undefined;\n const shouldRestore = ctx.saveAndConcat(this, cache);\n\n const hasTransform = matrix !== undefined || transform !== undefined;\n const hasClip =\n this.clipRect !== undefined ||\n this.clipPath !== undefined ||\n this.clipRRect !== undefined;\n const shouldSave = hasTransform || hasClip || !!layer;\n const op = invertClip ? ClipOp.Difference : ClipOp.Intersect;\n if (shouldSave) {\n if (layer) {\n if (typeof layer === \"boolean\") {\n canvas.saveLayer();\n } else {\n canvas.saveLayer(layer);\n }\n } else {\n canvas.save();\n }\n }\n\n if (this.matrix) {\n canvas.concat(this.matrix);\n }\n if (this.clipRect) {\n canvas.clipRect(this.clipRect, op, true);\n } else if (this.clipRRect) {\n canvas.clipRRect(this.clipRRect, op, true);\n } else if (this.clipPath) {\n canvas.clipPath(this.clipPath, op, true);\n }\n\n this.renderNode(ctx);\n\n if (shouldSave) {\n canvas.restore();\n }\n if (shouldRestore) {\n this.paintCache = {\n parent: parentPaint,\n child: ctx.paint,\n };\n ctx.restore();\n }\n }\n\n abstract renderNode(ctx: DrawingContext): void;\n}\n"],"mappings":"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"}
|
@@ -1,11 +1,11 @@
|
|
1
|
-
import type { SkTextBlob, SkPoint } from "../../../skia/types";
|
1
|
+
import type { SkTextBlob, SkPoint, SkFont } from "../../../skia/types";
|
2
2
|
import type { DrawingContext, TextBlobProps, TextPathProps, TextProps } from "../../types";
|
3
3
|
import type { GlyphsProps } from "../../types/Drawings";
|
4
4
|
import { JsiDrawingNode } from "../DrawingNode";
|
5
5
|
import type { NodeContext } from "../Node";
|
6
|
-
export declare class TextNode extends JsiDrawingNode<TextProps, null> {
|
6
|
+
export declare class TextNode extends JsiDrawingNode<TextProps, SkFont | null> {
|
7
7
|
constructor(ctx: NodeContext, props: TextProps);
|
8
|
-
protected deriveProps(): null;
|
8
|
+
protected deriveProps(): SkFont | null;
|
9
9
|
draw({ canvas, paint }: DrawingContext): void;
|
10
10
|
}
|
11
11
|
export declare class TextPathNode extends JsiDrawingNode<TextPathProps, SkTextBlob | null> {
|
@@ -17,7 +17,25 @@ class TextNode extends _DrawingNode.JsiDrawingNode {
|
|
17
17
|
}
|
18
18
|
|
19
19
|
deriveProps() {
|
20
|
-
|
20
|
+
const {
|
21
|
+
font
|
22
|
+
} = this.props;
|
23
|
+
|
24
|
+
if (font === null) {
|
25
|
+
return null;
|
26
|
+
} else if (font === undefined) {
|
27
|
+
console.warn("<Text />: the font property is mandatory on React Native Web");
|
28
|
+
return null; // return this.Skia.Font(
|
29
|
+
// this.Skia.FontMgr.System().matchFamilyStyle("System", {
|
30
|
+
// width: 5,
|
31
|
+
// weight: 400,
|
32
|
+
// slant: 0,
|
33
|
+
// }),
|
34
|
+
// 14
|
35
|
+
// );
|
36
|
+
}
|
37
|
+
|
38
|
+
return font;
|
21
39
|
}
|
22
40
|
|
23
41
|
draw(_ref) {
|
@@ -28,11 +46,15 @@ class TextNode extends _DrawingNode.JsiDrawingNode {
|
|
28
46
|
const {
|
29
47
|
text,
|
30
48
|
x,
|
31
|
-
y
|
32
|
-
font
|
49
|
+
y
|
33
50
|
} = this.props;
|
51
|
+
const font = this.derived;
|
34
52
|
|
35
|
-
if (font) {
|
53
|
+
if (font === undefined) {
|
54
|
+
throw new Error("TextNode: font hasn't been derived");
|
55
|
+
}
|
56
|
+
|
57
|
+
if (font != null) {
|
36
58
|
canvas.drawText(text, x, y, paint, font);
|
37
59
|
}
|
38
60
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["TextNode","JsiDrawingNode","constructor","ctx","props","NodeType","Text","deriveProps","draw","canvas","paint","text","x","y","
|
1
|
+
{"version":3,"names":["TextNode","JsiDrawingNode","constructor","ctx","props","NodeType","Text","deriveProps","font","undefined","console","warn","draw","canvas","paint","text","x","y","derived","Error","drawText","TextPathNode","TextPath","path","processPath","Skia","initialOffset","ids","getGlyphIDs","widths","getGlyphWidths","rsx","meas","ContourMeasureIter","cont","next","dist","i","length","width","substring","p","t","getPosTan","adjustedX","adjustedY","push","RSXform","TextBlob","MakeFromRSXform","drawTextBlob","TextBlobNode","blob","GlyphsNode","Glyphs","glyphs","reduce","acc","glyph","id","pos","positions","drawGlyphs"],"sources":["Text.ts"],"sourcesContent":["import type {\n SkRSXform,\n SkTextBlob,\n SkPoint,\n SkFont,\n} from \"../../../skia/types\";\nimport type {\n DrawingContext,\n TextBlobProps,\n TextPathProps,\n TextProps,\n} from \"../../types\";\nimport { NodeType } from \"../../types\";\nimport { processPath } from \"../datatypes\";\nimport type { GlyphsProps } from \"../../types/Drawings\";\nimport { JsiDrawingNode } from \"../DrawingNode\";\nimport type { NodeContext } from \"../Node\";\n\nexport class TextNode extends JsiDrawingNode<TextProps, SkFont | null> {\n constructor(ctx: NodeContext, props: TextProps) {\n super(ctx, NodeType.Text, props);\n }\n\n protected deriveProps() {\n const { font } = this.props;\n if (font === null) {\n return null;\n } else if (font === undefined) {\n console.warn(\n \"<Text />: the font property is mandatory on React Native Web\"\n );\n return null;\n // return this.Skia.Font(\n // this.Skia.FontMgr.System().matchFamilyStyle(\"System\", {\n // width: 5,\n // weight: 400,\n // slant: 0,\n // }),\n // 14\n // );\n }\n return font;\n }\n\n draw({ canvas, paint }: DrawingContext) {\n const { text, x, y } = this.props;\n const font = this.derived;\n if (font === undefined) {\n throw new Error(\"TextNode: font hasn't been derived\");\n }\n if (font != null) {\n canvas.drawText(text, x, y, paint, font);\n }\n }\n}\n\nexport class TextPathNode extends JsiDrawingNode<\n TextPathProps,\n SkTextBlob | null\n> {\n constructor(ctx: NodeContext, props: TextPathProps) {\n super(ctx, NodeType.TextPath, props);\n }\n\n deriveProps() {\n const path = processPath(this.Skia, this.props.path);\n const { font, initialOffset } = this.props;\n if (!font) {\n return null;\n }\n let { text } = this.props;\n const ids = font.getGlyphIDs(text);\n const widths = font.getGlyphWidths(ids);\n const rsx: SkRSXform[] = [];\n const meas = this.Skia.ContourMeasureIter(path, false, 1);\n let cont = meas.next();\n let dist = initialOffset;\n for (let i = 0; i < text.length && cont; i++) {\n const width = widths[i];\n dist += width / 2;\n if (dist > cont.length()) {\n // jump to next contour\n cont = meas.next();\n if (!cont) {\n // We have come to the end of the path - terminate the string\n // right here.\n text = text.substring(0, i);\n break;\n }\n dist = width / 2;\n }\n // Gives us the (x, y) coordinates as well as the cos/sin of the tangent\n // line at that position.\n const [p, t] = cont.getPosTan(dist);\n const adjustedX = p.x - (width / 2) * t.x;\n const adjustedY = p.y - (width / 2) * t.y;\n rsx.push(this.Skia.RSXform(t.x, t.y, adjustedX, adjustedY));\n dist += width / 2;\n }\n return this.Skia.TextBlob.MakeFromRSXform(text, rsx, font);\n }\n\n draw({ canvas, paint }: DrawingContext) {\n if (!this.derived) {\n throw new Error(\"TextPathNode: blob is null\");\n }\n canvas.drawTextBlob(this.derived, 0, 0, paint);\n }\n}\n\nexport class TextBlobNode extends JsiDrawingNode<TextBlobProps, null> {\n constructor(ctx: NodeContext, props: TextBlobProps) {\n super(ctx, NodeType.TextBlob, props);\n }\n\n protected deriveProps() {\n return null;\n }\n\n draw({ canvas, paint }: DrawingContext) {\n const { blob, x, y } = this.props;\n canvas.drawTextBlob(blob, x, y, paint);\n }\n}\n\ninterface ProcessedGlyphs {\n glyphs: number[];\n positions: SkPoint[];\n}\n\nexport class GlyphsNode extends JsiDrawingNode<GlyphsProps, ProcessedGlyphs> {\n constructor(ctx: NodeContext, props: GlyphsProps) {\n super(ctx, NodeType.Glyphs, props);\n }\n\n deriveProps() {\n return this.props.glyphs.reduce<ProcessedGlyphs>(\n (acc, glyph) => {\n const { id, pos } = glyph;\n acc.glyphs.push(id);\n acc.positions.push(pos);\n return acc;\n },\n { glyphs: [], positions: [] }\n );\n }\n\n draw({ canvas, paint }: DrawingContext) {\n if (!this.derived) {\n throw new Error(\"GlyphsNode: processedGlyphs is null\");\n }\n const { glyphs, positions } = this.derived;\n const { x, y, font } = this.props;\n if (font) {\n canvas.drawGlyphs(glyphs, positions, x, y, font, paint);\n }\n }\n}\n"],"mappings":"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"}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":[],"sources":["Common.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nimport type {\n BlendMode,\n Color,\n PaintStyle,\n SkMatrix,\n SkPaint,\n SkPath,\n SkRect,\n SkRRect,\n StrokeCap,\n StrokeJoin,\n Transforms2d,\n Vector,\n} from \"../../skia/types\";\n\nexport type SkEnum<T> = Uncapitalize<keyof T extends string ? keyof T : never>;\n\nexport type PathDef = string | SkPath;\n\nexport type ClipDef = SkRRect | SkRect | PathDef;\n\nexport type Fit =\n | \"cover\"\n | \"contain\"\n | \"fill\"\n | \"fitHeight\"\n | \"fitWidth\"\n | \"none\"\n | \"scaleDown\";\n\nexport type Radius = number | Vector;\n\nexport interface ChildrenProps {\n children?: ReactNode | ReactNode[];\n}\n\nexport interface RectCtor {\n x?: number;\n y?: number;\n width: number;\n height: number;\n}\n\nexport interface RRectCtor extends RectCtor {\n r?: Radius;\n}\n\nexport type RectDef = RectCtor | { rect: SkRect };\nexport type RRectDef = RRectCtor | { rect: SkRRect };\n\nexport interface PointCircleDef {\n c?: Vector;\n r: number;\n}\n\nexport interface ScalarCircleDef {\n cx: number;\n cy: number;\n r: number;\n}\n\nexport type CircleDef = PointCircleDef | ScalarCircleDef;\n\nexport interface TransformProps {\n transform?: Transforms2d;\n origin?: Vector;\n matrix?: SkMatrix;\n}\n\nexport interface PaintProps extends ChildrenProps {\n color?: Color;\n strokeWidth?: number;\n blendMode?: SkEnum<typeof BlendMode>;\n style?: SkEnum<typeof PaintStyle>;\n strokeJoin?: SkEnum<typeof StrokeJoin>;\n strokeCap?: SkEnum<typeof StrokeCap>;\n strokeMiter?: number;\n opacity?: number;\n antiAlias?: boolean;\n}\n\nexport interface GroupProps extends PaintProps, TransformProps {\n clip?: ClipDef;\n invertClip?: boolean;\n layer?: SkPaint | boolean;\n}\n"],"mappings":""}
|
1
|
+
{"version":3,"names":[],"sources":["Common.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nimport type {\n BlendMode,\n Color,\n PaintStyle,\n SkMatrix,\n SkPaint,\n SkPath,\n SkRect,\n SkRRect,\n StrokeCap,\n StrokeJoin,\n Transforms2d,\n Vector,\n} from \"../../skia/types\";\n\nexport type SkEnum<T> = Uncapitalize<keyof T extends string ? keyof T : never>;\n\nexport type PathDef = string | SkPath;\n\nexport type ClipDef = SkRRect | SkRect | PathDef;\n\nexport type Fit =\n | \"cover\"\n | \"contain\"\n | \"fill\"\n | \"fitHeight\"\n | \"fitWidth\"\n | \"none\"\n | \"scaleDown\";\n\nexport type Radius = number | Vector;\n\nexport interface ChildrenProps {\n children?: ReactNode | ReactNode[];\n}\n\nexport interface RectCtor {\n x?: number;\n y?: number;\n width: number;\n height: number;\n}\n\nexport interface RRectCtor extends RectCtor {\n r?: Radius;\n}\n\nexport type RectDef = RectCtor | { rect: SkRect };\nexport type RRectDef = RRectCtor | { rect: SkRRect };\n\nexport interface PointCircleDef {\n c?: Vector;\n r: number;\n}\n\nexport interface ScalarCircleDef {\n cx: number;\n cy: number;\n r: number;\n}\n\nexport type CircleDef = PointCircleDef | ScalarCircleDef;\n\nexport interface TransformProps {\n transform?: Transforms2d;\n origin?: Vector;\n matrix?: SkMatrix;\n}\n\nexport interface PaintProps extends ChildrenProps {\n color?: Color;\n strokeWidth?: number;\n blendMode?: SkEnum<typeof BlendMode>;\n style?: SkEnum<typeof PaintStyle>;\n strokeJoin?: SkEnum<typeof StrokeJoin>;\n strokeCap?: SkEnum<typeof StrokeCap>;\n strokeMiter?: number;\n opacity?: number;\n antiAlias?: boolean;\n dither?: boolean;\n}\n\nexport interface GroupProps extends PaintProps, TransformProps {\n clip?: ClipDef;\n invertClip?: boolean;\n layer?: SkPaint | boolean;\n}\n"],"mappings":""}
|
@@ -85,6 +85,8 @@ class ConcatablePaint {
|
|
85
85
|
|
86
86
|
_defineProperty(this, "_antiAlias", void 0);
|
87
87
|
|
88
|
+
_defineProperty(this, "_dither", void 0);
|
89
|
+
|
88
90
|
_defineProperty(this, "_imageFilter", void 0);
|
89
91
|
|
90
92
|
_defineProperty(this, "_shader", void 0);
|
@@ -106,6 +108,7 @@ class ConcatablePaint {
|
|
106
108
|
this.setStrokeMiter(props.strokeMiter);
|
107
109
|
this.setOpacity(props.opacity);
|
108
110
|
this.setAntiAlias(props.antiAlias);
|
111
|
+
this.setDither(props.dither);
|
109
112
|
declCtx.save();
|
110
113
|
children.forEach(child => {
|
111
114
|
if (child instanceof _Node.JsiDeclarationNode) {
|
@@ -227,6 +230,14 @@ class ConcatablePaint {
|
|
227
230
|
return this._antiAlias;
|
228
231
|
}
|
229
232
|
|
233
|
+
setDither(dither) {
|
234
|
+
this.setValue("_dither", dither);
|
235
|
+
}
|
236
|
+
|
237
|
+
getDither() {
|
238
|
+
return this._dither;
|
239
|
+
}
|
240
|
+
|
230
241
|
setImageFilter(imageFilter) {
|
231
242
|
this.setValue("_imageFilter", imageFilter);
|
232
243
|
}
|
@@ -311,6 +322,10 @@ class ConcatablePaint {
|
|
311
322
|
paint.setAntiAlias(this._antiAlias);
|
312
323
|
}
|
313
324
|
|
325
|
+
if (this._dither !== undefined) {
|
326
|
+
paint.setDither(this._dither);
|
327
|
+
}
|
328
|
+
|
314
329
|
if (this._imageFilter !== undefined) {
|
315
330
|
paint.setImageFilter(this._imageFilter);
|
316
331
|
}
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"names":["JsiDrawingContext","constructor","Skia","canvas","paint","Paint","paints","declarationCtx","DeclarationContext","length","save","childPaint","copy","push","restore","pop","saveAndConcat","node","cache","ConcatablePaint","isPristine","concatTo","declCtx","props","getProps","children","setColor","color","undefined","Color","setStrokeWidth","strokeWidth","setBlendMode","blendMode","setStyle","style","setStrokeJoin","strokeJoin","setStrokeCap","strokeCap","setStrokeMiter","strokeMiter","setOpacity","opacity","setAntiAlias","antiAlias","forEach","child","JsiDeclarationNode","decorate","colorFilter","colorFilters","popAllAsOne","imageFilter","imageFilters","shader","shaders","maskFilter","maskFilters","pathEffect","pathEffects","setImageFilter","setShader","setPathEffect","setColorFilter","setMaskFilter","enum","value","key","enumKey","setValue","pristine","getColor","_color","getStrokeWidth","_strokeWidth","BlendMode","getBlendMode","_blendMode","PaintStyle","getStyle","_style","StrokeJoin","getStrokeJoin","_strokeJoin","StrokeCap","getStrokeCap","_strokeCap","getStrokeMiter","_strokeMiter","getOpacity","_opacity","getAntiAlias","_antiAlias","getImageFilter","_imageFilter","getShader","_shader","getPathEffect","_pathEffect","getColorFilter","_colorFilter","getMaskFilter","_maskFilter","setAlphaf","getAlphaf","currentOpacity"],"sources":["DrawingContext.ts"],"sourcesContent":["import type {\n SkCanvas,\n SkColor,\n SkColorFilter,\n SkImageFilter,\n SkMaskFilter,\n SkPaint,\n SkPathEffect,\n SkShader,\n Skia,\n} from \"../../skia/types\";\nimport { BlendMode, PaintStyle, StrokeCap, StrokeJoin } from \"../../skia/types\";\nimport { enumKey } from \"../nodes/datatypes/Enum\";\nimport { JsiDeclarationNode } from \"../nodes/Node\";\n\nimport type { PaintProps, SkEnum } from \"./Common\";\nimport { DeclarationContext } from \"./DeclarationContext\";\nimport type { Node } from \"./Node\";\n\nexport interface DrawingContext {\n canvas: SkCanvas;\n paint: SkPaint;\n saveAndConcat(node: Node<PaintProps>, cache?: SkPaint): boolean;\n restore(): void;\n declarationCtx: DeclarationContext;\n}\n\nexport class JsiDrawingContext implements DrawingContext {\n paints: SkPaint[];\n\n declarationCtx: DeclarationContext;\n\n constructor(private readonly Skia: Skia, public readonly canvas: SkCanvas) {\n const paint = this.Skia.Paint();\n this.paints = [paint];\n this.declarationCtx = new DeclarationContext(Skia);\n }\n\n get paint() {\n return this.paints[this.paints.length - 1];\n }\n\n private save() {\n const childPaint = this.paint.copy();\n this.paints.push(childPaint);\n }\n\n restore(): void {\n this.paints.pop();\n }\n\n saveAndConcat(node: Node<PaintProps>, cache?: SkPaint) {\n if (cache) {\n this.paints.push(cache);\n return true;\n }\n const paint = new ConcatablePaint(this.Skia, this.declarationCtx, node);\n if (!paint.isPristine()) {\n this.save();\n paint.concatTo(this.paint);\n return true;\n }\n return false;\n }\n}\n\nclass ConcatablePaint {\n private pristine = true;\n\n _color?: SkColor;\n _strokeWidth?: number;\n _blendMode?: BlendMode;\n _style?: PaintStyle;\n _strokeJoin?: StrokeJoin;\n _strokeCap?: StrokeCap;\n _strokeMiter?: number;\n _opacity = 1;\n _antiAlias?: boolean;\n\n _imageFilter?: SkImageFilter;\n _shader?: SkShader;\n _pathEffect?: SkPathEffect;\n _colorFilter?: SkColorFilter;\n _maskFilter?: SkMaskFilter;\n\n constructor(Skia: Skia, declCtx: DeclarationContext, node: Node<PaintProps>) {\n const props = node.getProps();\n const children = node.children();\n this.setColor(\n props.color !== undefined ? Skia.Color(props.color) : props.color\n );\n this.setStrokeWidth(props.strokeWidth);\n this.setBlendMode(props.blendMode);\n this.setStyle(props.style);\n this.setStrokeJoin(props.strokeJoin);\n this.setStrokeCap(props.strokeCap);\n this.setStrokeMiter(props.strokeMiter);\n this.setOpacity(props.opacity);\n this.setAntiAlias(props.antiAlias);\n declCtx.save();\n children.forEach((child) => {\n if (child instanceof JsiDeclarationNode) {\n child.decorate(declCtx);\n }\n });\n const colorFilter = declCtx.colorFilters.popAllAsOne();\n const imageFilter = declCtx.imageFilters.popAllAsOne();\n const shader = declCtx.shaders.pop();\n const maskFilter = declCtx.maskFilters.pop();\n const pathEffect = declCtx.pathEffects.popAllAsOne();\n declCtx.restore();\n if (imageFilter) {\n this.setImageFilter(imageFilter);\n }\n if (shader) {\n this.setShader(shader);\n }\n if (pathEffect) {\n this.setPathEffect(pathEffect);\n }\n if (colorFilter) {\n this.setColorFilter(colorFilter);\n }\n if (maskFilter) {\n this.setMaskFilter(maskFilter);\n }\n }\n\n private enum<T>(value: T, key?: Uncapitalize<string>) {\n if (key !== undefined) {\n return value[enumKey(key) as keyof T];\n }\n return undefined;\n }\n\n private setValue<T extends keyof typeof this>(\n key: T,\n value?: typeof this[T]\n ) {\n if (value !== undefined) {\n this[key] = value;\n this.pristine = false;\n }\n }\n\n setColor(color?: SkColor) {\n this.setValue(\"_color\", color);\n }\n\n getColor() {\n return this._color;\n }\n\n setStrokeWidth(strokeWidth?: number) {\n this.setValue(\"_strokeWidth\", strokeWidth);\n }\n\n getStrokeWidth() {\n return this._strokeWidth;\n }\n\n setBlendMode(blendMode?: SkEnum<typeof BlendMode>) {\n this.setValue(\"_blendMode\", this.enum(BlendMode, blendMode));\n }\n\n getBlendMode() {\n return this._blendMode;\n }\n\n setStyle(style?: SkEnum<typeof PaintStyle>) {\n this.setValue(\"_style\", this.enum(PaintStyle, style));\n }\n\n getStyle() {\n return this._style;\n }\n\n setStrokeJoin(strokeJoin?: SkEnum<typeof StrokeJoin>) {\n this.setValue(\"_strokeJoin\", this.enum(StrokeJoin, strokeJoin));\n }\n\n getStrokeJoin() {\n return this._strokeJoin;\n }\n\n setStrokeCap(strokeCap?: SkEnum<typeof StrokeCap>) {\n this.setValue(\"_strokeCap\", this.enum(StrokeCap, strokeCap));\n }\n\n getStrokeCap() {\n return this._strokeCap;\n }\n\n setStrokeMiter(strokeMiter?: number) {\n this.setValue(\"_strokeMiter\", strokeMiter);\n }\n\n getStrokeMiter() {\n return this._strokeMiter;\n }\n\n setOpacity(opacity?: number) {\n this.setValue(\"_opacity\", opacity);\n }\n\n getOpacity() {\n return this._opacity;\n }\n\n setAntiAlias(antiAlias?: boolean) {\n this.setValue(\"_antiAlias\", antiAlias);\n }\n\n getAntiAlias() {\n return this._antiAlias;\n }\n\n setImageFilter(imageFilter?: SkImageFilter) {\n this.setValue(\"_imageFilter\", imageFilter);\n }\n\n getImageFilter() {\n return this._imageFilter;\n }\n\n setShader(shader?: SkShader) {\n this.setValue(\"_shader\", shader);\n }\n\n getShader() {\n return this._shader;\n }\n\n setPathEffect(pathEffect?: SkPathEffect) {\n this.setValue(\"_pathEffect\", pathEffect);\n }\n\n getPathEffect() {\n return this._pathEffect;\n }\n\n setColorFilter(colorFilter?: SkColorFilter) {\n this.setValue(\"_colorFilter\", colorFilter);\n }\n\n getColorFilter() {\n return this._colorFilter;\n }\n\n setMaskFilter(maskFilter?: SkMaskFilter) {\n this.setValue(\"_maskFilter\", maskFilter);\n }\n\n getMaskFilter() {\n return this._maskFilter;\n }\n\n isPristine() {\n return this.pristine;\n }\n\n concatTo(paint: SkPaint) {\n if (this._opacity !== undefined) {\n paint.setAlphaf(paint.getAlphaf() * this._opacity);\n }\n if (this._color !== undefined) {\n const currentOpacity = paint.getAlphaf();\n paint.setShader(null);\n paint.setColor(this._color);\n paint.setAlphaf(currentOpacity * paint.getAlphaf());\n }\n if (this._strokeWidth !== undefined) {\n paint.setStrokeWidth(this._strokeWidth);\n }\n if (this._blendMode !== undefined) {\n paint.setBlendMode(this._blendMode);\n }\n if (this._style !== undefined) {\n paint.setStyle(this._style);\n }\n if (this._strokeJoin !== undefined) {\n paint.setStrokeJoin(this._strokeJoin);\n }\n if (this._strokeCap !== undefined) {\n paint.setStrokeCap(this._strokeCap);\n }\n if (this._strokeMiter !== undefined) {\n paint.setStrokeMiter(this._strokeMiter);\n }\n if (this._antiAlias !== undefined) {\n paint.setAntiAlias(this._antiAlias);\n }\n if (this._imageFilter !== undefined) {\n paint.setImageFilter(this._imageFilter);\n }\n if (this._shader !== undefined) {\n paint.setShader(this._shader);\n }\n if (this._pathEffect !== undefined) {\n paint.setPathEffect(this._pathEffect);\n }\n if (this._colorFilter !== undefined) {\n paint.setColorFilter(this._colorFilter);\n }\n if (this._maskFilter !== undefined) {\n paint.setMaskFilter(this._maskFilter);\n }\n }\n}\n"],"mappings":"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"}
|
1
|
+
{"version":3,"names":["JsiDrawingContext","constructor","Skia","canvas","paint","Paint","paints","declarationCtx","DeclarationContext","length","save","childPaint","copy","push","restore","pop","saveAndConcat","node","cache","ConcatablePaint","isPristine","concatTo","declCtx","props","getProps","children","setColor","color","undefined","Color","setStrokeWidth","strokeWidth","setBlendMode","blendMode","setStyle","style","setStrokeJoin","strokeJoin","setStrokeCap","strokeCap","setStrokeMiter","strokeMiter","setOpacity","opacity","setAntiAlias","antiAlias","setDither","dither","forEach","child","JsiDeclarationNode","decorate","colorFilter","colorFilters","popAllAsOne","imageFilter","imageFilters","shader","shaders","maskFilter","maskFilters","pathEffect","pathEffects","setImageFilter","setShader","setPathEffect","setColorFilter","setMaskFilter","enum","value","key","enumKey","setValue","pristine","getColor","_color","getStrokeWidth","_strokeWidth","BlendMode","getBlendMode","_blendMode","PaintStyle","getStyle","_style","StrokeJoin","getStrokeJoin","_strokeJoin","StrokeCap","getStrokeCap","_strokeCap","getStrokeMiter","_strokeMiter","getOpacity","_opacity","getAntiAlias","_antiAlias","getDither","_dither","getImageFilter","_imageFilter","getShader","_shader","getPathEffect","_pathEffect","getColorFilter","_colorFilter","getMaskFilter","_maskFilter","setAlphaf","getAlphaf","currentOpacity"],"sources":["DrawingContext.ts"],"sourcesContent":["import type {\n SkCanvas,\n SkColor,\n SkColorFilter,\n SkImageFilter,\n SkMaskFilter,\n SkPaint,\n SkPathEffect,\n SkShader,\n Skia,\n} from \"../../skia/types\";\nimport { BlendMode, PaintStyle, StrokeCap, StrokeJoin } from \"../../skia/types\";\nimport { enumKey } from \"../nodes/datatypes/Enum\";\nimport { JsiDeclarationNode } from \"../nodes/Node\";\n\nimport type { PaintProps, SkEnum } from \"./Common\";\nimport { DeclarationContext } from \"./DeclarationContext\";\nimport type { Node } from \"./Node\";\n\nexport interface DrawingContext {\n canvas: SkCanvas;\n paint: SkPaint;\n saveAndConcat(node: Node<PaintProps>, cache?: SkPaint): boolean;\n restore(): void;\n declarationCtx: DeclarationContext;\n}\n\nexport class JsiDrawingContext implements DrawingContext {\n paints: SkPaint[];\n\n declarationCtx: DeclarationContext;\n\n constructor(private readonly Skia: Skia, public readonly canvas: SkCanvas) {\n const paint = this.Skia.Paint();\n this.paints = [paint];\n this.declarationCtx = new DeclarationContext(Skia);\n }\n\n get paint() {\n return this.paints[this.paints.length - 1];\n }\n\n private save() {\n const childPaint = this.paint.copy();\n this.paints.push(childPaint);\n }\n\n restore(): void {\n this.paints.pop();\n }\n\n saveAndConcat(node: Node<PaintProps>, cache?: SkPaint) {\n if (cache) {\n this.paints.push(cache);\n return true;\n }\n const paint = new ConcatablePaint(this.Skia, this.declarationCtx, node);\n if (!paint.isPristine()) {\n this.save();\n paint.concatTo(this.paint);\n return true;\n }\n return false;\n }\n}\n\nclass ConcatablePaint {\n private pristine = true;\n\n _color?: SkColor;\n _strokeWidth?: number;\n _blendMode?: BlendMode;\n _style?: PaintStyle;\n _strokeJoin?: StrokeJoin;\n _strokeCap?: StrokeCap;\n _strokeMiter?: number;\n _opacity = 1;\n _antiAlias?: boolean;\n _dither?: boolean;\n\n _imageFilter?: SkImageFilter;\n _shader?: SkShader;\n _pathEffect?: SkPathEffect;\n _colorFilter?: SkColorFilter;\n _maskFilter?: SkMaskFilter;\n\n constructor(Skia: Skia, declCtx: DeclarationContext, node: Node<PaintProps>) {\n const props = node.getProps();\n const children = node.children();\n this.setColor(\n props.color !== undefined ? Skia.Color(props.color) : props.color\n );\n this.setStrokeWidth(props.strokeWidth);\n this.setBlendMode(props.blendMode);\n this.setStyle(props.style);\n this.setStrokeJoin(props.strokeJoin);\n this.setStrokeCap(props.strokeCap);\n this.setStrokeMiter(props.strokeMiter);\n this.setOpacity(props.opacity);\n this.setAntiAlias(props.antiAlias);\n this.setDither(props.dither);\n declCtx.save();\n children.forEach((child) => {\n if (child instanceof JsiDeclarationNode) {\n child.decorate(declCtx);\n }\n });\n const colorFilter = declCtx.colorFilters.popAllAsOne();\n const imageFilter = declCtx.imageFilters.popAllAsOne();\n const shader = declCtx.shaders.pop();\n const maskFilter = declCtx.maskFilters.pop();\n const pathEffect = declCtx.pathEffects.popAllAsOne();\n declCtx.restore();\n if (imageFilter) {\n this.setImageFilter(imageFilter);\n }\n if (shader) {\n this.setShader(shader);\n }\n if (pathEffect) {\n this.setPathEffect(pathEffect);\n }\n if (colorFilter) {\n this.setColorFilter(colorFilter);\n }\n if (maskFilter) {\n this.setMaskFilter(maskFilter);\n }\n }\n\n private enum<T>(value: T, key?: Uncapitalize<string>) {\n if (key !== undefined) {\n return value[enumKey(key) as keyof T];\n }\n return undefined;\n }\n\n private setValue<T extends keyof typeof this>(\n key: T,\n value?: typeof this[T]\n ) {\n if (value !== undefined) {\n this[key] = value;\n this.pristine = false;\n }\n }\n\n setColor(color?: SkColor) {\n this.setValue(\"_color\", color);\n }\n\n getColor() {\n return this._color;\n }\n\n setStrokeWidth(strokeWidth?: number) {\n this.setValue(\"_strokeWidth\", strokeWidth);\n }\n\n getStrokeWidth() {\n return this._strokeWidth;\n }\n\n setBlendMode(blendMode?: SkEnum<typeof BlendMode>) {\n this.setValue(\"_blendMode\", this.enum(BlendMode, blendMode));\n }\n\n getBlendMode() {\n return this._blendMode;\n }\n\n setStyle(style?: SkEnum<typeof PaintStyle>) {\n this.setValue(\"_style\", this.enum(PaintStyle, style));\n }\n\n getStyle() {\n return this._style;\n }\n\n setStrokeJoin(strokeJoin?: SkEnum<typeof StrokeJoin>) {\n this.setValue(\"_strokeJoin\", this.enum(StrokeJoin, strokeJoin));\n }\n\n getStrokeJoin() {\n return this._strokeJoin;\n }\n\n setStrokeCap(strokeCap?: SkEnum<typeof StrokeCap>) {\n this.setValue(\"_strokeCap\", this.enum(StrokeCap, strokeCap));\n }\n\n getStrokeCap() {\n return this._strokeCap;\n }\n\n setStrokeMiter(strokeMiter?: number) {\n this.setValue(\"_strokeMiter\", strokeMiter);\n }\n\n getStrokeMiter() {\n return this._strokeMiter;\n }\n\n setOpacity(opacity?: number) {\n this.setValue(\"_opacity\", opacity);\n }\n\n getOpacity() {\n return this._opacity;\n }\n\n setAntiAlias(antiAlias?: boolean) {\n this.setValue(\"_antiAlias\", antiAlias);\n }\n\n getAntiAlias() {\n return this._antiAlias;\n }\n\n setDither(dither?: boolean) {\n this.setValue(\"_dither\", dither);\n }\n\n getDither() {\n return this._dither;\n }\n\n setImageFilter(imageFilter?: SkImageFilter) {\n this.setValue(\"_imageFilter\", imageFilter);\n }\n\n getImageFilter() {\n return this._imageFilter;\n }\n\n setShader(shader?: SkShader) {\n this.setValue(\"_shader\", shader);\n }\n\n getShader() {\n return this._shader;\n }\n\n setPathEffect(pathEffect?: SkPathEffect) {\n this.setValue(\"_pathEffect\", pathEffect);\n }\n\n getPathEffect() {\n return this._pathEffect;\n }\n\n setColorFilter(colorFilter?: SkColorFilter) {\n this.setValue(\"_colorFilter\", colorFilter);\n }\n\n getColorFilter() {\n return this._colorFilter;\n }\n\n setMaskFilter(maskFilter?: SkMaskFilter) {\n this.setValue(\"_maskFilter\", maskFilter);\n }\n\n getMaskFilter() {\n return this._maskFilter;\n }\n\n isPristine() {\n return this.pristine;\n }\n\n concatTo(paint: SkPaint) {\n if (this._opacity !== undefined) {\n paint.setAlphaf(paint.getAlphaf() * this._opacity);\n }\n if (this._color !== undefined) {\n const currentOpacity = paint.getAlphaf();\n paint.setShader(null);\n paint.setColor(this._color);\n paint.setAlphaf(currentOpacity * paint.getAlphaf());\n }\n if (this._strokeWidth !== undefined) {\n paint.setStrokeWidth(this._strokeWidth);\n }\n if (this._blendMode !== undefined) {\n paint.setBlendMode(this._blendMode);\n }\n if (this._style !== undefined) {\n paint.setStyle(this._style);\n }\n if (this._strokeJoin !== undefined) {\n paint.setStrokeJoin(this._strokeJoin);\n }\n if (this._strokeCap !== undefined) {\n paint.setStrokeCap(this._strokeCap);\n }\n if (this._strokeMiter !== undefined) {\n paint.setStrokeMiter(this._strokeMiter);\n }\n if (this._antiAlias !== undefined) {\n paint.setAntiAlias(this._antiAlias);\n }\n if (this._dither !== undefined) {\n paint.setDither(this._dither);\n }\n if (this._imageFilter !== undefined) {\n paint.setImageFilter(this._imageFilter);\n }\n if (this._shader !== undefined) {\n paint.setShader(this._shader);\n }\n if (this._pathEffect !== undefined) {\n paint.setPathEffect(this._pathEffect);\n }\n if (this._colorFilter !== undefined) {\n paint.setColorFilter(this._colorFilter);\n }\n if (this._maskFilter !== undefined) {\n paint.setMaskFilter(this._maskFilter);\n }\n }\n}\n"],"mappings":"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"}
|