1package com.xtremelabs.robolectric.shadows;
2
3import android.graphics.Point;
4import android.graphics.PointF;
5import com.xtremelabs.robolectric.internal.Implementation;
6import com.xtremelabs.robolectric.internal.Implements;
7import com.xtremelabs.robolectric.internal.RealObject;
8
9import static com.xtremelabs.robolectric.Robolectric.shadowOf_;
10
11/**
12 * Shadow implementation of {@code Point}
13 */
14@SuppressWarnings({"UnusedDeclaration"})
15@Implements(PointF.class)
16public class ShadowPointF {
17    @RealObject private PointF realPointF;
18
19    public void __constructor__(float x, float y) {
20        realPointF.x = x;
21        realPointF.y = y;
22    }
23
24    public void __constructor__(Point src) {
25        realPointF.x = src.x;
26        realPointF.y = src.y;
27    }
28
29    @Implementation
30    public void set(float x, float y) {
31        realPointF.x = x;
32        realPointF.y = y;
33    }
34
35    @Implementation
36    public final void negate() {
37        realPointF.x = -realPointF.x;
38        realPointF.y = -realPointF.y;
39    }
40
41    @Implementation
42    public final void offset(float dx, float dy) {
43        realPointF.x += dx;
44        realPointF.y += dy;
45    }
46
47    @Override @Implementation
48    public boolean equals(Object object) {
49        if (object == null) return false;
50        Object o = shadowOf_(object);
51        if (o == null) return false;
52        if (this == o) return true;
53        if (getClass() != o.getClass()) return false;
54
55        ShadowPointF that = (ShadowPointF) o;
56        if (this.realPointF.x == that.realPointF.x && this.realPointF.y == that.realPointF.y) return true;
57
58        return false;
59    }
60
61    @Override @Implementation
62    public int hashCode() {
63        return (int) (realPointF.x * 32713 + realPointF.y);
64    }
65
66    @Override @Implementation
67    public String toString() {
68        return "Point(" + realPointF.x + ", " + realPointF.y + ")";
69    }
70
71    /**
72     * Non-Android utility method for comparing a point to a well-known value
73     *
74     * @param x x
75     * @param y y
76     * @return this.x == x && this.y == y
77     */
78    @Implementation
79    public final boolean equals(float x, float y) {
80        return realPointF.x == x && realPointF.y == y;
81    }
82}
83