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.

Reply via email to