Unverified Commit e76e4a31 authored by Aleksandr Veselov's avatar Aleksandr Veselov Committed by GitHub

Implement AnimationBuilder for Native (#371)

parent f48e508f
@file:Suppress("NESTED_EXTERNAL_DECLARATION")
package org.jetbrains.skia.skottie
import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.*
import org.jetbrains.skia.impl.Managed
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.reachabilityBarrier
import org.jetbrains.skia.Data
import org.jetbrains.skia.ExternalSymbolName
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.FontMgr
import org.jetbrains.skia.impl.*
import org.jetbrains.skia.impl.Library.Companion.staticLoad
class AnimationBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) {
companion object {
......@@ -63,7 +60,7 @@ class AnimationBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _
fun buildFromString(data: String): Animation {
return try {
Stats.onNativeCall()
val ptr = _nBuildFromString(_ptr, data)
val ptr = interopScope { _nBuildFromString(_ptr, toInterop(data)) }
require(ptr != NullPointer) { "Failed to create Animation from string: \"$data\"" }
Animation(ptr)
} finally {
......@@ -71,17 +68,6 @@ class AnimationBuilder internal constructor(ptr: NativePointer) : Managed(ptr, _
}
}
fun buildFromFile(path: String): Animation {
return try {
Stats.onNativeCall()
val ptr = _nBuildFromFile(_ptr, path)
require(ptr != NullPointer) { "Failed to create Animation from path: $path" }
Animation(ptr)
} finally {
reachabilityBarrier(this)
}
}
fun buildFromData(data: Data): Animation {
return try {
Stats.onNativeCall()
......@@ -108,10 +94,10 @@ private external fun _nSetFontManager(ptr: NativePointer, fontMgrPtr: NativePoin
private external fun _nSetLogger(ptr: NativePointer, loggerPtr: NativePointer)
@ExternalSymbolName("org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromString")
private external fun _nBuildFromString(ptr: NativePointer, data: String?): NativePointer
private external fun _nBuildFromString(ptr: NativePointer, data: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromFile")
private external fun _nBuildFromFile(ptr: NativePointer, path: String?): NativePointer
internal external fun _nBuildFromFile(ptr: NativePointer, path: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromData")
private external fun _nBuildFromData(ptr: NativePointer, dataPtr: NativePointer): NativePointer
......@@ -18,4 +18,18 @@ class AnimationTest {
assertEquals(0.0f, animation.inPoint)
assertEquals(180.0f, animation.outPoint)
}
@Test
fun canCreateFromStringBuilder() {
val animation = AnimationBuilder().buildFromString(
"""{"nm": "Test","v": "1.42.0","ip": 0,"op": 180,"fr": 60,"w": 32,"h": 32,"layers": []}"""
)
assertEquals("1.42.0", animation.version)
assertEquals(Point(32.0f, 32.0f), animation.size)
assertEquals(60.0f, animation.fPS)
assertEquals(3.0f, animation.duration)
assertEquals(0.0f, animation.inPoint)
assertEquals(180.0f, animation.outPoint)
}
}
\ No newline at end of file
package org.jetbrains.skia.skottie
import org.jetbrains.skia.impl.Native
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.interopScope
import org.jetbrains.skia.impl.reachabilityBarrier
fun AnimationBuilder.buildFromFile(path: String): Animation {
return try {
Stats.onNativeCall()
val ptr = interopScope { _nBuildFromFile(_ptr, toInterop(path)) }
require(ptr != Native.NullPointer) { "Failed to create Animation from path: $path" }
Animation(ptr)
} finally {
reachabilityBarrier(this)
}
}
\ No newline at end of file
package org.jetbrains.skiko.tests.org.jetbrains.skia.skottie
import org.jetbrains.skia.Data
import org.jetbrains.skia.Point
import org.jetbrains.skia.skottie.Animation
import org.jetbrains.skia.skottie.AnimationBuilder
import org.jetbrains.skia.skottie.buildFromFile
import org.jetbrains.skia.skottie.makeFromFile
import org.jetbrains.skiko.KotlinBackend
import org.jetbrains.skiko.kotlinBackend
import org.jetbrains.skia.tests.makeFromResource
import org.jetbrains.skiko.resourcePath
import org.jetbrains.skiko.tests.runTest
import org.junit.Test
import kotlin.test.assertEquals
......@@ -24,4 +27,46 @@ class AnimationTestJVM {
assertEquals(0.0f, animation.inPoint)
assertEquals(180.0f, animation.outPoint)
}
@Test
fun canCreateFromFileWithBuilder() {
val animation = AnimationBuilder().buildFromFile(
resourcePath("./skottie/test_animation01.json")
)
assertEquals("1.42.0", animation.version)
assertEquals(Point(32.0f, 32.0f), animation.size)
assertEquals(60.0f, animation.fPS)
assertEquals(3.0f, animation.duration)
assertEquals(0.0f, animation.inPoint)
assertEquals(180.0f, animation.outPoint)
}
@Test
fun canCreateFromData() = runTest {
val animation = Animation.makeFromData(
Data.makeFromResource("./skottie/test_animation01.json")
)
assertEquals("1.42.0", animation.version)
assertEquals(Point(32.0f, 32.0f), animation.size)
assertEquals(60.0f, animation.fPS)
assertEquals(3.0f, animation.duration)
assertEquals(0.0f, animation.inPoint)
assertEquals(180.0f, animation.outPoint)
}
@Test
fun canCreateFromDataWithBuilder() = runTest {
val animation = AnimationBuilder().buildFromData(
Data.makeFromResource("./skottie/test_animation01.json")
)
assertEquals("1.42.0", animation.version)
assertEquals(Point(32.0f, 32.0f), animation.size)
assertEquals(60.0f, animation.fPS)
assertEquals(3.0f, animation.duration)
assertEquals(0.0f, animation.inPoint)
assertEquals(180.0f, animation.outPoint)
}
}
\ No newline at end of file
......@@ -35,39 +35,21 @@ SKIKO_EXPORT void org_jetbrains_skia_skottie_AnimationBuilder__1nSetLogger
instance->setLogger(logger);
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromString
(KNativePointer ptr, KInteropPointer dataStr) {
TODO("implement org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromString");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromString
(KNativePointer ptr, KInteropPointer dataStr) {
Animation::Builder* instance = reinterpret_cast<Animation::Builder*>((ptr));
SkString data = skString(env, dataStr);
SkString data = skString(dataStr);
sk_sp<Animation> animation = instance->make(data.c_str(), data.size());
return reinterpret_cast<KNativePointer>(animation.release());
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromFile
(KNativePointer ptr, KInteropPointer pathStr) {
TODO("implement org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromFile");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromFile
(KNativePointer ptr, KInteropPointer pathStr) {
Animation::Builder* instance = reinterpret_cast<Animation::Builder*>((ptr));
SkString path = skString(env, pathStr);
SkString path = skString(pathStr);
sk_sp<Animation> animation = instance->makeFromFile(path.c_str());
return reinterpret_cast<KNativePointer>(animation.release());
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_AnimationBuilder__1nBuildFromData
(KNativePointer ptr, KNativePointer dataPtr) {
......
package org.jetbrains.skia.skottie
import org.jetbrains.skia.impl.Native
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.interopScope
import org.jetbrains.skia.impl.reachabilityBarrier
fun AnimationBuilder.buildFromFile(path: String): Animation {
return try {
Stats.onNativeCall()
val ptr = interopScope { _nBuildFromFile(_ptr, toInterop(path)) }
require(ptr != Native.NullPointer) { "Failed to create Animation from path: $path" }
Animation(ptr)
} finally {
reachabilityBarrier(this)
}
}
\ No newline at end of file
package org.jetbrains.skia.skottie
import org.jetbrains.skia.Point
import org.jetbrains.skiko.KotlinBackend
import org.jetbrains.skiko.kotlinBackend
import org.jetbrains.skiko.resourcePath
import kotlin.test.Test
import kotlin.test.assertEquals
......@@ -22,4 +20,18 @@ class AnimationTestNative {
assertEquals(0.0f, animation.inPoint)
assertEquals(180.0f, animation.outPoint)
}
@Test
fun canCreateFromFileWithBuilder() {
val animation = AnimationBuilder().buildFromFile(
resourcePath("./skottie/test_animation01.json")
)
assertEquals("1.42.0", animation.version)
assertEquals(Point(32.0f, 32.0f), animation.size)
assertEquals(60.0f, animation.fPS)
assertEquals(3.0f, animation.duration)
assertEquals(0.0f, animation.inPoint)
assertEquals(180.0f, animation.outPoint)
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment