--- /dev/null
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
+ * in Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
+package org.simantics.scenegraph.g2d.nodes;\r
+\r
+import java.awt.AlphaComposite;\r
+import java.awt.Composite;\r
+import java.awt.Graphics2D;\r
+\r
+import org.simantics.scenegraph.g2d.IG2DNode;\r
+import org.simantics.scenegraph.utils.InitValueSupport;\r
+\r
+public class SingleElementNode extends TransformNode implements InitValueSupport {\r
+ /**\r
+ * \r
+ */\r
+ private static final long serialVersionUID = -4982578347433716440L;\r
+\r
+ protected Composite composite;\r
+ protected Boolean visible = Boolean.TRUE;\r
+ protected Boolean hidden = Boolean.FALSE;\r
+\r
+ @Override\r
+ public boolean validate() {\r
+ return visible && !hidden;\r
+ }\r
+\r
+ @SyncField("composite")\r
+ public void setComposite(Composite composite) {\r
+ this.composite = composite;\r
+ }\r
+\r
+ @SyncField("visible")\r
+ public void setVisible(Boolean visible) {\r
+ this.visible = visible;\r
+ }\r
+\r
+ public boolean isVisible() {\r
+ return visible;\r
+ }\r
+\r
+ @SyncField("hidden")\r
+ public void setHidden(Boolean hidden) {\r
+ this.hidden = hidden;\r
+ }\r
+\r
+ public boolean isHidden() {\r
+ return hidden;\r
+ }\r
+\r
+ @Override\r
+ public void render(Graphics2D g) {\r
+ if (!visible || hidden)\r
+ return;\r
+\r
+ Composite oldComposite = null;\r
+ if(composite != null) {\r
+ oldComposite = g.getComposite();\r
+ g.setComposite(composite);\r
+ }\r
+ if(alphaComposite != null) {\r
+ if (oldComposite == null)\r
+ oldComposite = g.getComposite();\r
+ g.setComposite(alphaComposite);\r
+ }\r
+\r
+ super.render(g);\r
+\r
+ if (oldComposite != null)\r
+ g.setComposite(oldComposite);\r
+ }\r
+\r
+ @Override\r
+ public String toString() {\r
+ StringBuilder sb = new StringBuilder();\r
+ sb.append(super.toString());\r
+ sb.append(" [");\r
+ if (composite != null) {\r
+ sb.append("composite=(");\r
+ AlphaComposite ac = (AlphaComposite) composite;\r
+ sb.append(ac.getRule());\r
+ sb.append(", ");\r
+ sb.append(ac.getAlpha());\r
+ sb.append("), ");\r
+ }\r
+ sb.append("visible=");\r
+ sb.append(visible);\r
+ sb.append("]");\r
+ return sb.toString();\r
+ }\r
+\r
+// private INode findChild(String key) {\r
+//\r
+// INode result = getNode(key);\r
+// if(result != null) return result;\r
+//\r
+// for(Map.Entry<String, IG2DNode> entry : children.entrySet()) {\r
+//\r
+// if(!(entry.getValue() instanceof SingleElementNode)) {\r
+// if(entry.getKey().startsWith(key)) return entry.getValue();\r
+// }\r
+//\r
+// }\r
+//\r
+// for(IG2DNode node : getNodes()) {\r
+//\r
+// if(node instanceof SingleElementNode) {\r
+//\r
+// result = ((SingleElementNode)node).findChild(key);\r
+// if(result != null) return result;\r
+//\r
+// }\r
+//\r
+// }\r
+//\r
+// return null;\r
+//\r
+// }\r
+\r
+ protected Composite alphaComposite = null;\r
+\r
+ @PropertySetter("alpha")\r
+ @SyncField("alphaComposite")\r
+ public void setAlphaComposite(Composite alphaComposite) {\r
+ this.alphaComposite = alphaComposite;\r
+ }\r
+\r
+// public void setValue(String key, Object value) {\r
+//\r
+// if ("alpha".equals(key)) {\r
+// Float val = Float.parseFloat((String)value);\r
+// alphaComposite = AlphaComposite.getInstance(AlphaComposite. SRC_OVER, val);\r
+// } else {\r
+//\r
+// String[] parts = key.split("\\.");\r
+// if(parts.length != 2) return;\r
+//\r
+// INode child = findChild(parts[0]);\r
+//\r
+// if(child == null) return;\r
+//\r
+//// child.setValue(parts[1], value);\r
+//\r
+// }\r
+//\r
+// }\r
+\r
+ @Override\r
+ public void initValues() {\r
+ alphaComposite = null;\r
+ for (IG2DNode node : getSortedNodes()) {\r
+ if (node instanceof InitValueSupport) {\r
+ ((InitValueSupport) node).initValues();\r
+ }\r
+ }\r
+ }\r
+\r
+}\r