1e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williamspackage com.xtremelabs.robolectric.shadows;
2e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
3e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williamsimport android.graphics.ColorMatrix;
4f64d95f87eb9715622e3f77eb0b369d60270054cChristian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation;
5f64d95f87eb9715622e3f77eb0b369d60270054cChristian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements;
6e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williamsimport com.xtremelabs.robolectric.util.Join;
7e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
8e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williamsimport java.util.ArrayList;
9e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williamsimport java.util.List;
10e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
11e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williamsimport static com.xtremelabs.robolectric.Robolectric.shadowOf;
12e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
13e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams@SuppressWarnings({"UnusedDeclaration"})
14e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams@Implements(ColorMatrix.class)
15e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williamspublic class ShadowColorMatrix {
16e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
17e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    private float[] src;
18e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
19e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    public void __constructor__(float[] src) {
20e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        this.src = src;
21e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    }
22e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
23e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    public void __constructor__() {
24e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        reset();
25e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    }
26e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
27e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    public void __constructor__(ColorMatrix src) {
28e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        this.src = shadowOf(src).src;
29e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    }
30e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
31e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    @Implementation
32e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    public void reset() {
33e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        src = new float[20];
34e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        src[0] = src[6] = src[12] = src[18] = 1;
35e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    }
36e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
37e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    @Implementation
38e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    public void setSaturation(float sat) {
39e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        reset();
40e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        float[] m = src;
41e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
42e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        final float invSat = 1 - sat;
43e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        final float R = 0.213f * invSat;
44e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        final float G = 0.715f * invSat;
45e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        final float B = 0.072f * invSat;
46e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
4740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[0] = R + sat;
4840c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[1] = G;
4940c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[2] = B;
5040c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
5140c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[5] = R;
5240c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[6] = G + sat;
5340c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[7] = B;
5440c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams
5540c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[10] = R;
5640c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[11] = G;
5740c6251719cccc0a84ae99c976d2836b14374ce6Christian Williams        m[12] = B + sat;
58e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    }
59e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams
60e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    @Override @Implementation
61e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    public String toString() {
62e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        List<String> floats = new ArrayList<String>();
63e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        for (float f : src) {
64e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams            String format = String.format("%.2f", f);
65e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams            format = format.replace(".00", "");
66e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams            floats.add(format);
67e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        }
68e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams        return Join.join(",", floats);
69e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams    }
70e3bf0c0e84dd3464de0a508f9c03512d23c11bd8Josh Lauer & Christian Williams}
71