]> gerrit.simantics Code Review - simantics/district.git/blob - 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
1 package org.simantics.district.network.ui.nodes;
2
3 import java.awt.Graphics2D;
4 import java.awt.geom.AffineTransform;
5 import java.awt.geom.Rectangle2D;
6 import java.util.LinkedList;
7 import java.util.List;
8 import java.util.ListIterator;
9
10 import org.simantics.scenegraph.g2d.G2DNode;
11 import org.simantics.utils.datastructures.Pair;
12
13 public class DeferredRenderingNode extends G2DNode {
14
15         private static final long serialVersionUID = 1L;
16         
17         List<Pair<AffineTransform, DeferredNode>> queue = new LinkedList<>();
18         
19         @Override
20         public void render(Graphics2D g2d) {
21                 AffineTransform currentTransform = g2d.getTransform();
22                 
23                 ListIterator<Pair<AffineTransform, DeferredNode>> listIterator = queue.listIterator();
24                 while (listIterator.hasNext()) {
25                         Pair<AffineTransform, DeferredNode> node = listIterator.next();
26                         listIterator.remove();
27                         
28                         g2d.setTransform(node.first);
29                         node.second.renderDeferred(g2d);
30                 }
31                 
32                 g2d.setTransform(currentTransform);
33         }
34
35         @Override
36         public Rectangle2D getBoundsInLocal() {
37                 return null;
38         }
39
40         public void deferNode(AffineTransform transform, DeferredNode node) {
41                 queue.add(new Pair<>(transform, node));
42         }
43 }