チェンジセット 3583
- コミット日時:
- 2010/03/22 15:26:55 (3 年前)
- ファイル:
-
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Painter.as (更新) (10 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Player.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Recorder.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/UndoStack.as (更新) (5 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/events/UndoEvent.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/ui/IApplication.as (更新) (2 diffs)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Painter.as
r3575 r3583 11 11 12 12 import org.libspark.gunyarapaint.framework.errors.NotSupportedVersionError; 13 import org.libspark.gunyarapaint.framework.events.UndoEvent;14 13 15 14 /** … … 65 64 { 66 65 m_undo.undo(this); 67 if (hasEventListener(UndoEvent.UNDO))68 dispatchEvent(new UndoEvent(UndoEvent.UNDO, m_undo.undoCount, m_undo.redoCount));69 66 } 70 67 … … 75 72 { 76 73 m_undo.redo(this); 77 if (hasEventListener(UndoEvent.REDO))78 dispatchEvent(new UndoEvent(UndoEvent.REDO, m_undo.undoCount, m_undo.redoCount));79 74 } 80 75 … … 85 80 { 86 81 m_undo.push(this); 87 if (hasEventListener(UndoEvent.PUSH))88 dispatchEvent(new UndoEvent(UndoEvent.PUSH, m_undo.undoCount, m_undo.redoCount));89 82 } 90 83 … … 109 102 * @param metadata メタデータ 110 103 */ 111 public function restore(layerBitmaps:BitmapData, metadata:Object):void104 public function load(layerBitmap:BitmapData, metadata:Object):void 112 105 { 113 106 var width:uint = metadata.width; 114 107 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; 116 110 var destination:Point = new Point(0, 0); 117 111 var rectangle:Rectangle = new Rectangle(0, 0, width, height); … … 120 114 for (var i:uint = 0; i < layerCount; i++) { 121 115 var bitmapData:BitmapData = new BitmapData(width, height); 122 bitmapData.copyPixels(layerBitmap s, rectangle, destination);116 bitmapData.copyPixels(layerBitmap, rectangle, destination); 123 117 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; 128 160 } 129 161 … … 506 538 } 507 539 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 525 541 { 526 542 var i:uint = 0; … … 537 553 } 538 554 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 539 569 /** 540 570 * レイヤーオブジェクトを返す … … 594 624 } 595 625 626 public function get undoStack():UndoStack 627 { 628 return m_undo; 629 } 630 596 631 /** 597 632 * 現在のレイヤーの透明度を変更する … … 628 663 * @return ログのバージョン 629 664 */ 630 internal function setUndo (value:UndoStack):void665 internal function setUndoStack(value:UndoStack):void 631 666 { 632 667 m_undo = value; as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Player.as
r3524 r3583 41 41 { 42 42 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)); 44 44 return player; 45 45 } as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Recorder.as
r3533 r3583 49 49 bytes.writeShort(undo); 50 50 var recorder:Recorder = new Recorder(bytes, width, height, commands); 51 recorder.setUndo (new UndoStack(recorder, undo));51 recorder.setUndoStack(new UndoStack(recorder, undo)); 52 52 return recorder; 53 53 } as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/UndoStack.as
r3524 r3583 1 1 package org.libspark.gunyarapaint.framework 2 2 { 3 import flash.events.EventDispatcher; 4 3 5 import org.libspark.gunyarapaint.framework.errors.RedoError; 4 6 import org.libspark.gunyarapaint.framework.errors.UndoError; 7 import org.libspark.gunyarapaint.framework.events.UndoEvent; 5 8 6 9 /** … … 8 11 * 9 12 */ 10 internal final class UndoStack13 public final class UndoStack extends EventDispatcher 11 14 { 12 15 public function UndoStack(painter:Painter, … … 17 20 m_first = 0; 18 21 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] = {}; 22 24 } 25 painter.saveState(m_buffer[0]); 23 26 } 24 27 25 publicfunction undo(painter:Painter):void28 internal function undo(painter:Painter):void 26 29 { 27 30 if (m_index === m_first) { … … 34 37 m_index--; 35 38 } 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)); 37 42 } 38 43 39 publicfunction redo(painter:Painter):void44 internal function redo(painter:Painter):void 40 45 { 41 46 if (m_index === m_last) { … … 43 48 } 44 49 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)); 46 53 } 47 54 48 publicfunction push(painter:Painter):void55 internal function push(painter:Painter):void 49 56 { 50 57 m_index = (m_index + 1) % m_buffer.length; 51 m_buffer[m_index] = painter.saveState();58 painter.saveState(m_buffer[m_index]); 52 59 m_last = m_index; 53 60 if (m_index === m_first) { 54 61 m_first = (m_first + 1) % m_buffer.length; 55 62 } 63 if (hasEventListener(UndoEvent.PUSH)) 64 dispatchEvent(new UndoEvent(UndoEvent.PUSH)); 56 65 } 57 66 as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/events/UndoEvent.as
r3501 r3583 25 25 public static const PUSH:String = PREFIX + "push"; 26 26 27 public function UndoEvent(type:String , undoCount:int, redoCount:int)27 public function UndoEvent(type:String) 28 28 { 29 m_undoCount = undoCount;30 m_redoCount = redoCount;31 29 super(type, false, false); 32 30 } 33 34 /**35 * やり直しが出来る回数を取得する36 *37 */38 public function get undoCount():int39 {40 return m_undoCount;41 }42 43 /**44 * 巻き戻しが出来る回数を取得する45 *46 */47 public function get redoCount():int48 {49 return m_redoCount;50 }51 52 private var m_undoCount:int;53 private var m_redoCount:int;54 31 } 55 32 } as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/ui/IApplication.as
r3524 r3583 5 5 import org.libspark.gunyarapaint.framework.LayerBitmapCollection; 6 6 import org.libspark.gunyarapaint.framework.Pen; 7 import org.libspark.gunyarapaint.framework.UndoStack; 7 8 import org.libspark.gunyarapaint.framework.modules.ICanvasModule; 8 9 … … 38 39 39 40 /** 41 * やり直し管理オブジェクトを取得する 42 * 43 */ 44 function get undoStack():UndoStack; 45 46 /** 40 47 * 利用可能なブレンドモードを取得する 41 48 * (dataProvider.toArray()での利用を想定している)

