Index: openacs-4/packages/acs-templating/www/resources/xinha-nightly/plugins/ImageManager/assets/wz_jsgraphics.js =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-templating/www/resources/xinha-nightly/plugins/ImageManager/assets/wz_jsgraphics.js,v diff -u -r1.6 -r1.7 --- openacs-4/packages/acs-templating/www/resources/xinha-nightly/plugins/ImageManager/assets/wz_jsgraphics.js 27 Mar 2009 08:20:44 -0000 1.6 +++ openacs-4/packages/acs-templating/www/resources/xinha-nightly/plugins/ImageManager/assets/wz_jsgraphics.js 23 May 2010 11:58:33 -0000 1.7 @@ -1,3 +1,921 @@ -/* This compressed file is part of Xinha. For uncompressed sources, forum, and bug reports, go to xinha.org */ -/* This file is part of version 0.96beta2 released Fri, 20 Mar 2009 11:01:14 +0100 */ -var jg_ihtm,jg_ie,jg_dom,jg_n4=(document.layers&&typeof document.classes!="undefined");function chkDHTM(a,b){a=document.body||null;jg_ie=(a&&typeof a.insertAdjacentHTML!="undefined");jg_dom=(a&&!jg_ie&&typeof a.appendChild!="undefined"&&typeof document.createRange!="undefined"&&typeof(b=document.createRange()).setStartBefore!="undefined"&&typeof b.createContextualFragment!="undefined");jg_ihtm=(!jg_ie&&!jg_dom&&a&&typeof a.innerHTML!="undefined")}function pntDoc(){this.wnd.document.write(this.htm);this.htm=""}function pntCnvDom(){var a=document.createRange();a.setStartBefore(this.cnv);a=a.createContextualFragment(this.htm);this.cnv.appendChild(a);this.htm=""}function pntCnvIe(){this.cnv.insertAdjacentHTML("BeforeEnd",this.htm);this.htm=""}function pntCnvIhtm(){this.cnv.innerHTML+=this.htm;this.htm=""}function pntCnv(){this.htm=""}function mkDiv(a,d,b,c){this.htm+='
'}function mkDivPrint(a,d,b,c){this.htm+='
'}function mkLyr(a,d,b,c){this.htm+='\n'}function mkLbl(b,a,c){this.htm+='
'+b+"
"}function mkLin(e,m,b,k){if(e>b){var j=b;var g=k;b=e;k=m;e=j;m=g}var q=b-e,o=Math.abs(k-m),l=e,i=m,n=(m>k)?-1:1;if(q>=o){var a=o<<1,h=a-(q<<1),d=a-q,f=l;while((q--)>0){++l;if(d>0){this.mkDiv(f,i,l-f,1);i+=n;d+=h;f=l}else{d+=a}}this.mkDiv(f,i,b-f+1,1)}else{var a=q<<1,h=a-(o<<1),d=a-o,c=i;if(k<=m){while((o--)>0){if(d>0){this.mkDiv(l++,i,1,c-i+1);i+=n;d+=h;c=i}else{i+=n;d+=a}}this.mkDiv(b,k,1,c-k+1)}else{while((o--)>0){i+=n;if(d>0){this.mkDiv(l++,c,1,i-c);d+=h;c=i}else{d+=a}}this.mkDiv(b,c,1,k-c+1)}}}function mkLin2D(r,b,q,a){if(r>q){var f=q;var n=a;q=r;a=b;r=f;b=n}var j=q-r,i=Math.abs(a-b),h=r,g=b,m=(b>a)?-1:1;var k=this.stroke;if(j>=i){if(k-3>0){var t=(k*j*Math.sqrt(1+i*i/(j*j))-j-(k>>1)*i)/j;t=(!(k-4)?Math.ceil(t):Math.round(t))+1}else{var t=k}var u=Math.ceil(k/2);var o=i<<1,e=o-(j<<1),l=o-j,d=h;while((j--)>0){++h;if(l>0){this.mkDiv(d,g,h-d+u,t);g+=m;l+=e;d=h}else{l+=o}}this.mkDiv(d,g,q-d+u+1,t)}else{if(k-3>0){var t=(k*i*Math.sqrt(1+j*j/(i*i))-(k>>1)*j-i)/i;t=(!(k-4)?Math.ceil(t):Math.round(t))+1}else{var t=k}var u=Math.round(k/2);var o=j<<1,e=o-(i<<1),l=o-i,c=g;if(a<=b){++u;while((i--)>0){if(l>0){this.mkDiv(h++,g,t,c-g+u);g+=m;l+=e;c=g}else{g+=m;l+=o}}this.mkDiv(q,a,t,c-a+u)}else{while((i--)>0){g+=m;if(l>0){this.mkDiv(h++,c,t,g-c+u);l+=e;c=g}else{l+=o}}this.mkDiv(q,c,t,a-c+u+1)}}}function mkLinDott(d,k,b,i){if(d>b){var h=b;var e=i;b=d;i=k;d=h;k=e}var o=b-d,n=Math.abs(i-k),j=d,g=k,m=(k>i)?-1:1,l=true;if(o>=n){var a=n<<1,f=a-(o<<1),c=a-o;while((o--)>0){if(l){this.mkDiv(j,g,1,1)}l=!l;if(c>0){g+=m;c+=f}else{c+=a}++j}if(l){this.mkDiv(j,g,1,1)}}else{var a=o<<1,f=a-(n<<1),c=a-n;while((n--)>0){if(l){this.mkDiv(j,g,1,1)}l=!l;g+=m;if(c>0){++j;c+=f}else{c+=a}}if(l){this.mkDiv(j,g,1,1)}}}function mkOv(g,p,r,q){var v=r>>1,u=q>>1,o=r&1,f=(q&1)+1,e=g+v,d=p+u,m=0,l=u,j=0,i=u,z=(v*v)<<1,k=(u*u)<<1,s=(z>>1)*(1-(u<<1))+k,c=(k>>1)-z*((u<<1)-1),n,t;while(l>0){if(s<0){s+=k*((m<<1)+3);c+=(k<<1)*(++m)}else{if(c<0){s+=k*((m<<1)+3)-(z<<1)*(l-1);c+=(k<<1)*(++m)-z*(((l--)<<1)-3);n=m-j;t=i-l;if(n&2&&t&2){this.mkOvQds(e,d,-m+2,j+o,-i,i-1+f,1,1);this.mkOvQds(e,d,-m+1,m-1+o,-l-1,l+f,1,1)}else{this.mkOvQds(e,d,-m+1,j+o,-i,i-t+f,n,t)}j=m;i=l}else{c-=z*((l<<1)-3);s-=(z<<1)*(--l)}}}this.mkDiv(e-v,d-i,v-j+1,(i<<1)+f);this.mkDiv(e+j+o,d-i,v-j+1,(i<<1)+f)}function mkOv2D(e,f,c,d){var G=this.stroke;c+=G-1;d+=G-1;var R=c>>1,P=d>>1,O=c&1,z=(d&1)+1,o=e+R,n=f+P,E=0,B=P,k=(R*R)<<1,U=(P*P)<<1,g=(k>>1)*(1-(P<<1))+U,N=(U>>1)-k*((P<<1)-1);if(G-4<0&&(!(G-2)||c-51>0&&d-51>0)){var r=0,q=P,F,L,D,v,u,I,t;while(B>0){if(g<0){g+=U*((E<<1)+3);N+=(U<<1)*(++E)}else{if(N<0){g+=U*((E<<1)+3)-(k<<1)*(B-1);N+=(U<<1)*(++E)-k*(((B--)<<1)-3);F=E-r;L=q-B;if(F-1){t=F+1+(G&1);L=G}else{if(L-1){t=G;L+=1+(G&1)}else{t=L=G}}this.mkOvQds(o,n,-E+1,r-t+F+O,-q,-L+q+z,t,L);r=E;q=B}else{N-=k*((B<<1)-3);g-=(k<<1)*(--B)}}}this.mkDiv(o-R,n-q,G,(q<<1)+z);this.mkDiv(o+R+O-G+1,n-q,G,(q<<1)+z)}else{var S=(c-((G-1)<<1))>>1,Q=(d-((G-1)<<1))>>1,C=0,A=Q,m=(S*S)<<1,T=(Q*Q)<<1,j=(m>>1)*(1-(Q<<1))+T,M=(T>>1)-m*((Q<<1)-1),D=new Array(),u=new Array(),H=new Array();D[0]=0;u[0]=P;H[0]=Q-1;while(B>0){if(g<0){g+=U*((E<<1)+3);N+=(U<<1)*(++E);D[D.length]=E;u[u.length]=B}else{if(N<0){g+=U*((E<<1)+3)-(k<<1)*(B-1);N+=(U<<1)*(++E)-k*(((B--)<<1)-3);D[D.length]=E;u[u.length]=B}else{N-=k*((B<<1)-3);g-=(k<<1)*(--B)}}if(A>0){if(j<0){j+=T*((C<<1)+3);M+=(T<<1)*(++C);H[H.length]=A-1}else{if(M<0){j+=T*((C<<1)+3)-(m<<1)*(A-1);M+=(T<<1)*(++C)-m*(((A--)<<1)-3);H[H.length]=A-1}else{M-=m*((A<<1)-3);j-=(m<<1)*(--A);H[H.length-1]--}}}}var r=0,q=P,p=H[0],J=D.length,F,L;for(var K=0;K>1,s=o>>1,k=q&1,f=o&1,e=g+t,d=l+s,j=0,i=s,p=(t*t)<<1,m=p<<1,h=(s*s)<<1,r=(p>>1)*(1-(s<<1))+h,c=(h>>1)-p*((s<<1)-1),n=true;while(i>0){if(r<0){r+=h*((j<<1)+3);c+=(h<<1)*(++j)}else{if(c<0){r+=h*((j<<1)+3)-m*(i-1);c+=(h<<1)*(++j)-p*(((i--)<<1)-3)}else{c-=p*((i<<1)-3);r-=m*(--i)}}if(n){this.mkOvQds(e,d,-j,j+k,-i,i+f,1,1)}n=!n}}function mkRect(a,e,b,d){var c=this.stroke;this.mkDiv(a,e,b,c);this.mkDiv(a+b,e,c,d);this.mkDiv(a,e+d,b+c,c);this.mkDiv(a,e+c,c,d-c)}function mkRectDott(a,d,b,c){this.drawLine(a,d,a+b,d);this.drawLine(a+b,d,a+b,d+c);this.drawLine(a,d+c,a+b,d+c);this.drawLine(a,d,a,d+c)}function jsgFont(){this.PLAIN="font-weight:normal;";this.BOLD="font-weight:bold;";this.ITALIC="font-style:italic;";this.ITALIC_BOLD=this.ITALIC+this.BOLD;this.BOLD_ITALIC=this.ITALIC_BOLD}var Font=new jsgFont();function jsgStroke(){this.DOTTED=-1}var Stroke=new jsgStroke();function jsGraphics(b,a){this.setColor=new Function("arg","this.color = arg;");this.getColor=new Function("return this.color");this.setStroke=function(c){this.stroke=c;if(!(c+1)){this.drawLine=mkLinDott;this.mkOv=mkOvDott;this.drawRect=mkRectDott}else{if(c-1>0){this.drawLine=mkLin2D;this.mkOv=mkOv2D;this.drawRect=mkRect}else{this.drawLine=mkLin;this.mkOv=mkOv;this.drawRect=mkRect}}};this.setPrintable=function(c){this.printable=c;this.mkDiv=jg_n4?mkLyr:c?mkDivPrint:mkDiv};this.setFont=function(d,e,c){this.ftFam=d;this.ftSz=e;this.ftSty=c||Font.PLAIN};this.drawPolyline=this.drawPolyLine=function(c,f,e){var d=c.length-1;while(d>=0){this.drawLine(c[d],f[d],c[--d],f[d])}};this.fillRect=function(c,f,d,e){this.mkDiv(c,f,d,e)};this.fillRectPattern=function(c,g,d,f,e){this.htm+='
"};this.drawHandle=function(c,g,d,e,f){this.htm+='
'};this.drawHandleBox=function(c,g,d,e,f){this.htm+='
'};this.drawPolygon=function(c,d){this.drawPolyline(c,d);this.drawLine(c[c.length-1],d[c.length-1],c[0],d[0])};this.drawEllipse=this.drawOval=function(c,f,d,e){this.mkOv(c,f,d,e)};this.fillEllipse=this.fillOval=function(g,r,n,v){var B=(n-=1)>>1,A=(v-=1)>>1,o=(n&1)+1,f=(v&1)+1,e=g+B,d=r+A,m=0,l=A,j=0,i=A,t=(B*B)<<1,s=t<<1,k=(A*A)<<1,u=(t>>1)*(1-(A<<1))+k,c=(k>>1)-t*((A<<1)-1),q,p,z;if(n+1){while(l>0){if(u<0){u+=k*((m<<1)+3);c+=(k<<1)*(++m)}else{if(c<0){u+=k*((m<<1)+3)-s*(l-1);q=e-m;p=(m<<1)+o;c+=(k<<1)*(++m)-t*(((l--)<<1)-3);z=i-l;this.mkDiv(q,d-i,p,z);this.mkDiv(q,d+i-z+f,p,z);j=m;i=l}else{c-=t*((l<<1)-3);u-=s*(--l)}}}}this.mkDiv(e-B,d-i,n+1,(i<<1)+f)};this.drawString=mkLbl;this.clear=function(){this.htm="";if(this.cnv){this.cnv.innerHTML=this.defhtm}};this.mkOvQds=function(d,k,j,g,f,c,e,i){this.mkDiv(g+d,f+k,e,i);this.mkDiv(g+d,c+k,e,i);this.mkDiv(j+d,c+k,e,i);this.mkDiv(j+d,f+k,e,i)};this.setStroke(1);this.setPrintable(false);this.setFont("verdana,geneva,helvetica,sans-serif",String.fromCharCode(49,50,112,120),Font.PLAIN);this.color="#000000";this.htm="";this.wnd=a||window;if(!(jg_ie||jg_dom||jg_ihtm)){chkDHTM()}if(typeof b!="string"||!b){this.paint=pntDoc}else{this.cnv=document.all?(this.wnd.document.all[b]||null):document.getElementById?(this.wnd.document.getElementById(b)||null):null;this.defhtm=(this.cnv&&this.cnv.innerHTML)?this.cnv.innerHTML:"";this.paint=jg_dom?pntCnvDom:jg_ie?pntCnvIe:jg_ihtm?pntCnvIhtm:pntCnv}}; \ No newline at end of file +/*********************************************************************** +** Title.........: Javascript Graphics +** Version.......: 1.0 +** Author........: Xiang Wei ZHUO +** Filename......: wz_jsgraphics.js +** Last changed..: 31 Aug 2003 +** Notes.........: Modified for Image Editor, added extra commands +**/ + +/* This notice must be untouched at all times. + +wz_jsgraphics.js v. 2.03 +The latest version is available at +http://www.walterzorn.com +or http://www.devira.com +or http://www.walterzorn.de + +Copyright (c) 2002-2003 Walter Zorn. All rights reserved. +Created 3. 11. 2002 by Walter Zorn +Last modified: 11. 6. 2003 + +High Performance JavaScript Graphics Library. +Provides methods +- to draw lines, rectangles, ellipses, polygons + with specifiable line thickness, +- to fill rectangles and ellipses +- to draw text. +NOTE: Operations, functions and branching have rather been optimized +to efficiency and speed than to shortness of source code. + +This program is free software; +you can redistribute it and/or modify it under the terms of the +GNU General Public License as published by the Free Software Foundation; +either version 2 of the License, or (at your option) any later version. +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; +without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +See the GNU General Public License +at http://www.gnu.org/copyleft/gpl.html for more details. +*/ + + + + + +var jg_ihtm, jg_ie, jg_dom, +jg_n4 = (document.layers && typeof document.classes != "undefined"); + + + + + +function chkDHTM(x, i) +{ + x = document.body || null; + jg_ie = (x && typeof x.insertAdjacentHTML != "undefined"); + jg_dom = (x && !jg_ie && + typeof x.appendChild != "undefined" && + typeof document.createRange != "undefined" && + typeof (i = document.createRange()).setStartBefore != "undefined" && + typeof i.createContextualFragment != "undefined"); + jg_ihtm = (!jg_ie && !jg_dom && x && typeof x.innerHTML != "undefined"); +} + + + + + +function pntDoc() +{ + this.wnd.document.write(this.htm); + this.htm = ''; +} + + + + + +function pntCnvDom() +{ + var x = document.createRange(); + x.setStartBefore(this.cnv); + x = x.createContextualFragment(this.htm); + this.cnv.appendChild(x); + this.htm = ''; +} + + + + + +function pntCnvIe() +{ + this.cnv.insertAdjacentHTML("BeforeEnd", this.htm); + this.htm = ''; +} + + + + + +function pntCnvIhtm() +{ + this.cnv.innerHTML += this.htm; + this.htm = ''; +} + + + + + +function pntCnv() +{ + this.htm = ''; +} + + + + + +function mkDiv(x, y, w, h) +{ + this.htm += '
<\/div>'; + + //alert(this.htm); +} + + + + +function mkDivPrint(x, y, w, h) +{ + this.htm += '
<\/div>'; +} + + + + + +function mkLyr(x, y, w, h) +{ + this.htm += '<\/layer>\n'; +} + + + + + +function mkLbl(txt, x, y) +{ + this.htm += '
'+ + txt + + '<\/div>'; +} + + + + + +function mkLin(x1, y1, x2, y2) +{ + if (x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1; + + if (dx >= dy) + { + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx, + ox = x; + while ((dx--) > 0) + { + ++x; + if (p > 0) + { + this.mkDiv(ox, y, x-ox, 1); + y += yIncr; + p += pru; + ox = x; + } + else p += pr; + } + this.mkDiv(ox, y, x2-ox+1, 1); + } + + else + { + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy, + oy = y; + if (y2 <= y1) + { + while ((dy--) > 0) + { + if (p > 0) + { + this.mkDiv(x++, y, 1, oy-y+1); + y += yIncr; + p += pru; + oy = y; + } + else + { + y += yIncr; + p += pr; + } + } + this.mkDiv(x2, y2, 1, oy-y2+1); + } + else + { + while ((dy--) > 0) + { + y += yIncr; + if (p > 0) + { + this.mkDiv(x++, oy, 1, y-oy); + p += pru; + oy = y; + } + else p += pr; + } + this.mkDiv(x2, oy, 1, y2-oy+1); + } + } +} + + + + + +function mkLin2D(x1, y1, x2, y2) +{ + if (x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1; + + + var s = this.stroke; + if (dx >= dy) + { + if (s-0x3 > 0) + { + var _s = (s*dx*Math.sqrt(1+dy*dy/(dx*dx))-dx-(s>>1)*dy) / dx; + _s = (!(s-0x4)? Math.ceil(_s) : Math.round(_s)) + 1; + } + else var _s = s; + var ad = Math.ceil(s/2); + + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx, + ox = x; + while ((dx--) > 0) + { + ++x; + if (p > 0) + { + this.mkDiv(ox, y, x-ox+ad, _s); + y += yIncr; + p += pru; + ox = x; + } + else p += pr; + } + this.mkDiv(ox, y, x2-ox+ad+1, _s); + } + + else + { + if (s-0x3 > 0) + { + var _s = (s*dy*Math.sqrt(1+dx*dx/(dy*dy))-(s>>1)*dx-dy) / dy; + _s = (!(s-0x4)? Math.ceil(_s) : Math.round(_s)) + 1; + } + else var _s = s; + var ad = Math.round(s/2); + + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy, + oy = y; + if (y2 <= y1) + { + ++ad; + while ((dy--) > 0) + { + if (p > 0) + { + this.mkDiv(x++, y, _s, oy-y+ad); + y += yIncr; + p += pru; + oy = y; + } + else + { + y += yIncr; + p += pr; + } + } + this.mkDiv(x2, y2, _s, oy-y2+ad); + } + else + { + while ((dy--) > 0) + { + y += yIncr; + if (p > 0) + { + this.mkDiv(x++, oy, _s, y-oy+ad); + p += pru; + oy = y; + } + else p += pr; + } + this.mkDiv(x2, oy, _s, y2-oy+ad+1); + } + } +} + + + + + +function mkLinDott(x1, y1, x2, y2) +{ + if (x1 > x2) + { + var _x2 = x2; + var _y2 = y2; + x2 = x1; + y2 = y1; + x1 = _x2; + y1 = _y2; + } + var dx = x2-x1, dy = Math.abs(y2-y1), + x = x1, y = y1, + yIncr = (y1 > y2)? -1 : 1, + drw = true; + if (dx >= dy) + { + var pr = dy<<1, + pru = pr - (dx<<1), + p = pr-dx; + while ((dx--) > 0) + { + if (drw) this.mkDiv(x, y, 1, 1); + drw = !drw; + if (p > 0) + { + y += yIncr; + p += pru; + } + else p += pr; + ++x; + } + if (drw) this.mkDiv(x, y, 1, 1); + } + + else + { + var pr = dx<<1, + pru = pr - (dy<<1), + p = pr-dy; + while ((dy--) > 0) + { + if (drw) this.mkDiv(x, y, 1, 1); + drw = !drw; + y += yIncr; + if (p > 0) + { + ++x; + p += pru; + } + else p += pr; + } + if (drw) this.mkDiv(x, y, 1, 1); + } +} + + + + + +function mkOv(left, top, width, height) +{ + var a = width>>1, b = height>>1, + wod = width&1, hod = (height&1)+1, + cx = left+a, cy = top+b, + x = 0, y = b, + ox = 0, oy = b, + aa = (a*a)<<1, bb = (b*b)<<1, + st = (aa>>1)*(1-(b<<1)) + bb, + tt = (bb>>1) - aa*((b<<1)-1), + w, h; + while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+0x3); + tt += (bb<<1)*(++x); + } + else if (tt < 0) + { + st += bb*((x<<1)+0x3) - (aa<<1)*(y-1); + tt += (bb<<1)*(++x) - aa*(((y--)<<1)-0x3); + w = x-ox; + h = oy-y; + if (w&0x2 && h&0x2) + { + this.mkOvQds(cx, cy, -x+0x2, ox+wod, -oy, oy-1+hod, 1, 1); + this.mkOvQds(cx, cy, -x+1, x-1+wod, -y-1, y+hod, 1, 1); + } + else this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, oy-h+hod, w, h); + ox = x; + oy = y; + } + else + { + tt -= aa*((y<<1)-0x3); + st -= (aa<<1)*(--y); + } + } + this.mkDiv(cx-a, cy-oy, a-ox+1, (oy<<1)+hod); + this.mkDiv(cx+ox+wod, cy-oy, a-ox+1, (oy<<1)+hod); +} + + + + + +function mkOv2D(left, top, width, height) +{ + var s = this.stroke; + width += s-1; + height += s-1; + var a = width>>1, b = height>>1, + wod = width&1, hod = (height&1)+1, + cx = left+a, cy = top+b, + x = 0, y = b, + aa = (a*a)<<1, bb = (b*b)<<1, + st = (aa>>1)*(1-(b<<1)) + bb, + tt = (bb>>1) - aa*((b<<1)-1); + + + if (s-0x4 < 0 && (!(s-0x2) || width-0x33 > 0 && height-0x33 > 0)) + { + var ox = 0, oy = b, + w, h, + pxl, pxr, pxt, pxb, pxw; + while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+0x3); + tt += (bb<<1)*(++x); + } + else if (tt < 0) + { + st += bb*((x<<1)+0x3) - (aa<<1)*(y-1); + tt += (bb<<1)*(++x) - aa*(((y--)<<1)-0x3); + w = x-ox; + h = oy-y; + + if (w-1) + { + pxw = w+1+(s&1); + h = s; + } + else if (h-1) + { + pxw = s; + h += 1+(s&1); + } + else pxw = h = s; + this.mkOvQds(cx, cy, -x+1, ox-pxw+w+wod, -oy, -h+oy+hod, pxw, h); + ox = x; + oy = y; + } + else + { + tt -= aa*((y<<1)-0x3); + st -= (aa<<1)*(--y); + } + } + this.mkDiv(cx-a, cy-oy, s, (oy<<1)+hod); + this.mkDiv(cx+a+wod-s+1, cy-oy, s, (oy<<1)+hod); + } + + + else + { + var _a = (width-((s-1)<<1))>>1, + _b = (height-((s-1)<<1))>>1, + _x = 0, _y = _b, + _aa = (_a*_a)<<1, _bb = (_b*_b)<<1, + _st = (_aa>>1)*(1-(_b<<1)) + _bb, + _tt = (_bb>>1) - _aa*((_b<<1)-1), + + pxl = new Array(), + pxt = new Array(), + _pxb = new Array(); + pxl[0] = 0; + pxt[0] = b; + _pxb[0] = _b-1; + while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+0x3); + tt += (bb<<1)*(++x); + pxl[pxl.length] = x; + pxt[pxt.length] = y; + } + else if (tt < 0) + { + st += bb*((x<<1)+0x3) - (aa<<1)*(y-1); + tt += (bb<<1)*(++x) - aa*(((y--)<<1)-0x3); + pxl[pxl.length] = x; + pxt[pxt.length] = y; + } + else + { + tt -= aa*((y<<1)-0x3); + st -= (aa<<1)*(--y); + } + + if (_y > 0) + { + if (_st < 0) + { + _st += _bb*((_x<<1)+0x3); + _tt += (_bb<<1)*(++_x); + _pxb[_pxb.length] = _y-1; + } + else if (_tt < 0) + { + _st += _bb*((_x<<1)+0x3) - (_aa<<1)*(_y-1); + _tt += (_bb<<1)*(++_x) - _aa*(((_y--)<<1)-0x3); + _pxb[_pxb.length] = _y-1; + } + else + { + _tt -= _aa*((_y<<1)-0x3); + _st -= (_aa<<1)*(--_y); + _pxb[_pxb.length-1]--; + } + } + } + + var ox = 0, oy = b, + _oy = _pxb[0], + l = pxl.length, + w, h; + for (var i = 0; i < l; i++) + { + if (typeof _pxb[i] != "undefined") + { + if (_pxb[i] < _oy || pxt[i] < oy) + { + x = pxl[i]; + this.mkOvQds(cx, cy, -x+1, ox+wod, -oy, _oy+hod, x-ox, oy-_oy); + ox = x; + oy = pxt[i]; + _oy = _pxb[i]; + } + } + else + { + x = pxl[i]; + this.mkDiv(cx-x+1, cy-oy, 1, (oy<<1)+hod); + this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); + ox = x; + oy = pxt[i]; + } + } + this.mkDiv(cx-a, cy-oy, 1, (oy<<1)+hod); + this.mkDiv(cx+ox+wod, cy-oy, 1, (oy<<1)+hod); + } +} + + + + + +function mkOvDott(left, top, width, height) +{ + var a = width>>1, b = height>>1, + wod = width&1, hod = height&1, + cx = left+a, cy = top+b, + x = 0, y = b, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, + st = (aa2>>1)*(1-(b<<1)) + bb, + tt = (bb>>1) - aa2*((b<<1)-1), + drw = true; + while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+0x3); + tt += (bb<<1)*(++x); + } + else if (tt < 0) + { + st += bb*((x<<1)+0x3) - aa4*(y-1); + tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-0x3); + } + else + { + tt -= aa2*((y<<1)-0x3); + st -= aa4*(--y); + } + if (drw) this.mkOvQds(cx, cy, -x, x+wod, -y, y+hod, 1, 1); + drw = !drw; + } +} + + + + + +function mkRect(x, y, w, h) +{ + var s = this.stroke; + this.mkDiv(x, y, w, s); + this.mkDiv(x+w, y, s, h); + this.mkDiv(x, y+h, w+s, s); + this.mkDiv(x, y+s, s, h-s); +} + + + + + +function mkRectDott(x, y, w, h) +{ + this.drawLine(x, y, x+w, y); + this.drawLine(x+w, y, x+w, y+h); + this.drawLine(x, y+h, x+w, y+h); + this.drawLine(x, y, x, y+h); +} + + + + + +function jsgFont() +{ + this.PLAIN = 'font-weight:normal;'; + this.BOLD = 'font-weight:bold;'; + this.ITALIC = 'font-style:italic;'; + this.ITALIC_BOLD = this.ITALIC + this.BOLD; + this.BOLD_ITALIC = this.ITALIC_BOLD; +} +var Font = new jsgFont(); + + + + + +function jsgStroke() +{ + this.DOTTED = -1; +} +var Stroke = new jsgStroke(); + + + + + +function jsGraphics(id, wnd) +{ + this.setColor = new Function('arg', 'this.color = arg;'); + + + this.getColor = new Function('return this.color'); + + this.setStroke = function(x) + { + this.stroke = x; + if (!(x+1)) + { + this.drawLine = mkLinDott; + this.mkOv = mkOvDott; + this.drawRect = mkRectDott; + } + else if (x-1 > 0) + { + this.drawLine = mkLin2D; + this.mkOv = mkOv2D; + this.drawRect = mkRect; + } + else + { + this.drawLine = mkLin; + this.mkOv = mkOv; + this.drawRect = mkRect; + } + }; + + + + this.setPrintable = function(arg) + { + this.printable = arg; + this.mkDiv = jg_n4? mkLyr : arg? mkDivPrint : mkDiv; + }; + + + + this.setFont = function(fam, sz, sty) + { + this.ftFam = fam; + this.ftSz = sz; + this.ftSty = sty || Font.PLAIN; + }; + + + + this.drawPolyline = this.drawPolyLine = function(x, y, s) + { + var i = x.length-1; while (i >= 0) + this.drawLine(x[i], y[i], x[--i], y[i]); + }; + + + + this.fillRect = function(x, y, w, h) + { + this.mkDiv(x, y, w, h); + }; + + + this.fillRectPattern = function(x, y, w, h, url) + { + this.htm += '
<\/div>'; + //alert(this.htm); + } + + this.drawHandle = function(x, y, w, h, cursor) + { + + this.htm += '
<\/div>'; + } + + this.drawHandleBox = function(x, y, w, h, cursor) + { + + this.htm += '
<\/div>'; + + + } + + this.drawPolygon = function(x, y) + { + this.drawPolyline(x, y); + this.drawLine(x[x.length-1], y[x.length-1], x[0], y[0]); + }; + + + + this.drawEllipse = this.drawOval = function(x, y, w, h) + { + this.mkOv(x, y, w, h); + }; + + + + this.fillEllipse = this.fillOval = function(left, top, w, h) + { + var a = (w -= 1)>>1, b = (h -= 1)>>1, + wod = (w&1)+1, hod = (h&1)+1, + cx = left+a, cy = top+b, + x = 0, y = b, + ox = 0, oy = b, + aa2 = (a*a)<<1, aa4 = aa2<<1, bb = (b*b)<<1, + st = (aa2>>1)*(1-(b<<1)) + bb, + tt = (bb>>1) - aa2*((b<<1)-1), + pxl, dw, dh; + if (w+1) while (y > 0) + { + if (st < 0) + { + st += bb*((x<<1)+0x3); + tt += (bb<<1)*(++x); + } + else if (tt < 0) + { + st += bb*((x<<1)+0x3) - aa4*(y-1); + pxl = cx-x; + dw = (x<<1)+wod; + tt += (bb<<1)*(++x) - aa2*(((y--)<<1)-0x3); + dh = oy-y; + this.mkDiv(pxl, cy-oy, dw, dh); + this.mkDiv(pxl, cy+oy-dh+hod, dw, dh); + ox = x; + oy = y; + } + else + { + tt -= aa2*((y<<1)-0x3); + st -= aa4*(--y); + } + } + this.mkDiv(cx-a, cy-oy, w+1, (oy<<1)+hod); + }; + + + + this.drawString = mkLbl; + + + + this.clear = function() + { + this.htm = ""; + if (this.cnv) this.cnv.innerHTML = this.defhtm; + + }; + + + + this.mkOvQds = function(cx, cy, xl, xr, yt, yb, w, h) + { + this.mkDiv(xr+cx, yt+cy, w, h); + this.mkDiv(xr+cx, yb+cy, w, h); + this.mkDiv(xl+cx, yb+cy, w, h); + this.mkDiv(xl+cx, yt+cy, w, h); + }; + + + this.setStroke(1); + this.setPrintable(false); + this.setFont('verdana,geneva,helvetica,sans-serif', String.fromCharCode(0x31, 0x32, 0x70, 0x78), Font.PLAIN); + this.color = '#000000'; + this.htm = ''; + this.wnd = wnd || window; + + + if (!(jg_ie || jg_dom || jg_ihtm)) chkDHTM(); + if (typeof id != 'string' || !id) this.paint = pntDoc; + else + { + this.cnv = document.all? (this.wnd.document.all[id] || null) + : document.getElementById? (this.wnd.document.getElementById(id) || null) + : null; + this.defhtm = (this.cnv && this.cnv.innerHTML)? this.cnv.innerHTML : ''; + this.paint = jg_dom? pntCnvDom : jg_ie? pntCnvIe : jg_ihtm? pntCnvIhtm : pntCnv; + } +}