24
24
namespace RNSkia {
25
25
26
26
namespace jsi = facebook::jsi;
27
-
28
27
namespace para = skia::textlayout;
29
28
30
29
/* *
31
- Implementation of the Paragraph object in JSI
30
+ * Implementation of the Paragraph object in JSI
32
31
*/
33
- class JsiSkParagraph : public JsiSkHostObject {
32
+ class JsiSkParagraph
33
+ : public JsiSkWrappingSharedPtrHostObject<para::Paragraph> {
34
34
public:
35
35
EXPORT_JSI_API_TYPENAME (JsiSkParagraph, Paragraph)
36
36
37
37
JSI_HOST_FUNCTION (layout) {
38
38
auto width = getArgumentAsNumber (runtime, arguments, count, 0 );
39
- _paragraph ->layout (width);
39
+ getObject () ->layout (width);
40
40
return jsi::Value::undefined ();
41
41
}
42
42
@@ -45,43 +45,43 @@ class JsiSkParagraph : public JsiSkHostObject {
45
45
getArgumentAsHostObject<JsiSkCanvas>(runtime, arguments, count, 0 );
46
46
auto x = getArgumentAsNumber (runtime, arguments, count, 1 );
47
47
auto y = getArgumentAsNumber (runtime, arguments, count, 2 );
48
- _paragraph ->paint (jsiCanvas->getCanvas (), x, y);
48
+ getObject () ->paint (jsiCanvas->getCanvas (), x, y);
49
49
return jsi::Value::undefined ();
50
50
}
51
51
52
52
JSI_HOST_FUNCTION (getHeight) {
53
- return static_cast <double >(_paragraph ->getHeight ());
53
+ return static_cast <double >(getObject () ->getHeight ());
54
54
}
55
55
56
56
JSI_HOST_FUNCTION (getMaxWidth) {
57
- return static_cast <double >(_paragraph ->getMaxWidth ());
57
+ return static_cast <double >(getObject () ->getMaxWidth ());
58
58
}
59
59
60
60
JSI_HOST_FUNCTION (getMaxIntrinsicWidth) {
61
- return static_cast <double >(_paragraph ->getMaxIntrinsicWidth ());
61
+ return static_cast <double >(getObject () ->getMaxIntrinsicWidth ());
62
62
}
63
63
64
64
JSI_HOST_FUNCTION (getMinIntrinsicWidth) {
65
- return static_cast <double >(_paragraph ->getMinIntrinsicWidth ());
65
+ return static_cast <double >(getObject () ->getMinIntrinsicWidth ());
66
66
}
67
67
68
68
JSI_HOST_FUNCTION (getLongestLine) {
69
- return static_cast <double >(_paragraph ->getLongestLine ());
69
+ return static_cast <double >(getObject () ->getLongestLine ());
70
70
}
71
71
72
72
JSI_HOST_FUNCTION (getGlyphPositionAtCoordinate) {
73
73
auto dx = getArgumentAsNumber (runtime, arguments, count, 0 );
74
74
auto dy = getArgumentAsNumber (runtime, arguments, count, 1 );
75
- auto result = _paragraph ->getGlyphPositionAtCoordinate (dx, dy);
75
+ auto result = getObject () ->getGlyphPositionAtCoordinate (dx, dy);
76
76
return result.position ;
77
77
}
78
78
79
79
JSI_HOST_FUNCTION (getRectsForRange) {
80
80
auto start = getArgumentAsNumber (runtime, arguments, count, 0 );
81
81
auto end = getArgumentAsNumber (runtime, arguments, count, 1 );
82
82
auto result =
83
- _paragraph ->getRectsForRange (start, end, para::RectHeightStyle::kTight ,
84
- para::RectWidthStyle::kTight );
83
+ getObject () ->getRectsForRange (start, end, para::RectHeightStyle::kTight ,
84
+ para::RectWidthStyle::kTight );
85
85
auto returnValue = jsi::Array (runtime, result.size ());
86
86
for (size_t i = 0 ; i < result.size (); ++i) {
87
87
returnValue.setValueAtIndex (
@@ -93,7 +93,7 @@ class JsiSkParagraph : public JsiSkHostObject {
93
93
94
94
JSI_HOST_FUNCTION (getLineMetrics) {
95
95
std::vector<para::LineMetrics> metrics;
96
- _paragraph ->getLineMetrics (metrics);
96
+ getObject () ->getLineMetrics (metrics);
97
97
auto returnValue = jsi::Array (runtime, metrics.size ());
98
98
auto height = 0 ;
99
99
for (size_t i = 0 ; i < metrics.size (); ++i) {
@@ -110,7 +110,7 @@ class JsiSkParagraph : public JsiSkHostObject {
110
110
111
111
JSI_HOST_FUNCTION (getRectsForPlaceholders) {
112
112
std::vector<para::TextBox> placeholderInfos =
113
- _paragraph ->getRectsForPlaceholders ();
113
+ getObject () ->getRectsForPlaceholders ();
114
114
auto returnValue = jsi::Array (runtime, placeholderInfos.size ());
115
115
for (size_t i = 0 ; i < placeholderInfos.size (); ++i) {
116
116
auto obj = jsi::Object (runtime);
@@ -124,12 +124,6 @@ class JsiSkParagraph : public JsiSkHostObject {
124
124
return returnValue;
125
125
}
126
126
127
- JSI_HOST_FUNCTION (dispose) {
128
- _paragraph = nullptr ;
129
-
130
- return jsi::Value::undefined ();
131
- }
132
-
133
127
JSI_EXPORT_FUNCTIONS (JSI_EXPORT_FUNC(JsiSkParagraph, layout),
134
128
JSI_EXPORT_FUNC (JsiSkParagraph, paint),
135
129
JSI_EXPORT_FUNC (JsiSkParagraph, getMaxWidth),
@@ -146,12 +140,8 @@ class JsiSkParagraph : public JsiSkHostObject {
146
140
147
141
explicit JsiSkParagraph (std::shared_ptr<RNSkPlatformContext> context,
148
142
para::ParagraphBuilder *paragraphBuilder)
149
- : JsiSkHostObject(std::move(context)) {
150
- _paragraph = paragraphBuilder->Build ();
151
- }
152
-
153
- public:
154
- std::unique_ptr<para::Paragraph> _paragraph;
143
+ : JsiSkWrappingSharedPtrHostObject<para::Paragraph>(
144
+ std::move (context), std::move(paragraphBuilder->Build ())) {}
155
145
};
156
146
157
147
} // namespace RNSkia
0 commit comments