create changelog entry
[debian/openrocket] / core / src / net / sf / openrocket / gui / figureelements / CGCaret.java
1 package net.sf.openrocket.gui.figureelements;
2
3 import java.awt.Color;
4 import java.awt.geom.Area;
5 import java.awt.geom.Ellipse2D;
6 import java.awt.geom.Rectangle2D;
7
8 /**
9  * A mark indicating the position of the center of gravity.  It is a blue circle with every
10  * second quarter filled with blue.
11  * 
12  * @author Sampo Niskanen <sampo.niskanen@iki.fi>
13  */
14
15 public class CGCaret extends Caret {
16         private static final float RADIUS = 7;
17         
18         private static Area caret = null;
19         
20         /**
21          * Create a new CGCaret at the specified coordinates.
22          */
23         public CGCaret(double x, double y) {
24                 super(x,y);
25         }
26
27         /**
28          * Returns the Area corresponding to the caret.  The Area object is created only once,
29          * after which the object is cloned for new copies.
30          */
31         @Override
32         protected Area getCaret() {
33                 if (caret != null) {
34                         return (Area)caret.clone();
35                 }
36
37                 Ellipse2D.Float e = new Ellipse2D.Float(-RADIUS,-RADIUS,2*RADIUS,2*RADIUS);
38                 caret = new Area(e);
39                 
40                 Area a;
41                 a = new Area(new Rectangle2D.Float(-RADIUS,-RADIUS,RADIUS,RADIUS));
42                 caret.subtract(a);
43                 a = new Area(new Rectangle2D.Float(0,0,RADIUS,RADIUS));
44                 caret.subtract(a);
45                 
46                 a = new Area(new Ellipse2D.Float(-RADIUS,-RADIUS,2*RADIUS,2*RADIUS));
47                 a.subtract(new Area(new Ellipse2D.Float(-RADIUS*0.9f,-RADIUS*0.9f,
48                                 2*0.9f*RADIUS,2*0.9f*RADIUS)));
49                 caret.add(a);
50                 
51                 return (Area) caret.clone();
52         }
53
54         /**
55          * Return the color of the caret (blue).
56          */
57         @Override
58         protected Color getColor() {
59                 return Color.BLUE;
60         }
61
62 }