#pragma once #include "JsiSkHostObjects.h" #include #include #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wdocumentation" #include #pragma clang diagnostic pop namespace ABI47_0_0RNSkia { using namespace ABI47_0_0facebook; class JsiSkPicture : public JsiSkWrappingSkPtrHostObject { public: JsiSkPicture(std::shared_ptr context, const sk_sp picture) : JsiSkWrappingSkPtrHostObject(context, picture) {}; JSI_PROPERTY_GET(__typename__) { return jsi::String::createFromUtf8(runtime, "Picture"); } JSI_EXPORT_PROPERTY_GETTERS(JSI_EXPORT_PROP_GET(JsiSkPicture, __typename__)) JSI_HOST_FUNCTION(makeShader) { auto tmx = (SkTileMode)arguments[0].asNumber(); auto tmy = (SkTileMode)arguments[1].asNumber(); auto fm = (SkFilterMode)arguments[2].asNumber(); auto m = count > 3 && !arguments[3].isUndefined() ? JsiSkMatrix::fromValue(runtime, arguments[3]).get() : nullptr; auto tr = count > 4 && !arguments[4].isUndefined() ? JsiSkRect::fromValue(runtime, arguments[4]).get() : nullptr; // Create shader auto shader = getObject()->makeShader(tmx, tmy, fm, m, tr); return jsi::Object::createFromHostObject( runtime, std::make_shared(getContext(), shader)); } JSI_HOST_FUNCTION(serialize) { auto data = getObject()->serialize(); auto arrayCtor = runtime.global().getPropertyAsFunction(runtime, "Uint8Array"); size_t size = data->size(); jsi::Object array = arrayCtor.callAsConstructor(runtime, static_cast(size)).getObject(runtime); jsi::ArrayBuffer buffer = array .getProperty(runtime, jsi::PropNameID::forAscii(runtime, "buffer")) .asObject(runtime) .getArrayBuffer(runtime); auto bfrPtr = reinterpret_cast(buffer.data(runtime)); memcpy(bfrPtr, data->bytes(), size); return array; } JSI_EXPORT_FUNCTIONS(JSI_EXPORT_FUNC(JsiSkPicture, makeShader), JSI_EXPORT_FUNC(JsiSkPicture, serialize)) /** Returns the underlying object from a host object of this type */ static sk_sp fromValue(jsi::Runtime &runtime, const jsi::Value &obj) { return obj.asObject(runtime) .asHostObject(runtime) .get() ->getObject(); } }; } // namespace ABI47_0_0RNSkia