Unverified Commit 358ae344 authored by Shagen Ogandzhanian's avatar Shagen Ogandzhanian Committed by GitHub

Commonize PathSegmentIterator

parent 4615faa1
// This file has been auto generated.
#include "SkPath.h" #include "SkPath.h"
#include "common.h" #include "common.h"
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathSegmentIterator__1nMake SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathSegmentIterator__1nMake
(KNativePointer pathPtr, KBoolean forceClose) { (KNativePointer pathPtr, KBoolean forceClose) {
SkPath* path = reinterpret_cast<SkPath*>((pathPtr)); SkPath* path = reinterpret_cast<SkPath*>(pathPtr);
SkPath::Iter* iter = new SkPath::Iter(*path, forceClose); SkPath::Iter* iter = new SkPath::Iter(*path, forceClose);
return reinterpret_cast<KNativePointer>(iter); return reinterpret_cast<KNativePointer>(iter);
} }
...@@ -16,46 +13,38 @@ static void deletePathSegmentIterator(SkPath::Iter* iter) { ...@@ -16,46 +13,38 @@ static void deletePathSegmentIterator(SkPath::Iter* iter) {
delete iter; delete iter;
} }
SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathSegmentIterator__1nGetFinalizer SKIKO_EXPORT KNativePointer org_jetbrains_skia_PathSegmentIterator__1nGetFinalizer() {
() {
return reinterpret_cast<KNativePointer>((&deletePathSegmentIterator)); return reinterpret_cast<KNativePointer>((&deletePathSegmentIterator));
} }
SKIKO_EXPORT void org_jetbrains_skia_PathSegmentIterator__1nNext(KNativePointer ptr, KInt* data) {
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_PathSegmentIterator__1nNext SkPath::Iter* instance = reinterpret_cast<SkPath::Iter*>(ptr);
(KNativePointer ptr) {
TODO("implement org_jetbrains_skia_PathSegmentIterator__1nNext");
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_PathSegmentIterator__1nNext
(KNativePointer ptr) {
SkPath::Iter* instance = reinterpret_cast<SkPath::Iter*>((ptr));
SkPoint pts[4]; SkPoint pts[4];
SkPath::Verb verb = instance->next(pts); SkPath::Verb verb = instance->next(pts);
KInteropPointer segment;
switch (verb) { data[0] = rawBits(pts[0].fX);
case SkPath::Verb::kDone_Verb: data[1] = rawBits(pts[0].fY);
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorDone);
break; data[2] = rawBits(pts[1].fX);
case SkPath::Verb::kMove_Verb: data[3] = rawBits(pts[1].fY);
case SkPath::Verb::kClose_Verb:
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorMoveClose, static_cast<KInt>(verb), pts[0].fX, pts[0].fY, instance->isClosedContour()); data[4] = rawBits(pts[2].fX);
break; data[5] = rawBits(pts[2].fY);
case SkPath::Verb::kLine_Verb:
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorLine, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, instance->isCloseLine(), instance->isClosedContour()); data[6] = rawBits(pts[3].fX);
break; data[7] = rawBits(pts[3].fY);
case SkPath::Verb::kQuad_Verb:
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorQuad, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, instance->isClosedContour()); // Otherwise it's null.
break; if (verb == SkPath::Verb::kConic_Verb)
case SkPath::Verb::kConic_Verb: data[8] = rawBits(instance->conicWeight());
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorConic, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, instance->conicWeight(), instance->isClosedContour());
break; int context = verb;
case SkPath::Verb::kCubic_Verb: if (instance -> isClosedContour()) {
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorConic, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, pts[3].fX, pts[3].fY, instance->isClosedContour()); context = context | (1 << 7);
break; }
if (instance -> isCloseLine()) {
context = context | (1 << 6);
} }
return segment;
}
#endif
data[9] = context;
}
\ No newline at end of file
...@@ -1978,7 +1978,7 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol ...@@ -1978,7 +1978,7 @@ class Path internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
} }
fun iterator(forceClose: Boolean): PathSegmentIterator { fun iterator(forceClose: Boolean): PathSegmentIterator {
return PathSegmentIterator.Companion.make(this, forceClose) return PathSegmentIterator.make(this, forceClose)
} }
/** /**
......
package org.jetbrains.skia package org.jetbrains.skia
import org.jetbrains.skia.impl.InteropPointer
import org.jetbrains.skia.impl.Library.Companion.staticLoad import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.impl.Managed import org.jetbrains.skia.impl.Managed
import org.jetbrains.skia.impl.NativePointer import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.Stats import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.getPtr import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.impl.reachabilityBarrier import org.jetbrains.skia.impl.reachabilityBarrier
import org.jetbrains.skia.impl.withResult
class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePointer) : Managed(ptr, PathSegmentIterator_nGetFinalizer()), class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePointer) :
Managed(ptr, PathSegmentIterator_nGetFinalizer()),
MutableIterator<PathSegment?> { MutableIterator<PathSegment?> {
companion object { companion object {
fun make(path: Path?, forceClose: Boolean): PathSegmentIterator { fun make(path: Path?, forceClose: Boolean): PathSegmentIterator {
return try { return try {
val ptr = val i = PathSegmentIterator(path, _nMake(getPtr(path), forceClose))
_nMake(getPtr(path), forceClose) i._nextSegment = i.nextSegment()
val i = PathSegmentIterator(path, ptr)
i._nextSegment = PathSegmentIterator_nNext(ptr)
i i
} finally { } finally {
reachabilityBarrier(path) reachabilityBarrier(path)
...@@ -32,7 +33,7 @@ class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePoin ...@@ -32,7 +33,7 @@ class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePoin
return try { return try {
if (_nextSegment?.verb == PathVerb.DONE) throw NoSuchElementException() if (_nextSegment?.verb == PathVerb.DONE) throw NoSuchElementException()
val res = _nextSegment val res = _nextSegment
_nextSegment = PathSegmentIterator_nNext(_ptr) _nextSegment = nextSegment()
res res
} finally { } finally {
reachabilityBarrier(this) reachabilityBarrier(this)
...@@ -54,13 +55,81 @@ class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePoin ...@@ -54,13 +55,81 @@ class PathSegmentIterator internal constructor(val _path: Path?, ptr: NativePoin
override fun remove() { override fun remove() {
TODO("Not yet implemented") TODO("Not yet implemented")
} }
private fun nextSegment() = pathSegmentFromIntArray(withResult(IntArray(10)) {
PathSegmentIterator_nNext(this._ptr, it)
})
}
private fun pathSegmentFromIntArray(points: IntArray): PathSegment {
val context = points.last()
val verb = (context) and ((1 shl 3) - 1)
val isClosedBit = ((context shr 7) and 1)
val isClosedLineBit = ((context shr 6) and 1)
val isClosed = isClosedBit != 0
return when (PathVerb.values()[verb]) {
PathVerb.MOVE, PathVerb.CLOSE -> {
PathSegment(verb, Float.fromBits(points[0]), Float.fromBits(points[1]), isClosed)
}
PathVerb.LINE -> {
PathSegment(
Float.fromBits(points[0]),
Float.fromBits(points[1]),
Float.fromBits(points[2]),
Float.fromBits(points[3]),
isClosedLineBit != 0,
isClosed
)
}
PathVerb.QUAD -> {
PathSegment(
Float.fromBits(points[0]),
Float.fromBits(points[1]),
Float.fromBits(points[2]),
Float.fromBits(points[3]),
Float.fromBits(points[4]),
Float.fromBits(points[5]),
isClosed
)
}
PathVerb.CONIC -> {
PathSegment(
Float.fromBits(points[0]),
Float.fromBits(points[1]),
Float.fromBits(points[2]),
Float.fromBits(points[3]),
Float.fromBits(points[4]),
Float.fromBits(points[5]),
Float.fromBits(points[8]),
isClosed
)
}
PathVerb.CUBIC -> {
PathSegment(
Float.fromBits(points[0]),
Float.fromBits(points[1]),
Float.fromBits(points[2]),
Float.fromBits(points[3]),
Float.fromBits(points[4]),
Float.fromBits(points[5]),
Float.fromBits(points[6]),
Float.fromBits(points[7]),
isClosed
)
}
PathVerb.DONE -> {
PathSegment()
}
}
} }
@ExternalSymbolName("org_jetbrains_skia_PathSegmentIterator__1nGetFinalizer") @ExternalSymbolName("org_jetbrains_skia_PathSegmentIterator__1nGetFinalizer")
private external fun PathSegmentIterator_nGetFinalizer(): NativePointer private external fun PathSegmentIterator_nGetFinalizer(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_PathSegmentIterator__1nNext") @ExternalSymbolName("org_jetbrains_skia_PathSegmentIterator__1nNext")
private external fun PathSegmentIterator_nNext(ptr: NativePointer): PathSegment? private external fun PathSegmentIterator_nNext(ptr: NativePointer, points: InteropPointer)
@ExternalSymbolName("org_jetbrains_skia_PathSegmentIterator__1nMake") @ExternalSymbolName("org_jetbrains_skia_PathSegmentIterator__1nMake")
private external fun _nMake(pathPtr: NativePointer, forceClose: Boolean): NativePointer private external fun _nMake(pathPtr: NativePointer, forceClose: Boolean): NativePointer
\ No newline at end of file
package org.jetbrains.skia
import org.jetbrains.skia.impl.use
import kotlin.test.Test
import kotlin.test.assertTrue
import kotlin.test.assertFalse
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import org.jetbrains.skiko.tests.runTest
import org.jetbrains.skia.tests.assertCloseEnough
class PathTests {
@Test
fun iterTest() = runTest {
Path().moveTo(10f, 10f).lineTo(20f, 0f).lineTo(20f, 20f).closePath().use { p ->
p.iterator().use { i ->
assertTrue(i.hasNext())
var s = i.next()!!
assertEquals(PathVerb.MOVE, s.verb)
assertEquals(Point(10f, 10f), s.p0)
assertTrue(s.isClosedContour, "segment[0] is a closed contour")
assertTrue(i.hasNext())
s = i.next()!!
assertEquals(PathVerb.LINE, s.verb)
assertEquals(Point(10f, 10f), s.p0)
assertEquals(Point(20f, 0f), s.p1)
assertFalse(s.isCloseLine, "segment[1] is a closed line")
assertTrue(i.hasNext())
s = i.next()!!
assertEquals(PathVerb.LINE, s.verb)
assertEquals(Point(20f, 0f), s.p0)
assertEquals(Point(20f, 20f), s.p1)
assertFalse(s.isCloseLine, "segment[2] is a closed line")
assertTrue(i.hasNext())
s = i.next()!!
assertEquals(PathVerb.LINE, s.verb)
assertEquals(Point(20f, 20f), s.p0)
assertEquals(Point(10f, 10f), s.p1)
assertTrue(s.isCloseLine, "segment[3] is a closed line")
assertTrue(i.hasNext())
s = i.next()!!
assertEquals(PathVerb.CLOSE, s.verb)
assertEquals(Point(10f, 10f), s.p0)
assertFalse(i.hasNext())
assertFailsWith<NoSuchElementException> {
i.next()
}
}
}
}
@Test
fun convexityTest() = runTest {
Path().lineTo(40f, 20f).lineTo(0f, 40f).lineTo(0f, 0f).closePath().use { p -> assertTrue(p.isConvex) }
Path().lineTo(40f, 40f).lineTo(40f, 0f).lineTo(0f, 40f).lineTo(0f, 0f).closePath().use { p ->
assertFalse(p.isConvex)
}
}
}
\ No newline at end of file
package org.jetbrains.skiko.skija package org.jetbrains.skia.tests
import org.jetbrains.skia.Matrix33 import org.jetbrains.skia.Matrix33
import org.jetbrains.skia.Point import org.jetbrains.skia.Point
......
package org.jetbrains.skiko.skija package org.jetbrains.skia.tests
import org.jetbrains.skia.Data import org.jetbrains.skia.Data
import org.jetbrains.skia.Typeface import org.jetbrains.skia.Typeface
......
...@@ -19,32 +19,52 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PathSegmentIteratorKt ...@@ -19,32 +19,52 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_PathSegmentIteratorKt
return static_cast<jlong>(reinterpret_cast<uintptr_t>(&deletePathSegmentIterator)); return static_cast<jlong>(reinterpret_cast<uintptr_t>(&deletePathSegmentIterator));
} }
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skia_PathSegmentIteratorKt_PathSegmentIterator_1nNext extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_PathSegmentIteratorKt_PathSegmentIterator_1nNext
(JNIEnv* env, jclass jclass, jlong ptr) { (JNIEnv* env, jclass jclass, jlong ptr, jintArray result) {
SkPath::Iter* instance = reinterpret_cast<SkPath::Iter*>(static_cast<uintptr_t>(ptr)); SkPath::Iter* instance = reinterpret_cast<SkPath::Iter*>(static_cast<uintptr_t>(ptr));
SkPoint pts[4]; SkPoint pts[4];
SkPath::Verb verb = instance->next(pts); SkPath::Verb verb = instance->next(pts);
jobject segment;
int context = verb;
if (instance -> isClosedContour()) {
context = context | (1 << 7);
}
if (instance -> isCloseLine()) {
context = context | (1 << 6);
}
switch (verb) { switch (verb) {
case SkPath::Verb::kDone_Verb: case SkPath::Verb::kDone_Verb: {
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorDone); jint d[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, context};
env->SetIntArrayRegion(result, 0, 10, d);
break; break;
}
case SkPath::Verb::kMove_Verb: case SkPath::Verb::kMove_Verb:
case SkPath::Verb::kClose_Verb: case SkPath::Verb::kClose_Verb: {
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorMoveClose, static_cast<jint>(verb), pts[0].fX, pts[0].fY, instance->isClosedContour()); jint d[10] = { rawBits(pts[0].fX), rawBits(pts[0].fY), 0, 0, 0, 0, 0, 0, 0, context};
env->SetIntArrayRegion(result, 0, 10, d);
break; break;
case SkPath::Verb::kLine_Verb: }
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorLine, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, instance->isCloseLine(), instance->isClosedContour()); case SkPath::Verb::kLine_Verb: {
jint d[10] = { rawBits(pts[0].fX), rawBits(pts[0].fY), rawBits(pts[1].fX), rawBits(pts[1].fY), 0, 0, 0, 0, 0, context};
env->SetIntArrayRegion(result, 0, 10, d);
break; break;
case SkPath::Verb::kQuad_Verb: }
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorQuad, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, instance->isClosedContour()); case SkPath::Verb::kQuad_Verb: {
jint d[10] = { rawBits(pts[0].fX), rawBits(pts[0].fY), rawBits(pts[1].fX), rawBits(pts[1].fY), rawBits(pts[2].fX), rawBits(pts[2].fY), 0, 0, 0, context};
env->SetIntArrayRegion(result, 0, 10, d);
break; break;
case SkPath::Verb::kConic_Verb: }
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorConic, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, instance->conicWeight(), instance->isClosedContour()); case SkPath::Verb::kConic_Verb: {
jint d[10] = { rawBits(pts[0].fX), rawBits(pts[0].fY), rawBits(pts[1].fX), rawBits(pts[1].fY), rawBits(pts[2].fX), rawBits(pts[2].fY), 0, 0, rawBits(instance->conicWeight()), context};
env->SetIntArrayRegion(result, 0, 10, d);
break; break;
case SkPath::Verb::kCubic_Verb: }
segment = env->NewObject(skija::PathSegment::cls, skija::PathSegment::ctorConic, pts[0].fX, pts[0].fY, pts[1].fX, pts[1].fY, pts[2].fX, pts[2].fY, pts[3].fX, pts[3].fY, instance->isClosedContour()); case SkPath::Verb::kCubic_Verb: {
jint d[10] = { rawBits(pts[0].fX), rawBits(pts[0].fY), rawBits(pts[1].fX), rawBits(pts[1].fY), rawBits(pts[2].fX), rawBits(pts[2].fY), rawBits(pts[3].fX), rawBits(pts[3].fY), 0, context};
env->SetIntArrayRegion(result, 0, 10, d);
break; break;
} }
return segment; }
} }
...@@ -4,10 +4,10 @@ import org.jetbrains.skia.Data ...@@ -4,10 +4,10 @@ import org.jetbrains.skia.Data
import org.jetbrains.skia.FontStyle import org.jetbrains.skia.FontStyle
import org.jetbrains.skia.Typeface import org.jetbrains.skia.Typeface
import org.jetbrains.skia.paragraph.TypefaceFontProvider import org.jetbrains.skia.paragraph.TypefaceFontProvider
import org.jetbrains.skiko.skija.makeFromResource
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNull import kotlin.test.assertNull
import org.jetbrains.skia.tests.makeFromResource
class FontMgrTest { class FontMgrTest {
@Test @Test
......
...@@ -4,9 +4,9 @@ import org.jetbrains.skia.Matrix33 ...@@ -4,9 +4,9 @@ import org.jetbrains.skia.Matrix33
import org.jetbrains.skia.Path import org.jetbrains.skia.Path
import org.jetbrains.skia.PathMeasure import org.jetbrains.skia.PathMeasure
import org.jetbrains.skia.Point import org.jetbrains.skia.Point
import org.jetbrains.skiko.skija.assertCloseEnough
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import org.jetbrains.skia.tests.assertCloseEnough
class PathMeasureTest { class PathMeasureTest {
@Test @Test
......
...@@ -18,57 +18,6 @@ import kotlin.test.assertNull ...@@ -18,57 +18,6 @@ import kotlin.test.assertNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
class PathTest { class PathTest {
@Test
fun iterTest() {
Path().moveTo(10f, 10f).lineTo(20f, 0f).lineTo(20f, 20f).closePath().use { p ->
p.iterator().use { i ->
assertTrue(i.hasNext())
var s = i.next()!!
assertEquals(PathVerb.MOVE, s.verb)
assertEquals(Point(10f, 10f), s.p0)
assertTrue(s.isClosedContour)
assertTrue(i.hasNext())
s = i.next()!!
assertEquals(PathVerb.LINE, s.verb)
assertEquals(Point(10f, 10f), s.p0)
assertEquals(Point(20f, 0f), s.p1)
assertFalse(s.isCloseLine)
assertTrue(i.hasNext())
s = i.next()!!
assertEquals(PathVerb.LINE, s.verb)
assertEquals(Point(20f, 0f), s.p0)
assertEquals(Point(20f, 20f), s.p1)
assertFalse(s.isCloseLine)
assertTrue(i.hasNext())
s = i.next()!!
assertEquals(PathVerb.LINE, s.verb)
assertEquals(Point(20f, 20f), s.p0)
assertEquals(Point(10f, 10f), s.p1)
assertTrue(s.isCloseLine)
assertTrue(i.hasNext())
s = i.next()!!
assertEquals(PathVerb.CLOSE, s.verb)
assertEquals(Point(10f, 10f), s.p0)
assertFalse(i.hasNext())
assertFailsWith<NoSuchElementException> {
i.next()
}
}
}
}
@Test
fun convexityTest() {
Path().lineTo(40f, 20f).lineTo(0f, 40f).lineTo(0f, 0f).closePath().use { p -> assertTrue(p.isConvex) }
Path().lineTo(40f, 40f).lineTo(40f, 0f).lineTo(0f, 40f).lineTo(0f, 0f).closePath().use { p ->
assertFalse(p.isConvex)
}
}
@Test @Test
fun isShapeTest() { fun isShapeTest() {
......
...@@ -3,12 +3,12 @@ package org.jetbrains.skiko ...@@ -3,12 +3,12 @@ package org.jetbrains.skiko
import org.jetbrains.skia.Font import org.jetbrains.skia.Font
import org.jetbrains.skia.TextLine import org.jetbrains.skia.TextLine
import org.jetbrains.skia.Typeface import org.jetbrains.skia.Typeface
import org.jetbrains.skiko.skija.assertCloseEnough
import org.jetbrains.skiko.skija.makeFromResource
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertContentEquals import kotlin.test.assertContentEquals
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertNotEquals import kotlin.test.assertNotEquals
import org.jetbrains.skia.tests.makeFromResource
import org.jetbrains.skia.tests.assertCloseEnough
class TextLineTest { class TextLineTest {
private var inter36: Font = Font(Typeface.makeFromResource("InterHinted-Regular.ttf"), 36f) private var inter36: Font = Font(Typeface.makeFromResource("InterHinted-Regular.ttf"), 36f)
......
...@@ -6,7 +6,6 @@ import org.jetbrains.skia.FontStyle ...@@ -6,7 +6,6 @@ import org.jetbrains.skia.FontStyle
import org.jetbrains.skia.FontVariation import org.jetbrains.skia.FontVariation
import org.jetbrains.skia.FontVariationAxis import org.jetbrains.skia.FontVariationAxis
import org.jetbrains.skia.Typeface import org.jetbrains.skia.Typeface
import org.jetbrains.skiko.skija.makeFromResource
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertContentEquals import kotlin.test.assertContentEquals
import kotlin.test.assertEquals import kotlin.test.assertEquals
...@@ -15,6 +14,7 @@ import kotlin.test.assertNotEquals ...@@ -15,6 +14,7 @@ import kotlin.test.assertNotEquals
import kotlin.test.assertNotNull import kotlin.test.assertNotNull
import kotlin.test.assertNull import kotlin.test.assertNull
import kotlin.test.assertTrue import kotlin.test.assertTrue
import org.jetbrains.skia.tests.makeFromResource
class TypefaceTest { class TypefaceTest {
......
...@@ -5,7 +5,7 @@ import org.jetbrains.skia.FontStyle ...@@ -5,7 +5,7 @@ import org.jetbrains.skia.FontStyle
import org.jetbrains.skia.Typeface import org.jetbrains.skia.Typeface
import org.jetbrains.skia.paragraph.FontCollection import org.jetbrains.skia.paragraph.FontCollection
import org.jetbrains.skia.paragraph.TypefaceFontProvider import org.jetbrains.skia.paragraph.TypefaceFontProvider
import org.jetbrains.skiko.skija.makeFromResource import org.jetbrains.skia.tests.makeFromResource
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertContentEquals import kotlin.test.assertContentEquals
import kotlin.test.assertEquals import kotlin.test.assertEquals
......
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