// variables
drawing=false;
fill=false;
snapTo=false;
ncolor='0x000000';
shapedata=new Array();
shapes=new Array();
shapecount=0;

// keypress listeners for keyboard shortcuts
createEmptyMovieClip('_keyListener',1000);
Key.addListener(_keyListener);
_keyListener.onKeyDown=function(){
        switch(Key.getCode()){
                case 49 : _root.linethickness.text=1;break;
                case 97 : _root.linethickness.text=1;break;
                case 50 : _root.linethickness.text=2;break;
                case 98 : _root.linethickness.text=2;break;
                case 51 : _root.linethickness.text=3;break;
                case 99 : _root.linethickness.text=3;break;
                case 52 : _root.linethickness.text=4;break;
                case 100 : _root.linethickness.text=4;break;
                case 53 : _root.linethickness.text=5;break;
                case 101 : _root.linethickness.text=5;break;
                case 54 : _root.linethickness.text=6;break;
                case 102 : _root.linethickness.text=6;break;
                case 55 : _root.linethickness.text=7;break;
                case 103 : _root.linethickness.text=7;break;
                case 56 : _root.linethickness.text=8;break;
                case 104 : _root.linethickness.text=8;break;
                case 57 : _root.linethickness.text=9;break;
                case 105 : _root.linethickness.text=9;break;
                case 76 : _root.shape.text='line';break;
                case 67 : _root.shape.text='curve';break;
                case 82 : _root.shape.text='rectangle';break;
                case 79 : _root.shape.text='circle';break;
                case 80 : _root.shape.text='pen';if(drawing){moveTo(_xmouse,_ymouse);_root.tracker.clear();}break;
                case 83 : if(snapTo){snapTo=false;}else{snapTo=true;}break;
                case 70 : if(fill){_root.fillstatus.text='Fill '+fill=false;}else{_root.fillstatus.text='Fill '+fill=true;}break;
                case 88 : for(sc=0;sc<_root.shapes.length;sc++){removeMovieClip(shapes[sc]);}_root.shapes=new Array();_root.shapedata=new Array();if(drawing && shape=='pen'){moveTo(_xmouse,_ymouse);}drawing=false;_root.tracker.clear();break;
                case 90 : if(shapecount>0){removeMovieClip(shapes[shapecount]);shapes[shapecount]='';shapedata[shapecount]='';shapecount--;}break;
        }
        // set the rgb color picker's scale based on linethickness
        _root.cp._y=220-_root.linethickness.text/2;
        _root.cp._height=_root.linethickness.text;
        _root.cp._yscale=Math.floor(_root.cp._yscale);
};
// end key listener

// draw curves
function curve(it,startX,startY,mouseX,mouseY){
        with(eval(it)){moveTo(startX,startY);curveTo(mouseX,startY,mouseX,mouseY);}
}

// draw ovals/circles
function circle(it,x,y,mouseX,mouseY){
        if(Key.isDown(Key.SHIFT)){
                a=b=Math.sqrt(Math.pow(Math.abs(mouseX-x),2)+Math.pow(Math.abs(mouseY-y),2));
        }else{
                a=Math.abs(mouseX-x);
                b=Math.abs(mouseY-y);
        }
        j=a*0.70711;
        n=b*0.70711;
        i=j-(b-n)*a/b;
        m=n-(a-j)*b/a;
        with(eval(it)){
                if(fill){beginFill(_root.ncolor,100);}
                moveTo(x+a,y);
                curveTo(x+a,y-m,x+j,y-n);
                curveTo(x+i,y-b,x,y-b);
                curveTo(x-i,y-b,x-j,y-n);
                curveTo(x-a,y-m,x-a,y);
                curveTo(x-a,y+m,x-j,y+n);
                curveTo(x-i,y+b,x,y+b);
                curveTo(x+i,y+b,x+j,y+n);
                curveTo(x+a,y+m,x+a,y);
                if(fill){endFill();}
        }
}

// draw rectangles
function rectangle(it,startX,startY,mouseX,mouseY){
        with(eval(it)){
                if(fill){beginFill(_root.ncolor,100);}
                lineTo(mouseX,startY);
                lineTo(mouseX,mouseY);
                lineTo(startX,mouseY);
                lineTo(startX,startY);
                if(fill){endFill();}
        }
}

// root event handlers
with(_root){
        
        onMouseDown=function(){
                // check if mouse is on canvas
                // and begin drawing if so
                if(_root._ymouse<200 && _root.cp.hitTest(_root._xmouse,_root._ymouse,false)==false){
                        drawing=true;
                        startX=snapTo?Math.ceil(_xmouse/10)*10:_xmouse;
                        startY=snapTo?Math.ceil(_ymouse/10)*10:_ymouse;
                        if(_root.shape.text=='pen'){
                                // if current shape is pen, create new MC
                                penX=_xmouse;
                                penY=_ymouse;
                                shapecount++;
                                shapes[shapecount]='SMC_'+shapecount;
                                _root.createEmptyMovieClip(shapes[shapecount],1000+shapecount);
                                with(eval(shapes[shapecount])){moveTo(penX,penY);}
                        }
                }
        };
        
        onMouseUp=function(){
                // check if mouse is still on the canvas
                if(_root.canvas.hitTest(_root._xmouse,_root._ymouse,false)){
                        if(drawing){
                                drawing=false;
                                // clear the tracking clip and create the new shape
                                tracker.clear();
                                shapecount++;
                                shapes[shapecount]='SMC_'+shapecount;
                                _root.createEmptyMovieClip(shapes[shapecount],shapecount+1000);
                                thickness=_root.linethickness.text;
                                with(eval(shapes[shapecount])){
                                        lineStyle(thickness,_root.ncolor);
                                        moveTo(startX,startY);
                                }
                                endX=snapTo?Math.floor(_xmouse/10)*10:_xmouse;
                                endY=snapTo?Math.floor(_ymouse/10)*10:_ymouse;
                                if(_root.shape.text=='line'){shapedata[shapecount]='line_'+startX+'_'+startY+'_'+endX+'_'+endY+'_'+thickness+'_'+_root.ncolor+'_false-';with(eval(shapes[shapecount])){lineTo(endX,endY);}}
                                if(_root.shape.text=='curve'){shapedata[shapecount]='curve_'+startX+'_'+startY+'_'+endX+'_'+endY+'_'+thickness+'_'+_root.ncolor+'_false-';curve(shapes[shapecount],startX,startY,endX,endY);}
                                if(_root.shape.text=='rectangle'){shapedata[shapecount]='rectangle_'+startX+'_'+startY+'_'+endX+'_'+endY+'_'+thickness+'_'+_root.ncolor+'_'+fill+'-';rectangle(shapes[shapecount],startX,startY,endX,endY);}
                                if(_root.shape.text=='circle'){
                                        if(Key.isDown(Key.SHIFT)){
                                                r=Math.sqrt(Math.pow(Math.abs(startX-endX),2)+Math.pow(Math.abs(startY-endY),2));
                                                shapedata[shapecount]='circle_'+startX+'_'+startY+'_'+(startX+r)+'_'+(startY+r)+'_'+thickness+'_'+_root.ncolor+'_'+fill+'-';circle(shapes[shapecount],startX,startY,endX,endY);
                                        }else{
                                                shapedata[shapecount]='circle_'+startX+'_'+startY+'_'+endX+'_'+endY+'_'+thickness+'_'+_root.ncolor+'_'+fill+'-';circle(shapes[shapecount],startX,startY,endX,endY);
                                        }}
                        }
                }
        };
        
        onMouseMove=function(){
                // check if mouse is on the canvas
                if(_ymouse<200){
                        // if pen tool is selected and drawing
                        if(_root.shape.text=='pen' && drawing==true){
                                // set line attributes and continue drawing
                                thickness=_root.linethickness.text;
                                shapelength=Math.sqrt(Math.pow(penX-_xmouse,2)+Math.pow(penY-_ymouse,2));
                                if(shapelength>5){
                                        // only draw lines 5px or larger to prevent POST overload
                                        shapecount++;
                                        shapes[shapecount]='SMC_'+shapecount;
                                        _root.createEmptyMovieClip(shapes[shapecount],1000+shapecount);
                                        with(eval(shapes[shapecount])){moveTo(penX,penY);lineStyle(thickness,_root.ncolor);lineTo(_xmouse,_ymouse);}
                                        shapedata[shapecount]='line_'+penX+'_'+penY+'_'+_xmouse+'_'+_ymouse+'_'+thickness+'_'+_root.ncolor+'_false-';
                                        penX=_xmouse;
                                        penY=_ymouse;
                                        updateAfterEvent();
                                }}else{
                                // if any tool other than pen is selected
                                // create the temporary shape
                                if(drawing==true){
                                        if(snapTo){endX=Math.floor(_xmouse/10)*10;}else{endX=_xmouse;}
                                        if(snapTo){endY=Math.floor(_ymouse/10)*10;}else{endY=_ymouse;}
                                        tracker.clear();
                                        tracker.lineStyle(_root.linethickness.text,_root.ncolor);
                                        tracker.moveTo(startX,startY);
                                        if(_root.shape.text=='line'){tracker.lineTo(endX,endY);}
                                        if(_root.shape.text=='curve'){curve('tracker',startX,startY,endX,endY);}
                                        if(_root.shape.text=='rectangle'){rectangle('tracker',startX,startY,endX,endY);}
                                        if(_root.shape.text=='circle'){circle('tracker',startX,startY,endX,endY);}
                                }
                        }
                }
                updateAfterEvent();
        };
}
// end root event handlers

// create the canvas
_root.createEmptyMovieClip('canvas',1);
with(_root.canvas){
        lineStyle(2);
        moveTo(1,1);
        lineTo(299,1);
        lineTo(299,199);
        lineTo(1,199);
        lineTo(1,1);
}

// create the tracking movie clip
_root.createEmptyMovieClip('tracker',2000);

myformat=new TextFormat();
myformat.color=0x000000;
myformat.bullet=false;
myformat.font='Arial';

// create linethickness textfield
createTextField('linethickness',3,0,229,15,20);
linethickness.type='dynamic';
linethickness.selectable=false;
linethickness.multiline=false;
linethickness.wordWrap=false;
linethickness.text=1;
linethickness.setTextFormat(myformat);

myformat.size=10;

// create drawing tool textfield
createTextField('shape',2,0,200,45,20);
shape.type='dynamic';
shape.selectable=false;
shape.multiline=false;
shape.wordWrap=false;
shape.text='pen';
shape.setTextFormat(myformat);

// create fill status textfield
createTextField('fillstatus',4,20,220,30,40);
fillstatus.type='dynamic';
fillstatus.selectable=false;
fillstatus.multiline=true;
fillstatus.wordWrap=true;
fillstatus.text='Fill '+fill;
fillstatus.setTextFormat(myformat);

// create rgb color picker
_root.createEmptyMovieClip('cp',9500);
with(_root.cp){
        _x=0;_y=218;
        createEmptyMovieClip('bg',11);
        with(bg){
                lineStyle(1,0x000000);beginFill(0x000000);
                lineTo(255/2+5,0);lineTo(255/2+5,14);lineTo(0,14);lineTo(0,0);
                endFill();
        }}

_root.cp.onMouseDown=function(){
        if(hitTest(_root._xmouse,_root._ymouse,true) && _root.cp.r.hitTest(_root._xmouse,_root._ymouse,false)==false && _root.cp.g.hitTest(_root._xmouse,_root._ymouse,false)==false && _root.cp.b.hitTest(_root._xmouse,_root._ymouse,false)==false){
                with(_root.cp){
                        startDrag(0,0,0,32,220);
                }
        }
};

_root.cp.onMouseUp=function(){
        stopDrag();
};

_root.cp.onMouseMove=function(){
        if(_root.cp.hitTest(_root._xmouse,_root._ymouse,false)){
                this._xscale=200;
                this._yscale=200;
                _root.cb._visible=false;
        }else{
                this._xscale=30;
                this._height=_root.linethickness.text;
                this._yscale=Math.round(this._yscale);
                this._x=0;
                this._y=220-_root.linethickness.text/2;
                _root.cb._visible=true;
                stopDrag();
        }
        if(dragging){
                rv=this.r._x*2+1;
                gv=this.g._x*2+1;
                bv=this.b._x*2+1;
                rv=rv.toString(16).length<2?'0'+rv.toString(16):rv.toString(16);
                gv=gv.toString(16).length<2?'0'+gv.toString(16):gv.toString(16);
                bv=bv.toString(16).length<2?'0'+bv.toString(16):bv.toString(16);
                _root.nc.setRGB('0x'+rv+gv+bv);
                _root.ncolor='0x'+rv+gv+bv;
        }
        updateAfterEvent();
};

_root.cp._xscale=30;
_root.cp._yscale=20;

for(c=1;c<4;c++){
        if(c==1){cv='r';cf='0xff0000';
        }else{if(c==2){cv='g';cf='0x00ff00';
                }else{cv='b';cf='0x0000ff';}}
        _root.cp.createEmptyMovieClip(cv,c+9500);
        with(eval('_root.cp.'+cv)){
                lineStyle(0.25,0xffffff);
                beginFill(cf);moveTo(0,-2);lineTo(5,-2);lineTo(5,2);lineTo(0,2);lineTo(0,-2);endFill();
                _x=0;_y=c-3+c*4;
                _root.cp[cv].onMouseDown=function(){
                        if(hitTest(_root._xmouse,_root._ymouse,false)){
                                drawing=false;
                                _root.dragging=true;
                                startDrag(0,0,_y,255/2,_y);
                        }
                };
                _root.cp[cv].onMouseUp=function(){
                        _root.dragging=false;
                        stopDrag();
                };
        }
}
_root.nc=new Color(_root.cp.bg);
// end rgb color picker

_root.clear();
stop();



Free Hosting Provide By: Web Hosting Service http://www.hostrocket.com
Make $50 Per Sale: VoIP Affiliate Program http://affiliates.viatalk.com
ViaTalk: Internet Phone Service http://www.viatalk.com