Author: kono
Date: 2012-08-31 18:36:46 -0700 (Fri, 31 Aug 2012)
New Revision: 30310
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DLineType.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeDetails.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeView.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/NodeViewDefaultSupport.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/immed/GraphGraphics.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/stateful/GraphRenderer.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/stateful/NodeDetails.java
core3/impl/trunk/ding-impl/ding-presentation-impl/src/test/java/org/cytoscape/graph/render/immed/GraphGraphicsTest.java
Log:
fixes #557 Node border line type is now working.
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DLineType.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DLineType.java
2012-08-31 23:55:06 UTC (rev 30309)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DLineType.java
2012-09-01 01:36:46 UTC (rev 30310)
@@ -13,7 +13,6 @@
import org.cytoscape.ding.impl.strokes.ZeroStroke;
import org.cytoscape.view.presentation.property.LineTypeVisualProperty;
import org.cytoscape.view.presentation.property.values.LineType;
-import org.cytoscape.view.presentation.property.values.VisualPropertyValue;
public class DLineType implements LineType {
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeDetails.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeDetails.java
2012-08-31 23:55:06 UTC (rev 30309)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeDetails.java
2012-09-01 01:36:46 UTC (rev 30310)
@@ -30,6 +30,7 @@
import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
+import java.awt.Stroke;
import java.awt.TexturePaint;
import java.util.HashMap;
import java.util.HashSet;
@@ -50,6 +51,7 @@
import org.cytoscape.model.CyNode;
import org.cytoscape.view.model.View;
import org.cytoscape.view.model.VisualProperty;
+import org.cytoscape.view.presentation.property.values.LineType;
import org.cytoscape.view.presentation.property.values.NodeShape;
/*
@@ -71,6 +73,7 @@
Map<CyNode, Paint> m_unselectedPaints = new WeakHashMap<CyNode,
Paint>();
Map<CyNode, Paint> m_selectedPaints = new WeakHashMap<CyNode, Paint>();
Map<CyNode, Float> m_borderWidths = new WeakHashMap<CyNode, Float>();
+ Map<CyNode, Stroke> m_borderStrokes = new WeakHashMap<CyNode, Stroke>();
Map<CyNode, Paint> m_borderPaints = new WeakHashMap<CyNode, Paint>();
Map<CyNode, Integer> m_labelCounts = new WeakHashMap<CyNode, Integer>();
Map<CyNode, String> m_labelTexts = new WeakHashMap<CyNode, String>();
@@ -98,6 +101,7 @@
Paint m_selectedPaintDefault =
DVisualLexicon.NODE_SELECTED_PAINT.getDefault();
NodeShape m_shapeDefault = DVisualLexicon.NODE_SHAPE.getDefault();
Double m_borderWidthDefault =
DVisualLexicon.NODE_BORDER_WIDTH.getDefault();
+ LineType m_borderStrokeDefault =
DVisualLexicon.NODE_BORDER_LINE_TYPE.getDefault();
Paint m_borderPaintDefault =
DVisualLexicon.NODE_BORDER_PAINT.getDefault();
Integer m_labelCountDefault; // TODO: remove?
String m_labelTextDefault = DVisualLexicon.NODE_LABEL.getDefault();;
@@ -130,6 +134,7 @@
m_shapes = new WeakHashMap<CyNode, NodeShape>();
m_unselectedPaints = new WeakHashMap<CyNode, Paint>();
m_borderWidths = new WeakHashMap<CyNode, Float>();
+ m_borderStrokes = new WeakHashMap<CyNode, Stroke>();
m_borderPaints = new WeakHashMap<CyNode, Paint>();
m_labelCounts = new WeakHashMap<CyNode, Integer>();
m_labelTexts = new WeakHashMap<CyNode, String>();
@@ -168,6 +173,7 @@
m_shapes.remove(nodeIdx);
m_unselectedPaints.remove(nodeIdx);
m_borderWidths.remove(nodeIdx);
+ m_borderStrokes.remove(nodeIdx);
m_borderPaints.remove(nodeIdx);
m_labelWidths.remove(nodeIdx);
m_labelTextAnchors.remove(nodeIdx);
@@ -400,7 +406,50 @@
isCleared = false;
}
}
+
+
+ @Override
+ public Stroke getBorderStroke(final CyNode node) {
+ final float borderWidth = getBorderWidth(node);
+ // Check bypass
+ final DNodeView dnv = dGraphView.getDNodeView(node);
+ if (dnv.isValueLocked(DVisualLexicon.NODE_BORDER_LINE_TYPE)) {
+ final LineType lockedLineType =
dnv.getVisualProperty(DVisualLexicon.NODE_BORDER_LINE_TYPE);
+ return
DLineType.getDLineType(lockedLineType).getStroke(borderWidth);
+ }
+ final Stroke stroke = m_borderStrokes.get(node);
+
+ if (stroke == null) {
+ if (m_borderStrokeDefault == null) {
+ final LineType vpDefaultLineType =
dnv.getVisualProperty(DVisualLexicon.NODE_BORDER_LINE_TYPE);
+ return
DLineType.getDLineType(vpDefaultLineType).getStroke(borderWidth);
+ } else {
+
+ return
DLineType.getDLineType(m_borderStrokeDefault).getStroke(borderWidth);
+ }
+ } else {
+ return stroke;
+ }
+ }
+
+ void setBorderLineTypeDefault(final LineType lineType) {
+ m_borderStrokeDefault = lineType;
+ defaultValues.put(DVisualLexicon.NODE_BORDER_LINE_TYPE,
m_borderStrokeDefault);
+ }
+
+
+ void overrideBorderStroke(final CyNode node, final Stroke stroke) {
+ if (stroke == null)
+ m_borderStrokes.remove(node);
+ else {
+ m_borderStrokes.put(node, stroke);
+ isCleared = false;
+ }
+ }
+
+
+
@Override
public Paint getBorderPaint(final CyNode node) {
// Check bypass
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeView.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeView.java
2012-08-31 23:55:06 UTC (rev 30309)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/DNodeView.java
2012-09-01 01:36:46 UTC (rev 30310)
@@ -262,25 +262,11 @@
}
}
-
@Override
- public void setBorder(Stroke stroke) {
- if (stroke instanceof BasicStroke) {
- synchronized (graphView.m_lock) {
- setBorderWidth(((BasicStroke)
stroke).getLineWidth());
-
- final float[] dashArray = ((BasicStroke)
stroke).getDashArray();
-
- if ((dashArray != null) && (dashArray.length >
1)) {
- m_borderDash = dashArray[0];
- m_borderDash2 = dashArray[1];
- } else {
- m_borderDash = 0.0f;
- m_borderDash2 = 0.0f;
- }
-
- fixBorder();
- }
+ public void setBorder(final Stroke stroke) {
+ synchronized (graphView.m_lock) {
+ graphView.m_nodeDetails.overrideBorderStroke(model,
stroke);
+ graphView.m_contentChanged = true;
}
}
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/NodeViewDefaultSupport.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/NodeViewDefaultSupport.java
2012-08-31 23:55:06 UTC (rev 30309)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/ding/impl/NodeViewDefaultSupport.java
2012-09-01 01:36:46 UTC (rev 30310)
@@ -30,6 +30,7 @@
import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
+import java.awt.Stroke;
import org.cytoscape.ding.DNodeShape;
import org.cytoscape.ding.DVisualLexicon;
@@ -37,6 +38,7 @@
import org.cytoscape.view.model.VisualProperty;
import org.cytoscape.view.presentation.property.BasicVisualLexicon;
import org.cytoscape.view.presentation.property.NodeShapeVisualProperty;
+import org.cytoscape.view.presentation.property.values.LineType;
import org.cytoscape.view.presentation.property.values.NodeShape;
final class NodeViewDefaultSupport extends AbstractViewDefaultSupport {
@@ -64,6 +66,8 @@
setUnselectedPaint((Paint) value);
} else if (vp == DVisualLexicon.NODE_BORDER_PAINT) {
setBorderPaint((Paint) value);
+ } else if (vp == DVisualLexicon.NODE_BORDER_LINE_TYPE) {
+ setBorderLineType((LineType) value);
} else if (vp == DVisualLexicon.NODE_BORDER_TRANSPARENCY) {
setBorderTransparency(((Number) value).intValue());
} else if (vp == DVisualLexicon.NODE_BORDER_WIDTH) {
@@ -153,6 +157,12 @@
nodeDetails.setBorderWidthDefault(width);
}
}
+
+ void setBorderLineType(final LineType lineType) {
+ synchronized (lock) {
+ nodeDetails.setBorderLineTypeDefault(lineType);
+ }
+ }
void setTextPaint(Paint textPaint) {
synchronized (lock) {
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/immed/GraphGraphics.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/immed/GraphGraphics.java
2012-08-31 23:55:06 UTC (rev 30309)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/immed/GraphGraphics.java
2012-09-01 01:36:46 UTC (rev 30310)
@@ -170,16 +170,10 @@
*/
private static final double CURVE_ELLIPTICAL = (4.0d * (Math.sqrt(2.0d)
- 1.0d)) / 3.0d;
- /*
- * Added by kono: This is for returning shapes
- */
- private static final GraphGraphics dummyGraphics;
-
+ // Mapping from node to its border stroke object.
private static final Map<Float,Stroke> borderStrokes = new
HashMap<Float,Stroke>();
- static {
- dummyGraphics = new GraphGraphics(null, false);
-
+ static {
nodeShapes = new HashMap<Byte,NodeShape>();
nodeShapes.put(SHAPE_RECTANGLE, new RectangleNodeShape());
@@ -573,7 +567,7 @@
*/
public final void drawNodeFull(final byte nodeShape, final float xMin,
final float yMin, final float xMax, final float yMax,
- final Paint fillPaint, final float borderWidth,
+ final Paint fillPaint, final float borderWidth, final
Stroke borderStroke,
final Paint borderPaint) {
if (m_debug) {
checkDispatchThread();
@@ -597,9 +591,14 @@
final float off = borderWidth/2.0f; // border offset
final Shape sx =
getShape(nodeShape,xMin+off,yMin+off,xMax-off,yMax-off);
+ // Draw border only when width is not zero.
if (borderWidth > 0.0f) {
m_g2d.setPaint(borderPaint);
- m_g2d.setStroke(getStroke(borderWidth));
+ if(borderStroke != null)
+ m_g2d.setStroke(borderStroke);
+ else
+ m_g2d.setStroke(getStroke(borderWidth));
+
m_g2d.draw(sx);
}
@@ -2037,7 +2036,13 @@
m_g2d.setTransform(m_currNativeXform);
}
- private Stroke getStroke(float borderWidth) {
+ /**
+ * Create border stroke for given width value.
+ *
+ * @param borderWidth
+ * @return Actual node border stroke
+ */
+ private final Stroke getStroke(final float borderWidth) {
Stroke s = borderStrokes.get(borderWidth);
if ( s == null ) {
s = new BasicStroke(borderWidth);
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/stateful/GraphRenderer.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/stateful/GraphRenderer.java
2012-08-31 23:55:06 UTC (rev 30309)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/stateful/GraphRenderer.java
2012-09-01 01:36:46 UTC (rev 30310)
@@ -449,7 +449,7 @@
+ (anchorSize / 2.0d)),
(float) (floatBuff4[1]
+ (anchorSize / 2.0d)),
-
edgeDetails.getAnchorPaint(edge, k), 0.0f,
+
edgeDetails.getAnchorPaint(edge, k), 0.0f, null,
null);
}
}
@@ -1050,13 +1050,14 @@
// Compute node border information.
final float borderWidth;
final Paint borderPaint;
+ Stroke borserStroke = null;
if ((lodBits & LOD_NODE_BORDERS) == 0) { // Not
rendering borders.
borderWidth = 0.0f;
borderPaint = null;
} else { // Rendering node borders.
borderWidth =
nodeDetails.getBorderWidth(cyNode);
-
+ borserStroke =
nodeDetails.getBorderStroke(cyNode);
if (borderWidth == 0.0f)
borderPaint = null;
else
@@ -1064,7 +1065,7 @@
}
// Draw the node.
- grafx.drawNodeFull(shape, floatBuff1[0], floatBuff1[1],
floatBuff1[2], floatBuff1[3], fillPaint, borderWidth, borderPaint);
+ grafx.drawNodeFull(shape, floatBuff1[0], floatBuff1[1],
floatBuff1[2], floatBuff1[3], fillPaint, borderWidth, borserStroke,
borderPaint);
}
// Take care of custom graphic rendering.
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/stateful/NodeDetails.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/stateful/NodeDetails.java
2012-08-31 23:55:06 UTC (rev 30309)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/main/java/org/cytoscape/graph/render/stateful/NodeDetails.java
2012-09-01 01:36:46 UTC (rev 30310)
@@ -30,9 +30,11 @@
import org.cytoscape.graph.render.immed.GraphGraphics;
import org.cytoscape.model.CyNode;
+import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Paint;
+import java.awt.Stroke;
import java.awt.TexturePaint;
import java.util.ArrayList;
import java.util.HashMap;
@@ -125,6 +127,8 @@
* rightmost point with similar X coordinate.
*/
public static final byte LABEL_WRAP_JUSTIFY_RIGHT = 66;
+
+ private static final Stroke DEF_BORDER_STROKE = new BasicStroke(2.0f);
/**
* Hashmap which records selected state of nodes - information used by
@@ -174,6 +178,10 @@
public float getBorderWidth(final CyNode node) {
return 0.0f;
}
+
+ public Stroke getBorderStroke(final CyNode node) {
+ return DEF_BORDER_STROKE;
+ }
/**
* Returns the paint of the border of the node shape. By default this
method
Modified:
core3/impl/trunk/ding-impl/ding-presentation-impl/src/test/java/org/cytoscape/graph/render/immed/GraphGraphicsTest.java
===================================================================
---
core3/impl/trunk/ding-impl/ding-presentation-impl/src/test/java/org/cytoscape/graph/render/immed/GraphGraphicsTest.java
2012-08-31 23:55:06 UTC (rev 30309)
+++
core3/impl/trunk/ding-impl/ding-presentation-impl/src/test/java/org/cytoscape/graph/render/immed/GraphGraphicsTest.java
2012-09-01 01:36:46 UTC (rev 30310)
@@ -147,7 +147,7 @@
(x + (rand.nextFloat()
* nodeSizeFactor)),
(y + (rand.nextFloat()
* nodeSizeFactor)),
Color.blue,
- 1.0f + (i % 10),
+ 1.0f + (i % 10), null,
Color.yellow);
}
long end = System.nanoTime();
--
You received this message because you are subscribed to the Google Groups
"cytoscape-cvs" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/cytoscape-cvs?hl=en.