Commits

zeratul2099 committed 1cb92e6

Added the multipleFillBetween-plugin. Similar to the fillBetween-option, it fills
the area between two series, but it can fill multiple areas.

  • Participants
  • Parent commits 48ae56e

Comments (0)

Files changed (1)

File src/plugins/jqplot.multipleFillBetween.js

+/**
+ * jqPlot
+ * Pure JavaScript plotting plugin using jQuery
+ *
+ * Version: 1.0.1
+ * Revision: 1098
+ *
+ * Copyright (c) 2009-2011 Chris Leonello
+ * jqPlot is currently available for use in all personal or commercial projects 
+ * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL 
+ * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can 
+ * choose the license that best suits your project and use it accordingly. 
+ *
+ * Although not required, the author would appreciate an email letting him 
+ * know of any substantial use of jqPlot.  You can reach the author at: 
+ * chris at jqplot dot com or see http://www.jqplot.com/info.php .
+ *
+ * If you are feeling kind and generous, consider supporting the project by
+ * making a donation at: http://www.jqplot.com/donate.php .
+ *
+ * sprintf functions contained in jqplot.sprintf.js by Ash Searle:
+ *
+ *     version 2007.04.27
+ *     author Ash Searle
+ *     http://hexmen.com/blog/2007/03/printf-sprintf/
+ *     http://hexmen.com/js/sprintf.js
+ *     The author (Ash Searle) has placed this code in the public domain:
+ *     "This code is unrestricted: you are free to use it however you like."
+ * 
+ */
+(function($) {
+    
+   
+    $.jqplot.MultipleFillBetween = function(options) {
+        // Group: Properties
+        //
+        //prop: show
+        this.show = $.jqplot.config.enablePlugins;
+        this.fillConfigs = [];
+
+        $.extend(true, this, options);
+    };
+    
+    $.jqplot.MultipleFillBetween.init = function (target, data, opts){
+        var options = opts || {};
+        this.plugins.multipleFillBetween = new $.jqplot.MultipleFillBetween(options.multipleFillBetween);
+    };
+    
+    
+    $.jqplot.MultipleFillBetween.postPlotDraw = function() {
+        for (idx in this.plugins.multipleFillBetween.fillConfigs) {
+            var fb = this.plugins.multipleFillBetween.fillConfigs[idx];
+            var sid1 = fb.series1;
+            var sid2 = fb.series2;
+            // first series should always be lowest index
+            var id1 = (sid1 < sid2) ? sid1 : sid2;
+            var id2 = (sid2 >  sid1) ? sid2 : sid1;
+
+            var series1 = this.series[id1];
+            var series2 = this.series[id2];
+            if (series2.renderer.smooth) {
+                var tempgd = series2.renderer._smoothedData.slice(0).reverse();
+            }
+            else {
+                var tempgd = series2.gridData.slice(0).reverse();
+            }
+
+            if (series1.renderer.smooth) {
+                var gd = series1.renderer._smoothedData.concat(tempgd);
+            }
+            else {
+                var gd = series1.gridData.concat(tempgd);
+            }
+
+            var color = (fb.color !== null) ? fb.color : this.series[sid1].fillColor;
+            var baseSeries = (fb.baseSeries !== null) ? fb.baseSeries : id1;
+
+            // now apply a fill to the shape on the lower series shadow canvas,
+            // so it is behind both series.
+            var sr = this.series[baseSeries].renderer.shapeRenderer;
+            var opts = {fillStyle: color, fill: true, closePath: true};
+            sr.draw(series1.shadowCanvas._ctx, gd, opts);
+        };
+    };
+    
+    $.jqplot.preInitHooks.push($.jqplot.MultipleFillBetween.init);
+    $.jqplot.postDrawHooks.push($.jqplot.MultipleFillBetween.postPlotDraw);
+    
+
+    
+
+})(jQuery);