チェンジセット 1523

差分発生行の前後
無視リスト:
コミット日時:
2008/10/05 20:29:16 (5 年前)
コミッタ:
tasuku
ログメッセージ:

fixed some layer bugs

ファイル:

凡例:

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

    r1515 r1523  
    163163  ]]> 
    164164  </mx:Script> 
    165   <mx:Label x="313" y="11" text="ver.2008100502"/> 
     165  <mx:Label x="313" y="11" text="ver.2008100507"/> 
    166166</mx:Application> 
  • as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint.as

    r1504 r1523  
    3939 
    4040public function init():void { 
    41  
    4241  var width:uint, height:uint, undoBufferSize:uint; 
    4342 
  • as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint.mxml

    r1516 r1523  
    1212  </mx:Script> 
    1313  <mx:Canvas id="toolCanvas" x="0" y="0" width="685" height="102"> 
    14     <mx:Label id="versionLabel" x="238" y="9" text="ver.2008100503"/> 
     14    <mx:Label id="versionLabel" x="238" y="9" text="ver.2008100507"/> 
    1515    <mx:Label x="28" y="7" text="名前"/> 
    1616    <mx:TextInput id="fromTextInput" x="55" y="3" maxChars="32" fontSize="14" focusThickness="0"/> 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/controls/GPLayerWindowControlScript.as

    r1503 r1523  
    1515  blendModeComboBox.dataProvider = [ 
    1616    {label: '通常', data: flash.display.BlendMode.NORMAL}, 
    17     //{label: '消去', data: flash.display.BlendMode.ERASE}, // マスクレイヤでよい。 
    1817    {label: '比較(暗)', data: flash.display.BlendMode.DARKEN}, 
    1918    {label: '乗算', data: flash.display.BlendMode.MULTIPLY}, 
     
    2524    {label: '差の絶対値', data: flash.display.BlendMode.DIFFERENCE}, 
    2625    {label: '除外', data: flash.display.BlendMode.SUBTRACT}, 
    27     {label: '反転', data: flash.display.BlendMode.INVERT}]; 
     26    {label: '反転', data: flash.display.BlendMode.INVERT}, 
     27    /*{label: '消去', data: flash.display.BlendMode.ERASE}*/]; 
    2828  blendModeComboBox.addEventListener(ListEvent.CHANGE, blendModeComboBoxHandler); 
    2929   
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/controls/PenDetailControlScript.as

    r1505 r1523  
    5252  blendModeComboBox.dataProvider = [ 
    5353    {label: '通常', data: flash.display.BlendMode.NORMAL}, 
    54     // {label: '消去', data: flash.display.BlendMode.ERASE}, // eraserButtonで設定させる 
    5554    {label: '比較(暗)', data: flash.display.BlendMode.DARKEN}, 
    5655    {label: '乗算', data: flash.display.BlendMode.MULTIPLY}, 
     
    6261    {label: '差の絶対値', data: flash.display.BlendMode.DIFFERENCE}, 
    6362    {label: '除外', data: flash.display.BlendMode.SUBTRACT}, 
    64     {label: '反転', data: flash.display.BlendMode.INVERT}]; 
     63    {label: '反転', data: flash.display.BlendMode.INVERT}, 
     64    {label: '消去', data: flash.display.BlendMode.ERASE}]; 
    6565  blendModeComboBox.addEventListener(ListEvent.CHANGE, blendModeComboBoxHandler); 
    6666} 
     
    6969  _logger = l; 
    7070  gridItemPaletteClickHandler(1); 
     71  // 初期値と設定値が一緒なのでイベントが飛んでこない、明示的に呼んであげる 
     72  drawPreview(GPPen.PEN_MODE_HAND, 0x000000, 1, 3); 
    7173} 
    7274 
     
    176178 
    177179private function thicknessSliderHandler(evt:SliderEvent):void { 
    178   cancelTool(); 
    179180  _logger.eventLineStyleThickness(evt.value); 
    180181} 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLayer.as

    r1503 r1523  
    2626     
    2727    private var _logger:GPLogger; 
    28  
     28     
    2929    public function GPLayer(logger:GPLogger, 
    3030                            source:BitmapData, width:uint, height:uint, index:uint, 
     
    5353    public function clone():GPLayer { 
    5454      // indexは親で振りなおす 
    55       return new GPLayer(_logger, _bitmapData.clone(), _width, _height, _index, _show, _lock, _blendMode, _alpha, _name); 
     55      return new GPLayer(_logger, _bitmapData, _width, _height, _index, _show, _lock, _blendMode, _alpha, _name); 
    5656    } 
    5757 
    5858    // 外から与えられたものを_bitmapDataに書き込む 
    5959    public function draw(source:IBitmapDrawable, matrix:Matrix = null, colorTransform:ColorTransform = null, blendMode:String = null, clipRect:Rectangle = null, smoothing:Boolean = false):void { 
     60      // UndoBufferに入っているbitmapDataを上書きしないように、コピーしてから描く。 
     61      _bitmapData = _bitmapData.clone(); 
     62      _bitmap.bitmapData = _bitmapData; 
    6063      _bitmapData.draw(source, matrix, colorTransform, blendMode, clipRect, smoothing); 
    6164    } 
    6265    public function floodFill(x:Number, y:Number, color:uint):void { 
     66      _bitmapData = _bitmapData.clone(); 
     67      _bitmap.bitmapData = _bitmapData; 
    6368      _bitmapData.floodFill(x, y, color); 
    6469    }     
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLayerArray.as

    r1516 r1523  
    33  import com.adobe.images.PNGEncoder; 
    44   
     5  import flash.display.Bitmap; 
    56  import flash.display.BitmapData; 
    67  import flash.display.BlendMode; 
     
    1920  { 
    2021    private var _a:Array; 
    21     private var _targetIndex:uint; // 現在描画対象となっているレイヤ番号(1 startがいいかな?) 
     22    private var _targetIndex:uint; // 現在描画対象となっているレイヤ番号 
    2223    private var _width:uint, _height:uint; // キャンバスサイズ 
    2324     
     
    100101      _view.addChildAt(l.bitmap, _targetIndex); 
    101102      reindex(); 
     103      recombine(); 
    102104      return true; 
    103105    } 
    104106     
    105107    public function changeVisible(target:uint, b:Boolean):Boolean { 
    106       if (_a[target].show == b) { 
     108      if (target >= _a.length || _a[target].show == b) { 
    107109        return false; 
    108110      } 
     
    151153     
    152154    public function swap(f:uint, t:uint):Boolean { 
    153       if (f == t) { 
     155      if (f >= _a.length || t >= _a.length || f == t) { 
    154156        return false; 
    155157      } 
     
    164166 
    165167    public function mergeWithBelow():Boolean { 
    166       var i:uint = _targetIndex; 
    167       if (i == 0) { 
     168      if (_targetIndex == 0) { 
    168169        Alert.show('統合するひとつ下のレイヤがありません。', 'レイヤツール'); 
    169170        return false; 
    170171      } 
    171       this.targetIndex = i - 1; 
    172       _a[i].drawDest(_a[_targetIndex].bitmapData); 
    173       _a.splice(i, 1); 
    174       if (_targetIndex == i) { 
    175         this.targetIndex = _targetIndex - 1; 
    176       } 
    177       _view.removeChildAt(i); 
     172      _a[_targetIndex].drawDest(_a[_targetIndex - 1].bitmapData); 
     173      _a.splice(_targetIndex, 1); 
     174      _view.removeChildAt(_targetIndex); 
     175      this.targetIndex = _targetIndex - 1; 
    178176      reindex(); 
    179177      recombine(); 
     
    182180 
    183181    public function remove():Boolean { 
    184       var i:uint = _targetIndex; 
    185182      if (_a.length <= 1) { 
    186183        Alert.show('レイヤ全てを削除することはできません。', 'レイヤツール'); 
    187184        return false; 
    188185      } 
    189       _a.splice(i, 1); 
    190       if (_targetIndex == i) { 
    191         _targetIndex--; 
    192       } 
    193       _view.removeChildAt(i); 
     186      _a.splice(_targetIndex, 1); 
     187      _view.removeChildAt(_targetIndex); 
     188      if (_targetIndex > 0) { 
     189        this.targetIndex = _targetIndex - 1; 
     190      } 
    194191      reindex(); 
    195192      recombine(); 
     
    200197    private function recombine():void { 
    201198      _combinedBitmapData = new BitmapData(_width, _height, true, 0x00000000); 
    202       for (var i:String in _a) { 
     199      for (var i:uint = 0; i < _a.length; i++) { 
    203200        _a[i].drawDest(_combinedBitmapData); 
    204201      } 
     
    238235      for (var i:uint = 0; i < _a.length; i++) { 
    239236        var lo:Object = _a[i].to_object; 
    240         // bitmapDataが変わっていないところはcloneせずに省メモリを目指す。 
    241         if (_targetIndex == i) { 
    242           lo['bitmap_data'] = _a[i].bitmapData.clone(); 
    243         } else { 
    244           lo['bitmap_data'] = _a[i].bitmapData;           
    245         } 
     237        lo['bitmap_data'] = _a[i].bitmapData; 
    246238        obj['layers'].push(lo); 
    247239      } 
     
    251243    public function set dataForUndo(obj:Object):void { 
    252244      var i:uint; 
    253       _targetIndex = obj.target_index; 
    254245      for (i = 0; i < _a.length; i++) { 
    255246        try { 
     
    266257        _view.addChild(l.bitmap); 
    267258      } 
     259      this.targetIndex = obj.target_index; 
    268260      recombine(); 
    269261    } 
     
    277269    public function floodFill(x:Number, y:Number, color:uint):void { 
    278270      _a[_targetIndex].floodFill(x, y, color); 
     271      recombine(); 
    279272    } 
    280273     
     
    296289 
    297290    public function set targetIndex(i:uint):void { 
    298       _targetIndex = i; 
     291      if (i < _a.length) { 
     292        _targetIndex = i; 
     293      } 
    299294    } 
    300295     
     
    313308      recombine(); 
    314309    } 
     310    public function set targetLayerBlendMode(s:String):void { 
     311      _a[_targetIndex].blendMode = s; 
     312      recombine(); 
     313    } 
    315314    public function get targetLayerAlpha():Number { 
    316315      return _a[_targetIndex].alpha; 
     
    319318      return _a[_targetIndex].blendMode; 
    320319    } 
    321     public function set targetLayerBlendMode(s:String):void { 
    322       _a[_targetIndex].blendMode = s; 
    323       recombine(); 
    324     } 
    325320     
    326321    public function get view():Sprite { 
    327322      return _view; 
    328     } 
    329      
     323    }     
    330324     
    331325    // 描画用レイヤを一時的に挿入・削除する。 
     
    342336                                  _a[_targetIndex].blendMode; 
    343337        _targetSprite.alpha = _a[_targetIndex].alpha; 
    344         _a[_targetIndex].blendMode = flash.display.BlendMode.NORMAL; 
    345         _a[_targetIndex].alpha = 1
    346     /* 
    347         s.blendMode = p.blendMode
    348         s.alpha = p.alpha
    349     */ 
    350         _targetSprite.addChild(_a[_targetIndex].bitmap);       
     338 
     339        _view.removeChild(_a[_targetIndex].bitmap)
     340        var tempTargetLayerBitmap:Bitmap = new Bitmap(_a[_targetIndex].bitmapData); 
     341        tempTargetLayerBitmap.blendMode = flash.display.BlendMode.NORMAL
     342        tempTargetLayerBitmap.alpha = 1
     343         
     344        _targetSprite.addChild(tempTargetLayerBitmap); 
    351345        _targetSprite.addChild(s); 
    352346        _view.addChildAt(_targetSprite, _targetIndex);         
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLogger.as

    r1516 r1523  
    55package org.libspark.gunyarapaint.entities 
    66{ 
     7  import flash.display.Bitmap; 
    78  import flash.display.BitmapData; 
    89  import flash.errors.EOFError; 
     
    122123        ret.compatibility_0_0_1 = true; 
    123124        break; 
    124       case '0.0.2:': 
    125       case '0.0.3:': 
     125      case '0.0.2:': // 0.5ずれバグの修正、ドット描画バグの修正 
     126      case '0.0.3:': // レイヤ対応初版、最初の数点は0.0.2versionでレイヤのやつがある 
    126127      case '0.0.4:': 
    127128      case '0.0.5:': 
    128129      case '0.0.6:': 
     130      case '0.0.7:': 
     131      case '0.0.8:': // undoの挙動変更、bitmapDataをcloneするように 
    129132        break; 
    130133      default: 
     
    144147      var log:ByteArray = new ByteArray(); 
    145148      log.endian = flash.utils.Endian.BIG_ENDIAN; 
    146       log.writeUTFBytes('GUNYARA_PAINT:0.0.6:'); 
     149      log.writeUTFBytes('GUNYARA_PAINT:0.0.8:'); 
    147150      log.writeShort(width); 
    148151      log.writeShort(height); 
     
    150153      var ret:GPLogger = new GPLogger(log, true, width, height, undoBufferSize, baseLayers, baseInfo); 
    151154      ret.createCanvas(); 
    152       // 初期のペン状態を記録しておく。 
    153       ret.eventLineStyleThickness(ret._pen.thickness); 
    154       ret.eventLineStyleColor(ret._pen.color); 
    155       ret.eventLineStyleAlpha(ret._pen.alpha); 
    156       ret.eventLineStyleBlendMode(ret._pen.blendMode); 
    157       ret.eventLineStyleScaleMode(ret._pen.scaleMode); 
    158       ret.eventLineStyleCapsStyle(ret._pen.capsStyle); 
    159       ret.eventLineStyleJointStyle(ret._pen.jointStyle); 
    160       ret.eventLineStyleMiterLimit(ret._pen.miterLimit); 
    161       ret.eventLineStylePixelHinting(ret._pen.pixelHinting); 
    162155 
    163156      return ret; 
     
    211204 
    212205    public function drawShapeOnBitmap():void { 
    213       // 描画 
    214206      _layerArray.draw(_pen.drawShape, null, null, _pen.blendMode, null, false); 
    215207      pushUndoBuffer(); 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPPen.as

    r1500 r1523  
    8181    } 
    8282 
     83    // これらの初期値は変えないこと!描画ログが崩れます。 
    8384    public function GPPen(logger:GPLogger, 
    8485                          thickness:uint = 3,