チェンジセット 1547: as3/gunyarapaint/trunk

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

added setPixel pen and remove useless lineTo log

ファイル:

凡例:

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

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

    r1545 r1547  
    1 private const DEBUG:Boolean = true; 
     1private const DEBUG:Boolean = false; 
    22 
    33import flash.events.Event; 
  • as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint.mxml

    r1545 r1547  
    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.2008100507"/> 
     14    <mx:Label id="versionLabel" x="238" y="9" text="ver.2008100901"/> 
    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/PenDetailControlScript.as

    r1544 r1547  
    143143  dropperButton.selected = false; 
    144144  // TODO: pen太さ 
    145   setTool(GPPen.PEN_MODE_PENCIL, (String)(blendModeComboBox.value), evt.target.selected);   
     145  setTool(GPPen.PEN_MODE_PIXEL, null, evt.target.selected);   
    146146} 
    147147 
     
    256256    penModeComboBox.enabled = false; 
    257257    paletteGrid.enabled = false; 
     258    break; 
     259  case GPPen.PEN_MODE_PIXEL: 
     260    thicknessButton1.enabled = false; 
     261    thicknessButton2.enabled = false; 
     262    thicknessButton3.enabled = false; 
     263    thicknessButton4.enabled = false; 
     264    thicknessButton5.enabled = false; 
     265    thicknessSlider.enabled = false; 
     266    alphaSlider.enabled = true; // ドット自体のアルファ値となる。 
     267    blendModeComboBox.enabled = false; 
     268    penModeComboBox.enabled = false; 
     269    paletteGrid.enabled = true; 
    258270    break; 
    259271  } 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLayer.as

    r1523 r1547  
    6767      _bitmap.bitmapData = _bitmapData; 
    6868      _bitmapData.floodFill(x, y, color); 
     69    }     
     70    public function setPixel(x:Number, y:Number, color:uint):Boolean { 
     71      if (_bitmapData.getPixel32(x, y) == color) { 
     72        return false; 
     73      } 
     74      _bitmapData = _bitmapData.clone(); 
     75      _bitmap.bitmapData = _bitmapData; 
     76      _bitmapData.setPixel32(x, y, color); 
     77      return true; 
    6978    }     
    7079    // 外から与えられたBitmapDataに、自分の_bitmapDataを_blendModeとalphaを使って描画する。 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLayerArray.as

    r1523 r1547  
    272272    } 
    273273     
     274    public function setPixel(x:Number, y:Number, color:uint):Boolean { 
     275      var ret:Boolean = _a[_targetIndex].setPixel(x, y, color); 
     276      recombine(); 
     277      return ret; 
     278    } 
     279     
    274280    private function reindex():void { 
    275281      for (var i:String in _a) { 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLogger.as

    r1544 r1547  
    55package org.libspark.gunyarapaint.entities 
    66{ 
    7   import flash.display.Bitmap; 
    87  import flash.display.BitmapData; 
    98  import flash.errors.EOFError; 
     
    131130      case '0.0.8:': // undo時のために、GPLayerでの描画時にbitmapDataをcloneするように、 
    132131                       // & レイヤの可視・不可視をundoバッファに積まないようにする。 
     132      case '0.0.9:': // ドット絵ペン追加、lineTo/ドット絵で無駄なログが出ないように 
    133133        break; 
    134134      default: 
     
    148148      var log:ByteArray = new ByteArray(); 
    149149      log.endian = flash.utils.Endian.BIG_ENDIAN; 
    150       log.writeUTFBytes('GUNYARA_PAINT:0.0.8:'); 
     150      log.writeUTFBytes('GUNYARA_PAINT:0.0.9:'); 
    151151      log.writeShort(width); 
    152152      log.writeShort(height); 
     
    183183    public static const ACTION_LAYER_CHANGE_BLEND_MODE:uint = 21; 
    184184    public static const ACTION_LAYER_CHANGE_ALPHA:uint = 22; 
     185    public static const ACTION_SET_PIXEL:uint = 23; 
    185186 
    186187    // LINESTYLE 
     
    430431          eventLayerChangeAlpha(doubleNum); 
    431432          break; 
     433        case ACTION_SET_PIXEL: 
     434          uintNum = readShort(); 
     435          uintNum2 = readShort(); 
     436          eventSetPixel(uintNum, uintNum2); 
     437          break; 
    432438        default: 
    433439          if (byte & 0x80) { 
     
    506512 
    507513    public function eventMoveTo(x:Number, y:Number):void { 
    508       var ix:int = Math.floor(x); 
    509       var iy:int = Math.floor(y); 
    510       if (_onLogging) { 
    511         var dx:int = ix - _preX
    512         var dy:int = iy - _preY; 
     514      var ix:int = Math.floor(x + 0.5); 
     515      var iy:int = Math.floor(y + 0.5); 
     516      var dx:int = ix - _preX; 
     517      var dy:int = iy - _preY
     518      if (_onLogging) { 
    513519        if (dx >= -64 && dx <= 63 && dy >= -64 && dy <= 63) { 
    514520          // dxもdyも7bitに収まる場合 
     
    530536     
    531537    public function eventLineTo(x:Number, y:Number):void { 
    532       var ix:int = Math.floor(x); 
    533       var iy:int = Math.floor(y); 
     538      var ix:int = Math.floor(x + 0.5); 
     539      var iy:int = Math.floor(y + 0.5); 
     540      if (!_pen.lineTo(ix, iy)) { // 同じ座標だったらイベントキャンセル 
     541        return; 
     542      } 
    534543      if (_onLogging) { 
    535544        var dx:int = ix - _preX; 
     
    547556        _logCount++; 
    548557      } 
    549       _pen.lineTo(ix, iy); 
    550558      trace('LINE_TO x:' + ix + ' y:' + iy); 
    551559    } 
     
    794802      trace('FLOOD_FILL'); 
    795803    } 
     804     
     805    public function eventSetPixel(x:Number, y:Number):void { 
     806      var ix:int = Math.floor(x); 
     807      var iy:int = Math.floor(y); 
     808      if (!_pen.setPixel(ix, iy)) { // 同じドットだったらイベントキャンセル 
     809        return; 
     810      } 
     811      if (_onLogging) { 
     812        writeByte(ACTION_SET_PIXEL); 
     813        writeShort(ix); 
     814        writeShort(iy); 
     815        _logCount++; 
     816      } 
     817      pushUndoBuffer(); 
     818      trace('SET_PIXEL'); 
     819    } 
    796820 
    797821    private function invokeLayerChange():void { 
     
    10091033          _canvas.setCursor(null); 
    10101034          break; 
    1011         case GPPen.PEN_MODE_PENCIL: 
    1012           // TODO: つくる。 
     1035        case GPPen.PEN_MODE_PIXEL: 
    10131036          break; 
    10141037        default: 
     
    11271150        this.eventFloodFill(); 
    11281151        break; 
    1129       case GPPen.PEN_MODE_PENCIL: 
    1130         // TODO: つくる。 
     1152      case GPPen.PEN_MODE_PIXEL: 
     1153        if (!_layerArray.isTargetLayerVisible) { 
     1154          Alert.show('不可視の状態では描画できません!', 'ドット絵ツール'); 
     1155          return; 
     1156        } 
     1157        if (_layerArray.isTargetLayerLocked) { 
     1158          Alert.show('ロックされています!', 'ドット絵ツール'); 
     1159          return; 
     1160        } 
     1161        this.eventSetPixel(evt.localX, evt.localY); 
     1162        _drawing = true; 
    11311163        break; 
    11321164      } 
     
    11621194          } 
    11631195          break; 
    1164         case GPPen.PEN_MODE_PENCIL: 
    1165           // TODO: つくる。 
     1196        case GPPen.PEN_MODE_PIXEL: 
     1197          if (_drawing) { 
     1198            this.eventSetPixel(evt.localX, evt.localY); 
     1199          } 
    11661200          break; 
    11671201        } 
     
    12061240        _handtoolScrollBase = null; 
    12071241        break; 
    1208       case GPPen.PEN_MODE_PENCIL: 
    1209         // TODO: つくる。 
     1242      case GPPen.PEN_MODE_PIXEL: 
     1243        _drawing = false; 
    12101244        break; 
    12111245      } 
     
    12211255      case GPPen.PEN_MODE_HAND: 
    12221256      case GPPen.PEN_MODE_ERASER: 
     1257      case GPPen.PEN_MODE_PIXEL: 
    12231258        if (_drawing) { 
    12241259          mouseUp(evt); 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPPen.as

    r1523 r1547  
    2020    public static const PEN_MODE_HANDTOOL:uint = 8; 
    2121    public static const PEN_MODE_ERASER:uint = 9; 
    22     public static const PEN_MODE_PENCIL:uint = 10; 
     22    public static const PEN_MODE_PIXEL:uint = 10; 
    2323 
    2424    private var _mode:uint; 
     
    212212    } 
    213213     
    214     public function lineTo(x:Number, y:Number):void
     214    public function lineTo(x:Number, y:Number):Boolean
    215215      x = Math.floor(x) + 0.5; 
    216216      y = Math.floor(y) + 0.5; 
    217217      if (x == currentPoint.x && 
    218218          y == currentPoint.y) { 
    219         return
     219        return false
    220220      } 
    221221      oldLineTo(x, y); 
     222      return true; 
    222223    } 
    223224     
     
    225226      _logger.layerArray.floodFill(currentPoint.x, currentPoint.y, this.argbColor); 
    226227    } 
     228 
     229    public function setPixel(x:int, y:int):Boolean { 
     230      return _logger.layerArray.setPixel(x, y, this.argbColor); 
     231    } 
    227232     
    228233    // FIXME: x, yはcurrentPointでいいのでは?lineStyleもmoveToでセットしてくれるし。 
     234    // でもコレすでに使っているかもしれない 
    229235    public function drawRect(x:Number, y:Number, width:uint, height:uint):void { 
    230       x = Math.floor(x) + 0.5; 
    231       y = Math.floor(y) + 0.5; 
    232236      this.drawGraphics.drawRect(x, y, width, height); 
    233237    }