• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.tools.common.datatypes
18 
19 import android.tools.common.FloatFormatter
20 import android.tools.common.withCache
21 import kotlin.js.JsExport
22 import kotlin.js.JsName
23 
24 /**
25  * Representation of a matrix 3x3 used for layer transforms
26  *
27  * ```
28  *          |dsdx dsdy  tx|
29  * matrix = |dtdx dtdy ty|
30  *          |0    0     1 |
31  * ```
32  */
33 @JsExport
34 class Matrix33
35 private constructor(
36     @JsName("dsdx") val dsdx: Float,
37     @JsName("dtdx") val dtdx: Float,
38     @JsName("tx") val tx: Float = 0F,
39     @JsName("dsdy") val dsdy: Float,
40     @JsName("dtdy") val dtdy: Float,
41     @JsName("ty") val ty: Float = 0F
42 ) : DataType() {
43     override val isEmpty =
44         dsdx == 0f && dtdx == 0f && tx == 0f && dsdy == 0f && dtdy == 0f && ty == 0f
45 
doPrintValuenull46     override fun doPrintValue() = buildString {
47         append("dsdx:${FloatFormatter.format(dsdx)}   ")
48         append("dtdx:${FloatFormatter.format(dtdx)}   ")
49         append("dsdy:${FloatFormatter.format(dsdy)}   ")
50         append("dtdy:${FloatFormatter.format(dtdy)}   ")
51         append("tx:${FloatFormatter.format(tx)}   ")
52         append("ty:${FloatFormatter.format(ty)}")
53     }
54 
55     companion object {
56         val EMPTY: Matrix33
<lambda>null57             get() = withCache { from(dsdx = 0f, dtdx = 0f, tx = 0f, dsdy = 0f, dtdy = 0f, ty = 0f) }
58 
59         @JsName("identity")
<lambda>null60         fun identity(x: Float, y: Float): Matrix33 = withCache {
61             from(dsdx = 1f, dtdx = 0f, x, dsdy = 0f, dtdy = 1f, y)
62         }
63 
64         @JsName("rot270")
<lambda>null65         fun rot270(x: Float, y: Float): Matrix33 = withCache {
66             from(dsdx = 0f, dtdx = -1f, x, dsdy = 1f, dtdy = 0f, y)
67         }
68 
69         @JsName("rot180")
<lambda>null70         fun rot180(x: Float, y: Float): Matrix33 = withCache {
71             from(dsdx = -1f, dtdx = 0f, x, dsdy = 0f, dtdy = -1f, y)
72         }
73 
74         @JsName("rot90")
<lambda>null75         fun rot90(x: Float, y: Float): Matrix33 = withCache {
76             from(dsdx = 0f, dtdx = 1f, x, dsdy = -1f, dtdy = 0f, y)
77         }
78 
79         @JsName("from")
fromnull80         fun from(
81             dsdx: Float,
82             dtdx: Float,
83             tx: Float,
84             dsdy: Float,
85             dtdy: Float,
86             ty: Float
87         ): Matrix33 = withCache { Matrix33(dsdx, dtdx, tx, dsdy, dtdy, ty) }
88     }
89 }
90