public Component prepareRenderer(
     RenderContext<V, E> rc,
     EdgeLabelRenderer graphLabelRenderer,
     Object value,
     boolean isSelected,
     E edge) {
   return rc.getEdgeLabelRenderer()
       .<E>getEdgeLabelRendererComponent(
           rc.getScreenDevice(),
           value,
           rc.getEdgeFontTransformer().transform(edge),
           isSelected,
           edge);
 }
 protected void setVertexLabeler(RenderContext<CallGraphNode, CallGraphLink> renderContext) {
   renderContext.setVertexLabelTransformer(new ToStringLabeller<CallGraphNode>());
   Renderer<CallGraphNode, CallGraphLink> renderer = visualizer.getRenderer();
   BasicVertexLabelRenderer<CallGraphNode, CallGraphLink> labelRenderer =
       new BasicVertexLabelRenderer<CallGraphNode, CallGraphLink>();
   labelRenderer.setPosition(Renderer.VertexLabel.Position.CNTR);
   renderer.setVertexLabelRenderer(labelRenderer);
 }
 protected void setRenderContextVertexTransformers(
     RenderContext<CallGraphNode, CallGraphLink> renderContext) {
   setVertexLabeler(renderContext);
   renderContext.setVertexFillPaintTransformer(new NodeTypeColorer());
   //	    		MapTransformer.<CallGraphNode, Paint> getInstance(vertexPaints));
   setVertexDrawPaintTransformer(renderContext);
   setVertexShapeTransformer(renderContext);
 }
  protected void setRenderContextEdgeTransformers(
      RenderContext<CallGraphNode, CallGraphLink> renderContext) {
    setEdgeLabeler(renderContext);
    renderContext.setEdgeDrawPaintTransformer(
        MapTransformer.<CallGraphLink, Paint>getInstance(edgePaints));
    renderContext.setEdgeStrokeTransformer(
        new Transformer<CallGraphLink, Stroke>() {
          protected final Stroke THIN = new BasicStroke(1);
          protected final Stroke THICK = new BasicStroke(2);

          public Stroke transform(CallGraphLink e) {
            Paint c = edgePaints.get(e);
            if (c == Color.LIGHT_GRAY) return THIN;
            else return THICK;
          }
        });
  }
 protected void setEdgeLabeler(RenderContext<CallGraphNode, CallGraphLink> renderContext) {
   ToStringLabeller<CallGraphLink> toStringLabeller = new ToStringLabeller<CallGraphLink>();
   renderContext.setEdgeLabelTransformer(toStringLabeller);
   Renderer<CallGraphNode, CallGraphLink> renderer = visualizer.getRenderer();
   BasicEdgeLabelRenderer<CallGraphNode, CallGraphLink> labelRenderer =
       new BasicEdgeLabelRenderer<CallGraphNode, CallGraphLink>();
   // labelRenderer.setPosition(Renderer.EdgeLabel.Position.CNTR);
   renderer.setEdgeLabelRenderer(labelRenderer);
 }
 /**
  * create an instance with passed values
  *
  * @param in override value for scale in
  * @param out override value for scale out
  */
 public AnnotatingModalGraphMouse(
     RenderContext<V, E> rc,
     AnnotatingGraphMousePlugin<V, E> annotatingPlugin,
     float in,
     float out) {
   super(in, out);
   this.rc = rc;
   this.basicTransformer = rc.getMultiLayerTransformer();
   this.annotatingPlugin = annotatingPlugin;
   loadPlugins();
   setModeKeyListener(new ModeKeyAdapter(this));
 }
 protected void setVertexDrawPaintTransformer(
     RenderContext<CallGraphNode, CallGraphLink> renderContext) {
   renderContext.setVertexDrawPaintTransformer(
       new Transformer<CallGraphNode, Paint>() {
         public Paint transform(CallGraphNode node) {
           PickedState<CallGraphNode> pickedState = visualizer.getPickedVertexState();
           if (pickedState.isPicked(node)) {
             return PICKED_COLOR;
           } else {
             return UNPICKED_COLOR;
           }
         }
       });
 }
  @Override
  public void labelEdge(RenderContext<V, E> rc, Layout<V, E> layout, E e, String label) {
    if (label == null || label.length() == 0) {
      return;
    }

    Graph<V, E> graph = layout.getGraph();
    // don't draw edge if either incident vertex is not drawn
    Pair<V> endpoints = graph.getEndpoints(e);
    V v1 = endpoints.getFirst();
    V v2 = endpoints.getSecond();
    if (!rc.getVertexIncludePredicate().evaluate(Context.<Graph<V, E>, V>getInstance(graph, v1))
        || !rc.getVertexIncludePredicate()
            .evaluate(Context.<Graph<V, E>, V>getInstance(graph, v2))) {
      return;
    }

    Point2D p1 = layout.transform(v1);
    Point2D p2 = layout.transform(v2);
    p1 = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p1);
    p2 = rc.getMultiLayerTransformer().transform(Layer.LAYOUT, p2);
    float x1 = (float) p1.getX();
    float y1 = (float) p1.getY();
    float x2 = (float) p2.getX();
    float y2 = (float) p2.getY();

    GraphicsDecorator g = rc.getGraphicsContext();
    float distX = x2 - x1;
    float distY = y2 - y1;
    double totalLength = Math.sqrt(distX * distX + distY * distY);

    double closeness =
        rc.getEdgeLabelClosenessTransformer()
            .transform(Context.<Graph<V, E>, E>getInstance(graph, e))
            .doubleValue();

    int posX = (int) (x1 + (closeness) * distX);
    int posY = (int) (y1 + (closeness) * distY);

    int xDisplacement = 0;
    int yDisplacement = 0;

    /*
     * BUG 1: change X and Y in distXXX xDisplacement = (int) (rc.getLabelOffset() * (distY /
     * totalLength)); yDisplacement = (int) (rc.getLabelOffset() * (-distX / totalLength));
     */

    xDisplacement = (int) (rc.getLabelOffset() * (distX / totalLength));
    yDisplacement = (int) (rc.getLabelOffset() * (-distY / totalLength));

    // BUG 2
    /*
     * Component component = prepareRenderer(rc, rc.getEdgeLabelRenderer(), label,
     * rc.getPickedEdgeState().isPicked(e), e); Dimension d = component.getPreferredSize();
     * Shape edgeShape = rc.getEdgeShapeTransformer().transform(Context.<Graph<V, E>, E>
     * getInstance(graph, e)); double parallelOffset = 1;
     *
     * parallelOffset -= rc.getParallelEdgeIndexFunction().getIndex(graph, e);
     *
     * if (edgeShape instanceof Ellipse2D) { parallelOffset +=
     * edgeShape.getBounds().getHeight(); parallelOffset = -parallelOffset; }
     *
     * parallelOffset *= d.height;
     */

    AffineTransform old = g.getTransform();
    AffineTransform xform = new AffineTransform(old);
    xform.translate(posX + xDisplacement, posY + yDisplacement);

    // BUG 3
    /*
     * double dx = x2 - x1; double dy = y2 - y1; if
     * (rc.getEdgeLabelRenderer().isRotateEdgeLabels()) { double theta = Math.atan2(dy, dx); if
     * (dx < 0) { theta += Math.PI; } xform.rotate(theta); } if (dx < 0) { parallelOffset =
     * -parallelOffset; }
     */

    double parallelOffset = 0.0d;
    Component component =
        prepareRenderer(
            rc, rc.getEdgeLabelRenderer(), label, rc.getPickedEdgeState().isPicked(e), e);
    Dimension d = component.getPreferredSize();
    xform.translate(-d.width / 2.0d, -(d.height / 2.0d - parallelOffset));
    g.setTransform(xform);
    g.draw(component, rc.getRendererPane(), 0, 0, d.width, d.height, true);
    g.setTransform(old);
  }
 protected void setVertexShapeTransformer(
     RenderContext<CallGraphNode, CallGraphLink> renderContext) {
   CallGraphNodeShapeTransformer vertexShapeTransformer =
       new CallGraphNodeShapeTransformer(graph.getJungGraph());
   renderContext.setVertexShapeTransformer(vertexShapeTransformer);
 }