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