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

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

Location:
lang/legacy-actionscript/as2draw
Files:
5 modified

Legend:

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

    r3324 r3382  
    2020        { 
    2121                var _this = this; 
    22                  
     22                /* 
    2323                { 
    2424                        var closure = function(b){_this.pushedPenButton(b);}; 
     
    3838                        pushedPenButton(p1); 
    3939                } 
    40                  
     40                */ 
    4141                tp.appendBlank(8); 
    4242                 
  • 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        } 
  • lang/legacy-actionscript/as2draw/MovieClipStack.as

    r3363 r3382  
    1111        } 
    1212         
     13        public function size():Number 
     14        { 
     15                return mStack.length; 
     16        } 
     17         
    1318        public function pushNew():MovieClip 
    1419        { 
    1520                var mc:MovieClip = mParentMC.createEmptyMovieClip("mcstackitem-" + (mNextName++), mParentMC.getNextHighestDepth()); 
     21                mc.stackData = {log:[]}; 
    1622                mStack.push(mc); 
    1723                return mc; 
     
    2834                return true; 
    2935        } 
     36         
     37        public function fixBottom(g:MovieClip, renderer):Boolean 
     38        { 
     39                if (mStack.length < 1) 
     40                        return false; 
     41                 
     42                var bottomMC:MovieClip = MovieClip(mStack.shift()); 
     43                 
     44                var arr = bottomMC.stackData.log; 
     45                var l:Number = arr.length; 
     46                 
     47                for (var i:Number = 0;i < l;i++) 
     48                { 
     49                        var ln = arr[i]; 
     50                        renderer.drawNativeLine(g, ln.x1, ln.y1, ln.x2, ln.y2, ln.color); 
     51                } 
     52                 
     53                bottomMC.removeMovieClip(); 
     54 
     55                return true; 
     56        } 
    3057} 
  • lang/legacy-actionscript/as2draw/PixelBuffer.as

    r3363 r3382  
    3131                mStride = 1 << i; 
    3232        } 
     33         
     34        public function setOut(aMC:MovieClip):Void 
     35        { 
     36                mOut = aMC; 
     37        } 
    3338 
    3439        public function setPixel(x:Number, y:Number, k:Number) 
    3540        { 
    3641                if (x<0 || x>=mWidth || y<0) return; 
    37                 //mBuf[ (y<<mStrideShift) + x ] = k; 
     42                mBuf[ (y<<mStrideShift) + x ] = k; 
    3843        } 
    3944