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

Implement ColorFilter, add test (#310)

parent 3089c4ca
...@@ -82,10 +82,11 @@ class ColorFilter : RefCnt { ...@@ -82,10 +82,11 @@ class ColorFilter : RefCnt {
require(b == null || b.size == 256) { "Expected 256 elements in b[], got " + b!!.size } require(b == null || b.size == 256) { "Expected 256 elements in b[], got " + b!!.size }
interopScope { interopScope {
return ColorFilter(_nMakeTableARGB( return ColorFilter(_nMakeTableARGB(
toInterop(a), a?.size ?: 0, toInterop(a),
toInterop(r), r?.size ?: 0, toInterop(r),
toInterop(g), g?.size ?: 0, toInterop(g),
toInterop(b), a?.size ?: 0)) toInterop(b),
))
} }
} }
...@@ -144,10 +145,10 @@ private external fun _nMakeOverdraw(c0: Int, c1: Int, c2: Int, c3: Int, c4: Int, ...@@ -144,10 +145,10 @@ private external fun _nMakeOverdraw(c0: Int, c1: Int, c2: Int, c3: Int, c4: Int,
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nGetLuma") @ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nGetLuma")
private external fun _nGetLuma(): NativePointer private external fun _nGetLuma(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__nMakeTableARGB") @ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeTableARGB")
private external fun _nMakeTableARGB( private external fun _nMakeTableARGB(
a: InteropPointer, aSize: Int, a: InteropPointer,
r: InteropPointer, rSize: Int, r: InteropPointer,
g: InteropPointer, gSize: Int, g: InteropPointer,
b: InteropPointer, bSize: Int b: InteropPointer,
): NativePointer ): NativePointer
package org.jetbrains.skia
import kotlin.test.Test
class ColorFilterTest {
@Test
fun canCreate() {
ColorFilter.makeBlend(Color.RED, BlendMode.MULTIPLY)
ColorFilter.makeLighting(10, 10)
ColorFilter.makeHighContrast(true, InversionMode.LIGHTNESS, 0.5f)
ColorFilter.makeOverdraw(intArrayOf(127, 127, 127, 127, 127, 127))
val colorMatrix = ColorMatrix(*FloatArray(20) { 0.5f })
ColorFilter.makeMatrix(colorMatrix)
ColorFilter.makeHSLAMatrix(colorMatrix)
val tableComponent = ByteArray(256) { 127 }
ColorFilter.makeTable(tableComponent)
ColorFilter.makeTableARGB(null, tableComponent, null, tableComponent)
val src = ColorFilter.luma
val dst = ColorFilter.sRGBToLinearGamma
ColorFilter.makeComposed(src, dst)
ColorFilter.makeLerp(dst, src, 0.4f)
}
}
\ No newline at end of file
...@@ -84,20 +84,21 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ColorFilterKt__1nMake ...@@ -84,20 +84,21 @@ extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ColorFilterKt__1nMake
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ColorFilterKt__1nMakeTableARGB( extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ColorFilterKt__1nMakeTableARGB(
JNIEnv* env, jclass jclass, JNIEnv* env, jclass jclass,
jbyteArray arrayA, jbyteArray arrayA,
jint arrayASize,
jbyteArray arrayR, jbyteArray arrayR,
jint arrayRSize,
jbyteArray arrayG, jbyteArray arrayG,
jint arrayGSize, jbyteArray arrayB
jbyteArray arrayB,
jint arrayBSize
) { ) {
jbyte* a = arrayA ? env->GetByteArrayElements(arrayA, 0) : nullptr; jbyte* a = arrayA ? env->GetByteArrayElements(arrayA, 0) : nullptr;
jbyte* r = arrayR ? env->GetByteArrayElements(arrayR, 0) : nullptr; jbyte* r = arrayR ? env->GetByteArrayElements(arrayR, 0) : nullptr;
jbyte* g = arrayG ? env->GetByteArrayElements(arrayG, 0) : nullptr; jbyte* g = arrayG ? env->GetByteArrayElements(arrayG, 0) : nullptr;
jbyte* b = arrayB ? env->GetByteArrayElements(arrayB, 0) : nullptr; jbyte* b = arrayB ? env->GetByteArrayElements(arrayB, 0) : nullptr;
SkColorFilter* ptr = SkTableColorFilter::MakeARGB(reinterpret_cast<uint8_t*>(a), reinterpret_cast<uint8_t*>(r), reinterpret_cast<uint8_t*>(g), reinterpret_cast<uint8_t*>(b)).release(); SkColorFilter* ptr = SkTableColorFilter::MakeARGB(
reinterpret_cast<uint8_t*>(a),
reinterpret_cast<uint8_t*>(r),
reinterpret_cast<uint8_t*>(g),
reinterpret_cast<uint8_t*>(b)
).release();
if (arrayA) env->ReleaseByteArrayElements(arrayA, a, 0); if (arrayA) env->ReleaseByteArrayElements(arrayA, a, 0);
if (arrayR) env->ReleaseByteArrayElements(arrayR, r, 0); if (arrayR) env->ReleaseByteArrayElements(arrayR, r, 0);
......
...@@ -28,36 +28,16 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeBlend ...@@ -28,36 +28,16 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeBlend
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeMatrix SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeMatrix
(KFloat* rowMajorArray) { (KFloat* rowMajor) {
TODO("implement org_jetbrains_skia_ColorFilter__1nMakeMatrix");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeMatrix
(KFloat* rowMajorArray) {
KFloat* rowMajor = env->GetFloatArrayElements(rowMajorArray, 0);
SkColorFilter* ptr = SkColorFilters::Matrix(rowMajor).release(); SkColorFilter* ptr = SkColorFilters::Matrix(rowMajor).release();
env->ReleaseFloatArrayElements(rowMajorArray, rowMajor, 0);
return reinterpret_cast<KNativePointer>(ptr); return reinterpret_cast<KNativePointer>(ptr);
} }
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeHSLAMatrix
(KFloat* rowMajorArray) {
TODO("implement org_jetbrains_skia_ColorFilter__1nMakeHSLAMatrix");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeHSLAMatrix SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeHSLAMatrix
(KFloat* rowMajorArray) { (KFloat* rowMajor) {
KFloat* rowMajor = env->GetFloatArrayElements(rowMajorArray, 0);
SkColorFilter* ptr = SkColorFilters::HSLAMatrix(rowMajor).release(); SkColorFilter* ptr = SkColorFilters::HSLAMatrix(rowMajor).release();
env->ReleaseFloatArrayElements(rowMajorArray, rowMajor, 0);
return reinterpret_cast<KNativePointer>(ptr); return reinterpret_cast<KNativePointer>(ptr);
} }
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nGetLinearToSRGBGamma SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nGetLinearToSRGBGamma
...@@ -95,54 +75,25 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeHighContrast ...@@ -95,54 +75,25 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeHighContrast
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeTable SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeTable
(KByte* tableArray) { (KByte* table) {
TODO("implement org_jetbrains_skia_ColorFilter__1nMakeTable");
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeTable
(KByte* tableArray) {
KByte* table = env->GetByteArrayElements(tableArray, 0);
SkColorFilter* ptr = SkTableColorFilter::Make(reinterpret_cast<uint8_t*>(table)).release(); SkColorFilter* ptr = SkTableColorFilter::Make(reinterpret_cast<uint8_t*>(table)).release();
env->ReleaseByteArrayElements(tableArray, table, 0);
return reinterpret_cast<KNativePointer>(ptr); return reinterpret_cast<KNativePointer>(ptr);
} }
#endif
typedef void* KInteropPointer; typedef void* KInteropPointer;
SKIKO_EXPORT KInteropPointer org_jetbrains_skia_ColorFilter__nMakeTableARGB
(uint8_t* arrayA,
KInt arrayASize,
uint8_t* arrayR,
KInt arrayRSize,
uint8_t* arrayG,
KInt arrayGSize,
uint8_t* arrayB,
KInt arrayBSize
) {
SkColorFilter* ptr = SkTableColorFilter::MakeARGB(arrayA, arrayR, arrayG, arrayB).release();
return ptr;
}
#if 0
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeTableARGB SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeTableARGB
(KByte* arrayA, KByte* arrayR, KByte* arrayG, KByte* arrayB) { (KByte* a, KByte* r, KByte* g, KByte* b) {
KByte* a = arrayA ? env->GetByteArrayElements(arrayA, 0) : nullptr; SkColorFilter* ptr = SkTableColorFilter::MakeARGB(
KByte* r = arrayR ? env->GetByteArrayElements(arrayR, 0) : nullptr; reinterpret_cast<uint8_t*>(a),
KByte* g = arrayG ? env->GetByteArrayElements(arrayG, 0) : nullptr; reinterpret_cast<uint8_t*>(r),
KByte* b = arrayB ? env->GetByteArrayElements(arrayB, 0) : nullptr; reinterpret_cast<uint8_t*>(g),
reinterpret_cast<uint8_t*>(b)
SkColorFilter* ptr = SkTableColorFilter::MakeARGB(reinterpret_cast<uint8_t*>(a), reinterpret_cast<uint8_t*>(r), reinterpret_cast<uint8_t*>(g), reinterpret_cast<uint8_t*>(b)).release(); ).release();
if (arrayA) env->ReleaseByteArrayElements(arrayA, a, 0);
if (arrayR) env->ReleaseByteArrayElements(arrayR, r, 0);
if (arrayG) env->ReleaseByteArrayElements(arrayG, g, 0);
if (arrayB) env->ReleaseByteArrayElements(arrayB, b, 0);
return reinterpret_cast<KNativePointer>(ptr); return reinterpret_cast<KNativePointer>(ptr);
} }
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeOverdraw SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeOverdraw
......
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