diff --git a/dotlottie/src/main/cpp/jni_bridge.cpp b/dotlottie/src/main/cpp/jni_bridge.cpp index 508c510..31d2102 100644 --- a/dotlottie/src/main/cpp/jni_bridge.cpp +++ b/dotlottie/src/main/cpp/jni_bridge.cpp @@ -48,6 +48,8 @@ static jint nativeLoadAnimationPath(JNIEnv *env, jclass, jlong ptr, static jint nativeLoadAnimation(JNIEnv *env, jclass, jlong ptr, jstring id); static jint nativeLoadDotLottieData(JNIEnv *env, jclass, jlong ptr, jbyteArray data); +static jint nativeLoadFont(JNIEnv *env, jclass, jstring name, jbyteArray data); +static jint nativeUnloadFont(JNIEnv *env, jclass, jstring name); // Playback control static jint nativePlay(JNIEnv *env, jclass, jlong ptr); @@ -375,6 +377,24 @@ jint nativeLoadDotLottieData(JNIEnv *env, jclass, jlong ptr, jbyteArray data) { return static_cast(result); } +jint nativeLoadFont(JNIEnv *env, jclass, jstring name, jbyteArray data) { + const char *cName = env->GetStringUTFChars(name, nullptr); + jbyte *bytes = env->GetByteArrayElements(data, nullptr); + jsize len = env->GetArrayLength(data); + auto result = dotlottie_load_font( + cName, reinterpret_cast(bytes), len); + env->ReleaseByteArrayElements(data, bytes, JNI_ABORT); + env->ReleaseStringUTFChars(name, cName); + return static_cast(result); +} + +jint nativeUnloadFont(JNIEnv *env, jclass, jstring name) { + const char *cName = env->GetStringUTFChars(name, nullptr); + auto result = dotlottie_unload_font(cName); + env->ReleaseStringUTFChars(name, cName); + return static_cast(result); +} + // ==================== Playback Control ==================== jint nativePlay(JNIEnv *env, jclass, jlong ptr) { @@ -1529,6 +1549,8 @@ static JNINativeMethod playerMethods[] = { {"nativeLoadAnimation", "(JLjava/lang/String;)I", (void *)nativeLoadAnimation}, {"nativeLoadDotLottieData", "(J[B)I", (void *)nativeLoadDotLottieData}, + {"nativeLoadFont", "(Ljava/lang/String;[B)I", (void *)nativeLoadFont}, + {"nativeUnloadFont", "(Ljava/lang/String;)I", (void *)nativeUnloadFont}, // Playback control {"nativePlay", "(J)I", (void *)nativePlay}, diff --git a/dotlottie/src/main/java/com/lottiefiles/dotlottie/core/compose/runtime/DotLottieController.kt b/dotlottie/src/main/java/com/lottiefiles/dotlottie/core/compose/runtime/DotLottieController.kt index ea4b741..1bae73e 100644 --- a/dotlottie/src/main/java/com/lottiefiles/dotlottie/core/compose/runtime/DotLottieController.kt +++ b/dotlottie/src/main/java/com/lottiefiles/dotlottie/core/compose/runtime/DotLottieController.kt @@ -473,4 +473,14 @@ class DotLottieController { fun clearEventListeners() { eventListeners.clear() } + + companion object { + /** Registers a font into ThorVG's global font registry. */ + @JvmStatic + fun loadFont(name: String, data: ByteArray): Boolean = DotLottiePlayer.loadFont(name, data) + + /** Removes a font previously registered with [loadFont] from the global registry. */ + @JvmStatic + fun unloadFont(name: String): Boolean = DotLottiePlayer.unloadFont(name) + } } diff --git a/dotlottie/src/main/kotlin/com/dotlottie/dlplayer/DotLottiePlayer.kt b/dotlottie/src/main/kotlin/com/dotlottie/dlplayer/DotLottiePlayer.kt index ade3784..61d3725 100644 --- a/dotlottie/src/main/kotlin/com/dotlottie/dlplayer/DotLottiePlayer.kt +++ b/dotlottie/src/main/kotlin/com/dotlottie/dlplayer/DotLottiePlayer.kt @@ -655,5 +655,15 @@ class DotLottiePlayer { fun withThreads(config: Config, threads: UInt): DotLottiePlayer { return DotLottiePlayer(config, threads) } + + @JvmStatic + fun loadFont(name: String, data: ByteArray): Boolean { + return JNI.nativeLoadFont(name, data) == 0 + } + + @JvmStatic + fun unloadFont(name: String): Boolean { + return JNI.nativeUnloadFont(name) == 0 + } } } diff --git a/dotlottie/src/main/kotlin/com/lottiefiles/dotlottie/core/jni/DotLottiePlayer.kt b/dotlottie/src/main/kotlin/com/lottiefiles/dotlottie/core/jni/DotLottiePlayer.kt index c9ad8a3..ff664ae 100644 --- a/dotlottie/src/main/kotlin/com/lottiefiles/dotlottie/core/jni/DotLottiePlayer.kt +++ b/dotlottie/src/main/kotlin/com/lottiefiles/dotlottie/core/jni/DotLottiePlayer.kt @@ -75,6 +75,12 @@ object DotLottiePlayer { @JvmStatic external fun nativeLoadDotLottieData(ptr: Long, data: ByteArray): Int + @JvmStatic + external fun nativeLoadFont(name: String, data: ByteArray): Int + + @JvmStatic + external fun nativeUnloadFont(name: String): Int + // ==================== Playback Control ==================== @JvmStatic