]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java
Render elements using custom color filters
[simantics/platform.git] / bundles / org.simantics.scenegraph / src / org / simantics / scenegraph / g2d / nodes / SingleElementNode.java
index 29ef9954eb37a604a1ca593439e9614a1e3d4510..b45e7493a686fa4ea61286b0e57580d422ea6935 100644 (file)
@@ -21,6 +21,8 @@ import java.util.Map;
 import org.simantics.scenegraph.INode;
 import org.simantics.scenegraph.g2d.G2DRenderingHints;
 import org.simantics.scenegraph.g2d.IG2DNode;
+import org.simantics.scenegraph.g2d.color.ColorFilter;
+import org.simantics.scenegraph.g2d.color.Graphics2DWithColorFilter;
 import org.simantics.scenegraph.g2d.events.EventTypes;
 import org.simantics.scenegraph.g2d.events.MouseEvent;
 import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin;
@@ -33,6 +35,7 @@ public class SingleElementNode extends TransformNode implements InitValueSupport
 
     private TransferableProvider transferableProvider;
     protected Composite composite;
+    private ColorFilter colorFilter;
     protected Boolean visible = Boolean.TRUE;
     protected Boolean hidden = Boolean.FALSE;
     private transient Object key;
@@ -91,6 +94,10 @@ public class SingleElementNode extends TransformNode implements InitValueSupport
     public void setComposite(Composite composite) {
         this.composite = composite;
     }
+    
+    public void setColorFilter(ColorFilter colorFilter) {
+        this.colorFilter = colorFilter;
+    }
 
     @SyncField("visible")
     public void setVisible(Boolean visible) {
@@ -111,10 +118,18 @@ public class SingleElementNode extends TransformNode implements InitValueSupport
     }
 
     @Override
-    public void render(Graphics2D g) {
+    public void render(Graphics2D g2d) {
         if (!visible || hidden)
             return;
 
+        Graphics2D g;
+        if (colorFilter != null) {
+            g = new Graphics2DWithColorFilter(g2d, colorFilter);
+            g.setRenderingHint(G2DRenderingHints.KEY_COLOR_FILTER, colorFilter);
+        } else {
+            g = g2d;
+        }
+
         Composite oldComposite = null;
         if(composite != null) {
             oldComposite = g.getComposite();
@@ -130,6 +145,10 @@ public class SingleElementNode extends TransformNode implements InitValueSupport
 
         if (oldComposite != null)
             g.setComposite(oldComposite);
+
+        if (colorFilter != null) {
+            g.setRenderingHint(G2DRenderingHints.KEY_COLOR_FILTER, null);
+        }
     }
 
     @Override