Author: koen.aers(a)jboss.com
Date: 2008-11-25 15:44:40 -0500 (Tue, 25 Nov 2008)
New Revision: 12048
Added:
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/figure/DiamondAnchor.java
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/figure/DiamondElementFigure.java
Log:
Support for diamond shaped figures
Added:
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/figure/DiamondAnchor.java
===================================================================
---
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/figure/DiamondAnchor.java
(rev 0)
+++
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/figure/DiamondAnchor.java 2008-11-25
20:44:40 UTC (rev 12048)
@@ -0,0 +1,47 @@
+package org.jboss.tools.flow.common.figure;
+
+import org.eclipse.draw2d.AbstractConnectionAnchor;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.Rectangle;
+
+public class DiamondAnchor extends AbstractConnectionAnchor {
+
+ public DiamondAnchor(IFigure owner) {
+ super(owner);
+ }
+
+ public Point getLocation(Point reference) {
+ Rectangle r = Rectangle.SINGLETON;
+ r.setBounds(getOwner().getBounds());
+ r.translate(-1, -1);
+ r.resize(1, 1);
+ getOwner().translateToAbsolute(r);
+
+ Point ref = r.getCenter().negate().translate(reference);
+
+ float centerX = r.x + 0.5f * r.width;
+ float centerY = r.y + 0.5f * r.height;
+ float dx, dy;
+
+ if (Math.abs(ref.x * r.height) == Math.abs(Math.abs(ref.y)* r.width )) {
+ dx = ref.x > 0 ? r.width / 4 : - r.width / 4;
+ dy = ref.y > 0 ? r.height / 4 : - r.height / 4;
+ } else if (ref.x == 0) {
+ dx = 0;
+ dy = ref.y > 0 ? r.height / 2 : - r.height / 2;
+ } else {
+
+ float numerator = ref.x * r.height * r.width / 2;
+ float firstDenominator = Math.abs(ref.y) * r.width + ref.x * r.height;
+ float secondDenominator = Math.abs(ref.y) * r.width - ref.x * r.height;
+
+ dx = (ref.x > 0) ? numerator / firstDenominator : numerator / secondDenominator;
+ dy = dx * ref.y / ref.x;
+
+ }
+
+ return new Point(Math.round(centerX + dx), Math.round(centerY + dy));
+ }
+
+}
\ No newline at end of file
Added:
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/figure/DiamondElementFigure.java
===================================================================
---
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/figure/DiamondElementFigure.java
(rev 0)
+++
trunk/flow/plugins/org.jboss.tools.flow.common/src/org/jboss/tools/flow/common/figure/DiamondElementFigure.java 2008-11-25
20:44:40 UTC (rev 12048)
@@ -0,0 +1,44 @@
+package org.jboss.tools.flow.common.figure;
+
+import org.eclipse.draw2d.ConnectionAnchor;
+import org.eclipse.draw2d.Polygon;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.draw2d.geometry.Rectangle;
+
+public class DiamondElementFigure extends AbstractElementFigure {
+
+ protected Polygon diamond;
+
+ @Override
+ protected void customizeFigure() {
+ diamond = new Polygon();
+ diamond.setLineWidth(1);
+ add(diamond, 0);
+ setSize(50, 50);
+ diamond.setPoints(calculatePointList());
+ }
+
+ public void setBounds(Rectangle rectangle) {
+ super.setBounds(rectangle);
+ diamond.setPoints(calculatePointList());
+ }
+
+ private PointList calculatePointList() {
+ PointList result = new PointList();
+ Rectangle bounds = getBounds();
+ result.addPoint(bounds.x + bounds.width / 2 - diamond.getLineWidth() / 4, bounds.y +
diamond.getLineWidth() / 2);
+ result.addPoint(bounds.x + bounds.width - diamond.getLineWidth(), bounds.y +
bounds.height / 2 - diamond.getLineWidth() / 4);
+ result.addPoint(bounds.x + bounds.width / 2 - diamond.getLineWidth() / 4, bounds.y +
bounds.height - diamond.getLineWidth());
+ result.addPoint(bounds.x + diamond.getLineWidth() / 2, bounds.y + bounds.height / 2 -
diamond.getLineWidth() / 4);
+ return result;
+ }
+
+ public ConnectionAnchor getSourceConnectionAnchor() {
+ return new DiamondAnchor(this);
+ }
+
+ public ConnectionAnchor getTargetConnectionAnchor() {
+ return new DiamondAnchor(this);
+ }
+
+}