| 1 31 32 package org.antlr.xjlib.appkit.gview.object; 33 34 import org.antlr.xjlib.appkit.gview.base.Anchor2D; 35 import org.antlr.xjlib.appkit.gview.base.Rect; 36 import org.antlr.xjlib.appkit.gview.base.Vector2D; 37 import org.antlr.xjlib.appkit.gview.shape.SLabel; 38 import org.antlr.xjlib.foundation.XJXMLSerializable; 39 40 import java.awt.*; 41 42 public class GElementCircle extends GElement implements XJXMLSerializable { 43 44 public static final int DEFAULT_RADIUS = 20; 45 46 protected double radius = DEFAULT_RADIUS; 47 48 public GElementCircle() { 49 } 50 51 public void setRadius(double radius) { 52 this.radius = radius; 53 elementDimensionDidChange(); 54 } 55 56 public double getRadius() { 57 return radius; 58 } 59 60 public void updateAnchors() { 61 setAnchor(ANCHOR_CENTER, position, Anchor2D.DIRECTION_FREE); 62 setAnchor(ANCHOR_TOP, position.add(new Vector2D(0, -radius)), Anchor2D.DIRECTION_TOP); 63 setAnchor(ANCHOR_BOTTOM, position.add(new Vector2D(0, radius)), Anchor2D.DIRECTION_BOTTOM); 64 setAnchor(ANCHOR_LEFT, position.add(new Vector2D(-radius, 0)), Anchor2D.DIRECTION_LEFT); 65 setAnchor(ANCHOR_RIGHT, position.add(new Vector2D(radius, 0)), Anchor2D.DIRECTION_RIGHT); 66 } 67 68 public double getDefaultAnchorOffset(String anchorKey) { 69 if(anchorKey != null && anchorKey.equals(ANCHOR_CENTER)) 70 return radius; 71 else 72 return 0; 73 } 74 75 public Rect getFrame() { 76 double x = getPositionX()-radius; 77 double y = getPositionY()-radius; 78 double dx = radius*2; 79 double dy = radius*2; 80 return new Rect(x, y, dx, dy); 81 } 82 83 public boolean isInside(Point p) { 84 return Math.abs(p.getX()-getPositionX())<radius && Math.abs(p.getY()-getPositionY())<radius; 85 } 86 87 public void draw(Graphics2D g) { 88 if(isVisibleInClip(g)) { 89 if(labelVisible) { 90 g.setColor(labelColor); 91 SLabel.drawCenteredString(getLabel(), (int)getPositionX(), (int)getPositionY(), g); 92 } 93 94 if(color != null) 95 g.setColor(color); 96 else 97 g.setColor(Color.black); 98 99 g.setStroke(strokeSize); 100 101 drawShape(g); 102 103 g.setStroke(strokeNormal); 104 } 105 } 106 107 public void drawShape(Graphics2D g) { 108 super.drawShape(g); 109 110 int x = (int)(getPositionX()-radius); 111 int y = (int)(getPositionY()-radius); 112 113 g.drawOval(x, y, (int)(radius*2), (int)(radius*2)); 114 } 115 116 } 117 | Popular Tags |