X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fnodes%2FSingleElementNode.java;fp=bundles%2Forg.simantics.scenegraph%2Fsrc%2Forg%2Fsimantics%2Fscenegraph%2Fg2d%2Fnodes%2FSingleElementNode.java;h=00ca6b8663f59c984097508f9cc9a5dba1491fc5;hb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;hp=9220e18fd35a429f8e5d6bde95befc4c7d33da5a;hpb=24e2b34260f219f0d1644ca7a138894980e25b14;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java index 9220e18fd..00ca6b866 100644 --- a/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java +++ b/bundles/org.simantics.scenegraph/src/org/simantics/scenegraph/g2d/nodes/SingleElementNode.java @@ -1,172 +1,172 @@ -/******************************************************************************* - * Copyright (c) 2007, 2010 Association for Decentralized Information Management - * in Industry THTH ry. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * VTT Technical Research Centre of Finland - initial API and implementation - *******************************************************************************/ -package org.simantics.scenegraph.g2d.nodes; - -import java.awt.AlphaComposite; -import java.awt.Composite; -import java.awt.Graphics2D; -import java.awt.geom.Point2D; -import java.awt.geom.Rectangle2D; - -import org.simantics.scenegraph.g2d.IG2DNode; -import org.simantics.scenegraph.g2d.events.EventTypes; -import org.simantics.scenegraph.g2d.events.MouseEvent; -import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin; -import org.simantics.scenegraph.utils.InitValueSupport; -import org.simantics.scenegraph.utils.NodeUtil; - -public class SingleElementNode extends TransformNode implements InitValueSupport { - - private static final long serialVersionUID = -4982578347433716440L; - - private TransferableProvider transferableProvider; - protected Composite composite; - protected Boolean visible = Boolean.TRUE; - protected Boolean hidden = Boolean.FALSE; - - public void setTransferableProvider(TransferableProvider transferableProvider) { - if (transferableProvider != this.transferableProvider) { - if (this.transferableProvider != null) - removeEventHandler(this); - if (transferableProvider != null) - addEventHandler(this); - this.transferableProvider = transferableProvider; - } - } - - @Override - public boolean validate() { - return visible && !hidden; - } - - @SyncField("composite") - public void setComposite(Composite composite) { - this.composite = composite; - } - - @SyncField("visible") - public void setVisible(Boolean visible) { - this.visible = visible; - } - - public boolean isVisible() { - return visible; - } - - @SyncField("hidden") - public void setHidden(Boolean hidden) { - this.hidden = hidden; - } - - public boolean isHidden() { - return hidden; - } - - @Override - public void render(Graphics2D g) { - if (!visible || hidden) - return; - - Composite oldComposite = null; - if(composite != null) { - oldComposite = g.getComposite(); - g.setComposite(composite); - } - if(alphaComposite != null) { - if (oldComposite == null) - oldComposite = g.getComposite(); - g.setComposite(alphaComposite); - } - - super.render(g); - - if (oldComposite != null) - g.setComposite(oldComposite); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append(super.toString()); - sb.append(" ["); - if (composite != null) { - sb.append("composite=("); - AlphaComposite ac = (AlphaComposite) composite; - sb.append(ac.getRule()); - sb.append(", "); - sb.append(ac.getAlpha()); - sb.append("), "); - } - sb.append("visible="); - sb.append(visible); - sb.append("]"); - return sb.toString(); - } - - protected Composite alphaComposite = null; - - @PropertySetter("alpha") - @SyncField("alphaComposite") - public void setAlphaComposite(Composite alphaComposite) { - this.alphaComposite = alphaComposite; - } - - @Override - public void initValues() { - alphaComposite = null; - for (IG2DNode node : getSortedNodes()) { - if (node instanceof InitValueSupport) { - ((InitValueSupport) node).initValues(); - } - } - } - - @Override - public void cleanup() { - if (transferableProvider != null) { - removeEventHandler(this); - transferableProvider = null; - } - super.cleanup(); - } - - protected boolean isDragStartEvent(MouseEvent e) { - return e.isControlDown(); - } - - protected boolean hitTest(MouseEvent event) { - Rectangle2D bounds = super.getBoundsInLocal(true); - if (bounds == null) - return false; - Point2D localPos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double()); - double x = localPos.getX(); - double y = localPos.getY(); - boolean hit = bounds.contains(x, y); - return hit; - } - - @Override - protected boolean mouseDragged(MouseDragBegin e) { - if (transferableProvider == null - || !isDragStartEvent(e) - || !hitTest(e)) - return false; - e.transferable = transferableProvider.create(); - return e.transferable != null; - } - - @Override - public int getEventMask() { - return EventTypes.MouseDragBeginMask; - } - -} +/******************************************************************************* + * Copyright (c) 2007, 2010 Association for Decentralized Information Management + * in Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.scenegraph.g2d.nodes; + +import java.awt.AlphaComposite; +import java.awt.Composite; +import java.awt.Graphics2D; +import java.awt.geom.Point2D; +import java.awt.geom.Rectangle2D; + +import org.simantics.scenegraph.g2d.IG2DNode; +import org.simantics.scenegraph.g2d.events.EventTypes; +import org.simantics.scenegraph.g2d.events.MouseEvent; +import org.simantics.scenegraph.g2d.events.MouseEvent.MouseDragBegin; +import org.simantics.scenegraph.utils.InitValueSupport; +import org.simantics.scenegraph.utils.NodeUtil; + +public class SingleElementNode extends TransformNode implements InitValueSupport { + + private static final long serialVersionUID = -4982578347433716440L; + + private TransferableProvider transferableProvider; + protected Composite composite; + protected Boolean visible = Boolean.TRUE; + protected Boolean hidden = Boolean.FALSE; + + public void setTransferableProvider(TransferableProvider transferableProvider) { + if (transferableProvider != this.transferableProvider) { + if (this.transferableProvider != null) + removeEventHandler(this); + if (transferableProvider != null) + addEventHandler(this); + this.transferableProvider = transferableProvider; + } + } + + @Override + public boolean validate() { + return visible && !hidden; + } + + @SyncField("composite") + public void setComposite(Composite composite) { + this.composite = composite; + } + + @SyncField("visible") + public void setVisible(Boolean visible) { + this.visible = visible; + } + + public boolean isVisible() { + return visible; + } + + @SyncField("hidden") + public void setHidden(Boolean hidden) { + this.hidden = hidden; + } + + public boolean isHidden() { + return hidden; + } + + @Override + public void render(Graphics2D g) { + if (!visible || hidden) + return; + + Composite oldComposite = null; + if(composite != null) { + oldComposite = g.getComposite(); + g.setComposite(composite); + } + if(alphaComposite != null) { + if (oldComposite == null) + oldComposite = g.getComposite(); + g.setComposite(alphaComposite); + } + + super.render(g); + + if (oldComposite != null) + g.setComposite(oldComposite); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(super.toString()); + sb.append(" ["); + if (composite != null) { + sb.append("composite=("); + AlphaComposite ac = (AlphaComposite) composite; + sb.append(ac.getRule()); + sb.append(", "); + sb.append(ac.getAlpha()); + sb.append("), "); + } + sb.append("visible="); + sb.append(visible); + sb.append("]"); + return sb.toString(); + } + + protected Composite alphaComposite = null; + + @PropertySetter("alpha") + @SyncField("alphaComposite") + public void setAlphaComposite(Composite alphaComposite) { + this.alphaComposite = alphaComposite; + } + + @Override + public void initValues() { + alphaComposite = null; + for (IG2DNode node : getSortedNodes()) { + if (node instanceof InitValueSupport) { + ((InitValueSupport) node).initValues(); + } + } + } + + @Override + public void cleanup() { + if (transferableProvider != null) { + removeEventHandler(this); + transferableProvider = null; + } + super.cleanup(); + } + + protected boolean isDragStartEvent(MouseEvent e) { + return e.isControlDown(); + } + + protected boolean hitTest(MouseEvent event) { + Rectangle2D bounds = super.getBoundsInLocal(true); + if (bounds == null) + return false; + Point2D localPos = NodeUtil.worldToLocal(this, event.controlPosition, new Point2D.Double()); + double x = localPos.getX(); + double y = localPos.getY(); + boolean hit = bounds.contains(x, y); + return hit; + } + + @Override + protected boolean mouseDragged(MouseDragBegin e) { + if (transferableProvider == null + || !isDragStartEvent(e) + || !hitTest(e)) + return false; + e.transferable = transferableProvider.create(); + return e.transferable != null; + } + + @Override + public int getEventMask() { + return EventTypes.MouseDragBeginMask; + } + +}