10d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williamspackage com.xtremelabs.robolectric.shadows;
20d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams
30d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williamsimport android.graphics.Matrix;
4f64d95f87eb9715622e3f77eb0b369d60270054cChristian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation;
5f64d95f87eb9715622e3f77eb0b369d60270054cChristian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements;
60d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams
70d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
80d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams
90d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams@SuppressWarnings({"UnusedDeclaration"})
100d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams@Implements(Matrix.class)
110d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williamspublic class ShadowMatrix {
12d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    private float scaleX = 1;
13d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    private float transX;
14d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
15d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    private float scaleY = 1;
16d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    private float transY;
17d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
18d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    // scaleX=0, skewX=1,  transX=2
19d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    // skewY=3,  scaleY=4, transY=5
20d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    // persp0=6, persp1=7, persp2=8
21d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
22d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    // identity: Matrix{[1.0, 0.0, 0.0][0.0, 1.0, 0.0][0.0, 0.0, 1.0]}
23d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
24d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    // drag down: Matrix{[1.0, 0.0, -1.3872986][0.0, 1.0, 0.37722778][0.0, 0.0, 1.0]}
25d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
260d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams
270d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams    public void __constructor__(Matrix src) {
28d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        set(src);
29d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    }
30d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
31d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    @Implementation
32d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    public void set(Matrix src) {
33d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        transX = shadowOf(src).transX;
34d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        scaleX = shadowOf(src).scaleX;
3540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
36d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        transY = shadowOf(src).transY;
37d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        scaleY = shadowOf(src).scaleY;
380d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams    }
390d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams
400d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams    @Implementation
410d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams    public void setTranslate(float dx, float dy) {
42d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        transX = dx;
43d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        transY = dy;
44d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    }
45d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
46d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    @Implementation
47d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    public void postTranslate(float dx, float dy) {
48d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        transX += dx;
49d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        transY += dy;
50d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    }
51d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
52d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    public float getTransX() {
53d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        return transX;
54d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    }
55d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
56d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    public float getTransY() {
57d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        return transY;
58d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    }
59d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams
60d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    @Implementation
61d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    public boolean postScale(float sx, float sy, float px, float py) {
62d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        scaleX *= sx;
63d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        scaleY *= sy;
64d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        return true;
650d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams    }
660d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams
67d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    public float getScaleX() {
68d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        return scaleX;
690d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams    }
700d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams
71d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams    public float getScaleY() {
72d4e5d32b81cae2114f66739beaac6fe1ceeead0dJosh Lauer & Christian Williams        return scaleY;
730d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams    }
740d21afe8a769457a7c6691bd8418a73aafb46beaJosh Lauer & Christian Williams}
75