| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| (function($) { |
|
|
| var dotlen = 0.1; |
|
|
| $.jqplot.LinePattern = function (ctx, pattern) { |
|
|
| var defaultLinePatterns = { |
| dotted: [ dotlen, $.jqplot.config.dotGapLength ], |
| dashed: [ $.jqplot.config.dashLength, $.jqplot.config.gapLength ], |
| solid: null |
| }; |
|
|
| if (typeof pattern === 'string') { |
| if (pattern[0] === '.' || pattern[0] === '-') { |
| var s = pattern; |
| pattern = []; |
| for (var i=0, imax=s.length; i<imax; i++) { |
| if (s[i] === '.') { |
| pattern.push( dotlen ); |
| } |
| else if (s[i] === '-') { |
| pattern.push( $.jqplot.config.dashLength ); |
| } |
| else { |
| continue; |
| } |
| pattern.push( $.jqplot.config.gapLength ); |
| } |
| } |
| else { |
| pattern = defaultLinePatterns[pattern]; |
| } |
| } |
|
|
| if (!(pattern && pattern.length)) { |
| return ctx; |
| } |
|
|
| var patternIndex = 0; |
| var patternDistance = pattern[0]; |
| var px = 0; |
| var py = 0; |
| var pathx0 = 0; |
| var pathy0 = 0; |
|
|
| var moveTo = function (x, y) { |
| ctx.moveTo( x, y ); |
| px = x; |
| py = y; |
| pathx0 = x; |
| pathy0 = y; |
| }; |
|
|
| var lineTo = function (x, y) { |
| var scale = ctx.lineWidth; |
| var dx = x - px; |
| var dy = y - py; |
| var dist = Math.sqrt(dx*dx+dy*dy); |
| if ((dist > 0) && (scale > 0)) { |
| dx /= dist; |
| dy /= dist; |
| while (true) { |
| var dp = scale * patternDistance; |
| if (dp < dist) { |
| px += dp * dx; |
| py += dp * dy; |
| if ((patternIndex & 1) == 0) { |
| ctx.lineTo( px, py ); |
| } |
| else { |
| ctx.moveTo( px, py ); |
| } |
| dist -= dp; |
| patternIndex++; |
| if (patternIndex >= pattern.length) { |
| patternIndex = 0; |
| } |
| patternDistance = pattern[patternIndex]; |
| } |
| else { |
| px = x; |
| py = y; |
| if ((patternIndex & 1) == 0) { |
| ctx.lineTo( px, py ); |
| } |
| else { |
| ctx.moveTo( px, py ); |
| } |
| patternDistance -= dist / scale; |
| break; |
| } |
| } |
| } |
| }; |
|
|
| var beginPath = function () { |
| ctx.beginPath(); |
| }; |
|
|
| var closePath = function () { |
| lineTo( pathx0, pathy0 ); |
| }; |
|
|
| return { |
| moveTo: moveTo, |
| lineTo: lineTo, |
| beginPath: beginPath, |
| closePath: closePath |
| }; |
| }; |
| })(jQuery); |