From: Robert Konigsberg Date: Wed, 22 Feb 2012 14:39:38 +0000 (-0500) Subject: Merge http://github.com/danvk/dygraphs into custom-points X-Git-Tag: v1.0.0~323^2~8 X-Git-Url: https://adrianiainlam.tk/git/?a=commitdiff_plain;h=2996a18eb00729b2624d8d75e8d24b056c5732bc;p=dygraphs.git Merge github.com/danvk/dygraphs into custom-points Conflicts: dygraph-canvas.js dygraph-utils.js --- 2996a18eb00729b2624d8d75e8d24b056c5732bc diff --cc dygraph-canvas.js index caa4a37,9b2be25..caf4049 --- a/dygraph-canvas.js +++ b/dygraph-canvas.js @@@ -839,11 -835,10 +836,15 @@@ DygraphCanvasRenderer.prototype._render prevX = null; prevY = null; var drawPoints = this.dygraph_.attr_("drawPoints", setName); + var drawPointCallback = this.dygraph_.attr_("drawPointCallback", setName); + if (!drawPointCallback) { + drawPointCallback = Dygraph.Circles.DEFAULT; + } + var pointsOnLine = []; // Array of [canvasx, canvasy] pairs. + var strokePattern = this.dygraph_.attr_("strokePattern", setName); + if (!Dygraph.isArrayLike(strokePattern)) { + strokePattern = null; + } for (j = firstIndexInSet; j < afterLastIndexInSet; j++) { point = points[j]; if (isNullOrNaN(point.canvasy)) { diff --cc dygraph-utils.js index 0ae3f08,5a21430..9f4fcb0 --- a/dygraph-utils.js +++ b/dygraph-utils.js @@@ -778,69 -783,25 +785,92 @@@ Dygraph.isPixelChangingOptionList = fun return requiresNewPoints; }; + /** + * Compares two arrays to see if they are equal. If either parameter is not an + * array it will return false. Does a shallow compare + * Dygraph.compareArrays([[1,2], [3, 4]], [[1,2], [3,4]]) === false. + * @param array1 first array + * @param array2 second array + * @return True if both parameters are arrays, and contents are equal. + */ + Dygraph.compareArrays = function(array1, array2) { + if (!Dygraph.isArrayLike(array1) || !Dygraph.isArrayLike(array2)) { + return false; + } + if (array1.length !== array2.length) { + return false; + } + for (var i = 0; i < array1.length; i++) { + if (array1[i] !== array2[i]) { + return false; + } + } + return true; + }; ++ + +Dygraph.RegularConvex = function(sides, rotation) { + this.sides = sides; + this.rotation = rotation ? rotation : 0; + this.delta = Math.PI * 2 / sides; +} + +Dygraph.RegularConvex.prototype.draw = function(ctx, cx, cy, radius, angleAdjustment) { + ctx.beginPath(); + var first = true; + if (!angleAdjustment) angleAdjustment = 0; + var angle = this.rotation + angleAdjustment; + + var x = cx + (Math.sin(angle) * radius); + var y = cy + (-Math.cos(angle) * radius); + ctx.moveTo(x, y); + + for (var idx = 0; idx < this.sides; idx++) { + angle = (idx == this.sides - 1) ? this.rotation : (angle + this.delta); + var x = cx + (Math.sin(angle) * radius); + var y = cy + (-Math.cos(angle) * radius); + ctx.lineTo(x, y); + } + ctx.stroke(); + ctx.closePath(); +} + +Dygraph.DrawPolygon_ = function(sides, rotation, ctx, cx, cy, color, radius, angleAdjustment) { + ctx.lineWidth = 1; + ctx.strokeStyle = color; + new Dygraph.RegularConvex(sides, rotation).draw(ctx, cx, cy, radius, angleAdjustment); +} + +Dygraph.Circles = { + DEFAULT : function(g, name, ctx, canvasx, canvasy, color, radius) { + ctx.beginPath(); + ctx.fillStyle = color; + ctx.arc(canvasx, canvasy, radius, 0, 2 * Math.PI, false); + ctx.fill(); + }, + TRIANGLE : function(g, name, ctx, cx, cy, color, radius) { + Dygraph.DrawPolygon_(3, Math.PI / 3, ctx, cx, cy, color, radius); + }, + SQUARE : function(g, name, ctx, cx, cy, color, radius) { + Dygraph.DrawPolygon_(4, Math.PI / 4, ctx, cx, cy, color, radius); + }, + DIAMOND : function(g, name, ctx, cx, cy, color, radius) { + Dygraph.DrawPolygon_(4, Math.PI / 4, ctx, cx, cy, color, radius, Math.PI / 8); + }, + PENTAGON : function(g, name, ctx, cx, cy, color, radius) { + Dygraph.DrawPolygon_(5, Math.PI / 5, ctx, cx, cy, color, radius); + }, + HEXAGON : function(g, name, ctx, cx, cy, color, radius) { + Dygraph.DrawPolygon_(6, Math.PI / 6, ctx, cx, cy, color, radius); + }, + CIRCLE : function(g, name, ctx, cx, cy, color, radius) { + ctx.beginPath(); + ctx.lineStyle = color; + ctx.arc(cx, cy, radius, 0, 2 * Math.PI, false); + ctx.fill(); + }, + STAR : function(g, name, ctx, cx, cy, color, radius) { + Dygraph.DrawPolygon_(5, 2 * Math.PI / 5, ctx, cx, cy, color, radius); + } + // TODO: plus, x. +};