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

moved UndoEvent? to UndoStack? from Painter and therefore set internal to public in UndoStack?, and implemented Painter#load and Painter#save, changed the method signature of Painter#saveState

ファイル:

凡例:

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

    r3575 r3583  
    1111     
    1212    import org.libspark.gunyarapaint.framework.errors.NotSupportedVersionError; 
    13     import org.libspark.gunyarapaint.framework.events.UndoEvent; 
    1413     
    1514    /** 
     
    6564        { 
    6665            m_undo.undo(this); 
    67             if (hasEventListener(UndoEvent.UNDO)) 
    68                 dispatchEvent(new UndoEvent(UndoEvent.UNDO, m_undo.undoCount, m_undo.redoCount)); 
    6966        } 
    7067         
     
    7572        { 
    7673            m_undo.redo(this); 
    77             if (hasEventListener(UndoEvent.REDO)) 
    78                 dispatchEvent(new UndoEvent(UndoEvent.REDO, m_undo.undoCount, m_undo.redoCount)); 
    7974        } 
    8075         
     
    8580        { 
    8681            m_undo.push(this); 
    87             if (hasEventListener(UndoEvent.PUSH)) 
    88                 dispatchEvent(new UndoEvent(UndoEvent.PUSH, m_undo.undoCount, m_undo.redoCount)); 
    8982        } 
    9083         
     
    109102         * @param metadata メタデータ 
    110103         */ 
    111         public function restore(layerBitmaps:BitmapData, metadata:Object):void 
     104        public function load(layerBitmap:BitmapData, metadata:Object):void 
    112105        { 
    113106            var width:uint = metadata.width; 
    114107            var height:uint = metadata.height; 
    115             var layerCount:uint = layerBitmaps.height / height; 
     108            var layersInfo:Array = metadata.layer_infos; 
     109            var layerCount:uint = layerBitmap.height / height; 
    116110            var destination:Point = new Point(0, 0); 
    117111            var rectangle:Rectangle = new Rectangle(0, 0, width, height); 
     
    120114            for (var i:uint = 0; i < layerCount; i++) { 
    121115                var bitmapData:BitmapData = new BitmapData(width, height); 
    122                 bitmapData.copyPixels(layerBitmaps, rectangle, destination); 
     116                bitmapData.copyPixels(layerBitmap, rectangle, destination); 
    123117                rectangle.y = i * height; 
    124                 var layerBitmap:LayerBitmap = new LayerBitmap(bitmapData); 
    125                 m_layers.layers.push(layerBitmap); 
    126                 sprite.addChild(layerBitmap); 
    127             } 
     118                var layer:LayerBitmap = new LayerBitmap(bitmapData); 
     119                var layerInfo:Object = layersInfo[i]; 
     120                layer.alpha = layerInfo.alpha; 
     121                layer.blendMode = layerInfo.blendMode; 
     122                layer.locked = layerInfo.lock == "true"; 
     123                layer.name = layerInfo.name; 
     124                layer.visible = layerInfo.visible == "true"; 
     125                m_layers.layers.push(layer); 
     126                sprite.addChild(layer); 
     127            } 
     128        } 
     129         
     130        /** 
     131         * 連結されたレイヤー画像とメタデータを保存する 
     132         *  
     133         * @param layerBitmaps 縦に連結されたレイヤー画像 
     134         * @param metadata メタデータ 
     135         */ 
     136        public function save(layerBitmap:BitmapData, metadata:Object):void 
     137        { 
     138            var layersInfo:Array = []; 
     139            var layerCount:uint = layerBitmap.height / height; 
     140            var rectangle:Rectangle = new Rectangle(0, 0, width, height); 
     141            var destination:Point = new Point(0, 0); 
     142            layerBitmap.lock(); 
     143            for (var i:uint = 0; i < layerCount; i++) { 
     144                var layer:LayerBitmap = m_layers.at(i); 
     145                layerBitmap.copyPixels(layer.bitmapData, rectangle, destination); 
     146                destination.y = i * height; 
     147                var layerInfo:Object = { 
     148                    "alpha": layer.alpha, 
     149                    "blendMode": layer.blendMode, 
     150                    "lock": layer.locked ? "true" : "false", 
     151                    "name": layer.name, 
     152                    "visible": layer.visible ? "true" : "false" 
     153                }; 
     154                layersInfo.push(layerInfo); 
     155            } 
     156            layerBitmap.unlock(); 
     157            metadata.width = width; 
     158            metadata.height = height; 
     159            metadata.layer_infos = layersInfo; 
    128160        } 
    129161         
     
    506538        } 
    507539         
    508         internal function saveState():Object 
    509         { 
    510             var count:uint = m_layers.count; 
    511             var layers:Vector.<LayerBitmap> = new Vector.<LayerBitmap>( 
    512                 count, true 
    513             ); 
    514             for (var i:uint = 0; i < count; i++) { 
    515                 var layer:LayerBitmap = m_layers.layers[i].clone(); 
    516                 layers[i] = layer; 
    517             } 
    518             var undoData:Object = {}; 
    519             undoData.index = m_layers.currentIndex; 
    520             undoData.layers = layers; 
    521             return undoData; 
    522         } 
    523          
    524         internal function restoreState(undoData:Object):void 
     540        internal function loadState(undoData:Object):void 
    525541        { 
    526542            var i:uint = 0; 
     
    537553        } 
    538554         
     555        internal function saveState(undoData:Object):void 
     556        { 
     557            var count:uint = m_layers.count; 
     558            var layers:Vector.<LayerBitmap> = new Vector.<LayerBitmap>( 
     559                count, true 
     560            ); 
     561            for (var i:uint = 0; i < count; i++) { 
     562                var layer:LayerBitmap = m_layers.layers[i].clone(); 
     563                layers[i] = layer; 
     564            } 
     565            undoData.index = m_layers.currentIndex; 
     566            undoData.layers = layers; 
     567        } 
     568         
    539569        /** 
    540570         * レイヤーオブジェクトを返す 
     
    594624        } 
    595625         
     626        public function get undoStack():UndoStack 
     627        { 
     628            return m_undo; 
     629        } 
     630         
    596631        /** 
    597632         * 現在のレイヤーの透明度を変更する 
     
    628663         * @return ログのバージョン 
    629664         */ 
    630         internal function setUndo(value:UndoStack):void 
     665        internal function setUndoStack(value:UndoStack):void 
    631666        { 
    632667            m_undo = value; 
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Player.as

    r3524 r3583  
    4141        { 
    4242            var player:Player = new Player(new Parser(bytes)); 
    43             player.setUndo(new UndoStack(player, player.m_parser.maxUndoCount)); 
     43            player.setUndoStack(new UndoStack(player, player.m_parser.maxUndoCount)); 
    4444            return player; 
    4545        } 
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Recorder.as

    r3533 r3583  
    4949            bytes.writeShort(undo); 
    5050            var recorder:Recorder = new Recorder(bytes, width, height, commands); 
    51             recorder.setUndo(new UndoStack(recorder, undo)); 
     51            recorder.setUndoStack(new UndoStack(recorder, undo)); 
    5252            return recorder; 
    5353        } 
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/UndoStack.as

    r3524 r3583  
    11package org.libspark.gunyarapaint.framework 
    22{ 
     3    import flash.events.EventDispatcher; 
     4     
    35    import org.libspark.gunyarapaint.framework.errors.RedoError; 
    46    import org.libspark.gunyarapaint.framework.errors.UndoError; 
     7    import org.libspark.gunyarapaint.framework.events.UndoEvent; 
    58     
    69    /** 
     
    811     *  
    912     */ 
    10     internal final class UndoStack 
     13    public final class UndoStack extends EventDispatcher 
    1114    { 
    1215        public function UndoStack(painter:Painter, 
     
    1720            m_first = 0; 
    1821            m_last = 0; 
    19             m_buffer[i] = painter.saveState(); 
    20             for (var i:uint = 1; i < size + 1; i++) { 
    21                 m_buffer[i] = null; 
     22            for (var i:uint = 0; i < size + 1; i++) { 
     23                m_buffer[i] = {}; 
    2224            } 
     25            painter.saveState(m_buffer[0]); 
    2326        } 
    2427         
    25         public function undo(painter:Painter):void 
     28        internal function undo(painter:Painter):void 
    2629        { 
    2730            if (m_index === m_first) { 
     
    3437                m_index--; 
    3538            } 
    36             painter.restoreState(m_buffer[m_index]); 
     39            painter.loadState(m_buffer[m_index]); 
     40            if (hasEventListener(UndoEvent.UNDO)) 
     41                dispatchEvent(new UndoEvent(UndoEvent.UNDO)); 
    3742        } 
    3843         
    39         public function redo(painter:Painter):void 
     44        internal function redo(painter:Painter):void 
    4045        { 
    4146            if (m_index === m_last) { 
     
    4348            } 
    4449            m_index = (m_index + 1) % m_buffer.length; 
    45             painter.restoreState(m_buffer[m_index]); 
     50            painter.loadState(m_buffer[m_index]); 
     51            if (hasEventListener(UndoEvent.REDO)) 
     52                dispatchEvent(new UndoEvent(UndoEvent.REDO)); 
    4653        } 
    4754         
    48         public function push(painter:Painter):void 
     55        internal function push(painter:Painter):void 
    4956        { 
    5057            m_index = (m_index + 1) % m_buffer.length; 
    51             m_buffer[m_index] = painter.saveState(); 
     58            painter.saveState(m_buffer[m_index]); 
    5259            m_last = m_index; 
    5360            if (m_index === m_first) { 
    5461                m_first = (m_first + 1) % m_buffer.length; 
    5562            } 
     63            if (hasEventListener(UndoEvent.PUSH)) 
     64                dispatchEvent(new UndoEvent(UndoEvent.PUSH)); 
    5665        } 
    5766         
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/events/UndoEvent.as

    r3501 r3583  
    2525        public static const PUSH:String = PREFIX + "push"; 
    2626         
    27         public function UndoEvent(type:String, undoCount:int, redoCount:int
     27        public function UndoEvent(type:String
    2828        { 
    29             m_undoCount = undoCount; 
    30             m_redoCount = redoCount; 
    3129            super(type, false, false); 
    3230        } 
    33          
    34         /** 
    35          * やり直しが出来る回数を取得する 
    36          *  
    37          */ 
    38         public function get undoCount():int 
    39         { 
    40             return m_undoCount; 
    41         } 
    42          
    43         /** 
    44          * 巻き戻しが出来る回数を取得する 
    45          *  
    46          */ 
    47         public function get redoCount():int 
    48         { 
    49             return m_redoCount; 
    50         } 
    51          
    52         private var m_undoCount:int; 
    53         private var m_redoCount:int; 
    5431    } 
    5532} 
  • as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/ui/IApplication.as

    r3524 r3583  
    55    import org.libspark.gunyarapaint.framework.LayerBitmapCollection; 
    66    import org.libspark.gunyarapaint.framework.Pen; 
     7    import org.libspark.gunyarapaint.framework.UndoStack; 
    78    import org.libspark.gunyarapaint.framework.modules.ICanvasModule; 
    89     
     
    3839         
    3940        /** 
     41         * やり直し管理オブジェクトを取得する 
     42         *  
     43         */ 
     44        function get undoStack():UndoStack; 
     45         
     46        /** 
    4047         * 利用可能なブレンドモードを取得する 
    4148         * (dataProvider.toArray()での利用を想定している)