View Javadoc
1   /*
2    * Licensed to The Apereo Foundation under one or more contributor license
3    * agreements. See the NOTICE file distributed with this work for additional
4    * information regarding copyright ownership.
5    *
6    *
7    * The Apereo Foundation licenses this file to you under the Educational
8    * Community License, Version 2.0 (the "License"); you may not use this file
9    * except in compliance with the License. You may obtain a copy of the License
10   * at:
11   *
12   *   http://opensource.org/licenses/ecl2.txt
13   *
14   * Unless required by applicable law or agreed to in writing, software
15   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
16   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the
17   * License for the specific language governing permissions and limitations under
18   * the License.
19   *
20   */
21  
22  package org.opencastproject.composer.layout;
23  
24  import static java.lang.String.format;
25  import static org.opencastproject.util.EqualsUtil.hash;
26  
27  import org.opencastproject.util.RequireUtil;
28  
29  /** Anchor point of a rectangular shape, expressed relatively to its width and height. */
30  public final class Anchor {
31    private final double left;
32    private final double top;
33  
34    /**
35     * Create a new anchor point.
36     *
37     * @param left
38     *          width ratio measured from the left. 0 <= left <= 1
39     * @param top
40     *          height ratio measured from the top. 0 <= top <= 1
41     */
42    public Anchor(double left, double top) {
43      this.left = RequireUtil.between(left, 0.0, 1.0);
44      this.top = RequireUtil.between(top, 0.0, 1.0);
45    }
46  
47    public double getLeft() {
48      return left;
49    }
50  
51    public double getTop() {
52      return top;
53    }
54  
55    @Override
56    public boolean equals(Object that) {
57      return (this == that) || (that instanceof Anchor && eqFields((Anchor) that));
58    }
59  
60    private boolean eqFields(Anchor that) {
61      return (left == that.left) && (top == that.top);
62    }
63  
64    @Override
65    public int hashCode() {
66      return hash(left, top);
67    }
68  
69    @Override
70    public String toString() {
71      return format("Anchor(%f,%f)", left, top);
72    }
73  }