1 #pragma once
2 
3 #include <memory>
4 #include <utility>
5 
6 #include "JsiSkContourMeasure.h"
7 #include "JsiSkHostObjects.h"
8 
9 #pragma clang diagnostic push
10 #pragma clang diagnostic ignored "-Wdocumentation"
11 
12 #include "SkContourMeasure.h"
13 
14 #include "JsiSkPath.h"
15 
16 #pragma clang diagnostic pop
17 
18 namespace RNSkia {
19 
20 namespace jsi = facebook::jsi;
21 
22 class JsiSkContourMeasureIter
23     : public JsiSkWrappingSharedPtrHostObject<SkContourMeasureIter> {
24 public:
25   JsiSkContourMeasureIter(std::shared_ptr<RNSkPlatformContext> context,
26                           const SkPath &path, bool forceClosed,
27                           SkScalar resScale = 1)
28       : JsiSkWrappingSharedPtrHostObject<SkContourMeasureIter>(
29             std::move(context), std::make_shared<SkContourMeasureIter>(
30                                     path, forceClosed, resScale)) {}
31 
JSI_HOST_FUNCTION(next)32   JSI_HOST_FUNCTION(next) {
33     auto next = getObject()->next();
34     if (next == nullptr) {
35       return jsi::Value::undefined();
36     }
37     auto nextObject =
38         std::make_shared<JsiSkContourMeasure>(getContext(), std::move(next));
39 
40     return jsi::Object::createFromHostObject(runtime, std::move(nextObject));
41   }
42 
43   EXPORT_JSI_API_TYPENAME(JsiSkContourMeasureIter, "ContourMeasureIter")
44 
JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC (JsiSkContourMeasureIter,next),JSI_EXPORT_FUNC (JsiSkContourMeasureIter,dispose))45   JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkContourMeasureIter, next),
46                        JSI_EXPORT_FUNC(JsiSkContourMeasureIter, dispose))
47 
48   /**
49    * Creates the function for construction a new instance of the
50    * SkContourMeasureIter wrapper
51    * @param context platform context
52    * @return A function for creating a new host object wrapper for the
53    * SkContourMeasureIter class
54    */
55   static const jsi::HostFunctionType
56   createCtor(std::shared_ptr<RNSkPlatformContext> context) {
57     return JSI_HOST_FUNCTION_LAMBDA {
58       auto path = JsiSkPath::fromValue(runtime, arguments[0]);
59       auto forceClosed = arguments[1].getBool();
60       auto resScale = arguments[2].asNumber();
61       // Return the newly constructed object
62       return jsi::Object::createFromHostObject(
63           runtime, std::make_shared<JsiSkContourMeasureIter>(
64                        std::move(context), *path, forceClosed, resScale));
65     };
66   }
67 };
68 } // namespace RNSkia
69