Unverified Commit 09aad604 authored by Shagen Ogandzhanian's avatar Shagen Ogandzhanian Committed by GitHub

Commonize FontMgr and FontStyleSet (#336)

parent 3395afe9
......@@ -140,7 +140,6 @@ class Data internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHol
}
}
@ExternalSymbolName("org_jetbrains_skia_Data__1nGetFinalizer")
private external fun Data_nGetFinalizer(): NativePointer
......
package org.jetbrains.skia
import org.jetbrains.skia.impl.InteropPointer
import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.RefCnt
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.impl.interopScope
import org.jetbrains.skia.impl.reachabilityBarrier
import org.jetbrains.skia.impl.withStringResult
open class FontMgr : RefCnt {
companion object {
......@@ -27,7 +30,9 @@ open class FontMgr : RefCnt {
fun getFamilyName(index: Int): String {
return try {
Stats.onNativeCall()
_nGetFamilyName(_ptr, index)
withStringResult {
_nGetFamilyName(_ptr, index)
}
} finally {
reachabilityBarrier(this)
}
......@@ -57,7 +62,7 @@ open class FontMgr : RefCnt {
fun matchFamily(familyName: String?): FontStyleSet {
return try {
Stats.onNativeCall()
FontStyleSet(_nMatchFamily(_ptr, familyName))
interopScope { FontStyleSet(_nMatchFamily(_ptr, toInterop(familyName))) }
} finally {
reachabilityBarrier(this)
}
......@@ -116,7 +121,7 @@ open class FontMgr : RefCnt {
): Typeface? {
return try {
Stats.onNativeCall()
val ptr = _nMatchFamilyStyleCharacter(_ptr, familyName, style._value, bcp47, character)
val ptr = _nMatchFamilyStyleCharacter(_ptr, familyName, style._value, bcp47, bcp47?.size ?: 0, character)
if (ptr == NullPointer) null else Typeface(ptr)
} finally {
reachabilityBarrier(this)
......@@ -163,13 +168,13 @@ open class FontMgr : RefCnt {
private external fun _nGetFamiliesCount(ptr: NativePointer): Int
@ExternalSymbolName("org_jetbrains_skia_FontMgr__1nGetFamilyName")
private external fun _nGetFamilyName(ptr: NativePointer, index: Int): String
private external fun _nGetFamilyName(ptr: NativePointer, index: Int): NativePointer
@ExternalSymbolName("org_jetbrains_skia_FontMgr__1nMakeStyleSet")
private external fun _nMakeStyleSet(ptr: NativePointer, index: Int): NativePointer
@ExternalSymbolName("org_jetbrains_skia_FontMgr__1nMatchFamily")
private external fun _nMatchFamily(ptr: NativePointer, familyName: String?): NativePointer
private external fun _nMatchFamily(ptr: NativePointer, familyName: InteropPointer): NativePointer
@ExternalSymbolName("org_jetbrains_skia_FontMgr__1nMatchFamilyStyle")
private external fun _nMatchFamilyStyle(ptr: NativePointer, familyName: String?, fontStyle: Int): NativePointer
......@@ -180,6 +185,7 @@ private external fun _nMatchFamilyStyleCharacter(
familyName: String?,
fontStyle: Int,
bcp47: Array<String?>?,
bcp47size: Int,
character: Int
): NativePointer
......
......@@ -5,6 +5,7 @@ import org.jetbrains.skia.impl.RefCnt
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.reachabilityBarrier
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.withStringResult
class FontStyleSet internal constructor(ptr: NativePointer) : RefCnt(ptr) {
companion object {
......@@ -39,7 +40,9 @@ class FontStyleSet internal constructor(ptr: NativePointer) : RefCnt(ptr) {
fun getStyleName(index: Int): String {
return try {
Stats.onNativeCall()
_nGetStyleName(_ptr, index)
withStringResult {
_nGetStyleName(_ptr, index)
}
} finally {
reachabilityBarrier(this)
}
......@@ -77,7 +80,7 @@ private external fun _nCount(ptr: NativePointer): Int
private external fun _nGetStyle(ptr: NativePointer, index: Int): Int
@ExternalSymbolName("org_jetbrains_skia_FontStyleSet__1nGetStyleName")
private external fun _nGetStyleName(ptr: NativePointer, index: Int): String
private external fun _nGetStyleName(ptr: NativePointer, index: Int): NativePointer
@ExternalSymbolName("org_jetbrains_skia_FontStyleSet__1nGetTypeface")
private external fun _nGetTypeface(ptr: NativePointer, index: Int): NativePointer
......
......@@ -313,7 +313,9 @@ class Typeface internal constructor(ptr: NativePointer) : RefCnt(ptr) {
val familyName: String
get() = try {
Stats.onNativeCall()
_nGetFamilyName(_ptr)
withStringResult {
_nGetFamilyName(_ptr)
}
} finally {
reachabilityBarrier(this)
}
......@@ -399,4 +401,4 @@ private external fun _nGetKerningPairAdjustments(ptr: NativePointer, glyphs: Sho
private external fun _nGetFamilyNames(ptr: NativePointer): Array<FontFamilyName>
@ExternalSymbolName("org_jetbrains_skia_Typeface__1nGetFamilyName")
private external fun _nGetFamilyName(ptr: NativePointer): String
\ No newline at end of file
private external fun _nGetFamilyName(ptr: NativePointer): NativePointer
\ No newline at end of file
......@@ -6,8 +6,10 @@ import org.jetbrains.skia.FontMgr
import org.jetbrains.skia.impl.Stats
import org.jetbrains.skia.impl.reachabilityBarrier
import org.jetbrains.skia.ExternalSymbolName
import org.jetbrains.skia.impl.InteropPointer
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.impl.interopScope
class TypefaceFontProvider : FontMgr(TypefaceFontProvider_nMake()) {
companion object {
......@@ -19,11 +21,13 @@ class TypefaceFontProvider : FontMgr(TypefaceFontProvider_nMake()) {
fun registerTypeface(typeface: Typeface?, alias: String? = null): TypefaceFontProvider {
return try {
Stats.onNativeCall()
_nRegisterTypeface(
_ptr,
getPtr(typeface),
alias
)
interopScope {
_nRegisterTypeface(
_ptr,
getPtr(typeface),
toInterop(alias)
)
}
this
} finally {
reachabilityBarrier(typeface)
......@@ -40,4 +44,4 @@ class TypefaceFontProvider : FontMgr(TypefaceFontProvider_nMake()) {
private external fun TypefaceFontProvider_nMake(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_paragraph_TypefaceFontProvider__1nRegisterTypeface")
private external fun _nRegisterTypeface(ptr: NativePointer, typefacePtr: NativePointer, alias: String?): NativePointer
private external fun _nRegisterTypeface(ptr: NativePointer, typefacePtr: NativePointer, alias: InteropPointer): NativePointer
package org.jetbrains.skia
import org.jetbrains.skia.impl.use
import org.jetbrains.skia.paragraph.TypefaceFontProvider
import org.jetbrains.skia.tests.makeFromResource
import org.jetbrains.skiko.tests.SkipJsTarget
import org.jetbrains.skiko.tests.SkipNativeTarget
import org.jetbrains.skiko.tests.makeFromFileName
import org.jetbrains.skiko.tests.runTest
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
class FontMgrTest {
@Test
fun fontMgrTest() = runTest {
TypefaceFontProvider().let { fontManager ->
val fontManager = TypefaceFontProvider()
val jbMono = Typeface.makeFromResource("./fonts/JetBrainsMono-Regular.ttf")
fontManager.registerTypeface(jbMono)
val jbMonoBold = Typeface.makeFromResource("./fonts/JetBrainsMono-Bold.ttf")
fontManager.registerTypeface(jbMonoBold)
val inter: Typeface = Typeface.makeFromResource("./fonts/Inter-Hinted-Regular.ttf")
fontManager.registerTypeface(inter, "Interface")
assertEquals(2, fontManager.familiesCount)
assertEquals("JetBrains Mono", fontManager.getFamilyName(0))
assertEquals("Interface", fontManager.getFamilyName(1))
fontManager.makeStyleSet(0)!!.use { styleSet ->
assertEquals(0, styleSet.count())
}
fontManager.makeStyleSet(1)!!.use { styleSet ->
assertEquals(0, styleSet.count())
}
fontManager.matchFamily("JetBrains Mono").use { styleSet ->
assertEquals(2, styleSet.count())
assertEquals(FontStyle.NORMAL, styleSet.getStyle(0))
assertEquals("JetBrains Mono", styleSet.getStyleName(0))
assertEquals(FontStyle.BOLD, styleSet.getStyle(1))
assertEquals("JetBrains Mono", styleSet.getStyleName(1))
assertEquals(2, jbMono.refCount)
styleSet.getTypeface(0)!!.use { face ->
assertEquals(3, jbMono.refCount)
assertEquals(jbMono, face)
}
assertEquals(2, jbMono.refCount)
assertEquals(2, jbMonoBold.refCount)
styleSet.getTypeface(1)!!.use { face ->
assertEquals(3, jbMonoBold.refCount)
assertEquals(jbMonoBold, face)
}
assertEquals(2, jbMonoBold.refCount)
assertEquals(2, jbMono.refCount)
styleSet.matchStyle(FontStyle.NORMAL)!!.use { face ->
assertEquals(3, jbMono.refCount)
assertEquals(jbMono, face)
}
assertEquals(2, jbMono.refCount)
assertEquals(2, jbMonoBold.refCount)
styleSet.matchStyle(FontStyle.BOLD)!!.use { face ->
assertEquals(3, jbMonoBold.refCount)
assertEquals(jbMonoBold, face)
}
assertEquals(2, jbMonoBold.refCount)
assertEquals(jbMono, styleSet.matchStyle(FontStyle.ITALIC))
}
assertNull(fontManager.matchFamilyStyle("JetBrains Mono", FontStyle.BOLD))
assertNull(fontManager.matchFamilyStyle("Interface", FontStyle.NORMAL))
// TODO: it would be definitely beneficial to check the notNull branch as well
assertNull(
fontManager.matchFamilyStyleCharacter("JetBrains Mono", FontStyle.BOLD, arrayOf("en-US"), 65 /* A */)
)
}
}
@Test
@SkipJsTarget
@SkipNativeTarget
fun makeFromDataTest() {
makeFromFileName("src/commonTest/resources/fonts/JetBrainsMono-Italic.ttf").use { data ->
FontMgr.default.makeFromData(data)!!.use { typeFace ->
assertEquals("JetBrains Mono", typeFace.familyName)
assertEquals(FontStyle.ITALIC, typeFace.fontStyle)
}
}
}
}
\ No newline at end of file
package org.jetbrains.skia
import kotlin.test.Test
import kotlin.test.assertEquals
class FontStyleSetTests {
@Test
fun fontStyleSetTest() {
val fontStyle = FontStyleSet.makeEmpty()
assertEquals(0, fontStyle.count())
}
}
\ No newline at end of file
package org.jetbrains.skiko.tests
import org.jetbrains.skia.Data
import org.jetbrains.skia.impl.InteropScope
import org.jetbrains.skia.impl.NativePointer
......@@ -12,3 +13,5 @@ expect annotation class SkipNativeTarget
expect annotation class SkipJsTarget
expect annotation class SkipJvmTarget
expect fun makeFromFileName(path: String?): Data
......@@ -2,6 +2,7 @@ package org.jetbrains.skiko.tests
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.promise
import org.jetbrains.skia.Data
import org.jetbrains.skia.impl.InteropScope
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skiko.wasm.await
......@@ -20,4 +21,6 @@ actual typealias SkipJsTarget = kotlin.test.Ignore
actual annotation class SkipJvmTarget
actual annotation class SkipNativeTarget
\ No newline at end of file
actual annotation class SkipNativeTarget
actual fun makeFromFileName(path: String?): Data = Data(0)
\ No newline at end of file
......@@ -11,12 +11,12 @@ extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skia_FontMgrKt__1nGetFamili
return instance->countFamilies();
}
extern "C" JNIEXPORT jstring JNICALL Java_org_jetbrains_skia_FontMgrKt__1nGetFamilyName
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_FontMgrKt__1nGetFamilyName
(JNIEnv* env, jclass jclass, jlong ptr, jint index) {
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>(static_cast<uintptr_t>(ptr));
SkString familyName;
instance->getFamilyName(index, &familyName);
return javaString(env, familyName);
return reinterpret_cast<jlong>(new SkString(familyName));
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_FontMgrKt__1nMakeStyleSet
......@@ -43,7 +43,7 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_FontMgrKt__1nMatchFam
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_FontMgrKt__1nMatchFamilyStyleCharacter
(JNIEnv* env, jclass jclass, jlong ptr, jstring familyNameStr, jint fontStyle, jobjectArray bcp47Array, jint character) {
(JNIEnv* env, jclass jclass, jlong ptr, jstring familyNameStr, jint fontStyle, jobjectArray bcp47Array, jint bcp47size, jint character) {
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>(static_cast<uintptr_t>(ptr));
SkString familyName = skString(env, familyNameStr);
......
......@@ -24,12 +24,12 @@ extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skia_FontStyleSetKt__1nGetS
return fontStyle.weight() + (fontStyle.width() << 16) + (fontStyle.slant() << 24);
}
extern "C" JNIEXPORT jstring JNICALL Java_org_jetbrains_skia_FontStyleSetKt__1nGetStyleName
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_FontStyleSetKt__1nGetStyleName
(JNIEnv* env, jclass jclass, jlong ptr, jint index) {
SkFontStyleSet* instance = reinterpret_cast<SkFontStyleSet*>(static_cast<uintptr_t>(ptr));
SkString style;
instance->getStyle(index, nullptr, &style);
return javaString(env, style);
return reinterpret_cast<jlong>(new SkString(style));
}
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_FontStyleSetKt__1nGetTypeface
......
......@@ -208,12 +208,12 @@ extern "C" JNIEXPORT jobjectArray JNICALL Java_org_jetbrains_skia_TypefaceKt__1n
return res;
}
extern "C" JNIEXPORT jstring JNICALL Java_org_jetbrains_skia_TypefaceKt__1nGetFamilyName
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_TypefaceKt__1nGetFamilyName
(JNIEnv* env, jclass jclass, jlong ptr) {
SkTypeface* instance = reinterpret_cast<SkTypeface*>(static_cast<uintptr_t>(ptr));
SkString name;
instance->getFamilyName(&name);
return javaString(env, name);
return reinterpret_cast<jlong>(new SkString(name));
}
extern "C" JNIEXPORT jobject JNICALL Java_org_jetbrains_skia_TypefaceKt_Typeface_1nGetBounds
......
package org.jetbrains.skiko.tests
import kotlinx.coroutines.runBlocking
import org.jetbrains.skia.Data
import org.jetbrains.skia.impl.BufferUtil
import org.jetbrains.skia.impl.InteropScope
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.makeFromFileName
import java.nio.ByteBuffer
actual fun runTest(block: suspend () -> Unit) {
......@@ -19,3 +21,5 @@ actual annotation class SkipJsTarget
actual typealias SkipJvmTarget = org.junit.Ignore
actual annotation class SkipNativeTarget
actual fun makeFromFileName(path: String?): Data = Data.Companion.makeFromFileName(path)
\ No newline at end of file
package org.jetbrains.skiko
import org.jetbrains.skia.Data
import org.jetbrains.skia.FontStyle
import org.jetbrains.skia.Typeface
import org.jetbrains.skia.makeFromFileName
import org.jetbrains.skia.paragraph.TypefaceFontProvider
import kotlin.test.Test
import kotlin.test.assertEquals
import kotlin.test.assertNull
import org.jetbrains.skia.tests.makeFromResource
import org.jetbrains.skiko.tests.runTest
class FontMgrTest {
@Test
fun fontMgrTest() = runTest {
val fontManager = TypefaceFontProvider()
val jbMono = Typeface.makeFromResource("./fonts/JetBrainsMono-Regular.ttf")
fontManager.registerTypeface(jbMono)
val jbMonoBold = Typeface.makeFromResource("./fonts/JetBrainsMono-Bold.ttf")
fontManager.registerTypeface(jbMonoBold)
val inter: Typeface = Typeface.makeFromResource("./fonts/Inter-Hinted-Regular.ttf")
fontManager.registerTypeface(inter, "Interface")
assertEquals(2, fontManager.familiesCount)
assertEquals("JetBrains Mono", fontManager.getFamilyName(0))
assertEquals("Interface", fontManager.getFamilyName(1))
fontManager.makeStyleSet(0).use { styleSet ->
assertEquals(0, styleSet?.count())
}
fontManager.makeStyleSet(1).use { styleSet ->
assertEquals(0, styleSet?.count())
}
fontManager.matchFamily("JetBrains Mono").use { styleSet ->
assertEquals(2, styleSet.count())
assertEquals(FontStyle.NORMAL, styleSet.getStyle(0))
assertEquals("JetBrains Mono", styleSet.getStyleName(0))
assertEquals(FontStyle.BOLD, styleSet.getStyle(1))
assertEquals("JetBrains Mono", styleSet.getStyleName(1))
assertEquals(2, jbMono.refCount)
styleSet.getTypeface(0).use { face ->
assertEquals(3, jbMono.refCount)
assertEquals(jbMono, face)
}
assertEquals(2, jbMono.refCount)
assertEquals(2, jbMonoBold.refCount)
styleSet.getTypeface(1).use { face ->
assertEquals(3, jbMonoBold.refCount)
assertEquals(jbMonoBold, face)
}
assertEquals(2, jbMonoBold.refCount)
assertEquals(2, jbMono.refCount)
styleSet.matchStyle(FontStyle.NORMAL).use { face ->
assertEquals(3, jbMono.refCount)
assertEquals(jbMono, face)
}
assertEquals(2, jbMono.refCount)
assertEquals(2, jbMonoBold.refCount)
styleSet.matchStyle(FontStyle.BOLD).use { face ->
assertEquals(3, jbMonoBold.refCount)
assertEquals(jbMonoBold, face)
}
assertEquals(2, jbMonoBold.refCount)
assertEquals(jbMono, styleSet.matchStyle(FontStyle.ITALIC))
}
assertNull(fontManager.matchFamilyStyle("JetBrains Mono", FontStyle.BOLD))
assertNull(fontManager.matchFamilyStyle("Interface", FontStyle.NORMAL))
assertEquals(
null,
fontManager.matchFamilyStyleCharacter("JetBrains Mono", FontStyle.BOLD, arrayOf("en-US"), 65 /* A */)
)
Data.makeFromFileName("src/commonTest/resources/fonts/JetBrainsMono-Italic.ttf").use { data ->
fontManager.makeFromData(data).use {
fontManager.matchFamily("JetBrains Mono").use { styleSet ->
assertEquals(2, fontManager.familiesCount)
assertEquals(2, styleSet.count())
}
}
}
fontManager.close()
}
}
\ No newline at end of file
......@@ -16,65 +16,50 @@ SKIKO_EXPORT KInt org_jetbrains_skia_FontMgr__1nGetFamiliesCount
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_FontMgr__1nGetFamilyName
(KNativePointer ptr, KInt index) {
TODO("implement org_jetbrains_skia_FontMgr__1nGetFamilyName");
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_FontMgr__1nGetFamilyName
(KNativePointer ptr, KInt index) {
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>((ptr));
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>(ptr);
SkString familyName;
instance->getFamilyName(index, &familyName);
return javaString(env, familyName);
return new SkString(familyName);
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontMgr__1nMakeStyleSet
(KNativePointer ptr, KInt index) {
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>((ptr));
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>(ptr);
SkFontStyleSet* styleSet = instance->createStyleSet(index);
return reinterpret_cast<KNativePointer>(styleSet);
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontMgr__1nMatchFamily
(KNativePointer ptr, KInteropPointer familyNameStr) {
TODO("implement org_jetbrains_skia_FontMgr__1nMatchFamily");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontMgr__1nMatchFamily
(KNativePointer ptr, KInteropPointer familyNameStr) {
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>((ptr));
SkString familyName = skString(env, familyNameStr);
SkFontStyleSet* styleSet = instance->matchFamily(familyName.c_str());
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>(ptr);
SkFontStyleSet* styleSet = instance->matchFamily(reinterpret_cast<char *>(familyNameStr));
return reinterpret_cast<KNativePointer>(styleSet);
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontMgr__1nMatchFamilyStyle
(KNativePointer ptr, KInteropPointer familyNameStr, KInt fontStyle) {
TODO("implement org_jetbrains_skia_FontMgr__1nMatchFamilyStyle");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontMgr__1nMatchFamilyStyle
(KNativePointer ptr, KInteropPointer familyNameStr, KInt fontStyle) {
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>((ptr));
SkString familyName = skString(env, familyNameStr);
SkTypeface* typeface = instance->matchFamilyStyle(familyName.c_str(), skija::FontStyle::fromJava(fontStyle));
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>(ptr);
SkString familyName = skString(familyNameStr);
SkTypeface* typeface = instance->matchFamilyStyle(familyName.c_str(), skija::FontStyle::fromKotlin(fontStyle));
return reinterpret_cast<KNativePointer>(typeface);
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontMgr__1nMatchFamilyStyleCharacter
(KNativePointer ptr, KInteropPointer familyNameStr, KInt fontStyle, KInteropPointerArray bcp47Array, KInt bcp47size, KInt character) {
SkFontMgr* instance = reinterpret_cast<SkFontMgr*>(ptr);
SkString familyName = skString(familyNameStr);
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontMgr__1nMatchFamilyStyleCharacter
(KNativePointer ptr, KInteropPointer familyNameStr, KInt fontStyle, KInteropPointerArray bcp47Array, KInt character) {
TODO("implement org_jetbrains_skia_FontMgr__1nMatchFamilyStyleCharacter");
std::vector<SkString> bcp47Strings = skStringVector(bcp47Array, bcp47size);
std::vector<const char*> bcp47(bcp47Strings.size());
for (int i = 0; i < bcp47.size(); ++i)
bcp47[i] = bcp47Strings[i].c_str();
SkTypeface* typeface = instance->matchFamilyStyleCharacter(familyName.c_str(), skija::FontStyle::fromKotlin(fontStyle), bcp47.data(), (int) bcp47.size(), character);
return reinterpret_cast<KNativePointer>(typeface);
}
#if 0
......
......@@ -14,7 +14,7 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontStyleSet__1nMakeEmpty
SKIKO_EXPORT KInt org_jetbrains_skia_FontStyleSet__1nCount
(KNativePointer ptr) {
SkFontStyleSet* instance = reinterpret_cast<SkFontStyleSet*>((ptr));
SkFontStyleSet* instance = reinterpret_cast<SkFontStyleSet*>(ptr);
return instance->count();
}
......@@ -27,22 +27,14 @@ SKIKO_EXPORT KInt org_jetbrains_skia_FontStyleSet__1nGetStyle
}
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_FontStyleSet__1nGetStyleName
(KNativePointer ptr, KInt index) {
TODO("implement org_jetbrains_skia_FontStyleSet__1nGetStyleName");
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_FontStyleSet__1nGetStyleName
(KNativePointer ptr, KInt index) {
SkFontStyleSet* instance = reinterpret_cast<SkFontStyleSet*>((ptr));
SkString style;
instance->getStyle(index, nullptr, &style);
return javaString(env, style);
return new SkString(style);
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontStyleSet__1nGetTypeface
(KNativePointer ptr, KInt index) {
SkFontStyleSet* instance = reinterpret_cast<SkFontStyleSet*>((ptr));
......@@ -50,18 +42,9 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontStyleSet__1nGetTypeface
return reinterpret_cast<KNativePointer>(typeface);
}
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontStyleSet__1nMatchStyle
(KNativePointer ptr, KInt fontStyle) {
TODO("implement org_jetbrains_skia_FontStyleSet__1nMatchStyle");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_FontStyleSet__1nMatchStyle
(KNativePointer ptr, KInt fontStyle) {
SkFontStyleSet* instance = reinterpret_cast<SkFontStyleSet*>((ptr));
SkTypeface* typeface = instance->matchStyle(skija::FontStyle::fromJava(fontStyle));
SkTypeface* typeface = instance->matchStyle(skija::FontStyle::fromKotlin(fontStyle));
return reinterpret_cast<KNativePointer>(typeface);
}
#endif
}
\ No newline at end of file
......@@ -288,20 +288,11 @@ SKIKO_EXPORT KInteropPointerArray org_jetbrains_skia_Typeface__1nGetFamilyNames
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Typeface__1nGetFamilyName
(KNativePointer ptr) {
TODO("implement org_jetbrains_skia_Typeface__1nGetFamilyName");
}
#if 0
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Typeface__1nGetFamilyName
(KNativePointer ptr) {
SkTypeface* instance = reinterpret_cast<SkTypeface*>((ptr));
SkTypeface* instance = reinterpret_cast<SkTypeface*>(ptr);
SkString name;
instance->getFamilyName(&name);
return javaString(env, name);
return new SkString(name);
}
#endif
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_Typeface__1nGetBounds
(KNativePointer ptr) {
......
package org.jetbrains.skiko.tests
import kotlinx.coroutines.runBlocking
import org.jetbrains.skia.Data
import org.jetbrains.skia.impl.InteropScope
import org.jetbrains.skia.impl.NativePointer
import org.jetbrains.skia.makeFromFileName
actual fun runTest(block: suspend () -> Unit) {
runBlocking { block() }
......@@ -17,3 +19,5 @@ actual annotation class SkipJsTarget
actual annotation class SkipJvmTarget
actual typealias SkipNativeTarget = kotlin.test.Ignore
actual fun makeFromFileName(path: String?): Data = Data.Companion.makeFromFileName(path)
\ 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