import java.awt.*;
public class NFALink {
public static void draw(GLink link) {
GContext context = link.getContext();
float sx = link.source.getX()+context.getPixelNodeWidth()/2;
float sy = link.source.getY();
float tx = link.target.getX()+context.getPixelNodeWidth()/2;
float ty = link.target.getY();
float startOffset = context.getPixelNodeWidth()/2;
float endOffset = startOffset;
float sloopBaseWidth = context.getPixelValue(GContext.EPSILON_WIDTH);
context.setColor(context.linkColor);
if(link.virtualPosition != null) {
context.drawArcConnector(sx+(tx-sx)/2, link.getVirtualY(), sx, sy, startOffset, endOffset,
sloopBaseWidth, 0.25f*sloopBaseWidth, link.transition.loop);
context.drawArcConnector(sx+(tx-sx)/2, link.getVirtualY(), tx, ty, startOffset, endOffset,
sloopBaseWidth, 0.25f*sloopBaseWidth, !link.transition.loop);
} else if(sy > ty) {
// Draw link upward
if((tx-sx>sloopBaseWidth+startOffset+0.25f*sloopBaseWidth) && sloopBaseWidth>0) {
context.drawArcConnector(sx, sy, tx, ty, startOffset, endOffset,
sloopBaseWidth, 0.25f*sloopBaseWidth, true);
} else {
context.drawSpline(sx, sy, tx, ty, startOffset, endOffset, 0, true);
}
} else {
context.drawSpline(sx, sy, tx, ty, startOffset, endOffset, 0, true);
}
if(!link.transition.isEpsilon()) {
Font font;
if(link.transition.externalRuleRef)
font = context.getRuleFont();
else
font = context.getBoxFont();
context.setColor(context.getColorForLabel(link.transition.label));
context.drawString(font, link.transition.label, sx+(tx-sx)/2, sy-2, GContext.ALIGN_CENTER_UP);
}
}