Show
Ignore:
Timestamp:
12/21/07 03:17:06 (13 months ago)
Author:
gyuque
Message:

lang/legacy-actionscript/as2draw: implemented fixing bottom layer

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/legacy-actionscript/as2draw/Drawable.as

    r3364 r3382  
    11class Drawable 
    22{ 
     3        public static var UNDO_LIMIT = 3; 
     4         
    35        private var mBGColor:Number; 
    46        private var mMC:MovieClip; 
     
    1416        { 
    1517                mCurrentPen = new Pen(); 
    16                 mDragData = {dragging: false, prevX: 0, prevY: 0}; 
     18                mDragData = {dragging: false, prevX: 0, prevY: 0, count: 0, startX: 0, startY: 0, startLayer: null}; 
    1719                mMC = aContainer.createEmptyMovieClip("drawable_mc", 1); 
    1820                mMC._quality = "LOW"; 
     
    4749        { 
    4850                mDragData.dragging = true; 
    49                 mDragData.prevX = mMC._xmouse; 
    50                 mDragData.prevY = mMC._ymouse; 
     51                mDragData.count = 0; 
     52                mDragData.prevX = Math.floor(mMC._xmouse); 
     53                mDragData.prevY = Math.floor(mMC._ymouse); 
    5154                 
    52                 renderLine(mMC._xmouse, mMC._ymouse, mMC._xmouse, mMC._ymouse); 
     55                mDragData.startX = mDragData.prevX; 
     56                mDragData.startY = mDragData.prevY; 
     57                 
     58                renderLine(mDragData.prevX, mDragData.prevY, mDragData.prevX, mDragData.prevY); 
     59                mDragData.startLayer = mCurrentDrawingMC; 
     60         
    5361        } 
    5462 
     
    5664        { 
    5765                mDragData.dragging = false; 
     66                /*if (mDragData.count > 0) 
     67                        smooth(mMC._xmouse, mMC._ymouse);*/ 
    5868                commit(); 
    5969        } 
     
    7080        private function renderLine(x1:Number, y1:Number, x2:Number, y2:Number) 
    7181        { 
     82                var color:Number = mCurrentPen.color; 
    7283                var g:MovieClip; 
    7384                 
     
    89100                                dy = ofs[(i<<1)+1]; 
    90101                        } 
     102/*                       
     103                        mPixBuf.setOut(g); 
     104*/ 
    91105                        mPixBuf.drawLine( 
    92106                                x1 +dx, y1 +dy, 
    93                                 x2 +dx, y2 +dy, 0, mCurrentPen.color); 
    94  
    95                         g.lineStyle(0, mCurrentPen.color); 
    96                         g.moveTo(x1+dx, y1+dy); 
    97                         g.lineTo(x2+dx, y2+dy); 
    98                         g.lineTo(x2+dx, y2+dy+1); 
     107                                x2 +dx, y2 +dy, 0, color); 
     108                         
     109                        g.stackData.log.push(new LineData(x1+dx, y1+dy, x2+dx, y2+dy, color)); 
     110                        drawNativeLine(g, x1+dx, y1+dy, x2+dx, y2+dy, color); 
    99111                } 
     112        } 
     113         
     114        public function drawNativeLine(g:MovieClip, x1:Number, y1:Number, x2:Number, y2:Number, color:Number) 
     115        { 
     116                var DX:Number = Math.abs(x2 - x1); 
     117                var DY:Number = Math.abs(y2 - y1); 
     118                 
     119                g.lineStyle(0, color); 
     120                g.moveTo(x1, y1); 
     121                g.lineTo(x2, y2); 
     122                 
     123                if (!(DX > DY && x1 < x2 && y1 < y2)) 
     124                        g.lineTo(x2+1, y2); 
    100125        } 
    101126 
     
    104129                if (mDragData.dragging) 
    105130                { 
    106                         renderLine(mDragData.prevX, mDragData.prevY, mMC._xmouse, mMC._ymouse); 
     131                        /*if (++mDragData.count == 5) 
     132                        { 
     133                                smooth(mMC._xmouse, mMC._ymouse); 
     134                                mDragData.count = 0; 
     135                        } 
     136                        else*/ 
     137                        { 
     138                                var x:Number = Math.floor(mMC._xmouse); 
     139                                var y:Number = Math.floor(mMC._ymouse); 
     140                                renderLine(mDragData.prevX, mDragData.prevY, x, y); 
    107141                         
    108                         mDragData.prevX = mMC._xmouse; 
    109                         mDragData.prevY = mMC._ymouse; 
     142                                mDragData.prevX = x; 
     143                                mDragData.prevY = y; 
     144                        } 
    110145                } 
     146        } 
     147         
     148        public function smooth(x:Number, y:Number) 
     149        { 
     150                x = Math.floor(x); 
     151                y = Math.floor(y); 
     152                 
     153                if (mDragData.startLayer == mCurrentDrawingMC) 
     154                        mCurrentDrawingMC.clear(); 
     155                else 
     156                        mMStack.pop(); 
     157                 
     158                mCurrentDrawingMC = mDragData.startLayer; 
     159                renderLine(mDragData.startX, mDragData.startY, x, y); 
     160                mCurrentDrawingMC = null; 
     161                 
     162                mDragData.startX = x; 
     163                mDragData.startY = y; 
     164                mDragData.prevX = x; 
     165                mDragData.prevY = y; 
     166 
    111167        } 
    112168 
     
    120176        private function commit() 
    121177        { 
     178                if (mMStack.size() > UNDO_LIMIT) 
     179                { 
     180                        mMStack.fixBottom(mMC, this); 
     181                } 
     182                 
    122183                mCurrentDrawingMC = null; 
    123184        }