1 package com.xtremelabs.robolectric.shadows;
2 
3 import android.graphics.Rect;
4 import com.xtremelabs.robolectric.internal.Implementation;
5 import com.xtremelabs.robolectric.internal.Implements;
6 import com.xtremelabs.robolectric.internal.RealObject;
7 
8 import static com.xtremelabs.robolectric.Robolectric.shadowOf_;
9 
10 @Implements(Rect.class)
11 public class ShadowRect {
12     @RealObject Rect realRect;
13 
__constructor__(int left, int top, int right, int bottom)14     public void __constructor__(int left, int top, int right, int bottom) {
15         realRect.left = left;
16         realRect.top = top;
17         realRect.right = right;
18         realRect.bottom = bottom;
19     }
20 
__constructor__(Rect otherRect)21     public void __constructor__(Rect otherRect) {
22         realRect.left = otherRect.left;
23         realRect.top = otherRect.top;
24         realRect.right = otherRect.right;
25         realRect.bottom = otherRect.bottom;
26     }
27 
28     @Implementation
set(Rect rect)29     public void set(Rect rect) {
30         set(rect.left, rect.top, rect.right, rect.bottom);
31     }
32 
33     @Implementation
set(int left, int top, int right, int bottom)34     public void set(int left, int top, int right, int bottom) {
35         realRect.left = left;
36         realRect.top = top;
37         realRect.right = right;
38         realRect.bottom = bottom;
39     }
40 
41     @Implementation
width()42     public int width() {
43         return realRect.right - realRect.left;
44     }
45 
46     @Implementation
height()47     public int height() {
48         return realRect.bottom - realRect.top;
49     }
50 
51     @Implementation
equals(Object obj)52     public boolean equals(Object obj) {
53         if (obj == null) return false;
54         Object o = shadowOf_(obj);
55         if (o == null) return false;
56         if (getClass() != o.getClass()) return false;
57         if (this == o) return true;
58 
59         Rect r = (Rect) obj;
60         return realRect.left == r.left && realRect.top == r.top && realRect.right == r.right
61                 && realRect.bottom == r.bottom;
62     }
63 
64     @Implementation
toString()65     public String toString() {
66         StringBuilder sb = new StringBuilder(32);
67         sb.append("Rect(");
68         sb.append(realRect.left);
69         sb.append(", ");
70         sb.append(realRect.top);
71         sb.append(" - ");
72         sb.append(realRect.right);
73         sb.append(", ");
74         sb.append(realRect.bottom);
75         sb.append(")");
76         return sb.toString();
77     }
78 
79     @Implementation
contains(int x, int y)80     public boolean contains(int x, int y) {
81     	return x > realRect.left && x < realRect.right
82     			&& y >= realRect.top && y <= realRect.bottom;
83     }
84 
85     @Implementation
contains(Rect r)86     public boolean contains(Rect r) {
87     	return equals(r)
88     			|| (contains(r.left, r.top) && contains(r.right, r.top)
89     					&& contains(r.left, r.bottom) && contains(r.right, r.bottom));
90     }
91 
92     @Implementation
intersects(Rect a, Rect b)93 	public static boolean intersects(Rect a, Rect b) {
94     	return a.left < b.right && b.left < a.right
95     			&& a.top < b.bottom && b.top < a.bottom;
96     }
97 
98     @Implementation
intersect(Rect r)99     public boolean intersect(Rect r) {
100     	return intersects(realRect, r);
101     }
102 
103     @Implementation
intersect(int left, int top, int right, int bottom)104     public boolean intersect(int left, int top, int right, int bottom) {
105     	return intersect(new Rect(left, top, right, bottom));
106     }
107 
108     @Implementation
offset(int dx, int dy)109     public void offset(int dx, int dy) {
110       realRect.left += dx;
111       realRect.right += dx;
112       realRect.top += dy;
113       realRect.bottom += dy;
114     }
115 }
116