| dojo.provide("dojo.gfx.color.hsl"); |
| dojo.require("dojo.lang.array"); |
| dojo.lang.extend(dojo.gfx.color.Color,{toHsl:function(){ |
| return dojo.gfx.color.rgb2hsl(this.toRgb()); |
| }}); |
| dojo.gfx.color.rgb2hsl=function(r,g,b){ |
| if(dojo.lang.isArray(r)){ |
| b=r[2]||0; |
| g=r[1]||0; |
| r=r[0]||0; |
| } |
| r/=255; |
| g/=255; |
| b/=255; |
| var h=null; |
| var s=null; |
| var l=null; |
| var _7=Math.min(r,g,b); |
| var _8=Math.max(r,g,b); |
| var _9=_8-_7; |
| l=(_7+_8)/2; |
| s=0; |
| if((l>0)&&(l<1)){ |
| s=_9/((l<0.5)?(2*l):(2-2*l)); |
| } |
| h=0; |
| if(_9>0){ |
| if((_8==r)&&(_8!=g)){ |
| h+=(g-b)/_9; |
| } |
| if((_8==g)&&(_8!=b)){ |
| h+=(2+(b-r)/_9); |
| } |
| if((_8==b)&&(_8!=r)){ |
| h+=(4+(r-g)/_9); |
| } |
| h*=60; |
| } |
| h=(h==0)?360:Math.ceil((h/360)*255); |
| s=Math.ceil(s*255); |
| l=Math.ceil(l*255); |
| return [h,s,l]; |
| }; |
| dojo.gfx.color.hsl2rgb=function(h,s,l){ |
| if(dojo.lang.isArray(h)){ |
| l=h[2]||0; |
| s=h[1]||0; |
| h=h[0]||0; |
| } |
| h=(h/255)*360; |
| if(h==360){ |
| h=0; |
| } |
| s=s/255; |
| l=l/255; |
| while(h<0){ |
| h+=360; |
| } |
| while(h>360){ |
| h-=360; |
| } |
| var r,g,b; |
| if(h<120){ |
| r=(120-h)/60; |
| g=h/60; |
| b=0; |
| }else{ |
| if(h<240){ |
| r=0; |
| g=(240-h)/60; |
| b=(h-120)/60; |
| }else{ |
| r=(h-240)/60; |
| g=0; |
| b=(360-h)/60; |
| } |
| } |
| r=Math.min(r,1); |
| g=Math.min(g,1); |
| b=Math.min(b,1); |
| r=2*s*r+(1-s); |
| g=2*s*g+(1-s); |
| b=2*s*b+(1-s); |
| if(l<0.5){ |
| r=l*r; |
| g=l*g; |
| b=l*b; |
| }else{ |
| r=(1-l)*r+2*l-1; |
| g=(1-l)*g+2*l-1; |
| b=(1-l)*b+2*l-1; |
| } |
| r=Math.ceil(r*255); |
| g=Math.ceil(g*255); |
| b=Math.ceil(b*255); |
| return [r,g,b]; |
| }; |
| dojo.gfx.color.hsl2hex=function(h,s,l){ |
| var rgb=dojo.gfx.color.hsl2rgb(h,s,l); |
| return dojo.gfx.color.rgb2hex(rgb[0],rgb[1],rgb[2]); |
| }; |
| dojo.gfx.color.hex2hsl=function(hex){ |
| var rgb=dojo.gfx.color.hex2rgb(hex); |
| return dojo.gfx.color.rgb2hsl(rgb[0],rgb[1],rgb[2]); |
| }; |