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