Unverified Commit 851d07dc authored by Pavel's avatar Pavel Committed by GitHub

allow to change font rendering settings in paragraph (#597)

* allow to change font rendering settings in paragraph

* add test

* rename

* fix js/native signatures

* workaround for kotlinjs
parent bacfb30d
...@@ -3,17 +3,17 @@ deploy.version=0.0.0 ...@@ -3,17 +3,17 @@ deploy.version=0.0.0
kotlin.mpp.enableGranularSourceSetsMetadata=true kotlin.mpp.enableGranularSourceSetsMetadata=true
kotlin.native.enableDependencyPropagation=false kotlin.native.enableDependencyPropagation=false
dependencies.skia.windows-x64=m105-f204b137b9-5 dependencies.skia.windows-x64=m105-305b7c02
dependencies.skia.linux-x64=m105-f204b137b9-5 dependencies.skia.linux-x64=m105-305b7c02
dependencies.skia.macos-x64=m105-f204b137b9-5 dependencies.skia.macos-x64=m105-305b7c02
dependencies.skia.linux-arm64=m105-f204b137b9-5 dependencies.skia.linux-arm64=m105-305b7c02
dependencies.skia.macos-arm64=m105-f204b137b9-5 dependencies.skia.macos-arm64=m105-305b7c02
dependencies.skia.wasm-wasm=m105-f204b137b9-5 dependencies.skia.wasm-wasm=m105-305b7c02
dependencies.skia.ios-x64=m105-f204b137b9-5 dependencies.skia.ios-x64=m105-305b7c02
dependencies.skia.ios-arm64=m105-f204b137b9-5 dependencies.skia.ios-arm64=m105-305b7c02
dependencies.skia.iosSim-arm64=m105-f204b137b9-5 dependencies.skia.iosSim-arm64=m105-305b7c02
dependencies.skia.iosSim-x64=m105-f204b137b9-5 dependencies.skia.iosSim-x64=m105-305b7c02
dependencies.skia.android-x64=m105-f204b137b9-5 dependencies.skia.android-x64=m105-305b7c02
dependencies.skia.android-arm64=m105-f204b137b9-5 dependencies.skia.android-arm64=m105-305b7c02
org.gradle.jvmargs=-Xmx3G -XX:MaxMetaspaceSize=512m org.gradle.jvmargs=-Xmx3G -XX:MaxMetaspaceSize=512m
package org.jetbrains.skia.paragraph
import org.jetbrains.skia.FontEdging
import org.jetbrains.skia.FontHinting
data class FontRastrSettings(val edging: FontEdging,
val hinting: FontHinting,
val subpixel: Boolean)
\ No newline at end of file
...@@ -2,6 +2,8 @@ package org.jetbrains.skia.paragraph ...@@ -2,6 +2,8 @@ package org.jetbrains.skia.paragraph
import org.jetbrains.skia.impl.Library.Companion.staticLoad import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.ExternalSymbolName import org.jetbrains.skia.ExternalSymbolName
import org.jetbrains.skia.FontEdging
import org.jetbrains.skia.FontHinting
import org.jetbrains.skia.impl.* import org.jetbrains.skia.impl.*
import org.jetbrains.skia.impl.getPtr import org.jetbrains.skia.impl.getPtr
import org.jetbrains.skia.impl.interopScope import org.jetbrains.skia.impl.interopScope
...@@ -167,6 +169,28 @@ class ParagraphStyle : Managed(ParagraphStyle_nMake(), _FinalizerHolder.PTR) { ...@@ -167,6 +169,28 @@ class ParagraphStyle : Managed(ParagraphStyle_nMake(), _FinalizerHolder.PTR) {
return this return this
} }
var fontRastrSettings: FontRastrSettings
get() = try {
Stats.onNativeCall()
val edging = FontEdging.values()[_nGetEdging(_ptr)]
Stats.onNativeCall()
val hinting = FontHinting.values()[_nGetHinting(_ptr)]
Stats.onNativeCall()
// by some obscure reason kotlinjs makes difference between number encoded booleans returned from `_nGetSubpixel` and regular booleans
// AssertionError: Expected <FontRastrSettings(edging=ALIAS, hinting=NONE, subpixel=false)>, actual <FontRastrSettings(edging=ALIAS, hinting=NONE, subpixel=0)>
val subpixel = _nGetSubpixel(_ptr).not().not()
FontRastrSettings(edging, hinting, subpixel)
} finally {
reachabilityBarrier(this)
}
set(value) = try {
Stats.onNativeCall()
_nSetFontRastrSettings(_ptr, value.edging.ordinal, value.hinting.ordinal, value.subpixel)
} finally {
reachabilityBarrier(this)
}
var textIndent: TextIndent var textIndent: TextIndent
get() = try { get() = try {
Stats.onNativeCall() Stats.onNativeCall()
...@@ -259,6 +283,18 @@ private external fun _nIsHintingEnabled(ptr: NativePointer): Boolean ...@@ -259,6 +283,18 @@ private external fun _nIsHintingEnabled(ptr: NativePointer): Boolean
@ExternalSymbolName("org_jetbrains_skia_paragraph_ParagraphStyle__1nDisableHinting") @ExternalSymbolName("org_jetbrains_skia_paragraph_ParagraphStyle__1nDisableHinting")
private external fun _nDisableHinting(ptr: NativePointer) private external fun _nDisableHinting(ptr: NativePointer)
@ExternalSymbolName("org_jetbrains_skia_paragraph_ParagraphStyle__1nSetFontRastrSettings")
private external fun _nSetFontRastrSettings(ptr: NativePointer, edging: Int, hinting: Int, subpixel: Boolean)
@ExternalSymbolName("org_jetbrains_skia_paragraph_ParagraphStyle__1nGetEdging")
private external fun _nGetEdging(ptr: NativePointer): Int
@ExternalSymbolName("org_jetbrains_skia_paragraph_ParagraphStyle__1nGetHinting")
private external fun _nGetHinting(ptr: NativePointer): Int
@ExternalSymbolName("org_jetbrains_skia_paragraph_ParagraphStyle__1nGetSubpixel")
private external fun _nGetSubpixel(ptr: NativePointer): Boolean
@ExternalSymbolName("org_jetbrains_skia_paragraph_ParagraphStyle__1nSetTextIndent") @ExternalSymbolName("org_jetbrains_skia_paragraph_ParagraphStyle__1nSetTextIndent")
private external fun _nSetTextIndent(ptr: NativePointer, firstLine: Float, restLine: Float) private external fun _nSetTextIndent(ptr: NativePointer, firstLine: Float, restLine: Float)
......
package org.jetbrains.skiko.paragraph package org.jetbrains.skiko.paragraph
import org.jetbrains.skia.FontEdging
import org.jetbrains.skia.FontHinting
import org.jetbrains.skia.impl.use import org.jetbrains.skia.impl.use
import org.jetbrains.skia.paragraph.FontRastrSettings
import org.jetbrains.skia.paragraph.ParagraphStyle import org.jetbrains.skia.paragraph.ParagraphStyle
import org.jetbrains.skia.paragraph.TextIndent import org.jetbrains.skia.paragraph.TextIndent
import kotlin.test.Test import kotlin.test.Test
...@@ -32,4 +35,24 @@ class ParagraphStyleTests { ...@@ -32,4 +35,24 @@ class ParagraphStyleTests {
assertEquals(indent2, paragraphStyle.textIndent) assertEquals(indent2, paragraphStyle.textIndent)
} }
} }
@Test
fun paragraphStyleFontRastrSettingsTests() {
ParagraphStyle().use { paragraphStyle ->
val poorRasterSettings = FontRastrSettings(
edging = FontEdging.ALIAS,
hinting = FontHinting.NONE,
subpixel = false)
paragraphStyle.fontRastrSettings = poorRasterSettings
assertEquals(poorRasterSettings, paragraphStyle.fontRastrSettings)
val gloriousRasterSettings = FontRastrSettings(
edging = FontEdging.SUBPIXEL_ANTI_ALIAS,
hinting = FontHinting.FULL,
subpixel = true)
paragraphStyle.fontRastrSettings = gloriousRasterSettings
assertEquals(gloriousRasterSettings, paragraphStyle.fontRastrSettings)
}
}
} }
\ No newline at end of file
...@@ -143,6 +143,37 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_paragraph_Paragrap ...@@ -143,6 +143,37 @@ extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_paragraph_Paragrap
return instance->hintingIsOn(); return instance->hintingIsOn();
} }
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_paragraph_ParagraphStyleKt__1nSetFontRastrSettings
(JNIEnv* env, jclass jclass, jlong ptr, jint edging, jint hinting, jboolean subpixel) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(static_cast<uintptr_t>(ptr));
FontRastrSettings fontRastrSettings;
fontRastrSettings.fEdging = static_cast<SkFont::Edging>(edging);
fontRastrSettings.fHinting = static_cast<SkFontHinting>(hinting);
fontRastrSettings.fSubpixel = subpixel;
instance->setFontRastrSettings(fontRastrSettings);
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skia_paragraph_ParagraphStyleKt__1nGetEdging
(JNIEnv* env, jclass jclass, jlong ptr) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(static_cast<uintptr_t>(ptr));
FontRastrSettings fontRastrSettings = instance->getFontRastrSettings();
return static_cast<jint>(fontRastrSettings.fEdging);
}
extern "C" JNIEXPORT jint JNICALL Java_org_jetbrains_skia_paragraph_ParagraphStyleKt__1nGetHinting
(JNIEnv* env, jclass jclass, jlong ptr) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(static_cast<uintptr_t>(ptr));
FontRastrSettings fontRastrSettings = instance->getFontRastrSettings();
return static_cast<jint>(fontRastrSettings.fHinting);
}
extern "C" JNIEXPORT jboolean JNICALL Java_org_jetbrains_skia_paragraph_ParagraphStyleKt__1nGetSubpixel
(JNIEnv* env, jclass jclass, jlong ptr) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(static_cast<uintptr_t>(ptr));
FontRastrSettings fontRastrSettings = instance->getFontRastrSettings();
return fontRastrSettings.fSubpixel;
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_paragraph_ParagraphStyleKt__1nDisableHinting extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_paragraph_ParagraphStyleKt__1nDisableHinting
(JNIEnv* env, jclass jclass, jlong ptr) { (JNIEnv* env, jclass jclass, jlong ptr) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(static_cast<uintptr_t>(ptr)); ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(static_cast<uintptr_t>(ptr));
......
...@@ -146,6 +146,37 @@ SKIKO_EXPORT void org_jetbrains_skia_paragraph_ParagraphStyle__1nDisableHinting ...@@ -146,6 +146,37 @@ SKIKO_EXPORT void org_jetbrains_skia_paragraph_ParagraphStyle__1nDisableHinting
instance->turnHintingOff(); instance->turnHintingOff();
} }
SKIKO_EXPORT void org_jetbrains_skia_paragraph_ParagraphStyle__1nSetFontRastrSettings
(KNativePointer ptr, KInt edging, KInt hinting, KBoolean subpixel) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(ptr);
FontRastrSettings fontRastrSettings;
fontRastrSettings.fEdging = static_cast<SkFont::Edging>(edging);
fontRastrSettings.fHinting = static_cast<SkFontHinting>(hinting);
fontRastrSettings.fSubpixel = subpixel;
instance->setFontRastrSettings(fontRastrSettings);
}
SKIKO_EXPORT KInt org_jetbrains_skia_paragraph_ParagraphStyle__1nGetEdging
(KNativePointer ptr) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(ptr);
FontRastrSettings fontRastrSettings = instance->getFontRastrSettings();
return static_cast<KInt>(fontRastrSettings.fEdging);
}
SKIKO_EXPORT KInt org_jetbrains_skia_paragraph_ParagraphStyle__1nGetHinting
(KNativePointer ptr) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(ptr);
FontRastrSettings fontRastrSettings = instance->getFontRastrSettings();
return static_cast<KInt>(fontRastrSettings.fHinting);
}
SKIKO_EXPORT KBoolean org_jetbrains_skia_paragraph_ParagraphStyle__1nGetSubpixel
(KNativePointer ptr) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>(ptr);
FontRastrSettings fontRastrSettings = instance->getFontRastrSettings();
return fontRastrSettings.fSubpixel;
}
SKIKO_EXPORT void org_jetbrains_skia_paragraph_ParagraphStyle__1nSetTextIndent SKIKO_EXPORT void org_jetbrains_skia_paragraph_ParagraphStyle__1nSetTextIndent
(KNativePointer ptr, KFloat firstLine, KFloat restLine) { (KNativePointer ptr, KFloat firstLine, KFloat restLine) {
ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>((ptr)); ParagraphStyle* instance = reinterpret_cast<ParagraphStyle*>((ptr));
......
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