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

Add support of `TextStyle::baselineShift` (#400)

parent b0dfb83d
package org.jetbrains.skia.paragraph package org.jetbrains.skia.paragraph
import org.jetbrains.skia.impl.Library.Companion.staticLoad
import org.jetbrains.skia.* import org.jetbrains.skia.*
import org.jetbrains.skia.ExternalSymbolName
import org.jetbrains.skia.impl.* import org.jetbrains.skia.impl.*
import org.jetbrains.skia.impl.Library.Companion.staticLoad
class TextStyle internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) { class TextStyle internal constructor(ptr: NativePointer) : Managed(ptr, _FinalizerHolder.PTR) {
companion object { companion object {
...@@ -286,6 +285,23 @@ class TextStyle internal constructor(ptr: NativePointer) : Managed(ptr, _Finaliz ...@@ -286,6 +285,23 @@ class TextStyle internal constructor(ptr: NativePointer) : Managed(ptr, _Finaliz
return this return this
} }
var baselineShift: Float
get() = try {
Stats.onNativeCall()
TextStyle_nGetBaselineShift(_ptr)
} finally {
reachabilityBarrier(this)
}
set(value) {
setBaselineShift(value)
}
fun setBaselineShift(baselineShift: Float): TextStyle {
Stats.onNativeCall()
TextStyle_nSetBaselineShift(_ptr, baselineShift)
return this
}
var wordSpacing: Float var wordSpacing: Float
get() = try { get() = try {
Stats.onNativeCall() Stats.onNativeCall()
...@@ -426,6 +442,12 @@ private external fun TextStyle_nGetHeight(ptr: NativePointer): Float ...@@ -426,6 +442,12 @@ private external fun TextStyle_nGetHeight(ptr: NativePointer): Float
@ExternalSymbolName("org_jetbrains_skia_paragraph_TextStyle__1nSetHeight") @ExternalSymbolName("org_jetbrains_skia_paragraph_TextStyle__1nSetHeight")
private external fun TextStyle_nSetHeight(ptr: NativePointer, override: Boolean, height: Float) private external fun TextStyle_nSetHeight(ptr: NativePointer, override: Boolean, height: Float)
@ExternalSymbolName("org_jetbrains_skia_paragraph_TextStyle__1nGetBaselineShift")
private external fun TextStyle_nGetBaselineShift(ptr: NativePointer): Float
@ExternalSymbolName("org_jetbrains_skia_paragraph_TextStyle__1nSetBaselineShift")
private external fun TextStyle_nSetBaselineShift(ptr: NativePointer, baselineShift: Float)
@ExternalSymbolName("org_jetbrains_skia_paragraph_TextStyle__1nAttributeEquals") @ExternalSymbolName("org_jetbrains_skia_paragraph_TextStyle__1nAttributeEquals")
private external fun _nAttributeEquals(ptr: NativePointer, attribute: Int, otherPtr: NativePointer): Boolean private external fun _nAttributeEquals(ptr: NativePointer, attribute: Int, otherPtr: NativePointer): Boolean
......
package org.jetbrains.skiko.paragraph package org.jetbrains.skiko.paragraph
import org.jetbrains.skia.Color import org.jetbrains.skia.Color
import org.jetbrains.skia.FontMetrics
import org.jetbrains.skia.impl.use import org.jetbrains.skia.impl.use
import org.jetbrains.skia.paragraph.DecorationLineStyle import org.jetbrains.skia.paragraph.DecorationLineStyle
import org.jetbrains.skia.paragraph.DecorationStyle import org.jetbrains.skia.paragraph.DecorationStyle
import org.jetbrains.skia.paragraph.TextStyle import org.jetbrains.skia.paragraph.TextStyle
import org.jetbrains.skia.paragraph.TextStyleAttribute import org.jetbrains.skia.paragraph.TextStyleAttribute
import org.jetbrains.skiko.tests.SkipJsTarget
import org.jetbrains.skiko.tests.SkipNativeTarget
import kotlin.test.* import kotlin.test.*
class TextStyleTest { class TextStyleTest {
...@@ -99,4 +96,13 @@ class TextStyleTest { ...@@ -99,4 +96,13 @@ class TextStyleTest {
} }
} }
@Test
fun textStyleBaselineTest() {
TextStyle().use { textStyle ->
assertEquals(0.0f, textStyle.baselineShift)
textStyle.baselineShift = 4f
assertEquals(4f, textStyle.baselineShift)
}
}
} }
...@@ -235,6 +235,18 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_paragraph_TextStyleKt_ ...@@ -235,6 +235,18 @@ extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_paragraph_TextStyleKt_
instance->setHeight(height); instance->setHeight(height);
} }
extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skia_paragraph_TextStyleKt_TextStyle_1nGetBaselineShift
(JNIEnv* env, jclass jclass, jlong ptr) {
TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr));
return instance->getBaselineShift();
}
extern "C" JNIEXPORT void JNICALL Java_org_jetbrains_skia_paragraph_TextStyleKt_TextStyle_1nSetBaselineShift
(JNIEnv* env, jclass jclass, jlong ptr, jfloat baselineShift) {
TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr));
instance->setBaselineShift(baselineShift);
}
extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skia_paragraph_TextStyleKt__1nGetLetterSpacing extern "C" JNIEXPORT jfloat JNICALL Java_org_jetbrains_skia_paragraph_TextStyleKt__1nGetLetterSpacing
(JNIEnv* env, jclass jclass, jlong ptr) { (JNIEnv* env, jclass jclass, jlong ptr) {
TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr)); TextStyle* instance = reinterpret_cast<TextStyle*>(static_cast<uintptr_t>(ptr));
......
package org.jetbrains.skiko.tests.org.jetbrains.skiko.paragraph
import org.jetbrains.skia.*
import org.jetbrains.skia.paragraph.*
import org.jetbrains.skia.tests.makeFromResource
import org.jetbrains.skiko.OS
import org.jetbrains.skiko.hostOs
import org.jetbrains.skiko.tests.runTest
import org.jetbrains.skiko.util.ScreenshotTestRule
import org.junit.Rule
import org.junit.Test
class TextStyleTest {
@get:Rule
val screenshots = ScreenshotTestRule()
@Test
fun canApplyBaselineShift() = runTest {
if (hostOs != OS.MacOS) {
return@runTest
}
val fontCollection = FontCollection().apply {
setDefaultFontManager(TypefaceFontProvider().apply {
val inter = Typeface.makeFromResource("./fonts/Inter-Hinted-Regular.ttf", 0)
registerTypeface(inter, "Inter")
})
}
fun buildTextStyle(baselineShift: Float, color: Int = Color.BLACK) = TextStyle().apply {
fontFamilies = arrayOf("Inter")
fontSize = 14.0f
this.color = color
this.baselineShift = baselineShift
}
val paragraphStyle = ParagraphStyle().apply {
height = 40.0f
maxLinesCount = 2
textStyle = buildTextStyle(0.0f)
}
val paragraph = ParagraphBuilder(paragraphStyle, fontCollection).run {
val text = "Hello "
addText(text)
pushStyle(buildTextStyle(10.0f, Color.RED))
addText(text)
pushStyle(buildTextStyle(-10.0f, Color.GREEN))
addText(text)
build()
}
val image = with (Surface.makeRasterN32Premul(200, 64)) {
canvas.drawRect(Rect(0.0f, 0.0f, width.toFloat(), height.toFloat()), Paint().apply { color = Color.WHITE })
paragraph.layout(Float.POSITIVE_INFINITY)
paragraph.paint(canvas, 30.0f, 20.0f)
makeImageSnapshot()
}
screenshots.assert(image)
}
}
\ No newline at end of file
...@@ -258,6 +258,18 @@ SKIKO_EXPORT void org_jetbrains_skia_paragraph_TextStyle__1nSetHeight ...@@ -258,6 +258,18 @@ SKIKO_EXPORT void org_jetbrains_skia_paragraph_TextStyle__1nSetHeight
instance->setHeight(height); instance->setHeight(height);
} }
SKIKO_EXPORT KFloat org_jetbrains_skia_paragraph_TextStyle__1nGetBaselineShift
(KNativePointer ptr) {
TextStyle* instance = reinterpret_cast<TextStyle*>(ptr);
return instance->getBaselineShift();
}
SKIKO_EXPORT void org_jetbrains_skia_paragraph_TextStyle__1nSetBaselineShift
(KNativePointer ptr, KFloat baselineShift) {
TextStyle* instance = reinterpret_cast<TextStyle*>(ptr);
instance->setBaselineShift(baselineShift);
}
SKIKO_EXPORT KFloat org_jetbrains_skia_paragraph_TextStyle__1nGetLetterSpacing SKIKO_EXPORT KFloat org_jetbrains_skia_paragraph_TextStyle__1nGetLetterSpacing
(KNativePointer ptr) { (KNativePointer ptr) {
TextStyle* instance = reinterpret_cast<TextStyle*>(ptr); TextStyle* instance = reinterpret_cast<TextStyle*>(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