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 SVGLineShape extends SVGShape {
private PrecisionPoint p1, p2;
SVGLineShape() {
super();
}
public SVGLineShape(double x1, double y1, double x2, double y2) {
p1 = new PrecisionPoint(x1, y1);
p2 = new PrecisionPoint(x2, y2);
}
@Override
void parse(Element implemention, SVGShape parent) {
super.parse(implemention, parent);
parseLine(implemention, parent);
}
private void parseLine(Element implemention, SVGShape parent) {
float x1 = getFloatAttribute(implemention, SVGDefinitionConstants.X1);
float x2 = getFloatAttribute(implemention, SVGDefinitionConstants.X2);
float y1 = getFloatAttribute(implemention, SVGDefinitionConstants.Y1);
float y2 = getFloatAttribute(implemention, SVGDefinitionConstants.Y2);
this.p1 = new PrecisionPoint(x1, y1);
this.p2 = new PrecisionPoint(x2, y2);
}
@Override
Path generatePath(Display device) {
Path path = new Path(device);
path.moveTo(p1);
path.lineTo(p2);
return path;
}
@Override
PrecisionRectangle generateRectangle() {
return new PrecisionRectangle(p1, p2);
}
@Override
protected SVGShape clone() {
SVGLineShape line = new SVGLineShape();
line.setInfo(getInfo().clone());
line.p1 = this.p1;
line.p2 = this.p2;
return line;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj instanceof SVGLineShape) {
SVGLineShape line = (SVGLineShape) obj;
if (line.getInfo().equals(getInfo()) && p1.equals(line.p1)
&& p2.equals(line.p2)) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
int result = 17;
result = result * 31 + getInfo().hashCode();
result = result * 31 + (int) Double.doubleToLongBits(p1.x);
result = result * 31 + (int) Double.doubleToLongBits(p1.y);
result = result * 31 + (int) Double.doubleToLongBits(p2.x);
result = result * 31 + (int) Double.doubleToLongBits(p2.y);
return result;
}
@Override
public String toString() {
return "SVGLine( p1:" + p1.toString() + "; p2:" + p2.toString() //$NON-NLS-1$ //$NON-NLS-2$
+ getInfo().toString() + " )"; //$NON-NLS-1$
}
}