/******************************************************************************* * Copyright (c) 2011 Association for Decentralized Information Management in * Industry THTH ry. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * VTT Technical Research Centre of Finland - initial API and implementation *******************************************************************************/ package org.simantics.diagram.connection.rendering; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Stroke; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Path2D; import java.io.Serializable; /** * @author Tuukka Lehtonen */ public class BasicConnectionStyle implements ConnectionStyle, Serializable { private static final long serialVersionUID = -5799681720482456895L; // line thickness in millimeters. final Color lineColor; final Color branchPointColor; final double branchPointRadius; final Stroke lineStroke; final Stroke routeLineStroke; final double degenerateLineLength; transient Line2D line = new Line2D.Double(); transient Ellipse2D ellipse = new Ellipse2D.Double(); public BasicConnectionStyle(Color lineColor, Color branchPointColor, double branchPointRadius, Stroke lineStroke, Stroke routeLineStroke, double degenerateLineLength) { this.lineColor = lineColor; this.branchPointColor = branchPointColor; this.branchPointRadius = branchPointRadius; this.lineStroke = lineStroke; this.routeLineStroke = routeLineStroke; this.degenerateLineLength = degenerateLineLength; } public Color getLineColor() { return lineColor; } public Color getBranchPointColor() { return branchPointColor; } public double getBranchPointRadius() { return branchPointRadius; } public Stroke getLineStroke() { return lineStroke; } public Stroke getRouteLineStroke() { return routeLineStroke; } @Override public void drawLine(Graphics2D g, double x1, double y1, double x2, double y2, boolean isTransient) { if (lineColor != null) g.setColor(lineColor); if(isTransient) { g.setStroke(lineStroke); line.setLine(x1, y1, x2, y2); g.draw(line); } else { g.setStroke(routeLineStroke); line.setLine(x1, y1, x2, y2); g.draw(line); } } @Override public void drawPath(Graphics2D g, Path2D path, boolean isTransient) { if (lineColor != null) g.setColor(lineColor); if (lineStroke != null) g.setStroke(lineStroke); g.draw(path); } @Override public void drawBranchPoint(Graphics2D g, double x, double y) { g.setColor(branchPointColor); double r = branchPointRadius; double d = 2*r; ellipse.setFrame(x-r, y-r, d, d); g.fill(ellipse); } @Override public void drawDegeneratedLine(Graphics2D g, double x, double y, boolean isHorizontal, boolean isTransient) { double d = getDegeneratedLineLength()*0.5; if(isHorizontal) { line.setLine(x-d, y, x+d, y); g.draw(line); } else { line.setLine(x, y-d, x, y+d); g.draw(line); } } @Override public double getDegeneratedLineLength() { return degenerateLineLength; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((branchPointColor == null) ? 0 : branchPointColor.hashCode()); long temp; temp = Double.doubleToLongBits(branchPointRadius); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(degenerateLineLength); result = prime * result + (int) (temp ^ (temp >>> 32)); result = prime * result + ((lineColor == null) ? 0 : lineColor.hashCode()); result = prime * result + ((lineStroke == null) ? 0 : lineStroke.hashCode()); result = prime * result + ((routeLineStroke == null) ? 0 : routeLineStroke.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; BasicConnectionStyle other = (BasicConnectionStyle) obj; if (branchPointColor == null) { if (other.branchPointColor != null) return false; } else if (!branchPointColor.equals(other.branchPointColor)) return false; if (Double.doubleToLongBits(branchPointRadius) != Double.doubleToLongBits(other.branchPointRadius)) return false; if (Double.doubleToLongBits(degenerateLineLength) != Double.doubleToLongBits(other.degenerateLineLength)) return false; if (lineColor == null) { if (other.lineColor != null) return false; } else if (!lineColor.equals(other.lineColor)) return false; if (lineStroke == null) { if (other.lineStroke != null) return false; } else if (!lineStroke.equals(other.lineStroke)) return false; if (routeLineStroke == null) { if (other.routeLineStroke != null) return false; } else if (!routeLineStroke.equals(other.routeLineStroke)) return false; return true; } }