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 package org.jetbrains.skia
class ColorMatrix(vararg mat: Float) { import kotlin.jvm.JvmInline
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)
}
override fun hashCode(): Int { @JvmInline
val PRIME = 59 value class ColorMatrix(val mat: FloatArray) {
var result = 1 constructor(
result = result * PRIME + mat.contentHashCode() m00: Float, m01: Float, m02: Float, m03: Float, m04: Float,
return result 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 { init {
return "ColorMatrix(_mat=$mat)" require(mat.size == 20) { "Expected 20 elements, got ${mat.size}" }
} }
init { override fun toString(): String {
require(mat.size == 20) { "Expected 20 elements, got $mat" } return "ColorMatrix(mat=${mat.contentToString()})"
this.mat = mat
} }
} }
\ No newline at end of file
package org.jetbrains.skia package org.jetbrains.skia
import kotlin.test.Test import kotlin.test.Test
import kotlin.test.assertFailsWith
class ColorFilterTest { class ColorFilterTest {
@Test @Test
...@@ -10,7 +11,7 @@ class ColorFilterTest { ...@@ -10,7 +11,7 @@ class ColorFilterTest {
ColorFilter.makeHighContrast(true, InversionMode.LIGHTNESS, 0.5f) ColorFilter.makeHighContrast(true, InversionMode.LIGHTNESS, 0.5f)
ColorFilter.makeOverdraw(intArrayOf(127, 127, 127, 127, 127, 127)) 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.makeMatrix(colorMatrix)
ColorFilter.makeHSLAMatrix(colorMatrix) ColorFilter.makeHSLAMatrix(colorMatrix)
...@@ -24,4 +25,14 @@ class ColorFilterTest { ...@@ -24,4 +25,14 @@ class ColorFilterTest {
ColorFilter.makeComposed(src, dst) ColorFilter.makeComposed(src, dst)
ColorFilter.makeLerp(dst, src, 0.4f) 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