チェンジセット 3948

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

CanvasController? can draw from outside to inside of the canvas

ファイル:

凡例:

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

    r3822 r3948  
    33    import com.oysteinwika.ui.SWFMouseWheel; 
    44     
    5     import flash.display.Sprite; 
    6     import flash.events.Event; 
    7     import flash.events.IEventDispatcher; 
    85    import flash.events.MouseEvent; 
    96    import flash.geom.Rectangle; 
     
    1916    import org.libspark.gunyarapaint.framework.LayerBitmapCollection; 
    2017    import org.libspark.gunyarapaint.framework.TransparentBitmap; 
    21     import org.libspark.gunyarapaint.framework.modules.CanvasModule; 
    2218    import org.libspark.gunyarapaint.framework.modules.DropperModule; 
    2319    import org.libspark.gunyarapaint.framework.modules.ICanvasModule; 
     
    2723    internal class Canvas extends UIComponent 
    2824    { 
    29         public function Canvas(app:IApplication
     25        public function Canvas(app:IApplication, parent:CanvasController
    3026        { 
    3127            var rect:Rectangle = new Rectangle(0, 0, app.canvasWidth, app.canvasHeight); 
     
    4541            addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
    4642            addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove2); 
     43                        parent.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown); 
    4744            // Capabilities.version で OS を判断するのは適切ではないが、 
    4845            // 少なくとも MacOSX ではマウスホイールを正しく感知することが出来無いので対処療法として 
     
    158155        private function onMouseDown(event:MouseEvent):void 
    159156        { 
     157                        var x:Number = 0; 
     158                        var y:Number = 0; 
     159                        // Canvasは CanvasControllerに対する子供にあたるので、 
     160                        // 親(CanvasController)への伝播を停止する 
     161                        if (event.currentTarget == this) { 
     162                                x = event.localX; 
     163                                y = event.localY; 
     164                                event.stopPropagation(); 
     165                        } 
     166                        else { 
     167                                // Shiftキーを押していた場合CanvasControllerが 
     168                                // 担当する処理なので、スキップするようにする 
     169                                if (event.shiftKey) 
     170                                        return; 
     171                                x = mouseX; 
     172                                y = mouseY; 
     173                        } 
    160174            var app:gunyarapaint = gunyarapaint(Application.application); 
    161175            var layers:LayerBitmapCollection = app.layers; 
    162176            try { 
    163177                var canvasModule:ICanvasModule = app.canvasModule; 
    164                 var x:Number = event.localX; 
    165                 var y:Number = event.localY; 
    166                 if (m_rect.contains(x, y)) { 
    167                     // 例えば非表示あるいはロック状態のあるレイヤーに対して描写を行うと例外が送出されるので、 
    168                     // 必ず try/catch で囲む必要がある 
    169                     canvasModule.start(x, y); 
    170                     layers.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
    171                     layers.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); 
    172                     layers.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); 
    173                 } 
     178                                // 例えば非表示あるいはロック状態のあるレイヤーに対して描写を行うと例外が送出されるので、 
     179                                // 必ず try/catch で囲む必要がある 
     180                                canvasModule.start(x, y); 
     181                                layers.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove); 
     182                                layers.addEventListener(MouseEvent.MOUSE_UP, onMouseUp); 
     183                                layers.addEventListener(MouseEvent.MOUSE_OUT, onMouseOut); 
    174184            } catch (e:Error) { 
    175185                removeMouseEvents(layers); 
  • as3/gunyarapaint/branches/gunyarapaint/compat/src/org/libspark/gunyarapaint/ui/v1/CanvasController.as

    r3913 r3948  
    6767            m_canvasScaleX = m_canvasScaleY = 0.5; 
    6868            m_canvasScale = 1; 
    69             m_canvas = new Canvas(app); 
     69            m_canvas = new Canvas(app, this); 
    7070            m_canvasContainer.addChild(m_canvas); 
    7171            m_contentContainer.addChild(m_canvasContainer); 
     
    236236        private function onClickContentContainer(event:MouseEvent):void 
    237237        { 
    238             if (event.eventPhase == EventPhase.AT_TARGET) { 
     238            if (event.eventPhase == EventPhase.AT_TARGET && event.shiftKey) { 
    239239                var pen:Pen = IApplication(Application.application).pen; 
    240240                setStyle("backgroundColor", pen.color);