@shopify/react-native-skia 0.1.207 → 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.
Files changed (131) 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/JsiSkColorFilter.h +1 -1
  8. package/cpp/api/JsiSkContourMeasure.h +1 -1
  9. package/cpp/api/JsiSkContourMeasureIter.h +1 -1
  10. package/cpp/api/JsiSkData.h +1 -1
  11. package/cpp/api/JsiSkFont.h +1 -1
  12. package/cpp/api/JsiSkFontMgr.h +2 -2
  13. package/cpp/api/JsiSkFontStyle.h +11 -5
  14. package/cpp/api/JsiSkImage.h +1 -1
  15. package/cpp/api/JsiSkImageFilter.h +1 -1
  16. package/cpp/api/JsiSkMaskFilter.h +1 -1
  17. package/cpp/api/JsiSkMatrix.h +1 -1
  18. package/cpp/api/JsiSkPaint.h +8 -1
  19. package/cpp/api/JsiSkPath.h +11 -8
  20. package/cpp/api/JsiSkPathEffect.h +1 -1
  21. package/cpp/api/JsiSkPicture.h +1 -1
  22. package/cpp/api/JsiSkPictureRecorder.h +1 -1
  23. package/cpp/api/JsiSkRuntimeEffect.h +1 -1
  24. package/cpp/api/JsiSkSVG.h +1 -1
  25. package/cpp/api/JsiSkShader.h +1 -1
  26. package/cpp/api/JsiSkSurface.h +1 -1
  27. package/cpp/api/JsiSkTextBlob.h +1 -1
  28. package/cpp/api/JsiSkTypeFaceFontProvider.h +4 -2
  29. package/cpp/api/JsiSkTypeface.h +24 -2
  30. package/cpp/api/JsiSkVertices.h +1 -1
  31. package/cpp/rnskia/dom/base/JsiDomRenderNode.h +1 -1
  32. package/cpp/rnskia/dom/nodes/JsiPaintNode.h +4 -0
  33. package/cpp/rnskia/dom/props/FontProp.h +3 -1
  34. package/cpp/rnskia/dom/props/PaintProps.h +3 -0
  35. package/lib/commonjs/dom/nodes/PaintContext.d.ts +1 -0
  36. package/lib/commonjs/dom/nodes/PaintContext.js.map +1 -1
  37. package/lib/commonjs/dom/nodes/PaintNode.js +6 -1
  38. package/lib/commonjs/dom/nodes/PaintNode.js.map +1 -1
  39. package/lib/commonjs/dom/nodes/RenderNode.js +1 -1
  40. package/lib/commonjs/dom/nodes/RenderNode.js.map +1 -1
  41. package/lib/commonjs/dom/nodes/drawings/Text.d.ts +3 -3
  42. package/lib/commonjs/dom/nodes/drawings/Text.js +26 -4
  43. package/lib/commonjs/dom/nodes/drawings/Text.js.map +1 -1
  44. package/lib/commonjs/dom/types/Common.d.ts +1 -0
  45. package/lib/commonjs/dom/types/Common.js.map +1 -1
  46. package/lib/commonjs/dom/types/DrawingContext.js +15 -0
  47. package/lib/commonjs/dom/types/DrawingContext.js.map +1 -1
  48. package/lib/commonjs/dom/types/Drawings.d.ts +1 -1
  49. package/lib/commonjs/dom/types/Drawings.js.map +1 -1
  50. package/lib/commonjs/external/reanimated/moduleWrapper.js +1 -1
  51. package/lib/commonjs/external/reanimated/moduleWrapper.js.map +1 -1
  52. package/lib/commonjs/skia/types/Font/FontMgr.d.ts +1 -1
  53. package/lib/commonjs/skia/types/Font/FontMgr.js.map +1 -1
  54. package/lib/commonjs/skia/types/Image/ImageFactory.d.ts +12 -11
  55. package/lib/commonjs/skia/types/Image/ImageFactory.js +12 -11
  56. package/lib/commonjs/skia/types/Image/ImageFactory.js.map +1 -1
  57. package/lib/commonjs/skia/types/Paint/Paint.d.ts +5 -0
  58. package/lib/commonjs/skia/types/Paint/Paint.js.map +1 -1
  59. package/lib/commonjs/skia/types/Typeface/Typeface.d.ts +10 -1
  60. package/lib/commonjs/skia/types/Typeface/Typeface.js.map +1 -1
  61. package/lib/commonjs/skia/web/JsiSkPaint.d.ts +1 -0
  62. package/lib/commonjs/skia/web/JsiSkPaint.js +4 -0
  63. package/lib/commonjs/skia/web/JsiSkPaint.js.map +1 -1
  64. package/lib/commonjs/skia/web/JsiSkPath.d.ts +1 -1
  65. package/lib/commonjs/skia/web/JsiSkPath.js +10 -1
  66. package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
  67. package/lib/commonjs/skia/web/JsiSkTypeface.d.ts +1 -0
  68. package/lib/commonjs/skia/web/JsiSkTypeface.js +4 -0
  69. package/lib/commonjs/skia/web/JsiSkTypeface.js.map +1 -1
  70. package/lib/module/dom/nodes/PaintContext.d.ts +1 -0
  71. package/lib/module/dom/nodes/PaintContext.js.map +1 -1
  72. package/lib/module/dom/nodes/PaintNode.js +6 -1
  73. package/lib/module/dom/nodes/PaintNode.js.map +1 -1
  74. package/lib/module/dom/nodes/RenderNode.js +1 -1
  75. package/lib/module/dom/nodes/RenderNode.js.map +1 -1
  76. package/lib/module/dom/nodes/drawings/Text.d.ts +3 -3
  77. package/lib/module/dom/nodes/drawings/Text.js +26 -4
  78. package/lib/module/dom/nodes/drawings/Text.js.map +1 -1
  79. package/lib/module/dom/types/Common.d.ts +1 -0
  80. package/lib/module/dom/types/Common.js.map +1 -1
  81. package/lib/module/dom/types/DrawingContext.js +15 -0
  82. package/lib/module/dom/types/DrawingContext.js.map +1 -1
  83. package/lib/module/dom/types/Drawings.d.ts +1 -1
  84. package/lib/module/dom/types/Drawings.js.map +1 -1
  85. package/lib/module/external/reanimated/moduleWrapper.js +1 -1
  86. package/lib/module/external/reanimated/moduleWrapper.js.map +1 -1
  87. package/lib/module/skia/types/Font/FontMgr.d.ts +1 -1
  88. package/lib/module/skia/types/Font/FontMgr.js.map +1 -1
  89. package/lib/module/skia/types/Image/ImageFactory.d.ts +12 -11
  90. package/lib/module/skia/types/Image/ImageFactory.js +12 -11
  91. package/lib/module/skia/types/Image/ImageFactory.js.map +1 -1
  92. package/lib/module/skia/types/Paint/Paint.d.ts +5 -0
  93. package/lib/module/skia/types/Paint/Paint.js.map +1 -1
  94. package/lib/module/skia/types/Typeface/Typeface.d.ts +10 -1
  95. package/lib/module/skia/types/Typeface/Typeface.js.map +1 -1
  96. package/lib/module/skia/web/JsiSkPaint.d.ts +1 -0
  97. package/lib/module/skia/web/JsiSkPaint.js +4 -0
  98. package/lib/module/skia/web/JsiSkPaint.js.map +1 -1
  99. package/lib/module/skia/web/JsiSkPath.d.ts +1 -1
  100. package/lib/module/skia/web/JsiSkPath.js +11 -1
  101. package/lib/module/skia/web/JsiSkPath.js.map +1 -1
  102. package/lib/module/skia/web/JsiSkTypeface.d.ts +1 -0
  103. package/lib/module/skia/web/JsiSkTypeface.js +4 -0
  104. package/lib/module/skia/web/JsiSkTypeface.js.map +1 -1
  105. package/lib/typescript/src/dom/nodes/PaintContext.d.ts +1 -0
  106. package/lib/typescript/src/dom/nodes/drawings/Text.d.ts +3 -3
  107. package/lib/typescript/src/dom/types/Common.d.ts +1 -0
  108. package/lib/typescript/src/dom/types/Drawings.d.ts +1 -1
  109. package/lib/typescript/src/skia/types/Font/FontMgr.d.ts +1 -1
  110. package/lib/typescript/src/skia/types/Image/ImageFactory.d.ts +12 -11
  111. package/lib/typescript/src/skia/types/Paint/Paint.d.ts +5 -0
  112. package/lib/typescript/src/skia/types/Typeface/Typeface.d.ts +10 -1
  113. package/lib/typescript/src/skia/web/JsiSkPaint.d.ts +1 -0
  114. package/lib/typescript/src/skia/web/JsiSkPath.d.ts +1 -1
  115. package/lib/typescript/src/skia/web/JsiSkTypeface.d.ts +1 -0
  116. package/package.json +2 -2
  117. package/src/dom/nodes/PaintContext.ts +1 -0
  118. package/src/dom/nodes/PaintNode.ts +4 -0
  119. package/src/dom/nodes/RenderNode.ts +1 -0
  120. package/src/dom/nodes/drawings/Text.ts +31 -5
  121. package/src/dom/types/Common.ts +1 -0
  122. package/src/dom/types/DrawingContext.ts +13 -0
  123. package/src/dom/types/Drawings.ts +1 -1
  124. package/src/external/reanimated/moduleWrapper.ts +1 -1
  125. package/src/skia/types/Font/FontMgr.ts +1 -1
  126. package/src/skia/types/Image/ImageFactory.ts +1 -0
  127. package/src/skia/types/Paint/Paint.ts +6 -0
  128. package/src/skia/types/Typeface/Typeface.ts +10 -1
  129. package/src/skia/web/JsiSkPaint.ts +4 -0
  130. package/src/skia/web/JsiSkPath.ts +8 -1
  131. package/src/skia/web/JsiSkTypeface.ts +4 -0
@@ -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++) {
@@ -23,7 +23,7 @@ public:
23
23
  : JsiSkWrappingSkPtrHostObject<SkColorFilter>(std::move(context),
24
24
  std::move(colorFilter)) {}
25
25
 
26
- EXPORT_JSI_API_TYPENAME(JsiSkColorFilter, "ColorFilter")
26
+ EXPORT_JSI_API_TYPENAME(JsiSkColorFilter, ColorFilter)
27
27
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkColorFilter, dispose))
28
28
  };
29
29
 
@@ -68,7 +68,7 @@ public:
68
68
  return JsiSkPath::toValue(runtime, getContext(), std::move(path));
69
69
  }
70
70
 
71
- EXPORT_JSI_API_TYPENAME(JsiSkContourMeasure, "ContourMeasure")
71
+ EXPORT_JSI_API_TYPENAME(JsiSkContourMeasure, ContourMeasure)
72
72
 
73
73
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkContourMeasure, getPosTan),
74
74
  JSI_EXPORT_FUNC(JsiSkContourMeasure, length),
@@ -40,7 +40,7 @@ public:
40
40
  return jsi::Object::createFromHostObject(runtime, std::move(nextObject));
41
41
  }
42
42
 
43
- EXPORT_JSI_API_TYPENAME(JsiSkContourMeasureIter, "ContourMeasureIter")
43
+ EXPORT_JSI_API_TYPENAME(JsiSkContourMeasureIter, ContourMeasureIter)
44
44
 
45
45
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkContourMeasureIter, next),
46
46
  JSI_EXPORT_FUNC(JsiSkContourMeasureIter, dispose))
@@ -24,7 +24,7 @@ public:
24
24
  JsiSkData(std::shared_ptr<RNSkPlatformContext> context, sk_sp<SkData> asset)
25
25
  : JsiSkWrappingSkPtrHostObject(std::move(context), std::move(asset)) {}
26
26
 
27
- EXPORT_JSI_API_TYPENAME(JsiSkData, "Data")
27
+ EXPORT_JSI_API_TYPENAME(JsiSkData, Data)
28
28
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkData, dispose))
29
29
  };
30
30
  } // namespace RNSkia
@@ -239,7 +239,7 @@ public:
239
239
  return jsi::Value::undefined();
240
240
  }
241
241
 
242
- EXPORT_JSI_API_TYPENAME(JsiSkFont, "Font")
242
+ EXPORT_JSI_API_TYPENAME(JsiSkFont, Font)
243
243
 
244
244
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkFont, getSize),
245
245
  JSI_EXPORT_FUNC(JsiSkFont, getMetrics),
@@ -23,7 +23,7 @@ namespace jsi = facebook::jsi;
23
23
 
24
24
  class JsiSkFontMgr : public JsiSkWrappingSkPtrHostObject<SkFontMgr> {
25
25
  public:
26
- EXPORT_JSI_API_TYPENAME(JsiSkFontMgr, "FontMgr")
26
+ EXPORT_JSI_API_TYPENAME(JsiSkFontMgr, FontMgr)
27
27
 
28
28
  JsiSkFontMgr(std::shared_ptr<RNSkPlatformContext> context,
29
29
  sk_sp<SkFontMgr> fontMgr)
@@ -51,4 +51,4 @@ public:
51
51
  JSI_EXPORT_FUNC(JsiSkFontMgr, matchFamilyStyle))
52
52
  };
53
53
 
54
- } // namespace RNSkia
54
+ } // namespace RNSkia
@@ -36,12 +36,18 @@ public:
36
36
  if (object.isHostObject(runtime)) {
37
37
  return object.asHostObject<JsiSkFontStyle>(runtime)->getObject();
38
38
  } else {
39
- auto weight =
40
- static_cast<int>(object.getProperty(runtime, "weight").asNumber());
41
- auto width =
42
- static_cast<int>(object.getProperty(runtime, "width").asNumber());
39
+ auto weightProp = object.getProperty(runtime, "weight");
40
+ auto weight = static_cast<int>(weightProp.isUndefined()
41
+ ? SkFontStyle::Weight::kNormal_Weight
42
+ : weightProp.asNumber());
43
+ auto widthProp = object.getProperty(runtime, "width");
44
+ auto width = static_cast<int>(widthProp.isUndefined()
45
+ ? SkFontStyle::Width::kNormal_Width
46
+ : widthProp.asNumber());
47
+ auto slantProp = object.getProperty(runtime, "slant");
43
48
  auto slant = static_cast<SkFontStyle::Slant>(
44
- object.getProperty(runtime, "slant").asNumber());
49
+ slantProp.isUndefined() ? SkFontStyle::Slant::kUpright_Slant
50
+ : slantProp.asNumber());
45
51
  SkFontStyle style(weight, width, slant);
46
52
  return std::make_shared<SkFontStyle>(style);
47
53
  }
@@ -131,7 +131,7 @@ public:
131
131
  runtime, std::make_shared<JsiSkImage>(getContext(), std::move(image)));
132
132
  }
133
133
 
134
- EXPORT_JSI_API_TYPENAME(JsiSkImage, "Image")
134
+ EXPORT_JSI_API_TYPENAME(JsiSkImage, Image)
135
135
 
136
136
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkImage, width),
137
137
  JSI_EXPORT_FUNC(JsiSkImage, height),
@@ -25,7 +25,7 @@ public:
25
25
  : JsiSkWrappingSkPtrHostObject<SkImageFilter>(std::move(context),
26
26
  std::move(imageFilter)) {}
27
27
 
28
- EXPORT_JSI_API_TYPENAME(JsiSkImageFilter, "ImageFilter")
28
+ EXPORT_JSI_API_TYPENAME(JsiSkImageFilter, ImageFilter)
29
29
  };
30
30
 
31
31
  } // namespace RNSkia
@@ -25,7 +25,7 @@ public:
25
25
  : JsiSkWrappingSkPtrHostObject<SkMaskFilter>(std::move(context),
26
26
  std::move(maskFilter)) {}
27
27
 
28
- EXPORT_JSI_API_TYPENAME(JsiSkMaskFilter, "MaskFilter")
28
+ EXPORT_JSI_API_TYPENAME(JsiSkMaskFilter, MaskFilter)
29
29
  };
30
30
 
31
31
  } // namespace RNSkia
@@ -86,7 +86,7 @@ public:
86
86
  return values;
87
87
  }
88
88
 
89
- EXPORT_JSI_API_TYPENAME(JsiSkMatrix, "Matrix")
89
+ EXPORT_JSI_API_TYPENAME(JsiSkMatrix, Matrix)
90
90
 
91
91
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkMatrix, concat),
92
92
  JSI_EXPORT_FUNC(JsiSkMatrix, translate),
@@ -25,7 +25,7 @@ namespace jsi = facebook::jsi;
25
25
 
26
26
  class JsiSkPaint : public JsiSkWrappingSharedPtrHostObject<SkPaint> {
27
27
  public:
28
- EXPORT_JSI_API_TYPENAME(JsiSkPaint, "Paint")
28
+ EXPORT_JSI_API_TYPENAME(JsiSkPaint, Paint)
29
29
 
30
30
  JSI_HOST_FUNCTION(copy) {
31
31
  const auto *paint = getObject().get();
@@ -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
 
@@ -523,7 +526,7 @@ public:
523
526
  return cmds;
524
527
  }
525
528
 
526
- EXPORT_JSI_API_TYPENAME(JsiSkPath, "Path")
529
+ EXPORT_JSI_API_TYPENAME(JsiSkPath, Path)
527
530
 
528
531
  JSI_EXPORT_FUNCTIONS(
529
532
  JSI_EXPORT_FUNC(JsiSkPath, addPath), JSI_EXPORT_FUNC(JsiSkPath, addArc),
@@ -25,7 +25,7 @@ public:
25
25
  : JsiSkWrappingSkPtrHostObject<SkPathEffect>(std::move(context),
26
26
  std::move(pathEffect)) {}
27
27
 
28
- EXPORT_JSI_API_TYPENAME(JsiSkPathEffect, "PathEffect")
28
+ EXPORT_JSI_API_TYPENAME(JsiSkPathEffect, PathEffect)
29
29
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkColorFilter, dispose))
30
30
  };
31
31
 
@@ -60,7 +60,7 @@ public:
60
60
  return array;
61
61
  }
62
62
 
63
- EXPORT_JSI_API_TYPENAME(JsiSkPicture, "Picture")
63
+ EXPORT_JSI_API_TYPENAME(JsiSkPicture, Picture)
64
64
 
65
65
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkPicture, makeShader),
66
66
  JSI_EXPORT_FUNC(JsiSkPicture, serialize),
@@ -40,7 +40,7 @@ public:
40
40
  runtime, std::make_shared<JsiSkPicture>(getContext(), picture));
41
41
  }
42
42
 
43
- EXPORT_JSI_API_TYPENAME(JsiSkPictureRecorder, "PictureRecorder")
43
+ EXPORT_JSI_API_TYPENAME(JsiSkPictureRecorder, PictureRecorder)
44
44
 
45
45
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkPictureRecorder, beginRecording),
46
46
  JSI_EXPORT_FUNC(JsiSkPictureRecorder,
@@ -115,7 +115,7 @@ public:
115
115
  return jsi::String::createFromAscii(runtime, getObject()->source());
116
116
  }
117
117
 
118
- EXPORT_JSI_API_TYPENAME(JsiSkRuntimeEffect, "RuntimeEffect")
118
+ EXPORT_JSI_API_TYPENAME(JsiSkRuntimeEffect, RuntimeEffect)
119
119
 
120
120
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkRuntimeEffect, makeShader),
121
121
  JSI_EXPORT_FUNC(JsiSkRuntimeEffect,
@@ -24,7 +24,7 @@ public:
24
24
  : JsiSkWrappingSkPtrHostObject<SkSVGDOM>(std::move(context),
25
25
  std::move(svgdom)) {}
26
26
 
27
- EXPORT_JSI_API_TYPENAME(JsiSkSVG, "SVG")
27
+ EXPORT_JSI_API_TYPENAME(JsiSkSVG, SVG)
28
28
 
29
29
  JSI_HOST_FUNCTION(width) {
30
30
  return static_cast<double>(getObject()->containerSize().width());
@@ -26,7 +26,7 @@ public:
26
26
  : JsiSkWrappingSkPtrHostObject<SkShader>(std::move(context),
27
27
  std::move(shader)) {}
28
28
 
29
- EXPORT_JSI_API_TYPENAME(JsiSkShader, "Shader")
29
+ EXPORT_JSI_API_TYPENAME(JsiSkShader, Shader)
30
30
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkShader, dispose))
31
31
  };
32
32
  } // namespace RNSkia
@@ -28,7 +28,7 @@ public:
28
28
  : JsiSkWrappingSkPtrHostObject<SkSurface>(std::move(context),
29
29
  std::move(surface)) {}
30
30
 
31
- EXPORT_JSI_API_TYPENAME(JsiSkSurface, "Surface")
31
+ EXPORT_JSI_API_TYPENAME(JsiSkSurface, Surface)
32
32
 
33
33
  JSI_HOST_FUNCTION(getCanvas) {
34
34
  return jsi::Object::createFromHostObject(
@@ -25,7 +25,7 @@ public:
25
25
  : JsiSkWrappingSkPtrHostObject<SkTextBlob>(std::move(context),
26
26
  std::move(shader)) {}
27
27
 
28
- EXPORT_JSI_API_TYPENAME(JsiSkTextBlob, "TextBlob")
28
+ EXPORT_JSI_API_TYPENAME(JsiSkTextBlob, TextBlob)
29
29
  JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkTextBlob, dispose))
30
30
  };
31
31
  } // namespace RNSkia
@@ -27,7 +27,8 @@ namespace para = skia::textlayout;
27
27
  class JsiSkTypefaceFontProvider
28
28
  : public JsiSkWrappingSkPtrHostObject<para::TypefaceFontProvider> {
29
29
  public:
30
- EXPORT_JSI_API_TYPENAME(JsiSkTypefaceFontProvider, "FontMgr")
30
+ EXPORT_JSI_API_TYPENAME(JsiSkTypefaceFontProvider, TypefaceFontProvider)
31
+
31
32
  JSI_EXPORT_FUNCTIONS(
32
33
  JSI_EXPORT_FUNC(JsiSkTypefaceFontProvider, dispose),
33
34
  JSI_EXPORT_FUNC(JsiSkTypefaceFontProvider, registerFont),
@@ -46,7 +47,8 @@ public:
46
47
  JSI_HOST_FUNCTION(matchFamilyStyle) {
47
48
  auto name = arguments[0].asString(runtime).utf8(runtime);
48
49
  auto fontStyle = JsiSkFontStyle::fromValue(runtime, arguments[1]);
49
- auto typeface = getObject()->matchFamilyStyle(name.c_str(), *fontStyle);
50
+ sk_sp<SkFontStyleSet> set(getObject()->onMatchFamily(name.c_str()));
51
+ sk_sp<SkTypeface> typeface(set->matchStyle(*fontStyle));
50
52
  return jsi::Object::createFromHostObject(
51
53
  runtime, std::make_shared<JsiSkTypeface>(getContext(), typeface));
52
54
  }
@@ -2,6 +2,7 @@
2
2
 
3
3
  #include <memory>
4
4
  #include <utility>
5
+ #include <vector>
5
6
 
6
7
  #include <jsi/jsi.h>
7
8
 
@@ -22,13 +23,34 @@ namespace jsi = facebook::jsi;
22
23
 
23
24
  class JsiSkTypeface : public JsiSkWrappingSkPtrHostObject<SkTypeface> {
24
25
  public:
25
- EXPORT_JSI_API_TYPENAME(JsiSkTypeface, "Typeface")
26
- JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkTypeface, dispose))
26
+ EXPORT_JSI_API_TYPENAME(JsiSkTypeface, Typeface)
27
+ JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkTypeface, getGlyphIDs),
28
+ JSI_EXPORT_FUNC(JsiSkTypeface, dispose))
27
29
 
28
30
  JsiSkTypeface(std::shared_ptr<RNSkPlatformContext> context,
29
31
  sk_sp<SkTypeface> typeface)
30
32
  : JsiSkWrappingSkPtrHostObject(std::move(context), std::move(typeface)) {}
31
33
 
34
+ JSI_HOST_FUNCTION(getGlyphIDs) {
35
+ auto str = arguments[0].asString(runtime).utf8(runtime);
36
+ int numGlyphIDs =
37
+ count > 1 && !arguments[1].isNull() && !arguments[1].isUndefined()
38
+ ? static_cast<int>(arguments[1].asNumber())
39
+ : getObject()->textToGlyphs(str.c_str(), str.length(),
40
+ SkTextEncoding::kUTF8, nullptr, 0);
41
+ std::vector<SkGlyphID> glyphIDs;
42
+ glyphIDs.resize(numGlyphIDs);
43
+ getObject()->textToGlyphs(str.c_str(), str.length(), SkTextEncoding::kUTF8,
44
+ static_cast<SkGlyphID *>(glyphIDs.data()),
45
+ numGlyphIDs);
46
+ auto jsiGlyphIDs = jsi::Array(runtime, numGlyphIDs);
47
+ for (int i = 0; i < numGlyphIDs; i++) {
48
+ jsiGlyphIDs.setValueAtIndex(runtime, i,
49
+ jsi::Value(static_cast<int>(glyphIDs[i])));
50
+ }
51
+ return jsiGlyphIDs;
52
+ }
53
+
32
54
  /**
33
55
  Returns the jsi object from a host object of this type
34
56
  */
@@ -25,7 +25,7 @@ public:
25
25
  : JsiSkWrappingSkPtrHostObject<SkVertices>(std::move(context),
26
26
  std::move(vertices)) {}
27
27
 
28
- EXPORT_JSI_API_TYPENAME(JsiSkVertices, "Vertices")
28
+ EXPORT_JSI_API_TYPENAME(JsiSkVertices, Vertices)
29
29
 
30
30
  JSI_HOST_FUNCTION(bounds) {
31
31
  const auto &result = getObject()->bounds();
@@ -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":"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"}
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) {