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