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