チェンジセット 3938: as3/gunyarapaint
- コミット日時:
- 2010/05/30 21:41:28 (3 年前)
- ファイル:
-
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/AuxPixelView.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/LayerBitmap.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/LayerBitmapCollection.as (更新) (7 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/PaintEngineV1.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/PaintEngineV2.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Painter.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Parser.as (更新) (9 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/UndoStack.as (更新) (5 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/errors/AddLayerError.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/i18n/ITranslator.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/i18n/NullTranslator.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/i18n/TranslatorRegistry.as (更新) (2 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/modules/CanvasModuleContext.as (更新) (3 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/net/IParameters.as (更新) (1 diff)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/net/IRequest.as (更新) (1 diff)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/AuxPixelView.as
r3605 r3938 20 20 var skew:Graphics = m_skew.graphics; 21 21 var i:uint = 0; 22 // 縦線を描く 22 23 for (i = m_divideCount; i < width; i += m_divideCount) { 23 24 box.moveTo(i, 0); 24 25 box.lineTo(i, height); 25 26 } 27 // 横線を描く 26 28 for (i = m_divideCount; i < height; i += m_divideCount) { 27 29 box.moveTo(0, i); as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/LayerBitmap.as
r3765 r3938 65 65 blendMode:String):void 66 66 { 67 // m_bitmapData.clone でアンドゥ内のビットマップ画像を保持するようにする 68 // これは以下の floodFill や setPixel も同じ 67 69 setBitmapData(m_bitmapData.clone()); 68 70 m_bitmapData.draw(source, null, null, blendMode); as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/LayerBitmapCollection.as
r3914 r3938 255 255 var destination:Point = new Point(0, 0); 256 256 var rectangle:Rectangle = new Rectangle(0, 0, width, height); 257 // 現在保管しているレイヤーを全て消去する 257 258 clear(); 258 259 for (var i:uint = 0; i < layerCount; i++) { 260 // レイヤー画像は縦につながっているので、切り出しを行う 259 261 var bitmapData:BitmapData = new BitmapData(width, height); 260 262 rectangle.y = i * height; … … 275 277 public function save(layerBitmap:BitmapData, metadata:Object):void 276 278 { 279 // まずはレイヤー画像が規定以内かどうかを確認する 277 280 if (layerBitmap.height > MAX_PIXEL) { 278 281 var count:uint = Math.min(Math.floor((1.0 * MAX_PIXEL) / height), MAX); … … 283 286 var rectangle:Rectangle = new Rectangle(0, 0, width, height); 284 287 var destination:Point = new Point(0, 0); 288 // レイヤー画像を描写するので、ここでロックを掛ける 285 289 layerBitmap.lock(); 286 290 for (var i:uint = 0; i < layerCount; i++) { 287 291 var layer:LayerBitmap = m_layers[i]; 288 292 destination.y = i * height; 293 // 描写を行い、下の方向に縦のピクセル分ずらすことを繰り返す 289 294 layerBitmap.copyPixels(layer.bitmapData, rectangle, destination); 290 295 layersInfo.push(layer.toJSON()); … … 403 408 internal function startDrawing(engine:PaintEngine):void 404 409 { 410 // 裏うつりしないレイヤーは今ないよね? 405 411 if (m_tempLayer == null) { 406 412 var layer:LayerBitmap = currentLayer; 407 413 var blendMode:String = layer.blendMode; 414 // ペンの状態は必ずリセットします 408 415 engine.resetPen(); 409 416 m_drawingSprite.blendMode = 410 417 blendMode == BlendMode.NORMAL ? BlendMode.LAYER : blendMode; 411 418 m_drawingSprite.alpha = layer.alpha; 419 // 裏うつりしない描写用のレイヤーを敷く 412 420 m_tempLayer = currentLayer.newDisplayObject; 413 421 m_tempLayer.blendMode = BlendMode.NORMAL; 414 422 m_tempLayer.alpha = 1.0; 423 // 下に先程のレイヤーが、上に描いた内容が入った表示オブジェクトを作成する 415 424 m_drawingSprite.addChild(m_tempLayer); 416 425 m_drawingSprite.addChild(engine.shape); 426 // 現在のレイヤーと先程の表示オブジェクトを入れ替える 417 427 m_sprite.removeChild(layer.displayObject); 418 428 m_sprite.addChildAt(m_drawingSprite, currentIndex); … … 422 432 internal function stopDrawing(engine:PaintEngine):void 423 433 { 434 // 裏うつりしないレイヤーは今あるよね? 424 435 if (m_tempLayer != null) { 425 436 var layer:LayerBitmap = currentLayer; … … 428 439 blendMode == BlendMode.LAYER ? BlendMode.NORMAL : blendMode; 429 440 layer.alpha = m_drawingSprite.alpha; 441 // 現在のレイヤーと startDrawing で作成した表示オブジェクトを入れ替える 430 442 m_sprite.removeChild(m_drawingSprite); 431 443 m_sprite.addChildAt(layer.displayObject, currentIndex); 444 // 描いた内容を消去してリセットする 432 445 engine.clear(); 446 // 裏うつりしないレイヤーと描いた内容を表示オブジェクトから外す 433 447 m_drawingSprite.removeChild(m_tempLayer); 434 448 m_drawingSprite.removeChild(engine.shape); 449 // 裏うつりしないレイヤーを開放 435 450 m_tempLayer = null; 436 451 } … … 507 522 public function get newLayerBitmapData():BitmapData 508 523 { 524 // レイヤーの数の分だけ縦につながった空白の画像が作成されます 509 525 return new BitmapData(width, height * count, true, 0x0); 510 526 } as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/PaintEngineV1.as
r3699 r3938 3 3 import flash.display.Shape; 4 4 import flash.geom.Point; 5 5 6 /** 7 * @private 8 * 9 * ログのバージョンが 0.0.2 から 0.2.0 で使用されるペイントエンジン。 10 * 位置補正のアルゴリズムが異なっているが、現在となっては間違いとされている 11 */ 6 12 internal final class PaintEngineV1 extends PaintEngine 7 13 { as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/PaintEngineV2.as
r3701 r3938 3 3 import flash.display.Shape; 4 4 import flash.geom.Point; 5 5 6 /** 7 * @private 8 * 9 * ログのバージョンが 0.2.1 から使用されるペイントエンジン 10 */ 6 11 internal final class PaintEngineV2 extends PaintEngine 7 12 { as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Painter.as
r3844 r3938 15 15 16 16 /** 17 * 再生及び記録のための共通基盤 17 * 再生及び記録のための共通基盤。実際の処理は Painter または PaintEngine に委譲する 18 18 * 19 19 */ as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/Parser.as
r3926 r3938 44 44 { 45 45 var signature:String = m_bytes.readUTFBytes(14); 46 // 先頭の 14bytes を確認 46 47 if (signature !== "GUNYARA_PAINT:") { 47 48 throw new InvalidSignatureError(); 48 49 } 50 // 6 bytes をとってバージョン文字列を確認 49 51 var pattern:RegExp = /^(\d)\.(\d)\.(\d):$/; 50 52 var version:uint = 0; … … 56 58 + uint(matched[3]); 57 59 } 60 // 残り 6bytes はそれぞれ画像の幅と高さ、アンドゥ回数が入っている 58 61 data.width = m_bytes.readShort(); 59 62 data.height = m_bytes.readShort(); … … 69 72 public function rewind():void 70 73 { 74 // 26bytes 未満であれば エラーを出す 71 75 if (m_bytes.length < EOH) { 72 76 throw new ArgumentError( 73 "log data' length is less than 26bytes"77 "log data' length is less than " + EOF + " bytes" 74 78 ); 75 79 } … … 98 102 var eventType:String = CommandEvent.PREPARSE; 99 103 while (bytes.bytesAvailable > 0) { 104 // TODO: Parser#parse を使う 100 105 var byte:uint = bytes.readUnsignedByte(); 101 106 if (byte & 0x80) { … … 113 118 } 114 119 } 120 // 連続して Undo または Redo が使われている場合のみカウントする 115 121 if ((command.commandID === UndoCommand.ID || 116 122 command.commandID === RedoCommand.ID) && … … 119 125 undoCount++; 120 126 } 127 // それ以外の場合はリセットする 121 128 else { 122 129 maxUndo = maxUndo < undoCount ? undoCount : maxUndo; … … 153 160 } 154 161 var byte:uint = bytes.readUnsignedByte(); 162 // 0x80 の場合は例外として直線描写命令とみなす 155 163 if (byte & 0x80) { 156 164 command = m_commands[LineToCommand.ID]; 157 165 LineToCommand(command).compressedValue = byte; 158 166 } 167 // 0x40 の場合は例外として位置移動命令とみなす 159 168 else if (byte & 0x40) { 160 169 command = m_commands[MoveToCommand.ID]; … … 163 172 else { 164 173 var command:ICommand = m_commands[byte]; 174 // 対応するコマンドが無い 165 175 if (command === null) { 166 176 throw new InvalidCommandError(m_count, byte); … … 177 187 public function get bytes():ByteArray 178 188 { 189 // XXX: コピーした方が望ましいと考えられる 179 190 return m_bytes; 180 191 } as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/UndoStack.as
r3903 r3938 28 28 } 29 29 30 /** 31 * UndoStack を復元する 32 * 33 * @param value #save で保存したオブジェクト 34 */ 30 35 public function load(value:Object):void 31 36 { … … 55 60 } 56 61 62 /** 63 * UndoStack を保存する 64 * 65 * @param value 保存先となる空のオブジェクト 66 */ 57 67 public function save(value:Object):void 58 68 { … … 120 130 } 121 131 132 /** 133 * 巻き戻し可能な回数を返す 134 * 135 * @return 136 */ 122 137 public function get undoCount():uint 123 138 { … … 126 141 } 127 142 143 /** 144 * やり直し可能な回数を返す 145 * 146 * @return 147 */ 128 148 public function get redoCount():uint 129 149 { … … 132 152 } 133 153 154 /** 155 * UndoStack の大きさを返す 156 * 157 * @return 158 */ 134 159 public function get size():uint 135 160 { as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/errors/AddLayerError.as
r3755 r3938 2 2 { 3 3 import org.libspark.gunyarapaint.framework.i18n.TranslatorRegistry; 4 4 5 /** 6 * 規定のレイヤー数を超えて作成しようとした場合に作成される 7 * 8 */ 5 9 public final class AddLayerError extends Error 6 10 { as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/i18n/ITranslator.as
r3755 r3938 1 1 package org.libspark.gunyarapaint.framework.i18n 2 2 { 3 /** 4 * 翻訳するクラスのインターフェース 5 * 6 */ 3 7 public interface ITranslator 4 8 { 9 /** 10 * 文字列から現在のロケールに合わせて翻訳を行う 11 * 12 * @param str 翻訳する文字列 13 * @param rest 翻訳する文字列に対する引数 14 * @return 翻訳した文字列 15 * 16 */ 5 17 function translate(str:String, ...rest):String; 6 18 } as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/i18n/NullTranslator.as
r3755 r3938 1 1 package org.libspark.gunyarapaint.framework.i18n 2 2 { 3 /** 4 * @private 5 * 6 */ 3 7 public final class NullTranslator implements ITranslator 4 8 { as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/i18n/TranslatorRegistry.as
r3755 r3938 1 1 package org.libspark.gunyarapaint.framework.i18n 2 2 { 3 /** 4 * ITranslator を実装するクラスを管理するグローバルなクラス 5 * 6 */ 3 7 public final class TranslatorRegistry 4 8 { 9 /** 10 * ITranslator を実装したクラスをインストールして利用出来るようにする 11 * 12 * @param translator ITranslator を実装したクラス 13 */ 5 14 public static function install(translator:ITranslator):void 6 15 { 7 16 s_translator = translator; 8 17 } 9 18 19 /** 20 * ITranslator を実装したクラスを返す 21 * 22 * @return 23 */ 10 24 public static function get translator():ITranslator 11 25 { … … 13 27 } 14 28 29 /** 30 * ITranslator#translator のショートカット 31 * 32 * @param str 翻訳する文字列 33 * @param rest 翻訳する文字列に対する引数 34 * @return 翻訳した文字列 35 */ 15 36 public static function tr(str:String, ...rest):String 16 37 { as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/modules/CanvasModuleContext.as
r3801 r3938 3 3 import org.libspark.gunyarapaint.framework.Recorder; 4 4 5 // TODO: CanvasModuleContext 5 /** 6 * ICanvasModule を管理するクラス 7 * 8 */ 6 9 public final class CanvasModuleContext 7 10 { … … 22 25 } 23 26 27 /** 28 * ICanvasModule を登録して利用出来るようにする 29 * 30 * @param module ICanvasModule を実装したクラス 31 */ 24 32 public function registerModule(module:ICanvasModule):void 25 33 { … … 27 35 } 28 36 37 /** 38 * ICanvasModule#name に対応するモジュールID から ICanvasModule を実装したクラスを返す 39 * 40 * @param name モジュールID 41 * @return ICanvasModule を実装したクラス 42 */ 29 43 public function getModule(name:String):ICanvasModule 30 44 { as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/net/IParameters.as
r3899 r3938 2 2 { 3 3 import flash.utils.ByteArray; 4 4 5 /** 6 * IRequest#post に渡す文字列化可能なインターフェース 7 * 8 */ 5 9 public interface IParameters 6 10 { 11 /** 12 * IParameters を実装したクラス内の複数のパラメータを文字列化する 13 * 14 * @return IRequest#post に最適な文字列 15 */ 7 16 function serialize():ByteArray; 8 17 } as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/net/IRequest.as
r3911 r3938 4 4 import flash.events.IEventDispatcher; 5 5 6 /** 7 * 描いた絵を投稿するために必要な通信を行うためのインターフェース 8 * 9 */ 6 10 public interface IRequest extends IEventDispatcher 7 11 { 12 /** 13 * 描いた絵を投稿する 14 * 15 * @param url 投稿先 16 * @param parameters IParameters を実装したクラス 17 */ 8 18 function post(url:String, parameters:IParameters):void; 9 19 20 /** 21 * JSONなどの文字列データを取得する 22 * 23 * @param url 取得先 24 */ 10 25 function get(url:String):void; 11 26 27 /** 28 * 画像などの Loader クラスで使用可能なバイナリデータを取得する 29 * 30 * @param url 取得先 31 */ 12 32 function load(url:String):void; 13 33 34 /** 35 * Loader か URLLoader を返す。 36 * 37 * Loader と URLLoader は継承関係に無いため、キャストする必要がある。 38 * そのため、両方共継承している EventDispacher クラスをひとまず返す 39 * 40 * @return Loader または URLLoader のインスタンス 41 */ 14 42 function get loader():EventDispatcher; 15 43 44 /** 45 * Loader か URLLoader のインスタンスを設定する。それ以外の場合は ArgumentError を送出する 46 * 47 * @param value Loader か URLLoader のインスタンス 48 */ 16 49 function set loader(value:EventDispatcher):void; 17 50 }

