@shopify/react-native-skia 0.1.208 → 0.1.209

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseView.java +19 -12
  2. package/android/src/main/java/com/shopify/reactnative/skia/SkiaBaseViewManager.java +1 -1
  3. package/android/src/main/java/com/shopify/reactnative/skia/SkiaDomView.java +1 -1
  4. package/android/src/main/java/com/shopify/reactnative/skia/SkiaDrawView.java +1 -1
  5. package/android/src/main/java/com/shopify/reactnative/skia/SkiaPictureView.java +1 -1
  6. package/android/src/main/java/com/shopify/reactnative/skia/ViewScreenshotService.java +2 -0
  7. package/cpp/api/JsiSkPaint.h +7 -0
  8. package/cpp/api/JsiSkPath.h +10 -7
  9. package/cpp/rnskia/dom/base/JsiDomRenderNode.h +1 -1
  10. package/cpp/rnskia/dom/nodes/JsiPaintNode.h +4 -0
  11. package/cpp/rnskia/dom/props/FontProp.h +3 -1
  12. package/cpp/rnskia/dom/props/PaintProps.h +3 -0
  13. package/lib/commonjs/dom/nodes/PaintContext.d.ts +1 -0
  14. package/lib/commonjs/dom/nodes/PaintContext.js.map +1 -1
  15. package/lib/commonjs/dom/nodes/PaintNode.js +6 -1
  16. package/lib/commonjs/dom/nodes/PaintNode.js.map +1 -1
  17. package/lib/commonjs/dom/nodes/RenderNode.js +1 -1
  18. package/lib/commonjs/dom/nodes/RenderNode.js.map +1 -1
  19. package/lib/commonjs/dom/nodes/drawings/Text.d.ts +3 -3
  20. package/lib/commonjs/dom/nodes/drawings/Text.js +26 -4
  21. package/lib/commonjs/dom/nodes/drawings/Text.js.map +1 -1
  22. package/lib/commonjs/dom/types/Common.d.ts +1 -0
  23. package/lib/commonjs/dom/types/Common.js.map +1 -1
  24. package/lib/commonjs/dom/types/DrawingContext.js +15 -0
  25. package/lib/commonjs/dom/types/DrawingContext.js.map +1 -1
  26. package/lib/commonjs/dom/types/Drawings.d.ts +1 -1
  27. package/lib/commonjs/dom/types/Drawings.js.map +1 -1
  28. package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +12 -11
  29. package/lib/commonjs/skia/types/Image/ImageFactory.js +12 -11
  30. package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
  31. package/lib/commonjs/skia/types/Paint/Paint.d.ts +5 -0
  32. package/lib/commonjs/skia/types/Paint/Paint.js.map +1 -1
  33. package/lib/commonjs/skia/web/JsiSkPaint.d.ts +1 -0
  34. package/lib/commonjs/skia/web/JsiSkPaint.js +4 -0
  35. package/lib/commonjs/skia/web/JsiSkPaint.js.map +1 -1
  36. package/lib/commonjs/skia/web/JsiSkPath.d.ts +1 -1
  37. package/lib/commonjs/skia/web/JsiSkPath.js +10 -1
  38. package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
  39. package/lib/module/dom/nodes/PaintContext.d.ts +1 -0
  40. package/lib/module/dom/nodes/PaintContext.js.map +1 -1
  41. package/lib/module/dom/nodes/PaintNode.js +6 -1
  42. package/lib/module/dom/nodes/PaintNode.js.map +1 -1
  43. package/lib/module/dom/nodes/RenderNode.js +1 -1
  44. package/lib/module/dom/nodes/RenderNode.js.map +1 -1
  45. package/lib/module/dom/nodes/drawings/Text.d.ts +3 -3
  46. package/lib/module/dom/nodes/drawings/Text.js +26 -4
  47. package/lib/module/dom/nodes/drawings/Text.js.map +1 -1
  48. package/lib/module/dom/types/Common.d.ts +1 -0
  49. package/lib/module/dom/types/Common.js.map +1 -1
  50. package/lib/module/dom/types/DrawingContext.js +15 -0
  51. package/lib/module/dom/types/DrawingContext.js.map +1 -1
  52. package/lib/module/dom/types/Drawings.d.ts +1 -1
  53. package/lib/module/dom/types/Drawings.js.map +1 -1
  54. package/lib/module/skia/types/Image/ImageFactory.d.ts +12 -11
  55. package/lib/module/skia/types/Image/ImageFactory.js +12 -11
  56. package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
  57. package/lib/module/skia/types/Paint/Paint.d.ts +5 -0
  58. package/lib/module/skia/types/Paint/Paint.js.map +1 -1
  59. package/lib/module/skia/web/JsiSkPaint.d.ts +1 -0
  60. package/lib/module/skia/web/JsiSkPaint.js +4 -0
  61. package/lib/module/skia/web/JsiSkPaint.js.map +1 -1
  62. package/lib/module/skia/web/JsiSkPath.d.ts +1 -1
  63. package/lib/module/skia/web/JsiSkPath.js +11 -1
  64. package/lib/module/skia/web/JsiSkPath.js.map +1 -1
  65. package/lib/typescript/src/dom/nodes/PaintContext.d.ts +1 -0
  66. package/lib/typescript/src/dom/nodes/drawings/Text.d.ts +3 -3
  67. package/lib/typescript/src/dom/types/Common.d.ts +1 -0
  68. package/lib/typescript/src/dom/types/Drawings.d.ts +1 -1
  69. package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +12 -11
  70. package/lib/typescript/src/skia/types/Paint/Paint.d.ts +5 -0
  71. package/lib/typescript/src/skia/web/JsiSkPaint.d.ts +1 -0
  72. package/lib/typescript/src/skia/web/JsiSkPath.d.ts +1 -1
  73. package/package.json +2 -2
  74. package/src/dom/nodes/PaintContext.ts +1 -0
  75. package/src/dom/nodes/PaintNode.ts +4 -0
  76. package/src/dom/nodes/RenderNode.ts +1 -0
  77. package/src/dom/nodes/drawings/Text.ts +31 -5
  78. package/src/dom/types/Common.ts +1 -0
  79. package/src/dom/types/DrawingContext.ts +13 -0
  80. package/src/dom/types/Drawings.ts +1 -1
  81. package/src/skia/types/Image/ImageFactory.ts +1 -0
  82. package/src/skia/types/Paint/Paint.ts +6 -0
  83. package/src/skia/web/JsiSkPaint.ts +4 -0
  84. 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
- public SkiaBaseView(Context context) {
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
- Log.i(tag, "destroySurface");
31
- surfaceDestroyed();
32
- mSurface.release();
33
- mSurface = null;
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
- // This API Level is >= 26, we created our own SurfaceTexture to have a faster time to first frame
38
- if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
39
- Log.i(tag, "Create SurfaceTexture");
40
- SurfaceTexture surface = new SurfaceTexture(false);
41
- mTexture.setSurfaceTexture(surface);
42
- this.onSurfaceTextureAvailable(surface, this.getMeasuredWidth(), this.getMeasuredHeight());
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
- surfaceDestroyed();
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++) {
@@ -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),
@@ -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
- // SkDebugf("Invalid args to trim(): startT and stopT must be in
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
 
@@ -31,7 +31,9 @@ public:
31
31
  "Expected SkFont object or null/undefined for the Font property.");
32
32
  }
33
33
  } else {
34
- setDerivedValue(nullptr);
34
+ auto font = std::make_shared<SkFont>(SkFont());
35
+ font->setSize(14);
36
+ setDerivedValue(font);
35
37
  }
36
38
  }
37
39
 
@@ -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
 
@@ -10,6 +10,7 @@ export interface PaintContext {
10
10
  strokeMiter?: number;
11
11
  opacity?: number;
12
12
  antiAlias?: boolean;
13
+ dither?: boolean;
13
14
  shader?: SkShader;
14
15
  colorFilter?: SkColorFilter;
15
16
  imageFilter?: SkImageFilter;
@@ -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;IATI,IAUF,KAAKb,KAVT;IAWA,MAAMc,KAAK,GAAG,KAAKC,IAAL,CAAUb,KAAV,EAAd;;IACA,IAAIG,KAAK,KAAKW,SAAd,EAAyB;MACvBF,KAAK,CAACG,QAAN,CAAe,KAAKF,IAAL,CAAUG,KAAV,CAAgBb,KAAhB,CAAf;IACD;;IACD,IAAIC,WAAW,KAAKU,SAApB,EAA+B;MAC7BF,KAAK,CAACK,cAAN,CAAqBb,WAArB;IACD;;IACD,IAAIC,SAAS,KAAKS,SAAlB,EAA6B;MAC3BF,KAAK,CAACM,YAAN,CAAmBC,gBAAA,CAAU,IAAAC,kBAAA,EAAQf,SAAR,CAAV,CAAnB;IACD;;IACD,IAAIC,KAAK,KAAKQ,SAAd,EAAyB;MACvBF,KAAK,CAACS,QAAN,CAAeC,iBAAA,CAAW,IAAAF,kBAAA,EAAQd,KAAR,CAAX,CAAf;IACD;;IACD,IAAIC,UAAU,KAAKO,SAAnB,EAA8B;MAC5BF,KAAK,CAACW,aAAN,CAAoBC,iBAAA,CAAW,IAAAJ,kBAAA,EAAQb,UAAR,CAAX,CAApB;IACD;;IACD,IAAIC,SAAS,KAAKM,SAAlB,EAA6B;MAC3BF,KAAK,CAACa,YAAN,CAAmBC,gBAAA,CAAU,IAAAN,kBAAA,EAAQZ,SAAR,CAAV,CAAnB;IACD;;IACD,IAAIC,WAAW,KAAKK,SAApB,EAA+B;MAC7BF,KAAK,CAACe,cAAN,CAAqBlB,WAArB;IACD;;IACD,IAAIC,OAAO,KAAKI,SAAhB,EAA2B;MACzBF,KAAK,CAACgB,SAAN,CAAgBlB,OAAhB;IACD;;IACD,IAAIC,SAAS,KAAKG,SAAlB,EAA6B;MAC3BF,KAAK,CAACiB,YAAN,CAAmBlB,SAAnB;IACD;;IACDd,GAAG,CAACiC,IAAJ;;IACA,KAAKC,SAAL,CAAeC,OAAf,CAAwBC,KAAD,IAAW;MAChC,IAAIA,KAAK,YAAYtC,wBAArB,EAAyC;QACvCsC,KAAK,CAAC/B,QAAN,CAAeL,GAAf;MACD;IACF,CAJD;;IAKA,MAAMqC,WAAW,GAAGrC,GAAG,CAACsC,YAAJ,CAAiBC,WAAjB,EAApB;IACA,MAAMC,WAAW,GAAGxC,GAAG,CAACyC,YAAJ,CAAiBF,WAAjB,EAApB;IACA,MAAMG,MAAM,GAAG1C,GAAG,CAAC2C,OAAJ,CAAYC,GAAZ,EAAf;IACA,MAAMC,UAAU,GAAG7C,GAAG,CAAC8C,WAAJ,CAAgBF,GAAhB,EAAnB;IACA,MAAMG,UAAU,GAAG/C,GAAG,CAACgD,WAAJ,CAAgBT,WAAhB,EAAnB;IACAvC,GAAG,CAACiD,OAAJ;;IACA,IAAIT,WAAJ,EAAiB;MACfzB,KAAK,CAACmC,cAAN,CAAqBV,WAArB;IACD;;IACD,IAAIE,MAAJ,EAAY;MACV3B,KAAK,CAACoC,SAAN,CAAgBT,MAAhB;IACD;;IACD,IAAIK,UAAJ,EAAgB;MACdhC,KAAK,CAACqC,aAAN,CAAoBL,UAApB;IACD;;IACD,IAAIV,WAAJ,EAAiB;MACftB,KAAK,CAACsC,cAAN,CAAqBhB,WAArB;IACD;;IACD,IAAIQ,UAAJ,EAAgB;MACd9B,KAAK,CAACuC,aAAN,CAAoBT,UAApB;IACD;;IACD7C,GAAG,CAACuD,MAAJ,CAAWC,IAAX,CAAgBzC,KAAhB;EACD;;AAzEH"}
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":"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"}
@@ -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":"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"}
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
- return null;
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","font","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","derived","Error","drawTextBlob","TextBlobNode","blob","GlyphsNode","Glyphs","glyphs","reduce","acc","glyph","id","pos","positions","drawGlyphs"],"sources":["Text.ts"],"sourcesContent":["import type { SkRSXform, SkTextBlob, SkPoint } 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, null> {\n constructor(ctx: NodeContext, props: TextProps) {\n super(ctx, NodeType.Text, props);\n }\n\n protected deriveProps() {\n return null;\n }\n\n draw({ canvas, paint }: DrawingContext) {\n const { text, x, y, font } = this.props;\n if (font) {\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
+ {"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":";;;;;;;AAYA;;AACA;;AAEA;;AAGO,MAAMA,QAAN,SAAuBC,2BAAvB,CAAgE;EACrEC,WAAW,CAACC,GAAD,EAAmBC,KAAnB,EAAqC;IAC9C,MAAMD,GAAN,EAAWE,eAAA,CAASC,IAApB,EAA0BF,KAA1B;EACD;;EAESG,WAAW,GAAG;IACtB,MAAM;MAAEC;IAAF,IAAW,KAAKJ,KAAtB;;IACA,IAAII,IAAI,KAAK,IAAb,EAAmB;MACjB,OAAO,IAAP;IACD,CAFD,MAEO,IAAIA,IAAI,KAAKC,SAAb,EAAwB;MAC7BC,OAAO,CAACC,IAAR,CACE,8DADF;MAGA,OAAO,IAAP,CAJ6B,CAK7B;MACA;MACA;MACA;MACA;MACA;MACA;MACA;IACD;;IACD,OAAOH,IAAP;EACD;;EAEDI,IAAI,OAAoC;IAAA,IAAnC;MAAEC,MAAF;MAAUC;IAAV,CAAmC;IACtC,MAAM;MAAEC,IAAF;MAAQC,CAAR;MAAWC;IAAX,IAAiB,KAAKb,KAA5B;IACA,MAAMI,IAAI,GAAG,KAAKU,OAAlB;;IACA,IAAIV,IAAI,KAAKC,SAAb,EAAwB;MACtB,MAAM,IAAIU,KAAJ,CAAU,oCAAV,CAAN;IACD;;IACD,IAAIX,IAAI,IAAI,IAAZ,EAAkB;MAChBK,MAAM,CAACO,QAAP,CAAgBL,IAAhB,EAAsBC,CAAtB,EAAyBC,CAAzB,EAA4BH,KAA5B,EAAmCN,IAAnC;IACD;EACF;;AAnCoE;;;;AAsChE,MAAMa,YAAN,SAA2BpB,2BAA3B,CAGL;EACAC,WAAW,CAACC,GAAD,EAAmBC,KAAnB,EAAyC;IAClD,MAAMD,GAAN,EAAWE,eAAA,CAASiB,QAApB,EAA8BlB,KAA9B;EACD;;EAEDG,WAAW,GAAG;IACZ,MAAMgB,IAAI,GAAG,IAAAC,sBAAA,EAAY,KAAKC,IAAjB,EAAuB,KAAKrB,KAAL,CAAWmB,IAAlC,CAAb;IACA,MAAM;MAAEf,IAAF;MAAQkB;IAAR,IAA0B,KAAKtB,KAArC;;IACA,IAAI,CAACI,IAAL,EAAW;MACT,OAAO,IAAP;IACD;;IACD,IAAI;MAAEO;IAAF,IAAW,KAAKX,KAApB;IACA,MAAMuB,GAAG,GAAGnB,IAAI,CAACoB,WAAL,CAAiBb,IAAjB,CAAZ;IACA,MAAMc,MAAM,GAAGrB,IAAI,CAACsB,cAAL,CAAoBH,GAApB,CAAf;IACA,MAAMI,GAAgB,GAAG,EAAzB;IACA,MAAMC,IAAI,GAAG,KAAKP,IAAL,CAAUQ,kBAAV,CAA6BV,IAA7B,EAAmC,KAAnC,EAA0C,CAA1C,CAAb;IACA,IAAIW,IAAI,GAAGF,IAAI,CAACG,IAAL,EAAX;IACA,IAAIC,IAAI,GAAGV,aAAX;;IACA,KAAK,IAAIW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGtB,IAAI,CAACuB,MAAT,IAAmBJ,IAAnC,EAAyCG,CAAC,EAA1C,EAA8C;MAC5C,MAAME,KAAK,GAAGV,MAAM,CAACQ,CAAD,CAApB;MACAD,IAAI,IAAIG,KAAK,GAAG,CAAhB;;MACA,IAAIH,IAAI,GAAGF,IAAI,CAACI,MAAL,EAAX,EAA0B;QACxB;QACAJ,IAAI,GAAGF,IAAI,CAACG,IAAL,EAAP;;QACA,IAAI,CAACD,IAAL,EAAW;UACT;UACA;UACAnB,IAAI,GAAGA,IAAI,CAACyB,SAAL,CAAe,CAAf,EAAkBH,CAAlB,CAAP;UACA;QACD;;QACDD,IAAI,GAAGG,KAAK,GAAG,CAAf;MACD,CAb2C,CAc5C;MACA;;;MACA,MAAM,CAACE,CAAD,EAAIC,CAAJ,IAASR,IAAI,CAACS,SAAL,CAAeP,IAAf,CAAf;MACA,MAAMQ,SAAS,GAAGH,CAAC,CAACzB,CAAF,GAAOuB,KAAK,GAAG,CAAT,GAAcG,CAAC,CAAC1B,CAAxC;MACA,MAAM6B,SAAS,GAAGJ,CAAC,CAACxB,CAAF,GAAOsB,KAAK,GAAG,CAAT,GAAcG,CAAC,CAACzB,CAAxC;MACAc,GAAG,CAACe,IAAJ,CAAS,KAAKrB,IAAL,CAAUsB,OAAV,CAAkBL,CAAC,CAAC1B,CAApB,EAAuB0B,CAAC,CAACzB,CAAzB,EAA4B2B,SAA5B,EAAuCC,SAAvC,CAAT;MACAT,IAAI,IAAIG,KAAK,GAAG,CAAhB;IACD;;IACD,OAAO,KAAKd,IAAL,CAAUuB,QAAV,CAAmBC,eAAnB,CAAmClC,IAAnC,EAAyCgB,GAAzC,EAA8CvB,IAA9C,CAAP;EACD;;EAEDI,IAAI,QAAoC;IAAA,IAAnC;MAAEC,MAAF;MAAUC;IAAV,CAAmC;;IACtC,IAAI,CAAC,KAAKI,OAAV,EAAmB;MACjB,MAAM,IAAIC,KAAJ,CAAU,4BAAV,CAAN;IACD;;IACDN,MAAM,CAACqC,YAAP,CAAoB,KAAKhC,OAAzB,EAAkC,CAAlC,EAAqC,CAArC,EAAwCJ,KAAxC;EACD;;AAhDD;;;;AAmDK,MAAMqC,YAAN,SAA2BlD,2BAA3B,CAA+D;EACpEC,WAAW,CAACC,GAAD,EAAmBC,KAAnB,EAAyC;IAClD,MAAMD,GAAN,EAAWE,eAAA,CAAS2C,QAApB,EAA8B5C,KAA9B;EACD;;EAESG,WAAW,GAAG;IACtB,OAAO,IAAP;EACD;;EAEDK,IAAI,QAAoC;IAAA,IAAnC;MAAEC,MAAF;MAAUC;IAAV,CAAmC;IACtC,MAAM;MAAEsC,IAAF;MAAQpC,CAAR;MAAWC;IAAX,IAAiB,KAAKb,KAA5B;IACAS,MAAM,CAACqC,YAAP,CAAoBE,IAApB,EAA0BpC,CAA1B,EAA6BC,CAA7B,EAAgCH,KAAhC;EACD;;AAZmE;;;;AAoB/D,MAAMuC,UAAN,SAAyBpD,2BAAzB,CAAsE;EAC3EC,WAAW,CAACC,GAAD,EAAmBC,KAAnB,EAAuC;IAChD,MAAMD,GAAN,EAAWE,eAAA,CAASiD,MAApB,EAA4BlD,KAA5B;EACD;;EAEDG,WAAW,GAAG;IACZ,OAAO,KAAKH,KAAL,CAAWmD,MAAX,CAAkBC,MAAlB,CACL,CAACC,GAAD,EAAMC,KAAN,KAAgB;MACd,MAAM;QAAEC,EAAF;QAAMC;MAAN,IAAcF,KAApB;MACAD,GAAG,CAACF,MAAJ,CAAWT,IAAX,CAAgBa,EAAhB;MACAF,GAAG,CAACI,SAAJ,CAAcf,IAAd,CAAmBc,GAAnB;MACA,OAAOH,GAAP;IACD,CANI,EAOL;MAAEF,MAAM,EAAE,EAAV;MAAcM,SAAS,EAAE;IAAzB,CAPK,CAAP;EASD;;EAEDjD,IAAI,QAAoC;IAAA,IAAnC;MAAEC,MAAF;MAAUC;IAAV,CAAmC;;IACtC,IAAI,CAAC,KAAKI,OAAV,EAAmB;MACjB,MAAM,IAAIC,KAAJ,CAAU,qCAAV,CAAN;IACD;;IACD,MAAM;MAAEoC,MAAF;MAAUM;IAAV,IAAwB,KAAK3C,OAAnC;IACA,MAAM;MAAEF,CAAF;MAAKC,CAAL;MAAQT;IAAR,IAAiB,KAAKJ,KAA5B;;IACA,IAAII,IAAJ,EAAU;MACRK,MAAM,CAACiD,UAAP,CAAkBP,MAAlB,EAA0BM,SAA1B,EAAqC7C,CAArC,EAAwCC,CAAxC,EAA2CT,IAA3C,EAAiDM,KAAjD;IACD;EACF;;AA1B0E"}
@@ -48,6 +48,7 @@ export interface PaintProps extends ChildrenProps {
48
48
  strokeMiter?: number;
49
49
  opacity?: number;
50
50
  antiAlias?: boolean;
51
+ dither?: boolean;
51
52
  }
52
53
  export interface GroupProps extends PaintProps, TransformProps {
53
54
  clip?: ClipDef;
@@ -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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"}