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

Implement PathEffect native methods (#326)

parent 9372822b
......@@ -5,7 +5,7 @@ import org.jetbrains.skia.impl.Library.Companion.staticLoad
class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
companion object {
fun makePath1D(path: Path?, advance: Float, phase: Float, style: Style): PathEffect {
fun makePath1D(path: Path, advance: Float, phase: Float, style: Style): PathEffect {
return try {
Stats.onNativeCall()
PathEffect(
......@@ -21,7 +21,7 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
}
}
fun makePath2D(matrix: Matrix33, path: Path?): PathEffect {
fun makePath2D(matrix: Matrix33, path: Path): PathEffect {
return try {
Stats.onNativeCall()
PathEffect(
......@@ -51,11 +51,11 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
return PathEffect(_nMakeCorner(radius))
}
fun makeDash(intervals: FloatArray?, phase: Float): PathEffect {
fun makeDash(intervals: FloatArray, phase: Float): PathEffect {
Stats.onNativeCall()
return PathEffect(
interopScope {
_nMakeDash(toInterop(intervals), phase)
_nMakeDash(toInterop(intervals), intervals.size, phase)
}
)
}
......@@ -121,7 +121,7 @@ private external fun _nMakeLine2D(width: Float, matrix: InteropPointer): NativeP
private external fun _nMakeCorner(radius: Float): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeDash")
private external fun _nMakeDash(intervals: InteropPointer, phase: Float): NativePointer
private external fun _nMakeDash(intervals: InteropPointer, count: Int, phase: Float): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeDiscrete")
private external fun _nMakeDiscrete(segLength: Float, dev: Float, seed: Int): NativePointer
package org.jetbrains.skia
import kotlin.test.Test
class PathEffectTest {
@Test
fun canCreate() {
val path = Path.makeFromSVGString("M0 0 L10 10 L10 0 Z")
val matrix33 = Matrix33(1.0f, 0.0f, 0.0f, 0.0f, 2.0f, 0.0f, 0.0f, 0.0f, 3.0f)
val path1 = PathEffect.makeCorner(12.0f)
PathEffect.makePath1D(path, 1.0f, 10.0f, PathEffect.Style.ROTATE)
PathEffect.makePath2D(matrix33, path)
val path2 = PathEffect.makeDash(floatArrayOf(1.0f, 2.0f, 4.0f, 2.0f), 0.0f)
PathEffect.makeLine2D(2.0f, matrix33)
PathEffect.makeDiscrete(20.0f, 0.0f, 0)
path1.makeSum(path2)
path1.makeCompose(path2)
}
}
\ No newline at end of file
......@@ -54,7 +54,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PathEffectKt__1nMakeC
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PathEffectKt__1nMakeDash
(JNIEnv* env, jclass jclass, jfloatArray intervalsArray, jfloat phase) {
(JNIEnv* env, jclass jclass, jfloatArray intervalsArray, jint _count, jfloat phase) {
jsize len = env->GetArrayLength(intervalsArray);
jfloat* intervals = env->GetFloatArrayElements(intervalsArray, 0);
SkPathEffect* ptr = SkDashPathEffect::Make(intervals, len, phase).release();
......
......@@ -34,38 +34,20 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakePath1D
return reinterpret_cast<KNativePointer>(ptr);
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakePath2D
(KFloat* matrixArr, KNativePointer pathPtr) {
TODO("implement org_jetbrains_skia_PathEffect__1nMakePath2D");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakePath2D
(KFloat* matrixArr, KNativePointer pathPtr) {
std::unique_ptr<SkMatrix> m = skMatrix(env, matrixArr);
std::unique_ptr<SkMatrix> m = skMatrix(matrixArr);
SkPath* path = reinterpret_cast<SkPath*>((pathPtr));
SkPathEffect* ptr = SkPath2DPathEffect::Make(*m, *path).release();
return reinterpret_cast<KNativePointer>(ptr);
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeLine2D
(KFloat width, KFloat* matrixArr) {
TODO("implement org_jetbrains_skia_PathEffect__1nMakeLine2D");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeLine2D
(KFloat width, KFloat* matrixArr) {
std::unique_ptr<SkMatrix> m = skMatrix(env, matrixArr);
std::unique_ptr<SkMatrix> m = skMatrix(matrixArr);
SkPathEffect* ptr = SkLine2DPathEffect::Make(width, *m).release();
return reinterpret_cast<KNativePointer>(ptr);
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeCorner
(KFloat radius) {
......@@ -73,10 +55,10 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeCorner
return reinterpret_cast<KNativePointer>(ptr);
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeDash
(KFloat* intervalsArray, KFloat phase) {
TODO("implement org_jetbrains_skia_PathEffect__1nMakeDash");
(KFloat* intervalsArray, KInt count, KFloat phase) {
SkPathEffect* ptr = SkDashPathEffect::Make(reinterpret_cast<float*>(intervalsArray), count, phase).release();
return reinterpret_cast<KNativePointer>(ptr);
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeDiscrete
......
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