root/as3/gunyarapaint/trunk/gunyarapaint/src/gplogplayer.mxml

リビジョン 1891, 5.6 kB (コミッタ: tasuku, コミット時期: 4 年 前)

* 大百科: 2008112301版リリース。
* gunyarapaint: はくはくさん作の0.5足すロジックを全てに適用。
* gunyarapaint: GPLoggerが記録するバージョンを0.2.0とする。
* gunyarapaint: 0.1.0以下のバージョンのログについては、古いロジックと同等の動作をするように変更。

(GPLogger.compatibility_0_1_0がそれ)

* pikokakiko: ウォッチリストに追加するチェックボックスの付与。

Line 
1 <?xml version="1.0" encoding="utf-8"?>
2 <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
3   layout="absolute" width="420" height="349"
4   backgroundGradientAlphas="[1.0, 1.0]"
5   backgroundGradientColors="[#FFFFFF, #FFFFFF]"
6   creationComplete="init()"
7 >
8   <mx:Button id="playButton" x="10" y="9" label="再生" enabled="false"/>
9   <mx:Label x="63" y="11" text="再生スピード"/>
10   <mx:HSlider id="playSpeedHSlider" x="116" y="8" minimum="1" maximum="501" snapInterval="20" value="21" width="107"/>
11   <mx:Button x="231" y="9" label="続きを描く" id="refButton"/>
12   <mx:Canvas id="canvas" x="10" width="400" height="300" y="39" borderStyle="solid"></mx:Canvas>
13
14   <mx:Script>
15   <![CDATA[
16   import mx.core.UIComponent;
17   import flash.events.Event;
18   import org.libspark.nicopedia.Com;
19   import org.libspark.gunyarapaint.entities.GPLogger;
20   import org.libspark.gunyarapaint.controls.GPCanvas;
21   import org.libspark.gunyarapaint.utils.MiscUtils;
22
23   import mx.controls.Alert;
24   import mx.events.FlexEvent;
25   import mx.events.SliderEvent;
26   import mx.managers.PopUpManager;
27
28   private var oelog:ByteArray;
29   private var baseImg:BitmapData;
30   private var baseImgInfo:Object;
31   private var oekakiId:uint;
32   private var postUrl:String;
33
34   /*** debug ***/
35   private var debugOekakiId:uint = 0; // 0でデバッグしない
36   private var debugOekakiRefId:uint = 0;
37   private var debugCheckPngUrl:String;
38   private var debugCheckPng:ByteArray;
39   /*** debug end ***/
40
41   public function init():void {
42     this.enabled = false;
43
44     // for debug
45     if (debugOekakiId != 0) {
46       parameters['oelogUrl'] = 'http://dic.nicovideo.jp/oelog/' + debugOekakiId;
47       if (debugOekakiRefId != 0) {
48         parameters['baseImgUrl'] = 'http://dic.nicovideo.jp/oekaki_layers/' + debugOekakiRefId;
49         parameters['baseImgInfoUrl'] = 'http://dic.nicovideo.jp/oekaki_info/' + debugOekakiRefId;
50       }
51       debugCheckPngUrl = 'http://dic.nicovideo.jp/oekaki/' + debugOekakiId + '.png';
52       new Com().sendGetUrlRequest(debugCheckPngUrl, function(com:Com):void { debugCheckPng = com.data; });
53     }
54
55     if (parameters['oelogUrl']) {
56       var url:String = parameters['oelogUrl'];
57       new Com().sendGetUrlRequest(url, getOelogHandler);
58     } else {
59       return;
60     }
61     if (parameters['postUrl']) {
62       postUrl = parameters['postUrl'];
63     }
64     if (parameters['oekakiId']) {
65       oekakiId = uint(parameters['oekakiId']);
66     }
67     playButton.addEventListener(FlexEvent.BUTTON_DOWN, playButtonHandler);
68     refButton.addEventListener(FlexEvent.BUTTON_DOWN, refButtonHandler);
69     playSpeedHSlider.addEventListener(SliderEvent.CHANGE, playSpeedHSliderHandler);
70     playSpeedHSlider.addEventListener(SliderEvent.THUMB_DRAG, playSpeedHSliderHandler);
71   }
72
73   private function getOelogHandler(com:Com):void {
74     oelog = com.data;
75     oelog.uncompress();
76     if (parameters['baseImgUrl']) {
77       new Com().loadURL(parameters['baseImgUrl'], getBaseImgHandler);
78     } else {
79       play();
80     }
81   }
82
83   private function getBaseImgHandler(com:Com):void {
84     baseImg = Bitmap(com.content).bitmapData;
85     if (parameters['baseImgInfoUrl']) {
86       new Com().sendGetUrlRequest(parameters['baseImgInfoUrl'], getBaseImgInfoHandler);
87     } else {
88       // 旧バージョン
89       play();
90     }
91   }
92  
93   private function getBaseImgInfoHandler(com:Com):void {
94     baseImgInfo = com.jsonObject;
95     play();
96   }
97
98   private var _logger:GPLogger;
99
100   private function playSpeedHSliderHandler(evt:SliderEvent):void {
101     if (_logger) {
102       _logger.playSpeed = playSpeedHSlider.value;
103     }
104   }
105
106   private function playButtonHandler(evt:Event):void {
107     play();
108   }
109
110   private function refButtonHandler(evt:Event):void {
111     if (debugCheckPng) {
112       checkImage();
113     } else if (postUrl) {
114       Com.redirectOekakiForm(postUrl, oekakiId);
115     } else {
116       Alert.show('続きが描けません!');
117     }
118   }
119
120   private function play():void {
121     playButton.enabled = false;
122
123     if (baseImg && !baseImgInfo) {
124       baseImgInfo = {'width': baseImg.width, 'height': baseImg.height, 'undoBufferSize': 16};
125     }
126     oelog.position = 0;
127     _logger = GPLogger.createFromByteArray(oelog, false, baseImg, baseImgInfo);
128
129     canvas.removeAllChildren();
130     var tui:UIComponent = new UIComponent();
131     tui.graphics.beginFill(0xFFFFFF);
132     tui.graphics.drawRect(0, 0, _logger.canvasWidth, _logger.canvasHeight);
133     tui.addChild(_logger.layerArray.view);
134     canvas.addChild(tui);
135
136     // canvas.rawChildren.addChild(_logger.layerArray.view);
137     canvas.width = _logger.canvasWidth + 2;
138     canvas.height = _logger.canvasHeight + 2;
139     this.width = _logger.canvasWidth + 20;
140     this.width = this.width < 420 ? 420 : this.width;
141     this.height = _logger.canvasHeight + canvas.y + 20;
142     this.height = this.height < 137 ? 137 : this.height; // for express install
143     if (ExternalInterface.available) {
144       try {
145         ExternalInterface.call("changeGPLogPlayerRect", this.width, this.height);
146       } catch (e:SecurityError) {
147       } catch (e:Error) {
148       }
149     }
150     this.enabled = true;
151
152     _logger.play(playSpeedHSlider.value, completePlayLogHandler);
153   }
154
155   private function completePlayLogHandler():void {
156     playButton.enabled = true;
157   }
158
159   private function checkImage():void {
160     if (MiscUtils.compareObject(
161         _logger.dataForPost['image'],
162         debugCheckPng)) {
163       Alert.show('合ってる。');
164     } else {
165       Alert.show('違うよ!');
166     }
167   }
168   ]]>
169   </mx:Script>
170   <mx:Label x="313" y="11" text="ver.2008112301"/>
171 </mx:Application>
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。