Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
S
skiko
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
liuqiang
skiko
Commits
e76e4a31
Unverified
Commit
e76e4a31
authored
Nov 11, 2021
by
Aleksandr Veselov
Committed by
GitHub
Nov 11, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Implement AnimationBuilder for Native (#371)
parent
f48e508f
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
118 additions
and
45 deletions
+118
-45
AnimationBuilder.kt
...ain/kotlin/org/jetbrains/skia/skottie/AnimationBuilder.kt
+7
-21
AnimationTest.kt
...onTest/kotlin/org/jetbrains/skia/skottie/AnimationTest.kt
+14
-0
AnimationBuilder.jvm.kt
...kotlin/org/jetbrains/skia/skottie/AnimationBuilder.jvm.kt
+17
-0
AnimationTest.jvm.kt
...st/kotlin/org/jetbrains/skia/skottie/AnimationTest.jvm.kt
+47
-2
AnimationBuilder.cc
skiko/src/nativeJsMain/cpp/skottie/AnimationBuilder.cc
+2
-20
AnimationBuilder.native.kt
...lin/org/jetbrains/skia/skottie/AnimationBuilder.native.kt
+17
-0
AnimationTest.native.kt
...kotlin/org/jetbrains/skia/skottie/AnimationTest.native.kt
+14
-2
No files found.
skiko/src/commonMain/kotlin/org/jetbrains/skia/skottie/AnimationBuilder.kt
View file @
e76e4a31
@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
skiko/src/commonTest/kotlin/org/jetbrains/skia/skottie/AnimationTest.kt
View file @
e76e4a31
...
...
@@ -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
skiko/src/jvmMain/kotlin/org/jetbrains/skia/skottie/AnimationBuilder.jvm.kt
0 → 100644
View file @
e76e4a31
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
skiko/src/jvmTest/kotlin/org/jetbrains/skia/skottie/AnimationTest.jvm.kt
View file @
e76e4a31
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
skiko/src/nativeJsMain/cpp/skottie/AnimationBuilder.cc
View file @
e76e4a31
...
...
@@ -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
)
{
...
...
skiko/src/nativeMain/kotlin/org/jetbrains/skia/skottie/AnimationBuilder.native.kt
0 → 100644
View file @
e76e4a31
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
skiko/src/nativeTest/kotlin/org/jetbrains/skia/skottie/AnimationTest.native.kt
View file @
e76e4a31
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
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment