チェンジセット 1164
- コミット日時:
- 2008/08/27 18:21:22 (5 年前)
- ファイル:
凡例:
- 変更無し
- 追加
- 削除
- 更新
- コピー
- 移動
as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint/controls/GPCanvas.as
r1162 r1164 21 21 public class GPCanvas extends UIComponent 22 22 { 23 private var _layers:GPLayerArray;24 25 23 private var baseSprite:Sprite; // イベント取得用スプライト 26 24 private var baseBitmap:Bitmap; // ベース画像(しましま) (1) 27 private var lineShape:Shape; // 描画用Shape28 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) 31 29 32 30 private var additionalNumber:uint = 4; // 補助線の分割数 … … 82 80 // combineLayers(); 83 81 84 // 描画用shape85 lineShape = new Shape();86 addChildAt(lineShape, 3);87 88 82 // 補助線用shape 89 83 additionalBox = new Shape(); … … 92 86 additionalBox.visible = false; 93 87 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); 100 90 101 91 if (logger) { … … 168 158 _pen = pen; 169 159 _pen.canvas = this; 160 _pen.layers = _layers; 170 161 } 171 162 … … 174 165 } 175 166 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 189 167 public function setAndLogLineStyle():void { 190 setLineStyle(lineShape);168 _pen.setLineStyle(_pen.drawShape); 191 169 192 170 if (writeLog) { … … 244 222 } 245 223 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 257 224 // 描画関係のフラグ 258 225 public var isMoveTo:Boolean = false; … … 262 229 // 0.0.1の互換性のため 263 230 public function oldMoveTo(x:Number, y:Number):void { 264 lineShape.graphics.moveTo(x, y);231 _pen.drawGraphics.moveTo(x, y); 265 232 setAndLogLineStyle(); 266 233 logWrite(['moveTo', x, y]); … … 279 246 // 0.0.1の互換性のため 280 247 public function oldLineTo(x:Number, y:Number):void { 281 lineShape.graphics.lineTo(x, y);248 _pen.drawGraphics.lineTo(x, y); 282 249 logWrite(['lineTo', x, y]); 283 250 isDrawnLine = true; … … 311 278 x = Math.floor(x) + 0.5; 312 279 y = Math.floor(y) + 0.5; 313 lineShape.graphics.drawRect(x, y, width, height);280 _pen.drawGraphics.drawRect(x, y, width, height); 314 281 logWrite(['drawRect', x, y, width, height]); 315 282 } 316 283 317 284 public function beginFill(color:uint, alpha:Number):void { 318 lineShape.graphics.beginFill(color, alpha);285 _pen.drawGraphics.beginFill(color, alpha); 319 286 logWrite(['beginFill', color, alpha]); 320 287 } … … 323 290 var x:Number = currentPoint.x; 324 291 var y:Number = currentPoint.y; 325 lineShape.graphics.drawCircle(x, y, radius);292 _pen.drawGraphics.drawCircle(x, y, radius); 326 293 // moveToでx, yは保存されているので、半径のみ保存 327 294 logWrite(['drawCircle', radius]); … … 329 296 330 297 public function endFill():void { 331 lineShape.graphics.endFill();298 _pen.drawGraphics.endFill(); 332 299 logWrite(['endFill']); 333 300 } 334 301 335 302 public function drawOldBugPointRect():void { 336 303 drawRect(currentPoint.x, currentPoint.y, 1, 1); … … 376 343 public function drawShapeOnBitmap():void { 377 344 // 描画 378 _layers.draw( lineShape, null, null, _pen.blendMode, null, false);345 _layers.draw(_pen.drawShape, null, null, _pen.blendMode, null, false); 379 346 logWrite(['drawShapeOnBitmap']); 380 347 afterDrawBitmap(); … … 385 352 combineLayers(); 386 353 // 描画用シェイプは空にしておく 387 lineShape.graphics.clear();354 _pen.clearDrawShape(); 388 355 isMoveTo = false; 389 356 // undoRedoのイベントを起こす as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint/entities/GPLayerArray.as
r1162 r1164 3 3 import flash.display.BitmapData; 4 4 import flash.display.IBitmapDrawable; 5 import flash.display.Shape; 5 6 import flash.display.Sprite; 6 7 import flash.geom.ColorTransform; … … 25 26 private var _combinedBitmapData:BitmapData; 26 27 private var _view:Sprite; 28 private var _targetSprite:Sprite; // 描画対象のBitmapと描画用Shapeを子に持つSprite。 27 29 28 30 public function GPLayerArray(a:Array, w:uint, h:uint, undoBufferSize:uint) { … … 243 245 return _view; 244 246 } 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 } 245 267 } 246 268 } as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint/entities/GPPen.as
r1163 r1164 3 3 import flash.display.BlendMode; 4 4 import flash.display.CapsStyle; 5 import flash.display.Graphics; 5 6 import flash.display.JointStyle; 6 7 import flash.display.LineScaleMode; 8 import flash.display.Shape; 7 9 import flash.events.MouseEvent; 8 10 import flash.geom.Point; 9 11 10 import mx.controls.Alert;11 12 12 import gunyarapaint.controls.GPCanvas; 13 13 import gunyarapaint.controls.GPCanvasWindowControl; 14 14 import gunyarapaint.controls.PenDetailControl; 15 16 import mx.controls.Alert; 15 17 16 18 public class GPPen … … 45 47 private var _canvasWindow:GPCanvasWindowControl; 46 48 private var _control:PenDetailControl; 49 50 private var _drawShape:Shape; // 描画用Shape 51 private var _previewShape:Shape; // プレビュー用Shape(直線とか) 52 private var _layers:GPLayerArray; 47 53 48 54 public function get mode():uint { … … 82 88 return 0xFF000000 | _color; 83 89 } 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 153 94 public function GPPen(thickness:uint = 3, 154 95 color:uint = 0x000000, … … 171 112 this.pixelHinting = pixelHinting; 172 113 this.mode = mode; 114 _drawShape = new Shape(); 115 _previewShape = new Shape(); 173 116 } 174 117 175 118 public function clone():GPPen { 176 119 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; 177 207 } 178 208 … … 195 225 return; 196 226 } 227 insertDrawShape(); 197 228 _canvas.moveTo(evt.localX, evt.localY); 198 229 break; … … 205 236 return; 206 237 } 238 insertDrawShape(); 207 239 fromPoint.x = evt.localX; 208 240 fromPoint.y = evt.localY; … … 256 288 break; 257 289 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); 259 291 break; 260 292 } … … 279 311 if (!GPCanvas.comparePoint(fromPoint.x, fromPoint.y, evt.localX, evt.localY)) { 280 312 // 始点と終点が違う場合にのみ線を引く 281 _canvas.previewClear();313 clearPreviewShape(); 282 314 _canvas.moveTo(fromPoint.x, fromPoint.y); 283 315 _canvas.lineTo(evt.localX, evt.localY); … … 307 339 break; 308 340 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(); 312 366 } 313 367 }

