チェンジセット 3614

差分発生行の前後
無視リスト:
コミット日時:
2010/03/27 19:44:08 (3 年前)
コミッタ:
hkrn
ログメッセージ:

changed framework's API to be more isolation

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/LayerBitmap.as

    r3612 r3614  
    33    import flash.display.Bitmap; 
    44    import flash.display.BitmapData; 
     5    import flash.display.DisplayObject; 
    56    import flash.display.IBitmapDrawable; 
    67    import flash.geom.ColorTransform; 
     
    2728            ); 
    2829            name = "Layer" + index; 
    29             this.bitmapData = bitmapData
     30            setBitmapData(bitmapData)
    3031        } 
    3132         
     
    6364                                      blendMode:String):void 
    6465        { 
    65             bitmapData = m_bitmapData.clone(); 
     66            setBitmapData(m_bitmapData.clone()); 
    6667            m_bitmapData.draw(source, null, null, blendMode); 
    6768        } 
     
    9293            var transformed:BitmapData = new BitmapData(width, height, true, 0x0); 
    9394            transformed.draw(bitmapData, matrix); 
    94             bitmapData = transformed
     95            setBitmapData(transformed)
    9596        } 
    9697         
     
    104105        public function floodFill(x:Number, y:Number, color:uint):void 
    105106        { 
    106             bitmapData = m_bitmapData.clone(); 
     107            setBitmapData(m_bitmapData.clone()); 
    107108            m_bitmapData.floodFill(x, y, color); 
    108109        } 
     
    117118        public function setPixel(x:Number, y:Number, color:uint):void 
    118119        { 
    119             bitmapData = m_bitmapData.clone(); 
     120            setBitmapData(m_bitmapData.clone()); 
    120121            m_bitmapData.setPixel32(x, y, color); 
    121122        } 
     
    148149            }; 
    149150        } 
     151         
     152        private function setBitmapData(value:BitmapData):void 
     153        { 
     154            m_bitmap.bitmapData = value; 
     155            m_bitmapData = value; 
     156        } 
    150157 
    151158        /** 
     
    165172        { 
    166173            return m_bitmap.blendMode; 
     174        } 
     175         
     176        /** 
     177         * DisplayObject の派生オブジェクトを取得する 
     178         * 
     179         */ 
     180        public function get displayObject():DisplayObject 
     181        { 
     182            return m_bitmap; 
    167183        } 
    168184         
     
    222238        } 
    223239         
    224         internal function get bitmap():Bitmap 
    225         { 
    226             return m_bitmap
     240        internal function get newDisplayObject():DisplayObject 
     241        { 
     242            return new Bitmap(m_bitmapData)
    227243        } 
    228244         
     
    230246        { 
    231247            return m_bitmapData; 
    232         } 
    233          
    234         internal function set bitmapData(value:BitmapData):void 
    235         { 
    236             m_bitmap.bitmapData = value; 
    237             m_bitmapData = value; 
    238248        } 
    239249         
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/LayerBitmapCollection.as

    r3612 r3614  
    33    import flash.display.Bitmap; 
    44    import flash.display.BitmapData; 
     5    import flash.display.DisplayObject; 
    56    import flash.display.Sprite; 
     7    import flash.events.Event; 
     8    import flash.events.IEventDispatcher; 
    69     
    710    import org.libspark.gunyarapaint.framework.errors.MergeLayersError; 
     
    1215     *  
    1316     */ 
    14     public class LayerBitmapCollection 
     17    public class LayerBitmapCollection implements IEventDispatcher 
    1518    { 
    1619        public function LayerBitmapCollection(width:int, height:int) 
     
    2023            m_width = width; 
    2124            m_height = height; 
    22             layers = new Vector.<LayerBitmap>(); 
    23             spriteToView = new Sprite(); 
     25            m_layers = new Vector.<LayerBitmap>(); 
     26            m_sprite = new Sprite(); 
    2427            // 白い背景を作成してレイヤー群に追加する 
    2528            var layer:LayerBitmap = new LayerBitmap( 
     
    2831            layer.name = "Background"; 
    2932            composited = new BitmapData(width, height, true, 0x0); 
    30             layers.push(layer); 
    31             spriteToView.addChild(layer.bitmap); 
     33            addLayer(layer); 
    3234        } 
    3335         
     
    4446            ); 
    4547            currentIndex++; 
    46             layers.splice(currentIndex, 0, layer); 
    47             spriteToView.addChildAt(layer.bitmap, currentIndex); 
     48            m_layers.splice(currentIndex, 0, layer); 
     49            m_sprite.addChildAt(layer.displayObject, currentIndex); 
    4850            compositeAll(); 
    4951            resetLayersIndex(); 
     
    5153         
    5254        /** 
     55         * レイヤーオブジェクトを追加する 
     56         *  
     57         * @param layer レイヤーオブジェクト 
     58         */ 
     59        public function addLayer(layer:LayerBitmap):void 
     60        { 
     61            m_layers.push(layer); 
     62            m_sprite.addChild(layer.displayObject); 
     63        } 
     64         
     65        /** 
    5366         * 指定された番号のレイヤーを取り出す 
    5467         *  
     
    5871        public function at(index:int):LayerBitmap 
    5972        { 
    60             return layers[index]; 
     73            return m_layers[index]; 
    6174        } 
    6275         
     
    7992        public function copyAt(index:int):void 
    8093        { 
    81             var layer:LayerBitmap = layers[index].clone(); 
     94            var layer:LayerBitmap = m_layers[index].clone(); 
    8295            layer.name += "'s copy"; 
    83             layers.splice(index, 0, layer); 
    84             spriteToView.addChildAt(layer.bitmap, index); 
     96            m_layers.splice(index, 0, layer); 
     97            m_sprite.addChildAt(layer.displayObject, index); 
    8598            compositeAll(); 
    8699            resetLayersIndex(); 
     
    95108        public function swap(from:int, to:int):void 
    96109        { 
    97             var layer:LayerBitmap = layers[from]; 
    98             layers[from] = layers[to]; 
    99             layers[to] = layer; 
    100             spriteToView.swapChildrenAt(from, to); 
     110            var layer:LayerBitmap = m_layers[from]; 
     111            m_layers[from] = m_layers[to]; 
     112            m_layers[to] = layer; 
     113            m_sprite.swapChildrenAt(from, to); 
    101114            compositeAll(); 
    102115            resetLayersIndex(); 
     
    128141            // レイヤーは必ず2つ以上 
    129142            if (currentIndex > 0) { 
    130                 var current:LayerBitmap = layers[index]; 
    131                 var prev:LayerBitmap = layers[index - 1]; 
     143                var current:LayerBitmap = m_layers[index]; 
     144                var prev:LayerBitmap = m_layers[index - 1]; 
    132145                // 両方可視である必要がある 
    133146                if (current.visible && prev.visible) { 
     
    135148                    // 合成後の LayerBitmap は完全に不透明にしておく 
    136149                    prev.alpha = 1.0; 
    137                     layers.splice(index, 1); 
    138                     spriteToView.removeChildAt(index); 
     150                    m_layers.splice(index, 1); 
     151                    m_sprite.removeChildAt(index); 
    139152                    if (index >= currentIndex) 
    140153                        currentIndex -= 1; 
     
    170183        public function removeAt(index:int):void 
    171184        { 
    172             if (layers.length <= 1) 
     185            if (m_layers.length <= 1) 
    173186                throw new RemoveLayerError(); 
    174             layers[index].bitmapData.dispose(); 
    175             layers.splice(index, 1); 
    176             spriteToView.removeChildAt(index); 
     187            m_layers[index].bitmapData.dispose(); 
     188            m_layers.splice(index, 1); 
     189            m_sprite.removeChildAt(index); 
    177190            if (currentIndex > 0 && index >= currentIndex) 
    178191                currentIndex -= 1; 
     
    182195         
    183196        /** 
     197         * 表示オブジェクトから現在のビューを削除する 
     198         * 
     199         * @param parent 親となる表示オブジェクト 
     200         */ 
     201        public function removeView(parent:Sprite):void 
     202        { 
     203            parent.removeChild(m_sprite); 
     204        } 
     205         
     206        /** 
     207         * 現在のビューを表示オブジェクトに設定する 
     208         * 
     209         * @param parent 親となる表示オブジェクト 
     210         */ 
     211        public function setView(parent:Sprite):void 
     212        { 
     213            parent.addChild(m_sprite); 
     214        } 
     215         
     216        /** 
    184217         * 現在の全てのレイヤー情報を dataProvider に適用出来る形で返す 
    185218         *  
     
    189222        { 
    190223            var ret:Array = []; 
    191             var count:uint = layers.length; 
     224            var count:uint = m_layers.length; 
    192225            for (var i:uint = 0; i < count; i++) { 
    193                 ret.push(layers[i]); 
     226                ret.push(m_layers[i]); 
    194227            } 
    195228            return ret.reverse(); 
    196229        } 
    197230         
     231        public function addEventListener(type:String, listener:Function, useCapture:Boolean=false, priority:int=0, useWeakReference:Boolean=false):void 
     232        { 
     233            m_sprite.addEventListener(type, listener, useCapture, priority, useWeakReference); 
     234        } 
     235         
     236        public function removeEventListener(type:String, listener:Function, useCapture:Boolean=false):void 
     237        { 
     238            m_sprite.removeEventListener(type, listener, useCapture); 
     239        } 
     240         
     241        public function dispatchEvent(event:Event):Boolean 
     242        { 
     243            return m_sprite.dispatchEvent(event); 
     244        } 
     245         
     246        public function hasEventListener(type:String):Boolean 
     247        { 
     248            return m_sprite.hasEventListener(type); 
     249        } 
     250         
     251        public function willTrigger(type:String):Boolean 
     252        { 
     253            return m_sprite.willTrigger(type); 
     254        } 
     255         
    198256        /** 
    199257         * 全てのレイヤーを削除する 
     
    202260        internal function clear():void 
    203261        { 
    204             var count:uint = layers.length; 
     262            var count:uint = m_layers.length; 
    205263            for (var i:uint = 0; i < count; i++) { 
    206                 var layer:LayerBitmap = layers[i]; 
    207                 var bitmap:Bitmap = layer.bitmap
    208                 if (spriteToView.contains(bitmap)) 
    209                     spriteToView.removeChild(bitmap); 
     264                var layer:LayerBitmap = m_layers[i]; 
     265                var displayObject:DisplayObject = layer.displayObject
     266                if (m_sprite.contains(displayObject)) 
     267                    m_sprite.removeChild(displayObject); 
    210268                else 
    211269                    trace(layer.name + " is not child of spriteToView."); 
    212270            } 
    213             layers.splice(0, count); 
     271            m_layers.splice(0, count); 
    214272        } 
    215273         
     
    226284                composited = new BitmapData(m_width, m_height, true, 0x0); 
    227285                for (var i:uint = 0; i < c; i++) { 
    228                     var layer:LayerBitmap = layers[i]; 
     286                    var layer:LayerBitmap = m_layers[i]; 
    229287                    layer.compositeTo(composited); 
    230288                } 
     
    233291         
    234292        /** 
     293         * saveState で保存したオブジェクトを復元する 
     294         * 
     295         */ 
     296        internal function loadState(undoData:Object):void 
     297        { 
     298            var i:uint = 0; 
     299            var layers:Vector.<Object> = undoData.layers; 
     300            var c:uint = layers.length; 
     301            clear(); 
     302            for (i = 0; i < c; i++) { 
     303                var data:Object = layers[i]; 
     304                var layer:LayerBitmap = new LayerBitmap(data.bitmapData); 
     305                layer.fromJSON(data); 
     306                addLayer(layer); 
     307            } 
     308            currentIndex = undoData.index; 
     309            compositeAll(); 
     310        } 
     311         
     312        /** 
     313         * 画像データを含むすべてのレイヤー情報を保存する 
     314         * 
     315         */ 
     316        internal function saveState(undoData:Object):void 
     317        { 
     318            var c:uint = count; 
     319            var layers:Vector.<Object> = new Vector.<Object>(c, true); 
     320            for (var i:uint = 0; i < c; i++) { 
     321                var layer:LayerBitmap = m_layers[i]; 
     322                var data:Object = layer.toJSON(); 
     323                data.bitmapData = layer.bitmapData; 
     324                layers[i] = data; 
     325            } 
     326            undoData.index = currentIndex; 
     327            undoData.layers = layers; 
     328        } 
     329         
     330        /** 
     331         * 現在のビューに対して表示オブジェクトの入れ替えを行う 
     332         * 
     333         */ 
     334        internal function swapChild(from:DisplayObject, to:DisplayObject):void 
     335        { 
     336            m_sprite.removeChild(from); 
     337            m_sprite.addChildAt(to, currentIndex); 
     338        } 
     339         
     340        /** 
    235341         * 現在のレイヤー画像を設定する 
    236342         *  
     
    238344        internal function setCurrentLayer(value:LayerBitmap):void 
    239345        { 
    240             layers[currentIndex] = value; 
     346            m_layers[currentIndex] = value; 
    241347        } 
    242348         
     
    246352            var c:uint = count; 
    247353            for (var i:uint = 0; i < c; i++) { 
    248                 var layer:LayerBitmap = layers[i]; 
     354                var layer:LayerBitmap = m_layers[i]; 
    249355                layer.index = i; 
    250356            } 
     
    275381        public function get currentLayer():LayerBitmap 
    276382        { 
    277             return layers[currentIndex]; 
     383            return m_layers[currentIndex]; 
    278384        } 
    279385         
     
    284390        public function get count():uint 
    285391        { 
    286             return layers.length; 
     392            return m_layers.length; 
     393        } 
     394         
     395        /** 
     396         * スプライトオブジェクトを返す 
     397         *  
     398         */ 
     399        internal function get view():Sprite 
     400        { 
     401            return m_sprite; 
    287402        } 
    288403         
     
    306421         * @default null 
    307422         */ 
    308         internal var spriteToView:Sprite; 
     423        private var m_sprite:Sprite; 
    309424         
    310425        /** 
     
    315430        internal var composited:BitmapData; 
    316431         
    317         /** 
    318          * レイヤーの配列 
    319          *  
    320          * @default null 
    321          */ 
    322         internal var layers:Vector.<LayerBitmap>; 
    323          
     432        private var m_layers:Vector.<LayerBitmap>; 
    324433        private var m_width:uint; 
    325434        private var m_height:uint; 
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Painter.as

    r3612 r3614  
    44    import flash.display.BitmapData; 
    55    import flash.display.BlendMode; 
     6    import flash.display.DisplayObject; 
    67    import flash.display.Shape; 
    78    import flash.display.Sprite; 
     
    6465        public function undo():void 
    6566        { 
    66             m_undo.undo(this); 
     67            m_undo.undo(m_layers); 
    6768        } 
    6869         
     
    7273        public function redo():void 
    7374        { 
    74             m_undo.redo(this); 
     75            m_undo.redo(m_layers); 
    7576        } 
    7677         
     
    8081        public function pushUndo():void 
    8182        { 
    82             m_undo.push(this); 
     83            m_undo.push(m_layers); 
    8384        } 
    8485         
     
    111112            var destination:Point = new Point(0, 0); 
    112113            var rectangle:Rectangle = new Rectangle(0, 0, width, height); 
    113             var sprite:Sprite = m_layers.spriteToView; 
    114114            m_layers.clear(); 
    115115            for (var i:uint = 0; i < layerCount; i++) { 
     
    119119                var layer:LayerBitmap = new LayerBitmap(bitmapData); 
    120120                layer.fromJSON(layersInfo[i]); 
    121                 m_layers.layers.push(layer); 
    122                 sprite.addChild(layer.bitmap); 
     121                m_layers.addLayer(layer); 
    123122            } 
    124123        } 
     
    461460                    blendMode == BlendMode.NORMAL ? BlendMode.LAYER : blendMode; 
    462461                m_drawingSprite.alpha = currentLayer.alpha; 
    463                 m_tempLayer = new Bitmap(currentLayer.bitmapData)
     462                m_tempLayer = currentLayer.newDisplayObject
    464463                m_tempLayer.blendMode = BlendMode.NORMAL; 
    465464                m_tempLayer.alpha = 1.0; 
    466465                m_drawingSprite.addChild(m_tempLayer); 
    467466                m_drawingSprite.addChild(m_paintEngine.shape); 
    468                 var sprite:Sprite = m_layers.spriteToView; 
    469                 sprite.removeChild(currentLayer.bitmap); 
    470                 sprite.addChildAt(m_drawingSprite, m_layers.currentIndex); 
     467                m_layers.swapChild(currentLayer.displayObject, m_drawingSprite); 
    471468            } 
    472469        } 
     
    479476        { 
    480477            if (m_tempLayer != null) { 
    481                 var sprite:Sprite = m_layers.spriteToView; 
    482478                var currentLayer:LayerBitmap = m_layers.currentLayer; 
    483479                var blendMode:String = m_drawingSprite.blendMode; 
     
    485481                    blendMode == BlendMode.LAYER ? BlendMode.NORMAL : blendMode; 
    486482                currentLayer.alpha = m_drawingSprite.alpha; 
    487                 sprite.removeChild(m_drawingSprite); 
    488                 sprite.addChildAt(currentLayer.bitmap, m_layers.currentIndex); 
     483                m_layers.swapChild(m_drawingSprite, currentLayer.displayObject); 
    489484                m_paintEngine.clear(); 
    490485                m_drawingSprite.removeChild(m_tempLayer); 
     
    527522        } 
    528523         
    529         internal function loadState(undoData:Object):void 
    530         { 
    531             var i:uint = 0; 
    532             m_layers.clear(); 
    533             var layers:Vector.<Object> = undoData.layers; 
    534             var count:uint = layers.length; 
    535             var sprite:Sprite = m_layers.spriteToView; 
    536             for (i = 0; i < count; i++) { 
    537                 var data:Object = layers[i]; 
    538                 var layer:LayerBitmap = new LayerBitmap(data.bitmapData); 
    539                 layer.fromJSON(data); 
    540                 m_layers.layers.push(layer); 
    541                 sprite.addChild(layer.bitmap); 
    542             } 
    543             m_layers.currentIndex = undoData.index; 
    544             m_layers.compositeAll(); 
    545         } 
    546          
    547         internal function saveState(undoData:Object):void 
    548         { 
    549             var count:uint = m_layers.count; 
    550             var layers:Vector.<Object> = new Vector.<Object>( 
    551                 count, true 
    552             ); 
    553             for (var i:uint = 0; i < count; i++) { 
    554                 var layer:LayerBitmap = m_layers.at(i); 
    555                 var data:Object = layer.toJSON(); 
    556                 data.bitmapData = layer.bitmapData; 
    557                 layers[i] = data; 
    558             } 
    559             undoData.index = m_layers.currentIndex; 
    560             undoData.layers = layers; 
    561         } 
    562          
    563524        /** 
    564525         * レイヤーオブジェクトを返す 
     
    571532         
    572533        /** 
    573          * スプライトオブジェクトを返す 
    574          *  
    575          */ 
    576         public function get view():Sprite 
    577         { 
    578             return m_layers.spriteToView; 
    579         } 
    580          
    581         /** 
    582534         * ペンオブジェクトを返す 
    583535         *  
     
    662614        } 
    663615         
     616        // テストでLayerBitmapCollectionの差し替えを行うため敢えてprotected にしてある 
    664617        protected var m_layers:LayerBitmapCollection; 
    665618        private var m_paintEngine:PaintEngine; 
     
    669622        private var m_scaleMatrix:Matrix; 
    670623        private var m_drawingSprite:Sprite; 
    671         private var m_tempLayer:Bitmap
     624        private var m_tempLayer:DisplayObject
    672625        private var m_shouldCopyBitmap:Boolean; 
    673626        private var m_version:uint; 
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/UndoStack.as

    r3605 r3614  
    2323                m_buffer[i] = {}; 
    2424            } 
    25             painter.saveState(m_buffer[0]); 
     25            painter.layers.saveState(m_buffer[0]); 
    2626        } 
    2727         
    28         internal function undo(painter:Painter):void 
     28        internal function undo(layers:LayerBitmapCollection):void 
    2929        { 
    3030            if (m_index === m_first) { 
     
    3737                m_index--; 
    3838            } 
    39             painter.loadState(m_buffer[m_index]); 
     39            layers.loadState(m_buffer[m_index]); 
    4040            if (hasEventListener(UndoEvent.UNDO)) 
    4141                dispatchEvent(new UndoEvent(UndoEvent.UNDO)); 
    4242        } 
    4343         
    44         internal function redo(painter:Painter):void 
     44        internal function redo(layers:LayerBitmapCollection):void 
    4545        { 
    4646            if (m_index === m_last) { 
     
    4848            } 
    4949            m_index = (m_index + 1) % m_buffer.length; 
    50             painter.loadState(m_buffer[m_index]); 
     50            layers.loadState(m_buffer[m_index]); 
    5151            if (hasEventListener(UndoEvent.REDO)) 
    5252                dispatchEvent(new UndoEvent(UndoEvent.REDO)); 
    5353        } 
    5454         
    55         internal function push(painter:Painter):void 
     55        internal function push(layers:LayerBitmapCollection):void 
    5656        { 
    5757            m_index = (m_index + 1) % m_buffer.length; 
    58             painter.saveState(m_buffer[m_index]); 
     58            layers.saveState(m_buffer[m_index]); 
    5959            m_last = m_index; 
    6060            if (m_index === m_first) { 
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/ui/IApplication.as

    r3605 r3614  
    6262         */ 
    6363        function get canvasHeight():uint; 
    64          
    65         /** 
    66          * キャンバスのスプライトオブジェクトを取得する 
    67          *  
    68          */ 
    69         function get canvasView():Sprite; 
    7064    } 
    7165}