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

Implement Animation native methods, add test (#341)

* Implement Animation native methods, add test

* Remove dead code
parent 333d444e
......@@ -4,27 +4,18 @@ package org.jetbrains.skia.skottie
import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.sksg.InvalidationController
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.ExternalSymbolName
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.impl.*
class Animation internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) {
companion object {
fun makeFromString(data: String): Animation {
Stats.onNativeCall()
val ptr = _nMakeFromString(data)
interopScope {
val ptr = _nMakeFromString(toInterop(data))
require(ptr != NullPointer) { "Failed to create Animation from string=\"$data\"" }
return Animation(ptr)
}
fun makeFromFile(path: String): Animation {
Stats.onNativeCall()
val ptr = _nMakeFromFile(path)
require(ptr != NullPointer) { "Failed to create Animation from path=\"$path\"" }
return Animation(ptr)
}
fun makeFromData(data: Data): Animation {
......@@ -261,7 +252,7 @@ class Animation internal constructor(ptr: NativePointer) : Managed(ptr, _Finaliz
val version: String
get() = try {
Stats.onNativeCall()
_nGetVersion(_ptr)
withStringReferenceResult { _nGetVersion(_ptr) }
} finally {
reachabilityBarrier(this)
}
......@@ -270,7 +261,7 @@ class Animation internal constructor(ptr: NativePointer) : Managed(ptr, _Finaliz
val size: Point
get() {
if (_size == null) {
_size = _nGetSize(_ptr)
_size = Point.fromInteropPointer { _nGetSize(_ptr, it) }
}
return _size!!
}
......@@ -285,10 +276,10 @@ class Animation internal constructor(ptr: NativePointer) : Managed(ptr, _Finaliz
private external fun _nGetFinalizer(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_skottie_Animation__1nMakeFromString")
private external fun _nMakeFromString(data: String?): NativePointer
private external fun _nMakeFromString(data: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_skottie_Animation__1nMakeFromFile")
private external fun _nMakeFromFile(path: String?): NativePointer
internal external fun _nMakeFromFile(path: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_skottie_Animation__1nMakeFromData")
private external fun _nMakeFromData(dataPtr: NativePointer): NativePointer
......@@ -327,7 +318,7 @@ private external fun _nGetInPoint(ptr: NativePointer): Float
private external fun _nGetOutPoint(ptr: NativePointer): Float
@ExternalSymbolName("org_jetbrains_skia_skottie_Animation__1nGetVersion")
private external fun _nGetVersion(ptr: NativePointer): String
private external fun _nGetVersion(ptr: NativePointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_skottie_Animation__1nGetSize")
private external fun _nGetSize(ptr: NativePointer): Point?
private external fun _nGetSize(ptr: NativePointer, dst: InteropPointer)
package org.jetbrains.skia.skottie
import org.jetbrains.skia.Point
import kotlin.test.Test
import kotlin.test.assertEquals
class AnimationTest {
@Test
fun canCreateFromString() {
val animation = Animation.makeFromString(
"""{"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
{"nm": "Test","v": "1.42.0","ip": 0,"op": 180,"fr": 60,"w": 32,"h": 32,"layers": []}
\ No newline at end of file
......@@ -90,15 +90,16 @@ extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skia_skottie_AnimationKt_
return (jfloat) instance->outPoint();
}
extern "C" JNIEXPORT jstring JNICALL Java_org_jetbrains_skia_skottie_AnimationKt__1nGetVersion
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_skottie_AnimationKt__1nGetVersion
(JNIEnv* env, jclass jclass, jlong ptr) {
Animation* instance = reinterpret_cast<Animation*>(static_cast<uintptr_t>(ptr));
return javaString(env, instance->version());
const SkString* version = &instance->version();
return reinterpret_cast<jlong>(const_cast<SkString*>(version));
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skia_skottie_AnimationKt__1nGetSize
(JNIEnv* env, jclass jclass, jlong ptr) {
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_skottie_AnimationKt__1nGetSize
(JNIEnv* env, jclass jclass, jlong ptr, jfloatArray dst) {
Animation* instance = reinterpret_cast<Animation*>(static_cast<uintptr_t>(ptr));
const SkSize& size = instance->size();
return skija::Point::make(env, size.fWidth, size.fHeight);
skija::Point::copyToInterop(env, {size.fWidth, size.fHeight}, dst);
}
package org.jetbrains.skia.skottie
import org.jetbrains.skia.impl.Native
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.interopScope
fun Animation.Companion.makeFromFile(path: String): Animation {
Stats.onNativeCall()
interopScope {
val ptr = _nMakeFromFile(toInterop(path))
require(ptr != Native.NullPointer) { "Failed to create Animation from path=\"$path\"" }
return Animation(ptr)
}
}
\ No newline at end of file
package org.jetbrains.skiko.tests.org.jetbrains.skia.skottie
import org.jetbrains.skia.Point
import org.jetbrains.skia.skottie.Animation
import org.jetbrains.skia.skottie.makeFromFile
import org.jetbrains.skiko.KotlinBackend
import org.jetbrains.skiko.kotlinBackend
import org.jetbrains.skiko.resourcePath
import org.junit.Test
import kotlin.test.assertEquals
class AnimationTestJVM {
@Test
fun canCreateFromFile() {
val animation = Animation.makeFromFile(
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
......@@ -59,7 +59,7 @@ namespace skija {
}
namespace Point {
void copyToInterop(const SkPoint& rect, KInteropPointer pointer);
void copyToInterop(const SkPoint& point, KInteropPointer pointer);
}
namespace RRect {
......
......@@ -19,33 +19,18 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_Animation__1nGetFinalizer
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_Animation__1nMakeFromString
(KInteropPointer dataStr) {
TODO("implement org_jetbrains_skia_skottie_Animation__1nMakeFromString");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_Animation__1nMakeFromString
(KInteropPointer dataStr) {
SkString data = skString(env, dataStr);
SkString data = skString(dataStr);
sk_sp<Animation> instance = Animation::Make(data.c_str(), data.size());
return reinterpret_cast<KNativePointer>(instance.release());
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_Animation__1nMakeFromFile
(KInteropPointer pathStr) {
TODO("implement org_jetbrains_skia_skottie_Animation__1nMakeFromFile");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_Animation__1nMakeFromFile
(KInteropPointer pathStr) {
SkString path = skString(env, pathStr);
SkString path = skString(pathStr);
sk_sp<Animation> instance = Animation::MakeFromFile(path.c_str());
return reinterpret_cast<KNativePointer>(instance.release());
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_skottie_Animation__1nMakeFromData
......@@ -110,32 +95,18 @@ SKIKO_EXPORT KFloat org_jetbrains_skia_skottie_Animation__1nGetOutPoint
}
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_skottie_Animation__1nGetVersion
(KNativePointer ptr) {
TODO("implement org_jetbrains_skia_skottie_Animation__1nGetVersion");
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_skottie_Animation__1nGetVersion
(KNativePointer ptr) {
Animation* instance = reinterpret_cast<Animation*>((ptr));
return javaString(env, instance->version());
const SkString* version = &instance->version();
return reinterpret_cast<KInteropPointer>(const_cast<SkString*>(version));
}
#endif
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_skottie_Animation__1nGetSize
(KNativePointer ptr) {
TODO("implement org_jetbrains_skia_skottie_Animation__1nGetSize");
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_skottie_Animation__1nGetSize
(KNativePointer ptr) {
SKIKO_EXPORT void org_jetbrains_skia_skottie_Animation__1nGetSize
(KNativePointer ptr, KInteropPointer dst) {
Animation* instance = reinterpret_cast<Animation*>((ptr));
const SkSize& size = instance->size();
return skija::Point::make(env, size.fWidth, size.fHeight);
return skija::Point::copyToInterop({ size.fWidth, size.fHeight }, dst);
}
#endif
package org.jetbrains.skia.skottie
import org.jetbrains.skia.impl.Native
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.interopScope
fun Animation.Companion.makeFromFile(path: String): Animation {
Stats.onNativeCall()
interopScope {
val ptr = _nMakeFromFile(toInterop(path))
require(ptr != Native.NullPointer) { "Failed to create Animation from path=\"$path\"" }
return Animation(ptr)
}
}
\ 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
class AnimationTestNative {
@Test
fun canCreateFromFile() {
val animation = Animation.makeFromFile(
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