summaryrefslogtreecommitdiff
path: root/src/js/shape/mxPolyline.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/js/shape/mxPolyline.js')
-rw-r--r--src/js/shape/mxPolyline.js146
1 files changed, 146 insertions, 0 deletions
diff --git a/src/js/shape/mxPolyline.js b/src/js/shape/mxPolyline.js
new file mode 100644
index 0000000..2d64323
--- /dev/null
+++ b/src/js/shape/mxPolyline.js
@@ -0,0 +1,146 @@
+/**
+ * $Id: mxPolyline.js,v 1.31 2012-05-24 12:00:45 gaudenz Exp $
+ * Copyright (c) 2006-2010, JGraph Ltd
+ */
+/**
+ * Class: mxPolyline
+ *
+ * Extends <mxShape> to implement a polyline (a line with multiple points).
+ * This shape is registered under <mxConstants.SHAPE_POLYLINE> in
+ * <mxCellRenderer>.
+ *
+ * Constructor: mxPolyline
+ *
+ * Constructs a new polyline shape.
+ *
+ * Parameters:
+ *
+ * points - Array of <mxPoints> that define the points. This is stored in
+ * <mxShape.points>.
+ * stroke - String that defines the stroke color. Default is 'black'. This is
+ * stored in <stroke>.
+ * strokewidth - Optional integer that defines the stroke width. Default is
+ * 1. This is stored in <strokewidth>.
+ */
+function mxPolyline(points, stroke, strokewidth)
+{
+ this.points = points;
+ this.stroke = stroke;
+ this.strokewidth = (strokewidth != null) ? strokewidth : 1;
+};
+
+/**
+ * Extends mxShape.
+ */
+mxPolyline.prototype = new mxShape();
+mxPolyline.prototype.constructor = mxPolyline;
+
+/**
+ * Variable: addPipe
+ *
+ * Specifies if a SVG path should be created around any path to increase the
+ * tolerance for mouse events. Default is false since this shape is filled.
+ */
+mxPolyline.prototype.addPipe = true;
+
+/**
+ * Function: create
+ *
+ * Override to create HTML regardless of gradient and
+ * rounded property.
+ */
+mxPolyline.prototype.create = function()
+{
+ var node = null;
+
+ if (this.dialect == mxConstants.DIALECT_SVG)
+ {
+ node = this.createSvg();
+ }
+ else if (this.dialect == mxConstants.DIALECT_STRICTHTML ||
+ (this.dialect == mxConstants.DIALECT_PREFERHTML &&
+ this.points != null && this.points.length > 0))
+ {
+ node = document.createElement('DIV');
+ this.configureHtmlShape(node);
+ node.style.borderStyle = '';
+ node.style.background = '';
+ }
+ else
+ {
+ node = document.createElement('v:shape');
+ this.configureVmlShape(node);
+ var strokeNode = document.createElement('v:stroke');
+
+ if (this.opacity != null)
+ {
+ strokeNode.opacity = this.opacity + '%';
+ }
+
+ node.appendChild(strokeNode);
+ }
+
+ return node;
+};
+
+/**
+ * Function: redrawVml
+ *
+ * Overrides the method to update the bounds if they have not been
+ * assigned.
+ */
+mxPolyline.prototype.redrawVml = function()
+{
+ // Updates the bounds based on the points
+ if (this.points != null && this.points.length > 0 && this.points[0] != null)
+ {
+ this.bounds = new mxRectangle(this.points[0].x,this.points[0].y, 0, 0);
+
+ for (var i = 1; i < this.points.length; i++)
+ {
+ this.bounds.add(new mxRectangle(this.points[i].x,this.points[i].y, 0, 0));
+ }
+ }
+
+ mxShape.prototype.redrawVml.apply(this, arguments);
+};
+
+/**
+ * Function: createSvg
+ *
+ * Creates and returns the SVG node(s) to represent this shape.
+ */
+mxPolyline.prototype.createSvg = function()
+{
+ var g = this.createSvgGroup('path');
+
+ // Creates an invisible shape around the path for easier
+ // selection with the mouse. Note: Firefox does not ignore
+ // the value of the stroke attribute for pointer-events: stroke,
+ // it does, however, ignore the visibility attribute.
+ if (this.addPipe)
+ {
+ this.pipe = this.createSvgPipe();
+ g.appendChild(this.pipe);
+ }
+
+ return g;
+};
+
+/**
+ * Function: redrawSvg
+ *
+ * Updates the SVG node(s) to reflect the latest bounds and scale.
+ */
+mxPolyline.prototype.redrawSvg = function()
+{
+ this.updateSvgShape(this.innerNode);
+ var d = this.innerNode.getAttribute('d');
+
+ if (d != null && this.pipe != null)
+ {
+ this.pipe.setAttribute('d', d);
+ var strokeWidth = Math.round(Math.max(1, this.strokewidth * this.scale));
+ this.pipe.setAttribute('stroke-width', strokeWidth + mxShape.prototype.SVG_STROKE_TOLERANCE);
+ }
+};