チェンジセット 1472

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

fixed post communication problems...

ファイル:

凡例:

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

    r1458 r1472  
    2727  private var oelog:ByteArray; 
    2828  private var baseImg:BitmapData; 
     29  private var baseImgInfo:Object; 
    2930  private var oekakiId:uint; 
    3031  private var postUrl:String; 
     
    5253      return; 
    5354    } 
    54     if (parameters['baseImgUrl']) { 
    55       new Com().loadURL(parameters['baseImgUrl'], getBaseImgHandler); 
    56     } 
    57      
    5855    if (parameters['postUrl']) { 
    5956      postUrl = parameters['postUrl']; 
     
    7168    oelog = com.data; 
    7269    oelog.uncompress(); 
    73     if (!parameters['baseImgUrl'] || baseImg) { // baseImgがいらないか、そちらもそろったときにplay 
     70    if (parameters['baseImgUrl']) { 
     71      new Com().loadURL(parameters['baseImgUrl'], getBaseImgHandler); 
     72    } else { 
    7473      play(); 
    7574    } 
     
    7877  private function getBaseImgHandler(com:Com):void { 
    7978    baseImg = Bitmap(com.content).bitmapData; 
    80     if (oelog) { // どちらもそろったときにplay 
     79    if (parameters['baseImgInfoUrl']) { 
     80      new Com().sendGetUrlRequest(parameters['baseImgInfoUrl'], getBaseImgInfoHandler); 
     81    } else { 
    8182      play(); 
    8283    } 
     84  } 
     85   
     86  private function getBaseImgInfoHandler(com:Com):void { 
     87    baseImgInfo = com.jsonObject; 
     88    play(); 
    8389  } 
    8490 
     
    8894  private function createLogCan():void { 
    8995    logger = new GPLogger(oelog); 
    90     logcan = logger.createViewerCanvas(baseImg); 
     96    logcan = logger.createViewerCanvas(baseImg, baseImgInfo); 
    9197    canvas.addChild(logcan); 
    9298    canvas.width = logcan.width + 2; 
  • as3/gunyarapaint/trunk/gunyarapaint/src/gunyarapaint.as

    r1458 r1472  
    1 private const DEBUG:Boolean = true; 
     1private const DEBUG:Boolean = false; 
    22 
    33import flash.events.Event; 
     
    55import flash.geom.Point; 
    66import flash.ui.Keyboard; 
    7 import flash.utils.ByteArray; 
    87 
    98import mx.controls.Alert; 
     
    1716import org.libspark.gunyarapaint.entities.GPLogger; 
    1817import org.libspark.gunyarapaint.entities.GPPen; 
     18import org.libspark.gunyarapaint.entities.GPLayerArray; 
    1919import org.libspark.gunyarapaint.utils.MiscUtils; 
    2020import org.libspark.nicopedia.Com; 
     
    5050  this.enabled = false; 
    5151  if (parameters['postUrl'] && parameters['cookie'] && parameters['magic'] && parameters['redirectUrl']) { 
    52     new Com().setPostEnv(parameters['postUrl'], parameters['cookie'], parameters['magic']); 
    5352    postOekakiButton.enabled = true; 
    5453    redirectUrl = parameters['redirectUrl']; 
     
    7170  if (parameters['oekakiId'] && parameters['baseImgUrl']) { 
    7271    oekakiId = uint(parameters['oekakiId']); 
    73     var url:String = parameters['baseImgUrl']; 
    74     new Com().sendGetUrlRequest(url, getBaseImgHandler); 
     72    new Com().loadURL(parameters['baseImgUrl'], getBaseImgHandler); 
    7573    this.enabled = false; 
    7674  } else { 
     
    9492      } 
    9593    } 
    96     gpCanvas = gpCanvasWindow.createCanvas(canvasWidth, canvasHeight, undoBufferSize, null, null, penDetailWindow); 
     94    gpCanvas = gpCanvasWindow.createCanvas(canvasWidth, canvasHeight, undoBufferSize, null, null, null, penDetailWindow); 
    9795    initGunyaraPaintCanvas(); 
    9896  } 
     
    150148public function deserialize(s:String):void { 
    151149  var log:GPLogger = GPLogger.deserialize(s); 
    152   gpCanvas = log.createViewerCanvas(null); // FIXME: baseImg 
     150  gpCanvas = log.createViewerCanvas(null, null); // FIXME: baseImg 
    153151  log.play(gpCanvas, 30000); 
    154152} 
     
    191189} 
    192190 
     191// TODO: もう本当に汚い… これのスコープを短くする。 
     192private var baseImg:BitmapData; 
     193 
    193194private function getBaseImgHandler(com:Com):void { 
    194   var baseImg:BitmapData = Bitmap(data).bitmapData; 
    195   canvasWidth = baseImg.width; 
    196   canvasHeight = baseImg.height; 
    197   gpCanvas = gpCanvasWindow.createCanvas(0, 0, undoBufferSize, null, baseImg, penDetailWindow); 
    198   initGunyaraPaintCanvas(); 
    199   this.enabled = true; 
     195  baseImg = Bitmap(com.content).bitmapData; 
     196  if (parameters['baseImgInfoUrl']) { 
     197    new Com().sendGetUrlRequest(parameters['baseImgInfoUrl'], getBaseImgInfoHandler); 
     198  } else { 
     199    // 画像のサイズがそのままwidth/height 
     200    baseImgToCanvas(baseImg.width, baseImg.height, null); 
     201  } 
     202
     203 
     204private function getBaseImgInfoHandler(com:Com):void { 
     205  var info:Object = com.jsonObject; 
     206  baseImgToCanvas(info['width'], info['height'], info); 
     207
     208 
     209private function baseImgToCanvas(width:uint, height:uint, baseInfo:Object):void { 
     210    this.canvasWidth = width; 
     211    this.canvasHeight = height; 
     212    gpCanvas = gpCanvasWindow.createCanvas( 
     213                 width, height, undoBufferSize, null,  
     214                 baseImg, baseInfo, penDetailWindow); 
     215    if (baseInfo) { 
     216      // TODO: コンストラクタに入れていいような気がする 
     217      gpCanvas.baseImgInfo = baseInfo; 
     218    } 
     219    initGunyaraPaintCanvas(); 
     220    this.enabled = true; 
     221   
    200222} 
    201223 
     
    205227    Alert.show(com.errStr, ALERT_TITLE); 
    206228    this.enabled = true; 
    207   } else if (data.toString() != '') { 
    208     Alert.show(data.toString(), ALERT_TITLE); 
     229  } else if (com.data.toString() != '') { 
     230    Alert.show(com.data.toString(), ALERT_TITLE); 
    209231    this.enabled = true; 
    210232  } else { 
     
    270292  } 
    271293  this.enabled = false; 
    272   new Com().postOekaki(fromTextInput.text, 
    273                        messageTextArea.text, 
    274                        oekakiId, 
    275                        gpCanvas.dataForPost 
    276                       ); 
     294  var com:Com = new Com(); 
     295  com.postOekaki(parameters['postUrl'], 
     296                 parameters['magic'], 
     297                 parameters['cookie'], 
     298                 fromTextInput.text, 
     299                 messageTextArea.text, 
     300                 oekakiId, 
     301                 gpCanvas.dataForPost, 
     302                 commCompleteHandler 
     303                ); 
    277304} 
    278305 
     
    286313private function playLogHandler(evt:FlexEvent):void { 
    287314  logger = gpCanvas.logger; 
    288   logcan = logger.createViewerCanvas(null); 
     315  logcan = logger.createViewerCanvas(null, null); 
    289316  this.addChild(logcan); 
    290317  logger.play(logcan, 1000); 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/controls/GPCanvas.as

    r1468 r1472  
    1212  import mx.managers.CursorManager; 
    1313   
    14   import org.libspark.gunyarapaint.controls.PenDetailWindowControl; 
    1514  import org.libspark.gunyarapaint.entities.GPLayerArray; 
    1615  import org.libspark.gunyarapaint.entities.GPLogger; 
     
    4645    private var _penDetailWindow:PenDetailWindowControl; // ペンのコントロール。 
    4746 
    48         public function GPCanvas(width:uint, height:uint, undoBufferSize:uint, logger:GPLogger, baseData:BitmapData, penDetailWindow:PenDetailWindowControl) 
     47        public function GPCanvas(width:uint, height:uint, undoBufferSize:uint, logger:GPLogger, baseLayers:BitmapData, baseInfo:Object, penDetailWindow:PenDetailWindowControl) 
    4948        { 
    5049          this.percentHeight = 100; 
     
    6968 
    7069      // レイヤー群のbitmapたち   
    71           if (baseData) { 
    72             canWidth = baseData.width; 
    73             canHeight = baseData.height; 
    74        _layers = new GPLayerArray(this, GPLayerArray.getArrayFromBitmapLayers(this, baseData, canWidth, canHeight), 
    75                                   0, canWidth, canHeight); 
    76           } else { 
    77           canWidth = width; 
    78           canHeight = height; 
    79        _layers = new GPLayerArray(this, null, 0, canWidth, canHeight); 
    80           } 
    81           this.width = canWidth; 
    82           this.height = canHeight; 
    83            
     70          canWidth = width; 
     71          canHeight = height; 
     72      this.width = canWidth; 
     73      this.height = canHeight; 
     74      if (baseLayers) { 
     75        _layers = new GPLayerArray(this, 
     76                                   GPLayerArray.getArrayFromBitmapLayers(this, baseLayers, baseInfo), 
     77                                   0, canWidth, canHeight); 
     78      } else { 
     79        _layers = new GPLayerArray(this, null, 0, canWidth, canHeight);       
     80      } 
    8481      addChildAt(_layers.view, 2); 
    8582      // combineLayers(); 
     
    479476          o['log_count'] = _log.getLogCount(); 
    480477          if (_penDetailWindow) { 
    481         o['info']['pen_details'] = [_penDetailWindow.dataForPost]; // TODO: 今後はpaletteが複数 
     478        o['info']['pen_details'] = _penDetailWindow.dataForPost; 
    482479          } 
    483480          return o; 
     
    498495          return _layers.isTargetLayerVisible; 
    499496        } 
     497        public function set baseImgInfo(info:Object):void { 
     498      if (_penDetailWindow) { 
     499        _penDetailWindow.baseImgInfo = info; 
     500      } 
     501        } 
    500502  } 
    501503} 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/controls/GPCanvasWindowControl.as

    r1458 r1472  
    11package org.libspark.gunyarapaint.controls 
    22{ 
     3  import flash.geom.Point; 
    34  import flash.display.BitmapData; 
    4   import flash.geom.Point; 
    5    
    6   import org.libspark.gunyarapaint.entities.GPLogger; 
    7   import org.libspark.gunyarapaint.entities.GPPen; 
    8   import org.libspark.gunyarapaint.utils.ComponentResizer; 
    95   
    106  import mx.containers.HBox; 
     
    1713  import mx.events.ResizeEvent; 
    1814  import mx.events.ScrollEvent; 
     15   
     16  import org.libspark.gunyarapaint.entities.GPLogger; 
     17  import org.libspark.gunyarapaint.entities.GPPen; 
     18  import org.libspark.gunyarapaint.utils.ComponentResizer; 
    1919 
    2020  public class GPCanvasWindowControl extends TitleWindow 
     
    5656    private var scrollDragStartPoint:Point; 
    5757     
    58     public function createCanvas(width:uint, height:uint, undoBufferSize:uint, logger:GPLogger, baseData:BitmapData, penDetailWindow:PenDetailWindowControl):GPCanvas { 
     58    public function createCanvas(width:uint, height:uint, undoBufferSize:uint, logger:GPLogger, baseLayers:BitmapData, baseInfo:Object, penDetailWindow:PenDetailWindowControl):GPCanvas { 
    5959      if (!_canvas) { 
    60         _canvas = new GPCanvas(width, height, undoBufferSize, logger, baseData, penDetailWindow); 
     60        _canvas = new GPCanvas(width, height, undoBufferSize, logger, baseLayers, baseInfo, penDetailWindow); 
    6161        //_canvas.setStyle('borderColor', 0x000000); 
    6262        //_canvas.setStyle('borderStyle', 'solid'); 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/controls/PenDetailControlScript.as

    r1460 r1472  
    318318  }; 
    319319} 
     320 
     321public function set baseImgInfo(o:Object):void { 
     322  gridItemPalette1.setStyle('backgroundColor', o['palettes'][0]); 
     323   
     324} 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/controls/PenDetailWindowControl.mxml

    r1458 r1472  
    33  <ns1:PenDetailControl id="penDetail" x="0" y="0"> 
    44  </ns1:PenDetailControl> 
    5   <mx:Script> 
     5  <mx:Script><![CDATA[ 
    66  import org.libspark.gunyarapaint.entities.GPPen; 
    77  public function get pen():GPPen { 
     
    1414    return [penDetail.dataForPost]; // TODO: 現在は111パレットのみだけど、配列化する 
    1515  } 
    16   </mx:Script> 
     16  public function set baseImgInfo(o:Object):void { 
     17    var a:Array = o['pen_details']; 
     18    for (var i:uint = 0; i < a.length; i++) { 
     19      penDetail.baseImgInfo = a[i]; 
     20    } 
     21  } 
     22]]></mx:Script> 
    1723</mx:TitleWindow> 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLayer.as

    r1345 r1472  
    1616    private var _show:Boolean; 
    1717    private var _lock:Boolean; 
    18     private var _mask:Boolean; // now not use 
    1918    private var _blendMode:String; 
    2019    private var _alpha:Number; 
     
    3231    public function GPLayer(canvas:GPCanvas, 
    3332                              source:BitmapData, width:uint, height:uint, index:uint, 
    34                               show:Boolean = true, lock:Boolean = false, mask:Boolean = false, 
     33                              show:Boolean = true, lock:Boolean = false, 
    3534                              blendMode:String = 'normal' /* flash.display.BlendMode.NORMAL*/, 
    3635                              alpha:Number = 1.0, 
     
    4746      _show = show; 
    4847      _lock = lock; 
    49       _mask = mask; 
    5048      _colorTransform = new ColorTransform(); 
    5149      _bitmap = new Bitmap(_bitmapData); 
     
    6058 
    6159    public function clone():GPLayer { 
    62       return new GPLayer(_canvas, _bitmapData, _width, _height, _index, _show, _lock, _mask, _blendMode, _alpha, _name); 
     60      return new GPLayer(_canvas, _bitmapData, _width, _height, _index, _show, _lock, _blendMode, _alpha, _name); 
    6361    } 
    6462 
     
    8482    public function get lock():Boolean { 
    8583      return _lock; 
    86     } 
    87     public function get mask():Boolean { 
    88       return _mask; 
    8984    } 
    9085    public function get show():Boolean { 
     
    121116      return (_lock ? 'on' : 'off'); 
    122117    } 
    123     public function get maskCheck():String { 
    124       return (_mask ? 'on' : 'off'); 
    125     } 
    126118    public function get showCheck():String { 
    127119      return (_show ? 'on' : 'off'); 
     
    129121    public function set lockCheck(s:String):void { 
    130122      _lock = (s == 'on'); 
    131     } 
    132     public function set maskCheck(s:String):void { 
    133       _mask = (s == 'on'); 
    134123    } 
    135124    public function set showCheck(s:String):void { 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLayerArray.as

    r1458 r1472  
    22{ 
    33  import com.adobe.images.PNGEncoder; 
    4  
     4   
    55  import flash.display.BitmapData; 
    66  import flash.display.BlendMode; 
     
    3939        _a = a; 
    4040        for (var i:uint = 0; i < a.length; i++) { 
     41          if (!a[i].show) { 
     42            a[i].bitmap.visible = false; 
     43          } 
    4144          _view.addChild(a[i].bitmap); 
    4245        } 
     
    5154    } 
    5255     
    53     public static function getArrayFromBitmapLayers(can:GPCanvas, bls:BitmapData, w:uint, h:uint):Array { 
     56    public static function getArrayFromBitmapLayers(can:GPCanvas, bls:BitmapData, info:Object):Array { 
     57      var w:uint = info['width']; 
     58      var h:uint = info['height']; 
    5459      var layer_count:uint = bls.height / h; 
    5560      var dp:Point = new Point(0, 0); 
     
    5863        var lbd:BitmapData = new BitmapData(w, h); 
    5964        lbd.copyPixels(bls, new Rectangle(0, i * h, w, h), dp); 
    60         var l:GPLayer = new GPLayer(can, lbd, w, h, i); 
     65        var l:GPLayer = new GPLayer(can, lbd, w, h, i, 
     66                                     info.layer_infos[i].visible == 'true', 
     67                                     info.layer_infos[i].lock == 'true', 
     68                                     info.layer_infos[i].blendMode 
     69                                     ); 
    6170        ary.push(l); 
    6271      } 
     
    214223        'layers_image': PNGEncoder.encode(cb), 
    215224        'info': { 
     225          'width': _width, 
     226          'height': _height, 
    216227          'layer_infos': info 
    217228        } 
    218229      }; 
     230    } 
     231     
     232    public function set baseImgInfo(o:Object):void { 
     233      var infos:Array = o['layer_infos']; 
     234      for (var i:uint = 0; i < infos.length; i++) { 
     235        _a[i].lock = infos[i]['lock']; 
     236        _a[i].show = infos[i]['visible']; 
     237        _a[i].blendMode = infos[i]['blendMode']; 
     238      } 
    219239    } 
    220240 
  • as3/gunyarapaint/trunk/gunyarapaint/src/org/libspark/gunyarapaint/entities/GPLogger.as

    r1458 r1472  
    99  import flash.utils.ByteArray; 
    1010   
    11   import org.libspark.gunyarapaint.controls.GPCanvas; 
    12    
    1311  import mx.controls.Alert; 
    1412  import mx.utils.Base64Decoder; 
    1513  import mx.utils.Base64Encoder; 
     14   
     15  import org.libspark.gunyarapaint.controls.GPCanvas; 
    1616   
    1717  public class GPLogger 
     
    7676    } 
    7777     
    78     public function createViewerCanvas(baseImg:BitmapData):GPCanvas { 
     78    public function createViewerCanvas(baseImg:BitmapData, baseInfo:Object):GPCanvas { 
    7979      resetPosition(); 
    80       var canvas:GPCanvas = new GPCanvas(width, height, undoBufferSize, this, baseImg, null); 
     80      var canvas:GPCanvas = new GPCanvas(width, height, undoBufferSize, this, baseImg, baseInfo, null); 
    8181      return canvas; 
    8282    } 
  • as3/gunyarapaint/trunk/nicopedia/org/libspark/nicopedia/Com.as

    r1458 r1472  
    11package org.libspark.nicopedia 
    22{ 
     3  import com.adobe.serialization.json.JSON; 
     4   
    35  import flash.display.DisplayObject; 
    4   import com.adobe.serialization.json.JSON; 
     6   
    57  import mx.core.UIComponent; 
    68   
     
    2325    private const ALERT_TITLE:String = 'ニコニコ大百科伝言班'; 
    2426     
    25     private var postUrl:String; 
    26     private var cookie:String; 
    27     private var magic:String; 
    2827    private var callback:Function; 
    2928   
     
    3635    } 
    3736 
    38     public function setPostEnv(postUrl:String, cookie:String, magic:String):void { 
    39       this.postUrl = postUrl; 
    40       this.cookie = cookie; 
    41       this.magic = magic; 
    42     } 
    43      
    4437    // jasrac_idsはスペース区切りで 
    45     public function postPico(name:String, title:String, msg:String, mml:String, ref_mml_id:uint, jasrac_ids:String):void { 
     38    public function postPico(url:String, magic:String, cookie:String, name:String, title:String, msg:String, mml:String, ref_mml_id:uint, jasrac_ids:String, callback:Function):void { 
    4639      var r:URLRequest = new URLRequest(); 
    4740      var v:URLVariables = new URLVariables(); 
    48       r.url = postUrl; 
     41      r.url = url; 
    4942      r.method = URLRequestMethod.POST; 
    5043      r.data = v; 
     
    5851      v.cookie = cookie; 
    5952       
     53      this.callback = callback;       
    6054      post(r); 
    6155    } 
     
    9084    } 
    9185     
    92     public function postOekaki(name:String, msg:String, ref_oekaki_id:uint, data:Object):void { 
     86    public function postOekaki(url:String, magic:String, cookie:String, name:String, msg:String, ref_oekaki_id:uint, data:Object, callback:Function):void { 
    9387      var r:URLRequest = new URLRequest(); 
    9488      var v:URLVariables = new URLVariables(); 
    9589      var b:ByteArray = new ByteArray(); 
     90      var info:String = JSON.encode(data['info']); 
    9691      v.cookie = cookie; 
    9792      v.magic = magic; 
     
    108103      b.writeUTFBytes('&IMAGE_LAYERS:' + data['layers_image'].length + '='); 
    109104      b.writeBytes(data['layers_image']); 
    110       v.info = JSON.encode(data['info']); 
    111       r.url = postUrl; 
     105      b.writeUTFBytes('&IMAGE_INFO:' + info.length + '='); 
     106      b.writeUTFBytes(info); 
     107      r.url = url; 
    112108      r.method = URLRequestMethod.POST; 
    113109      r.contentType = 'application/x-nicopedia-oekaki'; 
    114110      r.data = b; 
    115111       
     112      this.callback = callback;       
    116113      post(r); 
    117114    } 
     
    184181      return loader.content; 
    185182    } 
     183    public function get jsonObject():Object { 
     184      return JSON.decode(urlLoader.data); 
     185    } 
    186186    public function get errStr():String { 
    187187      return errorStr; 
  • as3/gunyarapaint/trunk/picokakiko/src/picokakiko.as

    r1403 r1472  
    2121  } 
    2222  if (parameters['postUrl'] && parameters['cookie'] && parameters['magic']) { 
    23     new Com().setPostEnv(parameters['postUrl'], parameters['cookie'], parameters['magic']); 
    2423    postPicoButton.enabled = true; 
    2524  } 
     
    6463    Alert.show(errStr, ALERT_TITLE); 
    6564    postPicoButton.enabled = true; 
    66   } else if (data.toString()) { 
    67     Alert.show(data.toString(), ALERT_TITLE); 
     65  } else if (com.data.toString()) { 
     66    Alert.show(com.data.toString(), ALERT_TITLE); 
    6867    postPicoButton.enabled = true; 
    6968  } else { 
     
    108107  } 
    109108  postPicoButton.enabled = false; 
    110   new Com().postPico(fromTextInput.text, titleTextInput.text, messageTextArea.text, mml.text, mmlId, jasracTextInput.text); 
     109  new Com().postPico( 
     110    parameters['postUrl'], 
     111    parameters['magic'], 
     112    parameters['cookie'],   
     113    fromTextInput.text, 
     114    titleTextInput.text, 
     115    messageTextArea.text, 
     116    mml.text, 
     117    mmlId, 
     118    jasracTextInput.text, 
     119    completePostMMLHandler); 
    111120} 
    112121