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 {
require(b == null || b.size == 256) { "Expected 256 elements in b[], got " + b!!.size }
interopScope {
return ColorFilter(_nMakeTableARGB(
toInterop(a), a?.size ?: 0,
toInterop(r), r?.size ?: 0,
toInterop(g), g?.size ?: 0,
toInterop(b), a?.size ?: 0))
toInterop(a),
toInterop(r),
toInterop(g),
toInterop(b),
))
}
}
......@@ -144,10 +145,10 @@ private external fun _nMakeOverdraw(c0: Int, c1: Int, c2: Int, c3: Int, c4: Int,
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nGetLuma")
private external fun _nGetLuma(): NativePointer
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__nMakeTableARGB")
@ExternalSymbolName("org_jetbrains_skia_ColorFilter__1nMakeTableARGB")
private external fun _nMakeTableARGB(
a: InteropPointer, aSize: Int,
r: InteropPointer, rSize: Int,
g: InteropPointer, gSize: Int,
b: InteropPointer, bSize: Int
a: InteropPointer,
r: InteropPointer,
g: InteropPointer,
b: InteropPointer,
): 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
extern "C" JNIEXPORT jlong JNICALL Java_org_jetbrains_skia_ColorFilterKt__1nMakeTableARGB(
JNIEnv* env, jclass jclass,
jbyteArray arrayA,
jint arrayASize,
jbyteArray arrayR,
jint arrayRSize,
jbyteArray arrayG,
jint arrayGSize,
jbyteArray arrayB,
jint arrayBSize
jbyteArray arrayB
) {
jbyte* a = arrayA ? env->GetByteArrayElements(arrayA, 0) : nullptr;
jbyte* r = arrayR ? env->GetByteArrayElements(arrayR, 0) : nullptr;
jbyte* g = arrayG ? env->GetByteArrayElements(arrayG, 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 (arrayR) env->ReleaseByteArrayElements(arrayR, r, 0);
......
......@@ -28,36 +28,16 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeBlend
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeMatrix
(KFloat* rowMajorArray) {
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);
(KFloat* rowMajor) {
SkColorFilter* ptr = SkColorFilters::Matrix(rowMajor).release();
env->ReleaseFloatArrayElements(rowMajorArray, rowMajor, 0);
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
(KFloat* rowMajorArray) {
KFloat* rowMajor = env->GetFloatArrayElements(rowMajorArray, 0);
(KFloat* rowMajor) {
SkColorFilter* ptr = SkColorFilters::HSLAMatrix(rowMajor).release();
env->ReleaseFloatArrayElements(rowMajorArray, rowMajor, 0);
return reinterpret_cast<KNativePointer>(ptr);
}
#endif
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nGetLinearToSRGBGamma
......@@ -95,54 +75,25 @@ SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeHighContrast
SKIKO_EXPORT KNativePointer org_jetbrains_skia_ColorFilter__1nMakeTable
(KByte* tableArray) {
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);
(KByte* table) {
SkColorFilter* ptr = SkTableColorFilter::Make(reinterpret_cast<uint8_t*>(table)).release();
env->ReleaseByteArrayElements(tableArray, table, 0);
return reinterpret_cast<KNativePointer>(ptr);
}
#endif
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
(KByte* arrayA, KByte* arrayR, KByte* arrayG, KByte* arrayB) {
KByte* a = arrayA ? env->GetByteArrayElements(arrayA, 0) : nullptr;
KByte* r = arrayR ? env->GetByteArrayElements(arrayR, 0) : nullptr;
KByte* g = arrayG ? env->GetByteArrayElements(arrayG, 0) : nullptr;
KByte* 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();
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);
(KByte* a, KByte* r, KByte* g, KByte* 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();
return reinterpret_cast<KNativePointer>(ptr);
}
#endif
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