チェンジセット 1164

差分発生行の前後
無視リスト:
コミット日時:
2008/08/27 18:21:22 (5 年前)
コミッタ:
tasuku
ログメッセージ:

r115@poppop (orig r114): tasuku | 2008-08-14 19:07:20 +0900
per-layer blendMode and on-layer blendMode and preview draw shape are properlly works well.

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint/controls/GPCanvas.as

    r1162 r1164  
    2121  public class GPCanvas extends UIComponent 
    2222  { 
    23     private var _layers:GPLayerArray; 
    24      
    2523    private var baseSprite:Sprite; // イベント取得用スプライト 
    2624    private var baseBitmap:Bitmap; // ベース画像(しましま) (1) 
    27     private var lineShape:Shape; // 描画用Shape 
    28     private var additionalBox:Shape; // 縦横補助線 (5
    29     private var additionalSkew:Shape; // 斜め補助線 (6
    30     private var previewShape:Shape; // プレビュー用 (7
     25    private var _layers:GPLayerArray; // レイヤ集(2) 
     26    private var additionalBox:Shape; // 縦横補助線 (3
     27    private var additionalSkew:Shape; // 斜め補助線 (4
     28    private var previewShape:Shape; // プレビュー用 (5
    3129 
    3230    private var additionalNumber:uint = 4; // 補助線の分割数 
     
    8280      // combineLayers(); 
    8381 
    84       // 描画用shape 
    85       lineShape = new Shape(); 
    86       addChildAt(lineShape, 3); 
    87  
    8882      // 補助線用shape 
    8983      additionalBox = new Shape(); 
     
    9286      additionalBox.visible = false; 
    9387      additionalSkew.visible = false; 
    94       addChildAt(additionalBox, 4); 
    95       addChildAt(additionalSkew, 5); 
    96  
    97       // テンポラリ・プレビュー用shape(直線ツールとか) 
    98       previewShape = new Shape(); 
    99       addChildAt(previewShape, 6); 
     88      addChildAt(additionalBox, 3); 
     89      addChildAt(additionalSkew, 4); 
    10090 
    10191      if (logger) { 
     
    168158          _pen = pen; 
    169159          _pen.canvas = this; 
     160          _pen.layers = _layers; 
    170161        } 
    171162         
     
    174165        } 
    175166         
    176         private function setLineStyle(shape:Shape):void { 
    177       shape.graphics.lineStyle(_pen.thickness, 
    178                                _pen.color, 
    179                                _pen.alpha, 
    180                                _pen.pixelHinting, 
    181                                _pen.scaleMode, 
    182                                _pen.capsStyle, 
    183                                _pen.jointStyle, 
    184                                _pen.miterLimit); 
    185  
    186       shape.blendMode = _pen.blendMode;            
    187         } 
    188          
    189167        public function setAndLogLineStyle():void { 
    190       setLineStyle(lineShape); 
     168      _pen.setLineStyle(_pen.drawShape); 
    191169       
    192170      if (writeLog) { 
     
    244222        } 
    245223         
    246         public function previewClear():void { 
    247           previewShape.graphics.clear(); 
    248         } 
    249          
    250         public function previewLineTo(fromX:Number, fromY:Number, toX:Number, toY:Number):void { 
    251           previewShape.graphics.clear(); 
    252           setLineStyle(previewShape); 
    253           previewShape.graphics.moveTo(zz(fromX), zz(fromY)); 
    254           previewShape.graphics.lineTo(zz(toX), zz(toY)); 
    255         }        
    256          
    257224        // 描画関係のフラグ 
    258225        public var isMoveTo:Boolean = false; 
     
    262229        // 0.0.1の互換性のため 
    263230    public function oldMoveTo(x:Number, y:Number):void { 
    264       lineShape.graphics.moveTo(x, y); 
     231      _pen.drawGraphics.moveTo(x, y); 
    265232      setAndLogLineStyle(); 
    266233      logWrite(['moveTo', x, y]); 
     
    279246    // 0.0.1の互換性のため 
    280247    public function oldLineTo(x:Number, y:Number):void { 
    281       lineShape.graphics.lineTo(x, y); 
     248      _pen.drawGraphics.lineTo(x, y); 
    282249      logWrite(['lineTo', x, y]); 
    283250      isDrawnLine = true; 
     
    311278      x = Math.floor(x) + 0.5; 
    312279      y = Math.floor(y) + 0.5; 
    313       lineShape.graphics.drawRect(x, y, width, height); 
     280      _pen.drawGraphics.drawRect(x, y, width, height); 
    314281      logWrite(['drawRect', x, y, width, height]); 
    315282    } 
    316283     
    317284    public function beginFill(color:uint, alpha:Number):void { 
    318       lineShape.graphics.beginFill(color, alpha); 
     285      _pen.drawGraphics.beginFill(color, alpha); 
    319286      logWrite(['beginFill', color, alpha]); 
    320287    } 
     
    323290      var x:Number = currentPoint.x; 
    324291      var y:Number = currentPoint.y; 
    325       lineShape.graphics.drawCircle(x, y, radius); 
     292      _pen.drawGraphics.drawCircle(x, y, radius); 
    326293      // moveToでx, yは保存されているので、半径のみ保存 
    327294      logWrite(['drawCircle', radius]); 
     
    329296     
    330297    public function endFill():void { 
    331       lineShape.graphics.endFill(); 
     298      _pen.drawGraphics.endFill(); 
    332299      logWrite(['endFill']); 
    333300    } 
    334      
     301 
    335302    public function drawOldBugPointRect():void { 
    336303      drawRect(currentPoint.x, currentPoint.y, 1, 1); 
     
    376343    public function drawShapeOnBitmap():void { 
    377344      // 描画 
    378       _layers.draw(lineShape, null, null, _pen.blendMode, null, false); 
     345      _layers.draw(_pen.drawShape, null, null, _pen.blendMode, null, false); 
    379346      logWrite(['drawShapeOnBitmap']); 
    380347      afterDrawBitmap(); 
     
    385352      combineLayers(); 
    386353      // 描画用シェイプは空にしておく 
    387       lineShape.graphics.clear(); 
     354      _pen.clearDrawShape(); 
    388355      isMoveTo = false; 
    389356      // undoRedoのイベントを起こす 
  • as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint/entities/GPLayerArray.as

    r1162 r1164  
    33  import flash.display.BitmapData; 
    44  import flash.display.IBitmapDrawable; 
     5  import flash.display.Shape; 
    56  import flash.display.Sprite; 
    67  import flash.geom.ColorTransform; 
     
    2526    private var _combinedBitmapData:BitmapData; 
    2627    private var _view:Sprite; 
     28    private var _targetSprite:Sprite; // 描画対象のBitmapと描画用Shapeを子に持つSprite。 
    2729 
    2830    public function GPLayerArray(a:Array, w:uint, h:uint, undoBufferSize:uint) { 
     
    243245      return _view; 
    244246    } 
     247    // 描画用レイヤを一時的に挿入・削除する。 
     248    public function insertDrawLayer(s:Shape):void { 
     249      // ターゲットレイヤと描画レイヤを子に持つSpriteを作成し、 
     250      // それをターゲットレイヤと一時的に入れ換える。 
     251      // なぜなら、blendMode付きペンの場合、その対象は描画レイヤであって、 
     252      // 統合されたイメージではないから。 
     253      _targetSprite = new Sprite(); 
     254      _targetSprite.mouseEnabled = false; 
     255      _targetSprite.addChild(_a[_targetIndex].bitmap); 
     256      _targetSprite.addChild(s); 
     257      _view.addChildAt(_targetSprite, _targetIndex); 
     258    } 
     259    public function removeDrawLayer(s:Shape):void { 
     260      // 上のを戻す 
     261      if (_targetSprite) { 
     262        _view.removeChild(_targetSprite); 
     263        _targetSprite = null;         
     264      } 
     265      _view.addChildAt(_a[_targetIndex].bitmap, _targetIndex); 
     266    } 
    245267  } 
    246268} 
  • as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint/entities/GPPen.as

    r1163 r1164  
    33  import flash.display.BlendMode; 
    44  import flash.display.CapsStyle; 
     5  import flash.display.Graphics; 
    56  import flash.display.JointStyle; 
    67  import flash.display.LineScaleMode; 
     8  import flash.display.Shape; 
    79  import flash.events.MouseEvent; 
    810  import flash.geom.Point; 
    911   
    10   import mx.controls.Alert; 
    11  
    1212  import gunyarapaint.controls.GPCanvas; 
    1313  import gunyarapaint.controls.GPCanvasWindowControl; 
    1414  import gunyarapaint.controls.PenDetailControl; 
     15   
     16  import mx.controls.Alert; 
    1517 
    1618  public class GPPen 
     
    4547    private var _canvasWindow:GPCanvasWindowControl; 
    4648    private var _control:PenDetailControl; 
     49 
     50    private var _drawShape:Shape; // 描画用Shape 
     51    private var _previewShape:Shape; // プレビュー用Shape(直線とか) 
     52    private var _layers:GPLayerArray; 
    4753     
    4854    public function get mode():uint { 
     
    8288      return 0xFF000000 | _color; 
    8389    } 
    84      
    85     public function set mode(v:uint):void { 
    86       _mode = v; 
    87       if (_canvas) { 
    88         switch (mode) { 
    89         case PEN_MODE_DROPPER: 
    90           _canvas.setCursor(dropperIcon); 
    91           break; 
    92         case PEN_MODE_HANDTOOL: 
    93           _canvas.setCursor(handOpenIcon); 
    94           break; 
    95         case PEN_MODE_ERASER: 
    96            // FIXME: give me eraser icon 
    97           _canvas.setCursor(null); 
    98           break; 
    99         default: 
    100           _canvas.setCursor(null); 
    101         } 
    102         if (mode == PEN_MODE_DROPPER) { 
    103         } else { 
    104         }         
    105       } 
    106     } 
    107     public function set thickness(v:uint):void { 
    108       if (v > 32) { 
    109         // TODO: alert 
    110         return; 
    111       } 
    112       _thickness = v; 
    113     } 
    114      
    115     public function set color(v:uint):void { 
    116       _color = v; 
    117       if (_control) { 
    118         _control.penColorChangeHandler(); 
    119       } 
    120     } 
    121     public function set alpha(v:Number):void { 
    122       _alpha = v; 
    123     } 
    124     public function set blendMode(v:String):void { 
    125       _blendMode = v; 
    126     } 
    127     public function set scaleMode(v:String):void { 
    128       _scaleMode = v; 
    129     } 
    130     public function set capsStyle(v:String):void { 
    131       _capsStyle = v; 
    132     } 
    133     public function set jointStyle(v:String):void { 
    134       _jointStyle = v; 
    135     } 
    136     public function set miterLimit(v:Number):void { 
    137       _miterLimit = v; 
    138     } 
    139     public function set pixelHinting(v:Boolean):void { 
    140       _pixelHinting = v; 
    141     } 
    142      
    143     public function set canvas(c:GPCanvas):void { 
    144       _canvas = c; 
    145     } 
    146     public function set canvasWindow(cw:GPCanvasWindowControl):void { 
    147       _canvasWindow = cw; 
    148     } 
    149     public function set control(c:PenDetailControl):void { 
    150       _control = c; 
    151     } 
    152      
     90    public function get drawShape():Shape { 
     91      return _drawShape; 
     92    } 
     93 
    15394    public function GPPen(thickness:uint = 3, 
    15495                          color:uint = 0x000000, 
     
    171112        this.pixelHinting = pixelHinting; 
    172113        this.mode = mode; 
     114        _drawShape = new Shape(); 
     115        _previewShape = new Shape(); 
    173116    } 
    174117     
    175118    public function clone():GPPen { 
    176119      return new GPPen(thickness, color, alpha, blendMode, scaleMode, capsStyle, jointStyle, miterLimit, pixelHinting, mode); 
     120    } 
     121 
     122        public function setLineStyle(shape:Shape):void { 
     123      shape.graphics.lineStyle(_thickness, 
     124                               _color, 
     125                               _alpha, 
     126                               _pixelHinting, 
     127                               _scaleMode, 
     128                               _capsStyle, 
     129                               _jointStyle, 
     130                               _miterLimit); 
     131 
     132      shape.blendMode = _blendMode; 
     133        } 
     134             
     135    public function set mode(v:uint):void { 
     136      _mode = v; 
     137      if (_canvas) { 
     138        switch (mode) { 
     139        case PEN_MODE_DROPPER: 
     140          _canvas.setCursor(dropperIcon); 
     141          break; 
     142        case PEN_MODE_HANDTOOL: 
     143          _canvas.setCursor(handOpenIcon); 
     144          break; 
     145        case PEN_MODE_ERASER: 
     146           // FIXME: give me eraser icon 
     147          _canvas.setCursor(null); 
     148          break; 
     149        default: 
     150          _canvas.setCursor(null); 
     151        } 
     152        if (mode == PEN_MODE_DROPPER) { 
     153        } else { 
     154        }         
     155      } 
     156    } 
     157    public function set thickness(v:uint):void { 
     158      if (v > 32) { 
     159        // TODO: alert 
     160        return; 
     161      } 
     162      _thickness = v; 
     163    } 
     164     
     165    public function set color(v:uint):void { 
     166      _color = v; 
     167      if (_control) { 
     168        _control.penColorChangeHandler(); 
     169      } 
     170    } 
     171    public function set alpha(v:Number):void { 
     172      _alpha = v; 
     173    } 
     174    public function set blendMode(v:String):void { 
     175      _blendMode = v; 
     176    } 
     177    public function set scaleMode(v:String):void { 
     178      _scaleMode = v; 
     179    } 
     180    public function set capsStyle(v:String):void { 
     181      _capsStyle = v; 
     182    } 
     183    public function set jointStyle(v:String):void { 
     184      _jointStyle = v; 
     185    } 
     186    public function set miterLimit(v:Number):void { 
     187      _miterLimit = v; 
     188    } 
     189    public function set pixelHinting(v:Boolean):void { 
     190      _pixelHinting = v; 
     191    } 
     192     
     193    public function set canvas(c:GPCanvas):void { 
     194      _canvas = c; 
     195    } 
     196    public function set canvasWindow(cw:GPCanvasWindowControl):void { 
     197      _canvasWindow = cw; 
     198    } 
     199    public function set control(c:PenDetailControl):void { 
     200      _control = c; 
     201    } 
     202    public function get drawGraphics():Graphics { 
     203      return _drawShape.graphics; 
     204    } 
     205    public function set layers(l:GPLayerArray):void { 
     206      _layers = l; 
    177207    } 
    178208     
     
    195225          return; 
    196226        } 
     227        insertDrawShape(); 
    197228              _canvas.moveTo(evt.localX, evt.localY); 
    198229              break; 
     
    205236          return; 
    206237        } 
     238        insertDrawShape(); 
    207239              fromPoint.x = evt.localX; 
    208240              fromPoint.y = evt.localY;      
     
    256288          break; 
    257289        case PEN_MODE_LINE: 
    258           _canvas.previewLineTo(fromPoint.x, fromPoint.y, evt.localX, evt.localY); 
     290          previewLineTo(fromPoint.x, fromPoint.y, evt.localX, evt.localY); 
    259291          break; 
    260292        } 
     
    279311        if (!GPCanvas.comparePoint(fromPoint.x, fromPoint.y, evt.localX, evt.localY)) { 
    280312          // 始点と終点が違う場合にのみ線を引く 
    281           _canvas.previewClear(); 
     313          clearPreviewShape(); 
    282314          _canvas.moveTo(fromPoint.x, fromPoint.y); 
    283315          _canvas.lineTo(evt.localX, evt.localY); 
     
    307339        break; 
    308340      case PEN_MODE_LINE: 
    309         _canvas.previewClear(); 
    310         break; 
    311       } 
     341        clearPreviewShape(); 
     342        break; 
     343      } 
     344    } 
     345    // イベントハンドラおわり 
     346     
     347    // previewShape系     
     348        public function clearPreviewShape():void { 
     349          _previewShape.graphics.clear(); 
     350        } 
     351         
     352        public function previewLineTo(fromX:Number, fromY:Number, toX:Number, toY:Number):void { 
     353          _previewShape.graphics.clear(); 
     354          setLineStyle(_previewShape); 
     355          _previewShape.graphics.moveTo(GPCanvas.zz(fromX), GPCanvas.zz(fromY)); 
     356          _previewShape.graphics.lineTo(GPCanvas.zz(toX), GPCanvas.zz(toY)); 
     357        }        
     358 
     359    public function insertDrawShape():void { 
     360      _layers.insertDrawLayer(_drawShape); 
     361    } 
     362         
     363    public function clearDrawShape():void { 
     364      _layers.removeDrawLayer(_drawShape); 
     365      _drawShape.graphics.clear(); 
    312366    } 
    313367  }