package org.xmind.ui.internal.decorations; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Insets; import org.eclipse.draw2d.geometry.Rectangle; import org.xmind.gef.draw2d.geometry.Geometry; import org.xmind.gef.draw2d.geometry.PrecisionPoint; import org.xmind.gef.draw2d.graphics.Path; import org.xmind.ui.decorations.AbstractTopicDecoration; public class CircleTopicDecoration extends AbstractTopicDecoration { public CircleTopicDecoration() { } public CircleTopicDecoration(String id) { super(id); } protected void sketch(IFigure figure, Path shape, Rectangle box, int purpose) { if (purpose == CHECK) { shape.addArc( box.getExpanded(getLineWidth() / 2, getLineWidth() / 2), 0, 360); } else { shape.addArc(box, 0, 360); } shape.close(); } public Insets getPreferredInsets(IFigure figure, int width, int height) { double diameter = Math.sqrt(width * width + height * height); int margin = (getTopMargin() + getLeftMargin()) / 2; return new Insets((int) (diameter - height) / 2 + margin, (int) (diameter - width) / 2 + margin, (int) (diameter - height) / 2 + margin, (int) (diameter - width) / 2 + margin); } public PrecisionPoint getAnchorLocation(IFigure figure, double refX, double refY, double expansion) { return Geometry.getChopOvalLocation(refX, refY, figure.getBounds(), expansion); } }