binding/capi: support lottie extensions

these experimental apis are allowed to use
when the lottie loader is enabled.

APIs:
- Tvg_Animation* tvg_lottie_animation_new()
- Tvg_Result tvg_lottie_animation_override(Tvg_Animation* animation, const char* slot)
This commit is contained in:
Hermet Park 2024-02-23 15:24:15 +09:00 committed by Hermet Park
parent 65e8fe2791
commit 71a5c3ad02
2 changed files with 64 additions and 1 deletions

View file

@ -2316,7 +2316,47 @@ TVG_API Tvg_Result tvg_animation_get_duration(Tvg_Animation* animation, float* d
TVG_API Tvg_Result tvg_animation_del(Tvg_Animation* animation);
/** \} */ // end defgroup ThorVG_CAPI
/** \} */ // end defgroup ThorVGCapi_Animation
/**
* \defgroup ThorVGCapi_LottieAnimation LottieAnimation
* \brief A module for manipulation of lottie extension features.
*
* The module enables control of advanced Lottie features.
* \{
*/
/************************************************************************/
/* LottieAnimation Extension API */
/************************************************************************/
/*!
* \brief Creates a new LottieAnimation object. (Experimental API)
*
* \return Tvg_Animation A new Tvg_LottieAnimation object.
*/
TVG_API Tvg_Animation* tvg_lottie_animation_new();
/*!
* \brief Override the lottie properties through the slot data. (Experimental API)
*
* \param[in] animation The Tvg_Animation object to override the property with the slot.
* \param[in] slot The lottie slot data in json.
*
* \return Tvg_Animation A new Tvg_LottieAnimation object.
* \retval TVG_RESULT_SUCCESS Succeed.
* \retval TVG_RESULT_INSUFFICIENT_CONDITION When the given @p slot is invalid
* \retval TVG_RESULT_NOT_SUPPORTED The Lottie Animation is not supported.
*/
TVG_API Tvg_Result tvg_lottie_animation_override(Tvg_Animation* animation, const char* slot);
/** \} */ // end addtogroup ThorVGCapi_LottieAnimation
/** \} */ // end defgroup ThorVGCapi
#ifdef __cplusplus

View file

@ -773,6 +773,29 @@ TVG_API Tvg_Result tvg_animation_del(Tvg_Animation* animation)
return TVG_RESULT_SUCCESS;
}
/************************************************************************/
/* Lottie Animation API */
/************************************************************************/
TVG_API Tvg_Animation* tvg_lottie_animation_new()
{
#ifdef THORVG_LOTTIE_LOADER_SUPPORT
return (Tvg_Animation*) LottieAnimation::gen().release();
#endif
return nullptr;
}
TVG_API Tvg_Result tvg_lottie_animation_override(Tvg_Animation* animation, const char* slot)
{
#ifdef THORVG_LOTTIE_LOADER_SUPPORT
if (!animation) return TVG_RESULT_INVALID_ARGUMENT;
return (Tvg_Result) reinterpret_cast<LottieAnimation*>(animation)->override(slot);
#endif
return TVG_RESULT_NOT_SUPPORTED;
}
#ifdef __cplusplus
}
#endif