X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.diagram.connection%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fconnection%2Frendering%2FBasicConnectionStyle.java;fp=bundles%2Forg.simantics.diagram.connection%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fconnection%2Frendering%2FBasicConnectionStyle.java;h=514eeb92ae3430ce9bd2357b695a8cf0517d70ee;hp=0000000000000000000000000000000000000000;hb=969bd23cab98a79ca9101af33334000879fb60c5;hpb=866dba5cd5a3929bbeae85991796acb212338a08 diff --git a/bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/rendering/BasicConnectionStyle.java b/bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/rendering/BasicConnectionStyle.java new file mode 100644 index 000000000..514eeb92a --- /dev/null +++ b/bundles/org.simantics.diagram.connection/src/org/simantics/diagram/connection/rendering/BasicConnectionStyle.java @@ -0,0 +1,173 @@ +/******************************************************************************* + * 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; + } + +}