@shopify/react-native-skia 0.1.230 → 0.1.231

Sign up to get free protection for your applications and to get access to all the features.
Files changed (99) hide show
  1. package/android/CMakeLists.txt +1 -0
  2. package/android/cpp/rnskia-android/SkiaOpenGLSurfaceFactory.cpp +2 -2
  3. package/cpp/api/JsiSkAnimatedImage.h +1 -1
  4. package/cpp/api/JsiSkDataFactory.h +6 -6
  5. package/cpp/api/JsiSkImage.h +4 -4
  6. package/cpp/api/JsiSkPath.h +1 -1
  7. package/cpp/api/JsiSkRRect.h +30 -3
  8. package/cpp/api/third_party/base64.cpp +153 -0
  9. package/cpp/api/third_party/base64.h +50 -0
  10. package/cpp/jsi/JsiPromises.h +1 -1
  11. package/cpp/rnskia/dom/props/FontProp.h +4 -1
  12. package/cpp/rnskia/dom/props/RRectProp.h +50 -0
  13. package/ios/RNSkia-iOS/SkiaMetalSurfaceFactory.mm +1 -1
  14. package/lib/commonjs/dom/nodes/JsiSkDOM.d.ts +2 -1
  15. package/lib/commonjs/dom/nodes/datatypes/Rect.d.ts +1 -1
  16. package/lib/commonjs/dom/nodes/drawings/RRectNode.d.ts +3 -3
  17. package/lib/commonjs/dom/nodes/drawings/RRectNode.js.map +1 -1
  18. package/lib/commonjs/dom/types/Common.d.ts +2 -2
  19. package/lib/commonjs/dom/types/Common.js.map +1 -1
  20. package/lib/commonjs/headless/index.d.ts +3 -1
  21. package/lib/commonjs/headless/index.js +12 -6
  22. package/lib/commonjs/headless/index.js.map +1 -1
  23. package/lib/commonjs/skia/types/Canvas.d.ts +4 -4
  24. package/lib/commonjs/skia/types/Canvas.js.map +1 -1
  25. package/lib/commonjs/skia/types/Path/Path.d.ts +2 -2
  26. package/lib/commonjs/skia/types/Path/Path.js.map +1 -1
  27. package/lib/commonjs/skia/types/RRect.d.ts +9 -0
  28. package/lib/commonjs/skia/types/RRect.js.map +1 -1
  29. package/lib/commonjs/skia/web/JsiSkCanvas.d.ts +4 -4
  30. package/lib/commonjs/skia/web/JsiSkCanvas.js.map +1 -1
  31. package/lib/commonjs/skia/web/JsiSkPath.d.ts +2 -2
  32. package/lib/commonjs/skia/web/JsiSkPath.js.map +1 -1
  33. package/lib/commonjs/skia/web/JsiSkRRect.d.ts +2 -2
  34. package/lib/commonjs/skia/web/JsiSkRRect.js +4 -0
  35. package/lib/commonjs/skia/web/JsiSkRRect.js.map +1 -1
  36. package/lib/module/dom/nodes/JsiSkDOM.d.ts +2 -1
  37. package/lib/module/dom/nodes/datatypes/Rect.d.ts +1 -1
  38. package/lib/module/dom/nodes/drawings/RRectNode.d.ts +3 -3
  39. package/lib/module/dom/nodes/drawings/RRectNode.js.map +1 -1
  40. package/lib/module/dom/types/Common.d.ts +2 -2
  41. package/lib/module/dom/types/Common.js.map +1 -1
  42. package/lib/module/headless/index.d.ts +3 -1
  43. package/lib/module/headless/index.js +5 -3
  44. package/lib/module/headless/index.js.map +1 -1
  45. package/lib/module/skia/types/Canvas.d.ts +4 -4
  46. package/lib/module/skia/types/Canvas.js.map +1 -1
  47. package/lib/module/skia/types/Path/Path.d.ts +2 -2
  48. package/lib/module/skia/types/Path/Path.js.map +1 -1
  49. package/lib/module/skia/types/RRect.d.ts +9 -0
  50. package/lib/module/skia/types/RRect.js.map +1 -1
  51. package/lib/module/skia/web/JsiSkCanvas.d.ts +4 -4
  52. package/lib/module/skia/web/JsiSkCanvas.js.map +1 -1
  53. package/lib/module/skia/web/JsiSkPath.d.ts +2 -2
  54. package/lib/module/skia/web/JsiSkPath.js.map +1 -1
  55. package/lib/module/skia/web/JsiSkRRect.d.ts +2 -2
  56. package/lib/module/skia/web/JsiSkRRect.js +4 -0
  57. package/lib/module/skia/web/JsiSkRRect.js.map +1 -1
  58. package/lib/typescript/src/dom/nodes/JsiSkDOM.d.ts +2 -1
  59. package/lib/typescript/src/dom/nodes/datatypes/Rect.d.ts +1 -1
  60. package/lib/typescript/src/dom/nodes/drawings/RRectNode.d.ts +3 -3
  61. package/lib/typescript/src/dom/types/Common.d.ts +2 -2
  62. package/lib/typescript/src/headless/index.d.ts +3 -1
  63. package/lib/typescript/src/skia/types/Canvas.d.ts +4 -4
  64. package/lib/typescript/src/skia/types/Path/Path.d.ts +2 -2
  65. package/lib/typescript/src/skia/types/RRect.d.ts +9 -0
  66. package/lib/typescript/src/skia/web/JsiSkCanvas.d.ts +4 -4
  67. package/lib/typescript/src/skia/web/JsiSkPath.d.ts +2 -2
  68. package/lib/typescript/src/skia/web/JsiSkRRect.d.ts +2 -2
  69. package/libs/android/arm64-v8a/libskia.a +0 -0
  70. package/libs/android/armeabi-v7a/libskia.a +0 -0
  71. package/libs/android/x86/libskia.a +0 -0
  72. package/libs/android/x86_64/libskia.a +0 -0
  73. package/libs/ios/libskia.xcframework/ios-arm64_arm64e/libskia.a +0 -0
  74. package/libs/ios/libskia.xcframework/ios-arm64_arm64e_x86_64-simulator/libskia.a +0 -0
  75. package/libs/ios/libskottie.xcframework/Info.plist +5 -5
  76. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e/libskottie.a +0 -0
  77. package/libs/ios/libskottie.xcframework/ios-arm64_arm64e_x86_64-simulator/libskottie.a +0 -0
  78. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e/libskparagraph.a +0 -0
  79. package/libs/ios/libskparagraph.xcframework/ios-arm64_arm64e_x86_64-simulator/libskparagraph.a +0 -0
  80. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e/libsksg.a +0 -0
  81. package/libs/ios/libsksg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsksg.a +0 -0
  82. package/libs/ios/libskshaper.xcframework/Info.plist +5 -5
  83. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e/libskshaper.a +0 -0
  84. package/libs/ios/libskshaper.xcframework/ios-arm64_arm64e_x86_64-simulator/libskshaper.a +0 -0
  85. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e/libskunicode.a +0 -0
  86. package/libs/ios/libskunicode.xcframework/ios-arm64_arm64e_x86_64-simulator/libskunicode.a +0 -0
  87. package/libs/ios/libsvg.xcframework/Info.plist +5 -5
  88. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e/libsvg.a +0 -0
  89. package/libs/ios/libsvg.xcframework/ios-arm64_arm64e_x86_64-simulator/libsvg.a +0 -0
  90. package/package.json +1 -1
  91. package/src/dom/nodes/drawings/RRectNode.ts +2 -2
  92. package/src/dom/types/Common.ts +2 -1
  93. package/src/headless/index.ts +7 -3
  94. package/src/skia/types/Canvas.ts +4 -4
  95. package/src/skia/types/Path/Path.ts +2 -2
  96. package/src/skia/types/RRect.ts +11 -0
  97. package/src/skia/web/JsiSkCanvas.ts +4 -4
  98. package/src/skia/web/JsiSkPath.ts +2 -2
  99. package/src/skia/web/JsiSkRRect.ts +23 -2
@@ -62,6 +62,7 @@ add_library(
62
62
  "${PROJECT_SOURCE_DIR}/../cpp/rnskia/dom/base/ConcatablePaint.cpp"
63
63
 
64
64
  "${PROJECT_SOURCE_DIR}/../cpp/api/third_party/CSSColorParser.cpp"
65
+ "${PROJECT_SOURCE_DIR}/../cpp/api/third_party/base64.cpp"
65
66
 
66
67
  )
67
68
 
@@ -31,8 +31,8 @@ sk_sp<SkSurface> SkiaOpenGLSurfaceFactory::makeOffscreenSurface(int width,
31
31
  // Create texture
32
32
  auto texture =
33
33
  ThreadContextHolder::ThreadSkiaOpenGLContext.directContext
34
- ->createBackendTexture(width, height, colorType, GrMipMapped::kNo,
35
- GrRenderable::kYes);
34
+ ->createBackendTexture(width, height, colorType,
35
+ skgpu::Mipmapped::kNo, GrRenderable::kYes);
36
36
 
37
37
  struct ReleaseContext {
38
38
  SkiaOpenGLContext *context;
@@ -5,12 +5,12 @@
5
5
  #include <utility>
6
6
 
7
7
  #include "JsiSkHostObjects.h"
8
+ #include "third_party/base64.h"
8
9
 
9
10
  #pragma clang diagnostic push
10
11
  #pragma clang diagnostic ignored "-Wdocumentation"
11
12
 
12
13
  #include "JsiSkImage.h"
13
- #include "SkBase64.h"
14
14
  #include "SkStream.h"
15
15
  #include "include/codec/SkEncodedImageFormat.h"
16
16
 
@@ -7,7 +7,7 @@
7
7
 
8
8
  #include "JsiPromises.h"
9
9
  #include "JsiSkData.h"
10
- #include "SkBase64.h"
10
+ #include "third_party/base64.h"
11
11
 
12
12
  namespace RNSkia {
13
13
 
@@ -67,17 +67,17 @@ public:
67
67
  // Calculate length
68
68
  size_t len;
69
69
  auto err =
70
- SkBase64::Decode(&base64.utf8(runtime).c_str()[0], size, nullptr, &len);
71
- if (err != SkBase64::Error::kNoError) {
70
+ Base64::Decode(&base64.utf8(runtime).c_str()[0], size, nullptr, &len);
71
+ if (err != Base64::Error::kNone) {
72
72
  throw jsi::JSError(runtime, "Error decoding base64 string");
73
73
  return jsi::Value::undefined();
74
74
  }
75
75
 
76
76
  // Create data object and decode
77
77
  auto data = SkData::MakeUninitialized(len);
78
- err = SkBase64::Decode(&base64.utf8(runtime).c_str()[0], size,
79
- data->writable_data(), &len);
80
- if (err != SkBase64::Error::kNoError) {
78
+ err = Base64::Decode(&base64.utf8(runtime).c_str()[0], size,
79
+ data->writable_data(), &len);
80
+ if (err != Base64::Error::kNone) {
81
81
  throw jsi::JSError(runtime, "Error decoding base64 string");
82
82
  return jsi::Value::undefined();
83
83
  }
@@ -8,13 +8,13 @@
8
8
  #include "JsiSkImageInfo.h"
9
9
  #include "JsiSkMatrix.h"
10
10
  #include "JsiSkShader.h"
11
+ #include "third_party/base64.h"
11
12
 
12
13
  #include "RNSkTypedArray.h"
13
14
 
14
15
  #pragma clang diagnostic push
15
16
  #pragma clang diagnostic ignored "-Wdocumentation"
16
17
 
17
- #include "SkBase64.h"
18
18
  #include "SkImage.h"
19
19
  #include "SkStream.h"
20
20
  #include "include/codec/SkEncodedImageFormat.h"
@@ -133,10 +133,10 @@ public:
133
133
  JSI_HOST_FUNCTION(encodeToBase64) {
134
134
  auto data = encodeImageData(arguments, count);
135
135
 
136
- auto len = SkBase64::Encode(data->bytes(), data->size(), nullptr);
136
+ auto len = Base64::Encode(data->bytes(), data->size(), nullptr);
137
137
  auto buffer = std::string(len, 0);
138
- SkBase64::Encode(data->bytes(), data->size(),
139
- reinterpret_cast<void *>(&buffer[0]));
138
+ Base64::Encode(data->bytes(), data->size(),
139
+ reinterpret_cast<void *>(&buffer[0]));
140
140
  return jsi::String::createFromAscii(runtime, buffer);
141
141
  }
142
142
 
@@ -494,7 +494,7 @@ public:
494
494
  JSI_HOST_FUNCTION(interpolate) {
495
495
  auto path2 = JsiSkPath::fromValue(runtime, arguments[0]);
496
496
  auto weight = arguments[1].asNumber();
497
- if (count > 2) {
497
+ if (count > 2 && !arguments[2].isUndefined()) {
498
498
  auto path3 = JsiSkPath::fromValue(runtime, arguments[2]);
499
499
  auto succeed = getObject()->interpolate(*path2, weight, path3.get());
500
500
  if (!succeed) {
@@ -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
 
@@ -61,9 +62,35 @@ public:
61
62
  } else {
62
63
  auto rect =
63
64
  JsiSkRect::fromValue(runtime, object.getProperty(runtime, "rect"));
64
- auto rx = object.getProperty(runtime, "rx").asNumber();
65
- auto ry = object.getProperty(runtime, "ry").asNumber();
66
- return std::make_shared<SkRRect>(SkRRect::MakeRectXY(*rect, rx, ry));
65
+ if (!object.getProperty(runtime, "rx").isUndefined()) {
66
+ auto rx = object.getProperty(runtime, "rx").asNumber();
67
+ auto ry = object.getProperty(runtime, "ry").asNumber();
68
+ return std::make_shared<SkRRect>(SkRRect::MakeRectXY(*rect, rx, ry));
69
+ } else if (object.getProperty(runtime, "topLeft").isObject() &&
70
+ object.getProperty(runtime, "topRight").isObject() &&
71
+ object.getProperty(runtime, "bottomRight").isObject() &&
72
+ object.getProperty(runtime, "bottomLeft").isObject()) {
73
+ std::vector<SkPoint> points;
74
+ std::shared_ptr<SkPoint> topLeft = JsiSkPoint::fromValue(
75
+ runtime, object.getProperty(runtime, "topLeft").asObject(runtime));
76
+ std::shared_ptr<SkPoint> topRight = JsiSkPoint::fromValue(
77
+ runtime, object.getProperty(runtime, "topRight").asObject(runtime));
78
+ std::shared_ptr<SkPoint> bottomRight = JsiSkPoint::fromValue(
79
+ runtime,
80
+ object.getProperty(runtime, "bottomRight").asObject(runtime));
81
+ std::shared_ptr<SkPoint> bottomLeft = JsiSkPoint::fromValue(
82
+ runtime,
83
+ object.getProperty(runtime, "bottomLeft").asObject(runtime));
84
+ points.push_back(*topLeft.get());
85
+ points.push_back(*topRight.get());
86
+ points.push_back(*bottomRight.get());
87
+ points.push_back(*bottomLeft.get());
88
+ auto rrect = SkRRect::MakeEmpty();
89
+ rrect.setRectRadii(*rect, points.data());
90
+ return std::make_shared<SkRRect>(rrect);
91
+ } else {
92
+ throw jsi::JSError(runtime, "Invalid RRect object");
93
+ }
67
94
  }
68
95
  }
69
96
 
@@ -0,0 +1,153 @@
1
+ /*
2
+ * Copyright 2006 The Android Open Source Project
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+ #include "third_party/base64.h"
8
+
9
+ #include <cstdint>
10
+
11
+ #define DecodePad -2
12
+ #define EncodePad 64
13
+
14
+ static const char kDefaultEncode[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
15
+ "abcdefghijklmnopqrstuvwxyz"
16
+ "0123456789+/=";
17
+
18
+ static const signed char kDecodeData[] = {
19
+ 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1,
20
+ -1, -1, DecodePad, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
21
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
22
+ -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
23
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51};
24
+
25
+ namespace RNSkia {
26
+
27
+ Base64::Error Base64::Decode(const void *srcv, size_t srcLength, void *dstv,
28
+ size_t *dstLength) {
29
+ const unsigned char *src = static_cast<const unsigned char *>(srcv);
30
+ unsigned char *dst = static_cast<unsigned char *>(dstv);
31
+
32
+ int i = 0;
33
+ bool padTwo = false;
34
+ bool padThree = false;
35
+ char unsigned const *const end = src + srcLength;
36
+ while (src < end) {
37
+ unsigned char bytes[4] = {0, 0, 0, 0};
38
+ int byte = 0;
39
+ do {
40
+ unsigned char srcByte = *src++;
41
+ if (srcByte == 0) {
42
+ *dstLength = i;
43
+ return Error::kNone;
44
+ }
45
+ if (srcByte <= ' ') {
46
+ continue; // treat as white space
47
+ }
48
+ if (srcByte < '+' || srcByte > 'z') {
49
+ return Error::kBadChar;
50
+ }
51
+ signed char decoded = kDecodeData[srcByte - '+'];
52
+ bytes[byte] = decoded;
53
+ if (decoded != DecodePad) {
54
+ if (decoded < 0) {
55
+ return Error::kBadChar;
56
+ }
57
+ byte++;
58
+ if (*src) {
59
+ continue;
60
+ }
61
+ if (byte == 0) {
62
+ *dstLength = i;
63
+ return Error::kNone;
64
+ }
65
+ if (byte == 4) {
66
+ break;
67
+ }
68
+ }
69
+ // As an optimization, if we find an equals sign
70
+ // we assume all future bytes to read are the
71
+ // appropriate number of padding equals signs.
72
+ if (byte < 2) {
73
+ return Error::kBadPadding;
74
+ }
75
+ padThree = true;
76
+ if (byte == 2) {
77
+ padTwo = true;
78
+ }
79
+ break;
80
+ } while (byte < 4);
81
+ int two = 0;
82
+ int three = 0;
83
+ if (dst) {
84
+ int one = (uint8_t)(bytes[0] << 2);
85
+ two = bytes[1];
86
+ one |= two >> 4;
87
+ two = (uint8_t)((two << 4) & 0xFF);
88
+ three = bytes[2];
89
+ two |= three >> 2;
90
+ three = (uint8_t)((three << 6) & 0xFF);
91
+ three |= bytes[3];
92
+ dst[i] = (unsigned char)one;
93
+ }
94
+ i++;
95
+ if (padTwo) {
96
+ break;
97
+ }
98
+ if (dst) {
99
+ dst[i] = (unsigned char)two;
100
+ }
101
+ i++;
102
+ if (padThree) {
103
+ break;
104
+ }
105
+ if (dst) {
106
+ dst[i] = (unsigned char)three;
107
+ }
108
+ i++;
109
+ }
110
+ *dstLength = i;
111
+ return Error::kNone;
112
+ }
113
+
114
+ size_t Base64::Encode(const void *srcv, size_t length, void *dstv) {
115
+ const unsigned char *src = static_cast<const unsigned char *>(srcv);
116
+ unsigned char *dst = static_cast<unsigned char *>(dstv);
117
+
118
+ const char *encode = kDefaultEncode;
119
+ if (dst) {
120
+ size_t remainder = length % 3;
121
+ char unsigned const *const end = &src[length - remainder];
122
+ while (src < end) {
123
+ unsigned a = *src++;
124
+ unsigned b = *src++;
125
+ unsigned c = *src++;
126
+ int d = c & 0x3F;
127
+ c = (c >> 6 | b << 2) & 0x3F;
128
+ b = (b >> 4 | a << 4) & 0x3F;
129
+ a = a >> 2;
130
+ *dst++ = encode[a];
131
+ *dst++ = encode[b];
132
+ *dst++ = encode[c];
133
+ *dst++ = encode[d];
134
+ }
135
+ if (remainder > 0) {
136
+ int k1 = 0;
137
+ int k2 = EncodePad;
138
+ int a = (uint8_t)*src++;
139
+ if (remainder == 2) {
140
+ int b = *src++;
141
+ k1 = b >> 4;
142
+ k2 = (b << 2) & 0x3F;
143
+ }
144
+ *dst++ = encode[a >> 2];
145
+ *dst++ = encode[(k1 | a << 4) & 0x3F];
146
+ *dst++ = encode[k2];
147
+ *dst++ = encode[EncodePad];
148
+ }
149
+ }
150
+ return (length + 2) / 3 * 4;
151
+ }
152
+
153
+ } // namespace RNSkia
@@ -0,0 +1,50 @@
1
+ /*
2
+ * Copyright 2006 The Android Open Source Project
3
+ *
4
+ * Use of this source code is governed by a BSD-style license that can be
5
+ * found in the LICENSE file.
6
+ */
7
+ #pragma once
8
+
9
+ #include <cstddef>
10
+
11
+ namespace RNSkia {
12
+
13
+ struct Base64 {
14
+ public:
15
+ enum class Error {
16
+ kNone,
17
+ kBadPadding,
18
+ kBadChar,
19
+ };
20
+
21
+ /**
22
+ Base64 encodes src into dst.
23
+
24
+ Normally this is called once with 'dst' nullptr to get the required size,
25
+ then again with an allocated 'dst' pointer to do the actual encoding.
26
+
27
+ @param dst nullptr or a pointer to a buffer large enough to receive the
28
+ result
29
+
30
+ @return the required length of dst for encoding.
31
+ */
32
+ static size_t Encode(const void *src, size_t length, void *dst);
33
+
34
+ /**
35
+ Base64 decodes src into dst.
36
+
37
+ Normally this is called once with 'dst' nullptr to get the required size,
38
+ then again with an allocated 'dst' pointer to do the actual encoding.
39
+
40
+ @param dst nullptr or a pointer to a buffer large enough to receive the
41
+ result
42
+
43
+ @param dstLength assigned the length dst is required to be. Must not be
44
+ nullptr.
45
+ */
46
+ [[nodiscard]] static Error Decode(const void *src, size_t srcLength,
47
+ void *dst, size_t *dstLength);
48
+ };
49
+
50
+ } // namespace RNSkia
@@ -6,7 +6,7 @@
6
6
 
7
7
  #include <jsi/jsi.h>
8
8
 
9
- #include "SkBase64.h"
9
+ #include "third_party/base64.h"
10
10
 
11
11
  namespace RNJsi {
12
12
  namespace jsi = facebook::jsi;
@@ -31,7 +31,10 @@ public:
31
31
  "Expected SkFont object or null/undefined for the Font property.");
32
32
  }
33
33
  } else {
34
- auto font = std::make_shared<SkFont>(SkFont());
34
+ auto fm = SkFontMgr::RefDefault();
35
+ sk_sp<SkTypeface> typeface =
36
+ fm->legacyMakeTypeface(nullptr, SkFontStyle());
37
+ auto font = std::make_shared<SkFont>(SkFont(typeface));
35
38
  font->setSize(14);
36
39
  setDerivedValue(font);
37
40
  }
@@ -5,6 +5,7 @@
5
5
  #include "RectProp.h"
6
6
 
7
7
  #include <memory>
8
+ #include <vector>
8
9
 
9
10
  #pragma clang diagnostic push
10
11
  #pragma clang diagnostic ignored "-Wdocumentation"
@@ -19,6 +20,10 @@ namespace RNSkia {
19
20
  static PropId PropNameRx = JsiPropId::get("rx");
20
21
  static PropId PropNameRy = JsiPropId::get("ry");
21
22
  static PropId PropNameR = JsiPropId::get("r");
23
+ static PropId PropNameTopLeft = JsiPropId::get("topLeft");
24
+ static PropId PropNameTopRight = JsiPropId::get("topRight");
25
+ static PropId PropNameBottomRight = JsiPropId::get("bottomRight");
26
+ static PropId PropNameBottomLeft = JsiPropId::get("bottomLeft");
22
27
 
23
28
  /**
24
29
  Reads a rect from a given propety in the node. The name of the property is
@@ -64,6 +69,51 @@ public:
64
69
  width.getAsNumber(), height.getAsNumber()),
65
70
  rx.getAsNumber(), ry.getAsNumber()));
66
71
  }
72
+ } else if (value.hasValue(PropNameRect) &&
73
+ value.hasValue(PropNameTopLeft) &&
74
+ value.hasValue(PropNameTopRight) &&
75
+ value.hasValue(PropNameBottomRight) &&
76
+ value.hasValue(PropNameBottomLeft)) {
77
+ auto rect = value.getValue(PropNameRect);
78
+ if (rect.hasValue(PropNameX) && rect.hasValue(PropNameY) &&
79
+ rect.hasValue(PropNameWidth) && rect.hasValue(PropNameHeight)) {
80
+ auto x = rect.getValue(PropNameX);
81
+ auto y = rect.getValue(PropNameY);
82
+ auto width = rect.getValue(PropNameWidth);
83
+ auto height = rect.getValue(PropNameHeight);
84
+ std::vector<SkPoint> points;
85
+ points.reserve(4);
86
+ auto topLeft = value.getValue(PropNameTopLeft);
87
+ auto topLeftX = topLeft.getValue(PropNameX);
88
+ auto topLeftY = topLeft.getValue(PropNameY);
89
+ points.push_back(
90
+ SkPoint::Make(topLeftX.getAsNumber(), topLeftY.getAsNumber()));
91
+
92
+ auto topRight = value.getValue(PropNameTopRight);
93
+ auto topRightX = topRight.getValue(PropNameX);
94
+ auto topRightY = topRight.getValue(PropNameY);
95
+ points.push_back(SkPoint::Make(topRightX.getAsNumber(),
96
+ topRightY.getAsNumber()));
97
+
98
+ auto bottomRight = value.getValue(PropNameBottomRight);
99
+ auto bottomRightX = bottomRight.getValue(PropNameX);
100
+ auto bottomRightY = bottomRight.getValue(PropNameY);
101
+ points.push_back(SkPoint::Make(bottomRightX.getAsNumber(),
102
+ bottomRightY.getAsNumber()));
103
+
104
+ auto bottomLeft = value.getValue(PropNameBottomLeft);
105
+ auto bottomLeftX = bottomLeft.getValue(PropNameX);
106
+ auto bottomLeftY = bottomLeft.getValue(PropNameY);
107
+ points.push_back(SkPoint::Make(bottomLeftX.getAsNumber(),
108
+ bottomLeftY.getAsNumber()));
109
+
110
+ auto rrect = std::make_shared<SkRRect>(SkRRect::MakeEmpty());
111
+ rrect->setRectRadii(
112
+ SkRect::MakeXYWH(x.getAsNumber(), y.getAsNumber(),
113
+ width.getAsNumber(), height.getAsNumber()),
114
+ points.data());
115
+ return rrect;
116
+ }
67
117
  }
68
118
  }
69
119
  }
@@ -92,7 +92,7 @@ sk_sp<SkSurface> SkiaMetalSurfaceFactory::makeOffscreenSurface(int width,
92
92
  // Create a GrBackendTexture from the Metal texture
93
93
  GrMtlTextureInfo info;
94
94
  info.fTexture.retain((__bridge void *)ctx->texture);
95
- GrBackendTexture backendTexture(width, height, GrMipMapped::kNo, info);
95
+ GrBackendTexture backendTexture(width, height, skgpu::Mipmapped::kNo, info);
96
96
 
97
97
  // Create a SkSurface from the GrBackendTexture
98
98
  auto surface = SkSurfaces::WrapBackendTexture(
@@ -2,6 +2,7 @@ import type { PathProps, SkDOM, GroupProps, ImageProps, BlurImageFilterProps, Ma
2
2
  import type { BlendImageFilterProps, BlendProps, DisplacementMapImageFilterProps, DropShadowImageFilterProps, MorphologyImageFilterProps, RuntimeShaderImageFilterProps } from "../types/ImageFilters";
3
3
  import type { CornerPathEffectProps, DashPathEffectProps, DiscretePathEffectProps, Line2DPathEffectProps, Path1DPathEffectProps, Path2DPathEffectProps } from "../types/PathEffects";
4
4
  import type { ParagraphProps } from "../types/Paragraph";
5
+ import { RRectNode } from "./drawings";
5
6
  import type { NodeContext } from "./Node";
6
7
  export declare class JsiSkDOM implements SkDOM {
7
8
  private ctx;
@@ -18,7 +19,7 @@ export declare class JsiSkDOM implements SkDOM {
18
19
  Patch(props: PatchProps): import("../types").RenderNode<PatchProps>;
19
20
  Points(props: PointsProps): import("../types").RenderNode<PointsProps>;
20
21
  Rect(props: RectProps): import("./DrawingNode").JsiDrawingNode<RectProps, import("../..").SkRect>;
21
- RRect(props: RoundedRectProps): import("./DrawingNode").JsiDrawingNode<RoundedRectProps, import("../..").SkRRect>;
22
+ RRect(props: RoundedRectProps): import("./DrawingNode").JsiDrawingNode<RoundedRectProps, import("../..").SkRRect> | RRectNode;
22
23
  Vertices(props: VerticesProps): import("../types").RenderNode<VerticesProps>;
23
24
  Text(props: TextProps): import("../types").RenderNode<TextProps>;
24
25
  TextPath(props: TextPathProps): import("../types").RenderNode<TextPathProps>;
@@ -2,4 +2,4 @@ import type { Skia, SkRect, Vector } from "../../../skia/types";
2
2
  import type { RectDef, RRectDef } from "../../types";
3
3
  export declare const isEdge: (pos: Vector, b: SkRect) => boolean;
4
4
  export declare const processRect: (Skia: Skia, def: RectDef) => SkRect;
5
- export declare const processRRect: (Skia: Skia, def: RRectDef) => import("../../../skia/types").SkRRect;
5
+ export declare const processRRect: (Skia: Skia, def: RRectDef) => import("../../../skia/types").InputRRect;
@@ -1,10 +1,10 @@
1
- import type { SkRRect } from "../../../skia/types";
1
+ import type { InputRRect, SkRRect } from "../../../skia/types";
2
2
  import type { DrawingContext, RoundedRectProps } from "../../types";
3
3
  import { JsiDrawingNode } from "../DrawingNode";
4
4
  import type { NodeContext } from "../Node";
5
- export declare class RRectNode extends JsiDrawingNode<RoundedRectProps, SkRRect> {
5
+ export declare class RRectNode extends JsiDrawingNode<RoundedRectProps, InputRRect> {
6
6
  rect?: SkRRect;
7
7
  constructor(ctx: NodeContext, props: RoundedRectProps);
8
- protected deriveProps(): SkRRect;
8
+ protected deriveProps(): InputRRect;
9
9
  draw({ canvas, paint }: DrawingContext): void;
10
10
  }
@@ -1 +1 @@
1
- {"version":3,"names":["RRectNode","JsiDrawingNode","constructor","ctx","props","NodeType","RRect","deriveProps","processRRect","Skia","draw","canvas","paint","derived","undefined","Error","drawRRect"],"sources":["RRectNode.ts"],"sourcesContent":["import type { SkRRect } from \"../../../skia/types\";\nimport type { DrawingContext, RoundedRectProps } from \"../../types\";\nimport { NodeType } from \"../../types\";\nimport { processRRect } from \"../datatypes\";\nimport { JsiDrawingNode } from \"../DrawingNode\";\nimport type { NodeContext } from \"../Node\";\n\nexport class RRectNode extends JsiDrawingNode<RoundedRectProps, SkRRect> {\n rect?: SkRRect;\n\n constructor(ctx: NodeContext, props: RoundedRectProps) {\n super(ctx, NodeType.RRect, props);\n }\n\n protected deriveProps() {\n return processRRect(this.Skia, this.props);\n }\n\n draw({ canvas, paint }: DrawingContext) {\n if (this.derived === undefined) {\n throw new Error(\"RRectNode: rect is undefined\");\n }\n canvas.drawRRect(this.derived, paint);\n }\n}\n"],"mappings":";;;;;;;AAEA;;AACA;;AACA;;;;AAGO,MAAMA,SAAN,SAAwBC,2BAAxB,CAAkE;EAGvEC,WAAW,CAACC,GAAD,EAAmBC,KAAnB,EAA4C;IACrD,MAAMD,GAAN,EAAWE,eAAA,CAASC,KAApB,EAA2BF,KAA3B;;IADqD;EAEtD;;EAESG,WAAW,GAAG;IACtB,OAAO,IAAAC,uBAAA,EAAa,KAAKC,IAAlB,EAAwB,KAAKL,KAA7B,CAAP;EACD;;EAEDM,IAAI,OAAoC;IAAA,IAAnC;MAAEC,MAAF;MAAUC;IAAV,CAAmC;;IACtC,IAAI,KAAKC,OAAL,KAAiBC,SAArB,EAAgC;MAC9B,MAAM,IAAIC,KAAJ,CAAU,8BAAV,CAAN;IACD;;IACDJ,MAAM,CAACK,SAAP,CAAiB,KAAKH,OAAtB,EAA+BD,KAA/B;EACD;;AAhBsE"}
1
+ {"version":3,"names":["RRectNode","JsiDrawingNode","constructor","ctx","props","NodeType","RRect","deriveProps","processRRect","Skia","draw","canvas","paint","derived","undefined","Error","drawRRect"],"sources":["RRectNode.ts"],"sourcesContent":["import type { InputRRect, SkRRect } from \"../../../skia/types\";\nimport type { DrawingContext, RoundedRectProps } from \"../../types\";\nimport { NodeType } from \"../../types\";\nimport { processRRect } from \"../datatypes\";\nimport { JsiDrawingNode } from \"../DrawingNode\";\nimport type { NodeContext } from \"../Node\";\n\nexport class RRectNode extends JsiDrawingNode<RoundedRectProps, InputRRect> {\n rect?: SkRRect;\n\n constructor(ctx: NodeContext, props: RoundedRectProps) {\n super(ctx, NodeType.RRect, props);\n }\n\n protected deriveProps() {\n return processRRect(this.Skia, this.props);\n }\n\n draw({ canvas, paint }: DrawingContext) {\n if (this.derived === undefined) {\n throw new Error(\"RRectNode: rect is undefined\");\n }\n canvas.drawRRect(this.derived, paint);\n }\n}\n"],"mappings":";;;;;;;AAEA;;AACA;;AACA;;;;AAGO,MAAMA,SAAN,SAAwBC,2BAAxB,CAAqE;EAG1EC,WAAW,CAACC,GAAD,EAAmBC,KAAnB,EAA4C;IACrD,MAAMD,GAAN,EAAWE,eAAA,CAASC,KAApB,EAA2BF,KAA3B;;IADqD;EAEtD;;EAESG,WAAW,GAAG;IACtB,OAAO,IAAAC,uBAAA,EAAa,KAAKC,IAAlB,EAAwB,KAAKL,KAA7B,CAAP;EACD;;EAEDM,IAAI,OAAoC;IAAA,IAAnC;MAAEC,MAAF;MAAUC;IAAV,CAAmC;;IACtC,IAAI,KAAKC,OAAL,KAAiBC,SAArB,EAAgC;MAC9B,MAAM,IAAIC,KAAJ,CAAU,8BAAV,CAAN;IACD;;IACDJ,MAAM,CAACK,SAAP,CAAiB,KAAKH,OAAtB,EAA+BD,KAA/B;EACD;;AAhByE"}
@@ -1,5 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
- import type { BlendMode, Color, InputMatrix, PaintStyle, SkPaint, SkPath, SkRect, SkRRect, StrokeCap, StrokeJoin, Transforms3d, Vector } from "../../skia/types";
2
+ import type { BlendMode, Color, InputMatrix, InputRRect, PaintStyle, SkPaint, SkPath, SkRect, SkRRect, StrokeCap, StrokeJoin, Transforms3d, Vector } from "../../skia/types";
3
3
  export type SkEnum<T> = Uncapitalize<keyof T extends string ? keyof T : never>;
4
4
  export type PathDef = string | SkPath;
5
5
  export type ClipDef = SkRRect | SkRect | PathDef;
@@ -21,7 +21,7 @@ export type RectDef = RectCtor | {
21
21
  rect: SkRect;
22
22
  };
23
23
  export type RRectDef = RRectCtor | {
24
- rect: SkRRect;
24
+ rect: InputRRect;
25
25
  };
26
26
  export interface PointCircleDef {
27
27
  c?: Vector;
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["Common.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nimport type {\n BlendMode,\n Color,\n InputMatrix,\n PaintStyle,\n SkPaint,\n SkPath,\n SkRect,\n SkRRect,\n StrokeCap,\n StrokeJoin,\n Transforms3d,\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?: Transforms3d;\n origin?: Vector;\n matrix?: InputMatrix;\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":""}
1
+ {"version":3,"names":[],"sources":["Common.ts"],"sourcesContent":["import type { ReactNode } from \"react\";\n\nimport type {\n BlendMode,\n Color,\n InputMatrix,\n InputRRect,\n PaintStyle,\n SkPaint,\n SkPath,\n SkRect,\n SkRRect,\n StrokeCap,\n StrokeJoin,\n Transforms3d,\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: InputRRect };\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?: Transforms3d;\n origin?: Vector;\n matrix?: InputMatrix;\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":""}
@@ -1,3 +1,5 @@
1
1
  import type { ReactNode } from "react";
2
+ import type { SkSurface } from "../skia";
2
3
  export * from "../renderer/components";
3
- export declare const draw: (element: ReactNode, width: number, height: number) => any;
4
+ export declare const makeOffscreenSurface: (width: number, height: number) => any;
5
+ export declare const drawOffscreen: (surface: SkSurface, element: ReactNode) => import("../skia").SkImage;
@@ -4,9 +4,10 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  var _exportNames = {
7
- draw: true
7
+ makeOffscreenSurface: true,
8
+ drawOffscreen: true
8
9
  };
9
- exports.draw = void 0;
10
+ exports.makeOffscreenSurface = exports.drawOffscreen = void 0;
10
11
 
11
12
  var _web = require("../skia/web");
12
13
 
@@ -32,7 +33,7 @@ Object.keys(_components).forEach(function (key) {
32
33
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
33
34
  let Skia;
34
35
 
35
- const draw = (element, width, height) => {
36
+ const makeOffscreenSurface = (width, height) => {
36
37
  if (!Skia) {
37
38
  Skia = (0, _web.JsiSkApi)(CanvasKit);
38
39
  }
@@ -43,15 +44,20 @@ const draw = (element, width, height) => {
43
44
  throw new Error("Couldn't create surface!");
44
45
  }
45
46
 
47
+ return surface;
48
+ };
49
+
50
+ exports.makeOffscreenSurface = makeOffscreenSurface;
51
+
52
+ const drawOffscreen = (surface, element) => {
46
53
  const root = new _Reconciler.SkiaRoot(Skia);
47
54
  root.render(element);
48
55
  const canvas = surface.getCanvas();
49
56
  const ctx = new _types.JsiDrawingContext(Skia, canvas);
50
57
  root.dom.render(ctx);
51
58
  surface.flush();
52
- const image = surface.makeImageSnapshot();
53
- return image;
59
+ return surface.makeImageSnapshot();
54
60
  };
55
61
 
56
- exports.draw = draw;
62
+ exports.drawOffscreen = drawOffscreen;
57
63
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["Skia","draw","element","width","height","JsiSkApi","CanvasKit","surface","Surface","MakeOffscreen","Error","root","SkiaRoot","render","canvas","getCanvas","ctx","JsiDrawingContext","dom","flush","image","makeImageSnapshot"],"sources":["index.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CanvasKitInit from \"canvaskit-wasm/bin/full/canvaskit\";\nimport type { ReactNode } from \"react\";\n\nimport { JsiSkApi } from \"../skia/web\";\nimport { SkiaRoot } from \"../renderer/Reconciler\";\nimport { JsiDrawingContext } from \"../dom/types\";\n\nexport * from \"../renderer/components\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Skia: any;\n\nexport const draw = (element: ReactNode, width: number, height: number) => {\n if (!Skia) {\n Skia = JsiSkApi(CanvasKit);\n }\n const surface = Skia.Surface.MakeOffscreen(width, height);\n if (surface === null) {\n throw new Error(\"Couldn't create surface!\");\n }\n const root = new SkiaRoot(Skia);\n root.render(element);\n const canvas = surface.getCanvas();\n const ctx = new JsiDrawingContext(Skia, canvas);\n root.dom.render(ctx);\n surface.flush();\n const image = surface.makeImageSnapshot();\n return image;\n};\n"],"mappings":";;;;;;;;;;AAKA;;AACA;;AACA;;AAEA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AATA;AACA;AAUA;AACA,IAAIA,IAAJ;;AAEO,MAAMC,IAAI,GAAG,CAACC,OAAD,EAAqBC,KAArB,EAAoCC,MAApC,KAAuD;EACzE,IAAI,CAACJ,IAAL,EAAW;IACTA,IAAI,GAAG,IAAAK,aAAA,EAASC,SAAT,CAAP;EACD;;EACD,MAAMC,OAAO,GAAGP,IAAI,CAACQ,OAAL,CAAaC,aAAb,CAA2BN,KAA3B,EAAkCC,MAAlC,CAAhB;;EACA,IAAIG,OAAO,KAAK,IAAhB,EAAsB;IACpB,MAAM,IAAIG,KAAJ,CAAU,0BAAV,CAAN;EACD;;EACD,MAAMC,IAAI,GAAG,IAAIC,oBAAJ,CAAaZ,IAAb,CAAb;EACAW,IAAI,CAACE,MAAL,CAAYX,OAAZ;EACA,MAAMY,MAAM,GAAGP,OAAO,CAACQ,SAAR,EAAf;EACA,MAAMC,GAAG,GAAG,IAAIC,wBAAJ,CAAsBjB,IAAtB,EAA4Bc,MAA5B,CAAZ;EACAH,IAAI,CAACO,GAAL,CAASL,MAAT,CAAgBG,GAAhB;EACAT,OAAO,CAACY,KAAR;EACA,MAAMC,KAAK,GAAGb,OAAO,CAACc,iBAAR,EAAd;EACA,OAAOD,KAAP;AACD,CAhBM"}
1
+ {"version":3,"names":["Skia","makeOffscreenSurface","width","height","JsiSkApi","CanvasKit","surface","Surface","MakeOffscreen","Error","drawOffscreen","element","root","SkiaRoot","render","canvas","getCanvas","ctx","JsiDrawingContext","dom","flush","makeImageSnapshot"],"sources":["index.ts"],"sourcesContent":["// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nimport CanvasKitInit from \"canvaskit-wasm/bin/full/canvaskit\";\nimport type { ReactNode } from \"react\";\n\nimport { JsiSkApi } from \"../skia/web\";\nimport { SkiaRoot } from \"../renderer/Reconciler\";\nimport { JsiDrawingContext } from \"../dom/types\";\nimport type { SkSurface } from \"../skia\";\n\nexport * from \"../renderer/components\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet Skia: any;\n\nexport const makeOffscreenSurface = (width: number, height: number) => {\n if (!Skia) {\n Skia = JsiSkApi(CanvasKit);\n }\n const surface = Skia.Surface.MakeOffscreen(width, height);\n if (surface === null) {\n throw new Error(\"Couldn't create surface!\");\n }\n return surface;\n};\n\nexport const drawOffscreen = (surface: SkSurface, element: ReactNode) => {\n const root = new SkiaRoot(Skia);\n root.render(element);\n const canvas = surface.getCanvas();\n const ctx = new JsiDrawingContext(Skia, canvas);\n root.dom.render(ctx);\n surface.flush();\n return surface.makeImageSnapshot();\n};\n"],"mappings":";;;;;;;;;;;AAKA;;AACA;;AACA;;AAGA;;AAAA;EAAA;EAAA;EAAA;EAAA;IAAA;IAAA;MAAA;IAAA;EAAA;AAAA;AAVA;AACA;AAWA;AACA,IAAIA,IAAJ;;AAEO,MAAMC,oBAAoB,GAAG,CAACC,KAAD,EAAgBC,MAAhB,KAAmC;EACrE,IAAI,CAACH,IAAL,EAAW;IACTA,IAAI,GAAG,IAAAI,aAAA,EAASC,SAAT,CAAP;EACD;;EACD,MAAMC,OAAO,GAAGN,IAAI,CAACO,OAAL,CAAaC,aAAb,CAA2BN,KAA3B,EAAkCC,MAAlC,CAAhB;;EACA,IAAIG,OAAO,KAAK,IAAhB,EAAsB;IACpB,MAAM,IAAIG,KAAJ,CAAU,0BAAV,CAAN;EACD;;EACD,OAAOH,OAAP;AACD,CATM;;;;AAWA,MAAMI,aAAa,GAAG,CAACJ,OAAD,EAAqBK,OAArB,KAA4C;EACvE,MAAMC,IAAI,GAAG,IAAIC,oBAAJ,CAAab,IAAb,CAAb;EACAY,IAAI,CAACE,MAAL,CAAYH,OAAZ;EACA,MAAMI,MAAM,GAAGT,OAAO,CAACU,SAAR,EAAf;EACA,MAAMC,GAAG,GAAG,IAAIC,wBAAJ,CAAsBlB,IAAtB,EAA4Be,MAA5B,CAAZ;EACAH,IAAI,CAACO,GAAL,CAASL,MAAT,CAAgBG,GAAhB;EACAX,OAAO,CAACc,KAAR;EACA,OAAOd,OAAO,CAACe,iBAAR,EAAP;AACD,CARM"}
@@ -5,7 +5,7 @@ import type { SkPath } from "./Path";
5
5
  import type { SkImage, MipmapMode, FilterMode, ImageInfo } from "./Image";
6
6
  import type { SkSVG } from "./SVG";
7
7
  import type { SkColor } from "./Color";
8
- import type { SkRRect } from "./RRect";
8
+ import type { InputRRect } from "./RRect";
9
9
  import type { BlendMode } from "./Paint/BlendMode";
10
10
  import type { SkPoint, PointMode } from "./Point";
11
11
  import type { InputMatrix } from "./Matrix";
@@ -202,7 +202,7 @@ export interface SkCanvas {
202
202
  * @param rrect
203
203
  * @param paint
204
204
  */
205
- drawRRect(rrect: SkRRect, paint: SkPaint): void;
205
+ drawRRect(rrect: InputRRect, paint: SkPaint): void;
206
206
  /**
207
207
  * Draws RRect outer and inner using clip, Matrix, and Paint paint.
208
208
  * outer must contain inner or the drawing is undefined.
@@ -210,7 +210,7 @@ export interface SkCanvas {
210
210
  * @param inner
211
211
  * @param paint
212
212
  */
213
- drawDRRect(outer: SkRRect, inner: SkRRect, paint: SkPaint): void;
213
+ drawDRRect(outer: InputRRect, inner: InputRRect, paint: SkPaint): void;
214
214
  /**
215
215
  * Draws an oval bounded by the given rectangle using the current clip, current matrix,
216
216
  * and the provided paint.
@@ -367,7 +367,7 @@ export interface SkCanvas {
367
367
  * @param op
368
368
  * @param doAntiAlias
369
369
  */
370
- clipRRect(rrect: SkRRect, op: ClipOp, doAntiAlias: boolean): void;
370
+ clipRRect(rrect: InputRRect, op: ClipOp, doAntiAlias: boolean): void;
371
371
  /**
372
372
  * Replaces current matrix with m premultiplied with the existing matrix.
373
373
  * @param m