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 ...@@ -5,7 +5,7 @@ import org.jetbrains.skia.impl.Library.Companion.staticLoad
class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) { class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
companion object { 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 { return try {
Stats.onNativeCall() Stats.onNativeCall()
PathEffect( PathEffect(
...@@ -21,7 +21,7 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -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 { return try {
Stats.onNativeCall() Stats.onNativeCall()
PathEffect( PathEffect(
...@@ -51,11 +51,11 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) { ...@@ -51,11 +51,11 @@ class PathEffect internal constructor(ptr: NativePointer) : RefCnt(ptr) {
return PathEffect(_nMakeCorner(radius)) return PathEffect(_nMakeCorner(radius))
} }
fun makeDash(intervals: FloatArray?, phase: Float): PathEffect { fun makeDash(intervals: FloatArray, phase: Float): PathEffect {
Stats.onNativeCall() Stats.onNativeCall()
return PathEffect( return PathEffect(
interopScope { interopScope {
_nMakeDash(toInterop(intervals), phase) _nMakeDash(toInterop(intervals), intervals.size, phase)
} }
) )
} }
...@@ -121,7 +121,7 @@ private external fun _nMakeLine2D(width: Float, matrix: InteropPointer): NativeP ...@@ -121,7 +121,7 @@ private external fun _nMakeLine2D(width: Float, matrix: InteropPointer): NativeP
private external fun _nMakeCorner(radius: Float): NativePointer private external fun _nMakeCorner(radius: Float): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeDash") @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") @ExternalSymbolName("org_jetbrains_skia_PathEffect__1nMakeDiscrete")
private external fun _nMakeDiscrete(segLength: Float, dev: Float, seed: Int): NativePointer 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 ...@@ -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 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); jsize len = env->GetArrayLength(intervalsArray);
jfloat* intervals = env->GetFloatArrayElements(intervalsArray, 0); jfloat* intervals = env->GetFloatArrayElements(intervalsArray, 0);
SkPathEffect* ptr = SkDashPathEffect::Make(intervals, len, phase).release(); SkPathEffect* ptr = SkDashPathEffect::Make(intervals, len, phase).release();
......
...@@ -34,38 +34,20 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakePath1D ...@@ -34,38 +34,20 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakePath1D
return reinterpret_cast<KNativePointer>(ptr); 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 SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakePath2D
(KFloat* matrixArr, KNativePointer pathPtr) { (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)); SkPath* path = reinterpret_cast<SkPath*>((pathPtr));
SkPathEffect* ptr = SkPath2DPathEffect::Make(*m, *path).release(); SkPathEffect* ptr = SkPath2DPathEffect::Make(*m, *path).release();
return reinterpret_cast<KNativePointer>(ptr); return reinterpret_cast<KNativePointer>(ptr);
} }
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeLine2D SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeLine2D
(KFloat width, KFloat* matrixArr) { (KFloat width, KFloat* matrixArr) {
TODO("implement org_jetbrains_skia_PathEffect__1nMakeLine2D"); std::unique_ptr<SkMatrix> m = skMatrix(matrixArr);
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeLine2D
(KFloat width, KFloat* matrixArr) {
std::unique_ptr<SkMatrix> m = skMatrix(env, matrixArr);
SkPathEffect* ptr = SkLine2DPathEffect::Make(width, *m).release(); SkPathEffect* ptr = SkLine2DPathEffect::Make(width, *m).release();
return reinterpret_cast<KNativePointer>(ptr); return reinterpret_cast<KNativePointer>(ptr);
} }
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeCorner SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeCorner
(KFloat radius) { (KFloat radius) {
...@@ -73,10 +55,10 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeCorner ...@@ -73,10 +55,10 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeCorner
return reinterpret_cast<KNativePointer>(ptr); return reinterpret_cast<KNativePointer>(ptr);
} }
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeDash SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeDash
(KFloat* intervalsArray, KFloat phase) { (KFloat* intervalsArray, KInt count, KFloat phase) {
TODO("implement org_jetbrains_skia_PathEffect__1nMakeDash"); SkPathEffect* ptr = SkDashPathEffect::Make(reinterpret_cast<float*>(intervalsArray), count, phase).release();
return reinterpret_cast<KNativePointer>(ptr);
} }
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathEffect__1nMakeDiscrete 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