]> gerrit.simantics Code Review - simantics/district.git/blobdiff - org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DeferredRenderingNode.java
Adjustments to map diagram info label rendering
[simantics/district.git] / org.simantics.district.network.ui / src / org / simantics / district / network / ui / nodes / DeferredRenderingNode.java
diff --git a/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DeferredRenderingNode.java b/org.simantics.district.network.ui/src/org/simantics/district/network/ui/nodes/DeferredRenderingNode.java
new file mode 100644 (file)
index 0000000..f243071
--- /dev/null
@@ -0,0 +1,43 @@
+package org.simantics.district.network.ui.nodes;
+
+import java.awt.Graphics2D;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.Rectangle2D;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.simantics.scenegraph.g2d.G2DNode;
+import org.simantics.utils.datastructures.Pair;
+
+public class DeferredRenderingNode extends G2DNode {
+
+       private static final long serialVersionUID = 1L;
+       
+       List<Pair<AffineTransform, DeferredNode>> queue = new LinkedList<>();
+       
+       @Override
+       public void render(Graphics2D g2d) {
+               AffineTransform currentTransform = g2d.getTransform();
+               
+               ListIterator<Pair<AffineTransform, DeferredNode>> listIterator = queue.listIterator();
+               while (listIterator.hasNext()) {
+                       Pair<AffineTransform, DeferredNode> node = listIterator.next();
+                       listIterator.remove();
+                       
+                       g2d.setTransform(node.first);
+                       node.second.renderDeferred(g2d);
+               }
+               
+               g2d.setTransform(currentTransform);
+       }
+
+       @Override
+       public Rectangle2D getBoundsInLocal() {
+               return null;
+       }
+
+       public void deferNode(AffineTransform transform, DeferredNode node) {
+               queue.add(new Pair<>(transform, node));
+       }
+}