Unverified Commit 5ffb421a authored by ApoloApps's avatar ApoloApps Committed by GitHub

Fix SKIKO-1059 ColorMatrix issues (#1157)

Fixes
[SKIKO-1059](https://youtrack.jetbrains.com/issue/SKIKO-1059/Output-the-argument-size-in-ColorMatrix-in-case-of-error)
Converts to value class for inlining and no class allocation and fixes
the requirement message
parent 10629dff
package org.jetbrains.skia
class ColorMatrix(vararg mat: Float) {
val mat: FloatArray
override fun equals(other: Any?): Boolean {
if (other === this) return true
if (other !is ColorMatrix) return false
return mat.contentEquals(other.mat)
}
import kotlin.jvm.JvmInline
override fun hashCode(): Int {
val PRIME = 59
var result = 1
result = result * PRIME + mat.contentHashCode()
return result
}
@JvmInline
value class ColorMatrix(val mat: FloatArray) {
constructor(
m00: Float, m01: Float, m02: Float, m03: Float, m04: Float,
m10: Float, m11: Float, m12: Float, m13: Float, m14: Float,
m20: Float, m21: Float, m22: Float, m23: Float, m24: Float,
m30: Float, m31: Float, m32: Float, m33: Float, m34: Float
) : this(
floatArrayOf(
m00, m01, m02, m03, m04,
m10, m11, m12, m13, m14,
m20, m21, m22, m23, m24,
m30, m31, m32, m33, m34
)
)
override fun toString(): String {
return "ColorMatrix(_mat=$mat)"
init {
require(mat.size == 20) { "Expected 20 elements, got ${mat.size}" }
}
init {
require(mat.size == 20) { "Expected 20 elements, got $mat" }
this.mat = mat
override fun toString(): String {
return "ColorMatrix(mat=${mat.contentToString()})"
}
}
\ No newline at end of file
package org.jetbrains.skia
import kotlin.test.Test
import kotlin.test.assertFailsWith
class ColorFilterTest {
@Test
......@@ -10,7 +11,7 @@ class ColorFilterTest {
ColorFilter.makeHighContrast(true, InversionMode.LIGHTNESS, 0.5f)
ColorFilter.makeOverdraw(intArrayOf(127, 127, 127, 127, 127, 127))
val colorMatrix = ColorMatrix(*FloatArray(20) { 0.5f })
val colorMatrix = ColorMatrix(FloatArray(20) { 0.5f })
ColorFilter.makeMatrix(colorMatrix)
ColorFilter.makeHSLAMatrix(colorMatrix)
......@@ -24,4 +25,14 @@ class ColorFilterTest {
ColorFilter.makeComposed(src, dst)
ColorFilter.makeLerp(dst, src, 0.4f)
}
@Test
fun failsColorMatrixConstruction() {
assertFailsWith<IllegalArgumentException>("Expected 20 elements, got 21") {
ColorMatrix(FloatArray(21) { 1.0f })
}
assertFailsWith<IllegalArgumentException>("Expected 20 elements, got 19") {
ColorMatrix(FloatArray(19) { 1.0f })
}
}
}
\ 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