チェンジセット 3952: as3/gunyarapaint
- コミット日時:
- 2010/06/04 01:37:45 (3 年前)
- ファイル:
-
- as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/ui/v1/Canvas.as (更新) (4 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/LayerBitmapCollection.as (更新) (9 diffs)
- as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/modules/FreeHandModule.as (更新) (1 diff)
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/ui/v1/Canvas.as
r3951 r3952 43 43 addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 44 44 addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove2); 45 parent.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);45 parent.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 46 46 // Capabilities.version で OS を判断するのは適切ではないが、 47 47 // 少なくとも MacOSX ではマウスホイールを正しく感知することが出来無いので対処療法として … … 157 157 private function onMouseDown(event:MouseEvent):void 158 158 { 159 var x:Number = 0;160 var y:Number = 0;161 // Canvasは CanvasControllerに対する子供にあたるので、162 // 親(CanvasController)への伝播を停止する163 if (event.currentTarget == this) {164 x = event.localX;165 y = event.localY;166 event.stopPropagation();167 }168 else {169 // Shiftキーを押していた場合CanvasControllerが170 // 担当する処理なので、スキップするようにする171 // また、コンテナクラス(キャンバスの背景)でなければスキップする172 if (!(event.target is Container) || event.shiftKey)173 return;174 x = mouseX;175 y = mouseY;176 }159 var x:Number = 0; 160 var y:Number = 0; 161 // Canvasは CanvasControllerに対する子供にあたるので、 162 // 親(CanvasController)への伝播を停止する 163 if (event.currentTarget == this) { 164 x = event.localX; 165 y = event.localY; 166 event.stopPropagation(); 167 } 168 else { 169 // Shiftキーを押していた場合CanvasControllerが 170 // 担当する処理なので、スキップするようにする 171 // また、コンテナクラス(キャンバスの背景)でなければスキップする 172 if (!(event.target is Container) || event.shiftKey) 173 return; 174 x = mouseX; 175 y = mouseY; 176 } 177 177 var app:gunyarapaint = gunyarapaint(Application.application); 178 178 var layers:LayerBitmapCollection = app.layers; 179 179 try { 180 // 例えば非表示あるいはロック状態のあるレイヤーに対して描写を行うと例外が送出されるので、181 // 必ず try/catch で囲む必要がある182 app.canvasModule.start(x, y);183 layers.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);184 layers.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);185 layers.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut);180 // 例えば非表示あるいはロック状態のあるレイヤーに対して描写を行うと例外が送出されるので、 181 // 必ず try/catch で囲む必要がある 182 app.canvasModule.start(x, y); 183 layers.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 184 layers.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); 185 layers.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); 186 186 } catch (e:Error) { 187 187 removeMouseEvents(layers); … … 192 192 private function onMouseMove(event:MouseEvent):void 193 193 { 194 var app:IApplication = IApplication(Application.application);195 // 外側から描画するときにマウスのボタンを押さずとも勝手に描画されてしまう不具合を防ぐ196 if (!event.buttonDown) {197 removeMouseEvents(app.layers);198 return;199 }194 var app:IApplication = IApplication(Application.application); 195 // 外側から描画するときにマウスのボタンを押さずとも勝手に描画されてしまう不具合を防ぐ 196 if (!event.buttonDown) { 197 removeMouseEvents(app.layers); 198 return; 199 } 200 200 var x:Number = event.localX; 201 201 var y:Number = event.localY; … … 225 225 { 226 226 var app:IApplication = IApplication(Application.application); 227 app.canvasModule.stop(event.localX, event.localY);227 app.canvasModule.stop(event.localX, event.localY); 228 228 } 229 229 as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/LayerBitmapCollection.as
r3947 r3952 255 255 var destination:Point = new Point(0, 0); 256 256 var rectangle:Rectangle = new Rectangle(0, 0, width, height); 257 // 現在保管しているレイヤーを全て消去する257 // 現在保管しているレイヤーを全て消去する 258 258 clear(); 259 259 for (var i:uint = 0; i < layerCount; i++) { 260 // レイヤー画像は縦につながっているので、切り出しを行う260 // レイヤー画像は縦につながっているので、切り出しを行う 261 261 var bitmapData:BitmapData = new BitmapData(width, height); 262 262 rectangle.y = i * height; … … 277 277 public function save(layerBitmap:BitmapData, metadata:Object):void 278 278 { 279 // まずはレイヤー画像が規定以内かどうかを確認する279 // まずはレイヤー画像が規定以内かどうかを確認する 280 280 if (layerBitmap.height > MAX_PIXEL) { 281 281 var count:uint = Math.min(Math.floor((1.0 * MAX_PIXEL) / height), MAX); … … 286 286 var rectangle:Rectangle = new Rectangle(0, 0, width, height); 287 287 var destination:Point = new Point(0, 0); 288 // レイヤー画像を描写するので、ここでロックを掛ける288 // レイヤー画像を描写するので、ここでロックを掛ける 289 289 layerBitmap.lock(); 290 290 for (var i:uint = 0; i < layerCount; i++) { 291 291 var layer:LayerBitmap = m_layers[i]; 292 292 destination.y = i * height; 293 // 描写を行い、下の方向に縦のピクセル分ずらすことを繰り返す293 // 描写を行い、下の方向に縦のピクセル分ずらすことを繰り返す 294 294 layerBitmap.copyPixels(layer.bitmapData, rectangle, destination); 295 295 layersInfo.push(layer.toJSON()); … … 340 340 var count:uint = m_layers.length; 341 341 for (var i:uint = 0; i < count; i++) { 342 var layer:LayerBitmap = m_layers[i];343 // ここから例外を送出することは不具合が無ければないと考えられる342 var layer:LayerBitmap = m_layers[i]; 343 // ここから例外を送出することは不具合が無ければないと考えられる 344 344 m_sprite.removeChild(layer.displayObject); 345 345 } … … 373 373 var layers:Vector.<Object> = undoData.layers; 374 374 var count:uint = layers.length; 375 clear();375 clear(); 376 376 for (var i:uint = 0; i < count; i++) { 377 377 var data:Object = layers[i]; … … 405 405 internal function startDrawing(engine:PaintEngine):void 406 406 { 407 // 裏うつりしないレイヤーは今ないよね?407 // 裏うつりしないレイヤーは今ないよね? 408 408 if (m_tempLayer == null) { 409 409 var layer:LayerBitmap = currentLayer; 410 410 var blendMode:String = layer.blendMode; 411 // ペンの状態は必ずリセットします411 // ペンの状態は必ずリセットします 412 412 engine.resetPen(); 413 413 m_drawingSprite.blendMode = 414 414 blendMode == BlendMode.NORMAL ? BlendMode.LAYER : blendMode; 415 415 m_drawingSprite.alpha = layer.alpha; 416 // 裏うつりしない描写用のレイヤーを敷く416 // 裏うつりしない描写用のレイヤーを敷く 417 417 m_tempLayer = currentLayer.newDisplayObject; 418 418 m_tempLayer.blendMode = BlendMode.NORMAL; 419 419 m_tempLayer.alpha = 1.0; 420 // 下に先程のレイヤーが、上に描いた内容が入った表示オブジェクトを作成する420 // 下に先程のレイヤーが、上に描いた内容が入った表示オブジェクトを作成する 421 421 m_drawingSprite.addChild(m_tempLayer); 422 422 m_drawingSprite.addChild(engine.shape); 423 // 現在のレイヤーと先程の表示オブジェクトを入れ替える423 // 現在のレイヤーと先程の表示オブジェクトを入れ替える 424 424 m_sprite.removeChild(layer.displayObject); 425 425 m_sprite.addChildAt(m_drawingSprite, currentIndex); … … 429 429 internal function stopDrawing(engine:PaintEngine):void 430 430 { 431 // 裏うつりしないレイヤーは今あるよね?431 // 裏うつりしないレイヤーは今あるよね? 432 432 if (m_tempLayer != null) { 433 433 var layer:LayerBitmap = currentLayer; … … 436 436 blendMode == BlendMode.LAYER ? BlendMode.NORMAL : blendMode; 437 437 layer.alpha = m_drawingSprite.alpha; 438 // 現在のレイヤーと startDrawing で作成した表示オブジェクトを入れ替える438 // 現在のレイヤーと startDrawing で作成した表示オブジェクトを入れ替える 439 439 m_sprite.removeChild(m_drawingSprite); 440 440 m_sprite.addChildAt(layer.displayObject, currentIndex); 441 // 描いた内容を消去してリセットする441 // 描いた内容を消去してリセットする 442 442 engine.clear(); 443 // 裏うつりしないレイヤーと描いた内容を表示オブジェクトから外す443 // 裏うつりしないレイヤーと描いた内容を表示オブジェクトから外す 444 444 m_drawingSprite.removeChild(m_tempLayer); 445 445 m_drawingSprite.removeChild(engine.shape); 446 // 裏うつりしないレイヤーを開放446 // 裏うつりしないレイヤーを開放 447 447 m_tempLayer = null; 448 448 } … … 519 519 public function get newLayerBitmapData():BitmapData 520 520 { 521 // レイヤーの数の分だけ縦につながった空白の画像が作成されます521 // レイヤーの数の分だけ縦につながった空白の画像が作成されます 522 522 return new BitmapData(width, height * count, true, 0x0); 523 523 } as3/gunyarapaint/branches/gunyarapaint/framework/src/org/libspark/gunyarapaint/framework/modules/FreeHandModule.as
r3950 r3952 28 28 getArgumentsFromCoordinate(x, y) 29 29 ); 30 m_drawedLine = false;30 m_drawedLine = false; 31 31 } 32 32

