// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU General Public License (GPL): http://www.gnu.org/licenses/ package graphtea.graph.old; import graphtea.graph.graph.Edge; import graphtea.graph.graph.GPoint; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.Vertex; import graphtea.platform.core.BlackBoard; import java.awt.*; import java.awt.image.VolatileImage; import java.util.Iterator; /** * @author azin azadi */ public class LayeredRenderer extends AcceleratedRenderer { public LayeredRenderer(GraphModel g, BlackBoard blackboard) { super(g, blackboard); } VolatileImage vLayer, eLayer; private VolatileImage createTransparentBuffer() { GraphicsConfiguration gc = getGraphicsConfiguration(); VolatileImage c = gc.createCompatibleVolatileImage(getWidth(), getHeight(), VolatileImage.TRANSLUCENT); // This uses the same code as from Code Example 5, but replaces the try block. Graphics2D gImg = (Graphics2D) c.getGraphics(); gImg.setComposite(AlphaComposite.Src); gImg.setColor(new Color(0, 0, 0, 0)); gImg.fillRect(0, 0, 100, 100); gImg.dispose(); // c.createGraphics().cl return c; } public void paint(Graphics2D g) { if (vLayer == null) vLayer = createTransparentBuffer(); if (eLayer == null) eLayer = createTransparentBuffer(); g.setComposite(AlphaComposite.Src); g.drawImage(eLayer, 0, 0, this); g.drawImage(vLayer, 0, 0, this); } public void repaintVLayer() { vLayer = createTransparentBuffer(); Graphics2D graphics = vLayer.createGraphics(); for (Vertex v : getGraph()) { repaint(v, graphics); } graphics.dispose(); } public void repaintELayer() { eLayer = createTransparentBuffer(); Graphics2D graphics = eLayer.createGraphics(); Iterator<Edge> ie = getGraph().edgeIterator(); while (ie.hasNext()) { repaint(ie.next(), graphics); } graphics.dispose(); } public void repaint(Vertex src) { super.repaint(src, vLayer.createGraphics()); // repaint(); } public void repaint(Edge src) { super.repaint(src, eLayer.createGraphics()); // repaint(); } public void vertexRemoved(Vertex v) { repaintVLayer(); repaint(); } public void edgeRemoved(Edge e) { repaintELayer(); repaint(); } public void graphCleared() { repaintVLayer(); repaintELayer(); repaint(); } public void updateSize(Vertex src, GPoint newSize) { repaintVLayer(); repaint(); } public void updateLocation(Vertex src, GPoint newLocation) { repaintVLayer(); repaint(); } public void updateBounds(Rectangle r, Edge src) { repaintELayer(); // repaint(); } }