summaryrefslogtreecommitdiff
path: root/js/dojo-1.6/dojox/gfx/gradutils.xd.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/dojo-1.6/dojox/gfx/gradutils.xd.js')
-rw-r--r--js/dojo-1.6/dojox/gfx/gradutils.xd.js107
1 files changed, 107 insertions, 0 deletions
diff --git a/js/dojo-1.6/dojox/gfx/gradutils.xd.js b/js/dojo-1.6/dojox/gfx/gradutils.xd.js
new file mode 100644
index 0000000..c054a7f
--- /dev/null
+++ b/js/dojo-1.6/dojox/gfx/gradutils.xd.js
@@ -0,0 +1,107 @@
+/*
+ Copyright (c) 2004-2011, The Dojo Foundation All Rights Reserved.
+ Available via Academic Free License >= 2.1 OR the modified BSD license.
+ see: http://dojotoolkit.org/license for details
+*/
+
+
+dojo._xdResourceLoaded(function(dojo, dijit, dojox){
+return {depends: [["provide", "dojox.gfx.gradutils"],
+["require", "dojox.gfx.matrix"]],
+defineResource: function(dojo, dijit, dojox){if(!dojo._hasResource["dojox.gfx.gradutils"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
+dojo._hasResource["dojox.gfx.gradutils"] = true;
+dojo.provide("dojox.gfx.gradutils");
+
+dojo.require("dojox.gfx.matrix");
+
+// Various generic utilities to deal with a linear gradient
+
+(function(){
+ var d = dojo, m = dojox.gfx.matrix, C = d.Color;
+
+ function findColor(o, c){
+ if(o <= 0){
+ return c[0].color;
+ }
+ var len = c.length;
+ if(o >= 1){
+ return c[len - 1].color;
+ }
+ //TODO: use binary search
+ for(var i = 0; i < len; ++i){
+ var stop = c[i];
+ if(stop.offset >= o){
+ if(i){
+ var prev = c[i - 1];
+ return d.blendColors(new C(prev.color), new C(stop.color),
+ (o - prev.offset) / (stop.offset - prev.offset));
+ }
+ return stop.color;
+ }
+ }
+ return c[len - 1].color;
+ }
+
+ dojox.gfx.gradutils.getColor = function(fill, pt){
+ // summary:
+ // sample a color from a gradient using a point
+ // fill: Object:
+ // fill object
+ // pt: dojox.gfx.Point:
+ // point where to sample a color
+ var o;
+ if(fill){
+ switch(fill.type){
+ case "linear":
+ var angle = Math.atan2(fill.y2 - fill.y1, fill.x2 - fill.x1),
+ rotation = m.rotate(-angle),
+ projection = m.project(fill.x2 - fill.x1, fill.y2 - fill.y1),
+ p = m.multiplyPoint(projection, pt),
+ pf1 = m.multiplyPoint(projection, fill.x1, fill.y1),
+ pf2 = m.multiplyPoint(projection, fill.x2, fill.y2),
+ scale = m.multiplyPoint(rotation, pf2.x - pf1.x, pf2.y - pf1.y).x,
+ o = m.multiplyPoint(rotation, p.x - pf1.x, p.y - pf1.y).x / scale;
+ break;
+ case "radial":
+ var dx = pt.x - fill.cx, dy = pt.y - fill.cy,
+ o = Math.sqrt(dx * dx + dy * dy) / fill.r;
+ break;
+ }
+ return findColor(o, fill.colors); // dojo.Color
+ }
+ // simple color
+ return new C(fill || [0, 0, 0, 0]); // dojo.Color
+ };
+
+ dojox.gfx.gradutils.reverse = function(fill){
+ // summary:
+ // reverses a gradient
+ // fill: Object:
+ // fill object
+ if(fill){
+ switch(fill.type){
+ case "linear":
+ case "radial":
+ fill = dojo.delegate(fill);
+ if(fill.colors){
+ var c = fill.colors, l = c.length, i = 0, stop,
+ n = fill.colors = new Array(c.length);
+ for(; i < l; ++i){
+ stop = c[i];
+ n[i] = {
+ offset: 1 - stop.offset,
+ color: stop.color
+ };
+ }
+ n.sort(function(a, b){ return a.offset - b.offset; });
+ }
+ break;
+ }
+ }
+ return fill; // Object
+ };
+})();
+
+}
+
+}};});