133873d2b41a5cd2597b20a4e88eb8942944c0f23Tyler Schultzpackage com.xtremelabs.robolectric.shadows; 2abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams 3abde7367c1c6a322c18803941e9118b1daea35fbChristian Williamsimport android.graphics.Rect; 422c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implementation; 522c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.Implements; 622c22c9aa4ca68c2deac6164edc1d82bc9645310Christian Williams & Phil Goodwinimport com.xtremelabs.robolectric.internal.RealObject; 7abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams 8537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwinimport static com.xtremelabs.robolectric.Robolectric.shadowOf_; 9537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin 10abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams@Implements(Rect.class) 11afe0a89d904a7fe2f5980b9deb26cc3240192459Christian Williamspublic class ShadowRect { 12a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard @RealObject Rect realRect; 13abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams 14abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams public void __constructor__(int left, int top, int right, int bottom) { 15a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard realRect.left = left; 16a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard realRect.top = top; 17a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard realRect.right = right; 18a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard realRect.bottom = bottom; 19abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams } 20abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams 212a61662cdc430c05abec421965587fdd2b531419James Brechtel public void __constructor__(Rect otherRect) { 222a61662cdc430c05abec421965587fdd2b531419James Brechtel realRect.left = otherRect.left; 232a61662cdc430c05abec421965587fdd2b531419James Brechtel realRect.top = otherRect.top; 242a61662cdc430c05abec421965587fdd2b531419James Brechtel realRect.right = otherRect.right; 252a61662cdc430c05abec421965587fdd2b531419James Brechtel realRect.bottom = otherRect.bottom; 262a61662cdc430c05abec421965587fdd2b531419James Brechtel } 272a61662cdc430c05abec421965587fdd2b531419James Brechtel 287bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato @Implementation 297bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato public void set(Rect rect) { 307bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato set(rect.left, rect.top, rect.right, rect.bottom); 317bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato } 327bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato 337bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato @Implementation 347bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato public void set(int left, int top, int right, int bottom) { 357bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato realRect.left = left; 367bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato realRect.top = top; 377bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato realRect.right = right; 387bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato realRect.bottom = bottom; 397bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato } 407bef99eb8838ef331baa479e726f5b0fe8cc2f69Tony Allevato 41de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 42abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams public int width() { 43a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard return realRect.right - realRect.left; 44abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams } 45abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams 46de9feed5ddf1d91a3e76cbc71712c36a7652201eChristian Williams @Implementation 47abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams public int height() { 48a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard return realRect.bottom - realRect.top; 49a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard } 50a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard 51a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard @Implementation 52a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard public boolean equals(Object obj) { 53537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin if (obj == null) return false; 54537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin Object o = shadowOf_(obj); 55537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin if (o == null) return false; 56537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin if (getClass() != o.getClass()) return false; 57537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin if (this == o) return true; 58537f38b99433fee0ee08d7c634763e7381942f58Phil Goodwin 59a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard Rect r = (Rect) obj; 604aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke return realRect.left == r.left && realRect.top == r.top && realRect.right == r.right 614aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke && realRect.bottom == r.bottom; 62a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard } 63a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard 64a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard @Implementation 65a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard public String toString() { 66a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard StringBuilder sb = new StringBuilder(32); 67adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append("Rect("); 68adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append(realRect.left); 69adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append(", "); 70adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append(realRect.top); 71adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append(" - "); 72adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append(realRect.right); 73adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append(", "); 74adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append(realRect.bottom); 75adfaceabbda4c8c51f24a0def8926075bd7306adChristian Williams sb.append(")"); 76a329318a8b2661107af6f9b25ffecf892b3c2c72Christian Williams & Ryan Richard return sb.toString(); 77abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams } 784aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke 794aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke @Implementation 804aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke public boolean contains(int x, int y) { 814aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke return x > realRect.left && x < realRect.right 824aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke && y >= realRect.top && y <= realRect.bottom; 834aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke } 844aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke 854aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke @Implementation 864aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke public boolean contains(Rect r) { 874aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke return equals(r) 884aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke || (contains(r.left, r.top) && contains(r.right, r.top) 894aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke && contains(r.left, r.bottom) && contains(r.right, r.bottom)); 904aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke } 914aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke 924aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke @Implementation 934aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke public static boolean intersects(Rect a, Rect b) { 944aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke return a.left < b.right && b.left < a.right 954aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke && a.top < b.bottom && b.top < a.bottom; 964aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke } 974aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke 984aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke @Implementation 994aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke public boolean intersect(Rect r) { 1004aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke return intersects(realRect, r); 1014aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke } 1024aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke 1034aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke @Implementation 1044aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke public boolean intersect(int left, int top, int right, int bottom) { 1054aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke return intersect(new Rect(left, top, right, bottom)); 1064aaebe6f156648e1074f10aadc89f485175c3043Felix H. Dahlke } 107ce3c0509a47167ff3c6c809313f2c68ffbb58609Tony Allevato 108ce3c0509a47167ff3c6c809313f2c68ffbb58609Tony Allevato @Implementation 109ce3c0509a47167ff3c6c809313f2c68ffbb58609Tony Allevato public void offset(int dx, int dy) { 110ce3c0509a47167ff3c6c809313f2c68ffbb58609Tony Allevato realRect.left += dx; 111ce3c0509a47167ff3c6c809313f2c68ffbb58609Tony Allevato realRect.right += dx; 112ce3c0509a47167ff3c6c809313f2c68ffbb58609Tony Allevato realRect.top += dy; 113ce3c0509a47167ff3c6c809313f2c68ffbb58609Tony Allevato realRect.bottom += dy; 114ce3c0509a47167ff3c6c809313f2c68ffbb58609Tony Allevato } 115abde7367c1c6a322c18803941e9118b1daea35fbChristian Williams} 116