From fb3fbb51a86ec4182bf2ecf02dd123cb31168c74 Mon Sep 17 00:00:00 2001 From: onealj Date: Tue, 7 Apr 2015 19:05:04 -0700 Subject: [PATCH 1/3] Add parseDashPattern method --- src/com/mxgraph/util/mxUtils.java | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/com/mxgraph/util/mxUtils.java b/src/com/mxgraph/util/mxUtils.java index 19abff6b0..ed23439ef 100644 --- a/src/com/mxgraph/util/mxUtils.java +++ b/src/com/mxgraph/util/mxUtils.java @@ -1715,6 +1715,36 @@ public static String getHexColorString(Color color) { return mxHtmlColor.getHexColorString(color); } + + /** + * Convert a string representing a dash pattern into a float array. + * A valid dash pattern is a string of dash widths (floating point values) + * separated by space characters. + * + * @param dashPatternString + * the string representing the dash pattern + * @return float[] + * @exception NumberFormatException + * if any of the dash widths cannot be interpreted as a + * floating point number + */ + public static float[] parseDashPattern(String dashPatternString) + throws NumberFormatException + { + if (value != null && value.length() > 0) + { + String[] tokens = dashPatternString.split(" "); + float[] dashpattern = new float[tokens.length]; + + for (int i = 0; i < tokens.length; i++) + { + dashpattern[i] = (float) (Float.parseFloat(tokens[i])); + } + + return dashpattern; + } + return null; + } /** * Reads the given filename into a string. From 0b0be632fd1b2583ad5a96d1b7d58cacf16f08f8 Mon Sep 17 00:00:00 2001 From: onealj Date: Tue, 7 Apr 2015 19:07:12 -0700 Subject: [PATCH 2/3] Updated setDashPattern to use mxUtils.parseDashPattern --- src/com/mxgraph/canvas/mxGraphicsCanvas2D.java | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/com/mxgraph/canvas/mxGraphicsCanvas2D.java b/src/com/mxgraph/canvas/mxGraphicsCanvas2D.java index 328936845..710b4f9b6 100644 --- a/src/com/mxgraph/canvas/mxGraphicsCanvas2D.java +++ b/src/com/mxgraph/canvas/mxGraphicsCanvas2D.java @@ -352,15 +352,7 @@ public void setDashPattern(String value) { if (value != null && value.length() > 0) { - String[] tokens = value.split(" "); - float[] dashpattern = new float[tokens.length]; - - for (int i = 0; i < tokens.length; i++) - { - dashpattern[i] = (float) (Float.parseFloat(tokens[i])); - } - - state.dashPattern = dashpattern; + state.dashPattern = mxUtils.parseDashPattern(value); } } From 7c3e2c9532bb0e800f0b1befbf81232c86a1d8e7 Mon Sep 17 00:00:00 2001 From: onealj Date: Tue, 7 Apr 2015 19:34:46 -0700 Subject: [PATCH 3/3] Dash widths must be positive The canvas freezes if a stroke with negative length is created. --- src/com/mxgraph/util/mxUtils.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/com/mxgraph/util/mxUtils.java b/src/com/mxgraph/util/mxUtils.java index ed23439ef..90c65d7c1 100644 --- a/src/com/mxgraph/util/mxUtils.java +++ b/src/com/mxgraph/util/mxUtils.java @@ -1731,14 +1731,23 @@ public static String getHexColorString(Color color) public static float[] parseDashPattern(String dashPatternString) throws NumberFormatException { - if (value != null && value.length() > 0) + if (dashPatternString != null && dashPatternString.length() > 0) { String[] tokens = dashPatternString.split(" "); float[] dashpattern = new float[tokens.length]; + float dashWidth; for (int i = 0; i < tokens.length; i++) { - dashpattern[i] = (float) (Float.parseFloat(tokens[i])); + dashWidth = (float) (Float.parseFloat(tokens[i])); + if (dashWidth > 0) + { + dashpattern[i] = dashWidth; + } + else + { + throw NumberFormatException("Dash width must be positive"); + } } return dashpattern;