package org.xmind.ui.internal.svgsupport; import org.eclipse.swt.widgets.Display; import org.w3c.dom.Element; import org.xmind.gef.draw2d.geometry.PrecisionPoint; import org.xmind.gef.draw2d.geometry.PrecisionRectangle; import org.xmind.gef.draw2d.graphics.Path; /** * * @author Enki Xiong * */ final public class SVGCircleShape extends SVGShape { private PrecisionPoint origin; private float r; SVGCircleShape() { super(); } public SVGCircleShape(double x, double y, float r) { origin = new PrecisionPoint(x, y); this.r = r; } @Override public void parse(Element implemention, SVGShape parent) { super.parse(implemention, parent); parseCircle(implemention, parent); } private void parseCircle(Element implemention, SVGShape parent) { float x = getFloatAttribute(implemention, SVGDefinitionConstants.CX); float y = getFloatAttribute(implemention, SVGDefinitionConstants.CY); r = getFloatAttribute(implemention, SVGDefinitionConstants.R); origin = new PrecisionPoint(x - r, y - r); } @Override Path generatePath(Display device) { Path path = new Path(device); path.addArc(new PrecisionRectangle(origin.x, origin.y, 2 * r, 2 * r), 0.0f, 360.0f); return path; } @Override PrecisionRectangle generateRectangle() { return new PrecisionRectangle(origin.x, origin.y, 2 * r, 2 * r); } @Override protected SVGShape clone() { SVGCircleShape circle = new SVGCircleShape(); circle.setInfo(getInfo().clone()); circle.origin = this.origin; circle.r = this.r; return circle; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj instanceof SVGCircleShape) { SVGCircleShape circle = (SVGCircleShape) obj; if (circle.getInfo().equals(getInfo()) && origin.equals(circle.origin) && (r == circle.r)) { return true; } } return false; } @Override public int hashCode() { int result = 17; result = result * 31 + getInfo().hashCode(); result = result * 31 + (int) Double.doubleToLongBits(origin.x); result = result * 31 + (int) Double.doubleToLongBits(origin.y); result = result * 31 + (int) Double.doubleToLongBits(r); return result; } @Override public String toString() { return "SVGCircle( origin:" + origin.toString() + " " //$NON-NLS-1$ //$NON-NLS-2$ + getInfo().toString() + " )"; //$NON-NLS-1$ } }