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

リビジョン 1577, 5.3 kB (コミッタ: tasuku, コミット時期: 5 年 前)

changed layer window size

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       debugCheckPngUrl = 'http://dic.nicovideo.jp/oekaki/' + debugOekakiId + '.png';
48       new Com().sendGetUrlRequest(debugCheckPngUrl, function(com:Com):void { debugCheckPng = com.data; });
49     }
50
51     if (parameters['oelogUrl']) {
52       var url:String = parameters['oelogUrl'];
53       new Com().sendGetUrlRequest(url, getOelogHandler);
54     } else {
55       return;
56     }
57     if (parameters['postUrl']) {
58       postUrl = parameters['postUrl'];
59     }
60     if (parameters['oekakiId']) {
61       oekakiId = uint(parameters['oekakiId']);
62     }
63     playButton.addEventListener(FlexEvent.BUTTON_DOWN, playButtonHandler);
64     refButton.addEventListener(FlexEvent.BUTTON_DOWN, refButtonHandler);
65     playSpeedHSlider.addEventListener(SliderEvent.CHANGE, playSpeedHSliderHandler);
66     playSpeedHSlider.addEventListener(SliderEvent.THUMB_DRAG, playSpeedHSliderHandler);
67   }
68
69   private function getOelogHandler(com:Com):void {
70     oelog = com.data;
71     oelog.uncompress();
72     if (parameters['baseImgUrl']) {
73       new Com().loadURL(parameters['baseImgUrl'], getBaseImgHandler);
74     } else {
75       play();
76     }
77   }
78
79   private function getBaseImgHandler(com:Com):void {
80     baseImg = Bitmap(com.content).bitmapData;
81     if (parameters['baseImgInfoUrl']) {
82       new Com().sendGetUrlRequest(parameters['baseImgInfoUrl'], getBaseImgInfoHandler);
83     } else {
84       // 旧バージョン
85       play();
86     }
87   }
88  
89   private function getBaseImgInfoHandler(com:Com):void {
90     baseImgInfo = com.jsonObject;
91     play();
92   }
93
94   private var _logger:GPLogger;
95
96   private function playSpeedHSliderHandler(evt:SliderEvent):void {
97     if (_logger) {
98       _logger.playSpeed = playSpeedHSlider.value;
99     }
100   }
101
102   private function playButtonHandler(evt:Event):void {
103     play();
104   }
105
106   private function refButtonHandler(evt:Event):void {
107     if (debugCheckPng) {
108       checkImage();
109     } else if (postUrl) {
110       Com.redirectOekakiForm(postUrl, oekakiId);
111     } else {
112       Alert.show('続きが描けません!');
113     }
114   }
115
116   private function play():void {
117     playButton.enabled = false;
118
119     if (baseImg && !baseImgInfo) {
120       baseImgInfo = {'width': baseImg.width, 'height': baseImg.height, 'undoBufferSize': 16};
121     }
122     _logger = GPLogger.createFromByteArray(oelog, false, baseImg, baseImgInfo);
123
124     canvas.removeAllChildren();
125     var tui:UIComponent = new UIComponent();
126     tui.graphics.beginFill(0xFFFFFF);
127     tui.graphics.drawRect(0, 0, _logger.canvasWidth, _logger.canvasHeight);
128     tui.addChild(_logger.layerArray.view);
129     canvas.addChild(tui);
130
131     // canvas.rawChildren.addChild(_logger.layerArray.view);
132     canvas.width = _logger.canvasWidth + 2;
133     canvas.height = _logger.canvasHeight + 2;
134     this.width = _logger.canvasWidth + 20;
135     this.width = this.width < 420 ? 420 : this.width;
136     this.height = _logger.canvasHeight + canvas.y + 20;
137     this.height = this.height < 137 ? 137 : this.height; // for express install
138     if (ExternalInterface.available) {
139       try {
140         ExternalInterface.call("changeGPLogPlayerRect", this.width, this.height);
141       } catch (e:SecurityError) {
142       } catch (e:Error) {
143       }
144     }
145     this.enabled = true;
146
147     _logger.play(playSpeedHSlider.value, completePlayLogHandler);
148   }
149
150   private function completePlayLogHandler():void {
151     playButton.enabled = true;
152   }
153
154   private function checkImage():void {
155     if (MiscUtils.compareObject(
156         _logger.dataForPost['image'],
157         debugCheckPng)) {
158       Alert.show('合ってる。');
159     } else {
160       Alert.show('違うよ!');
161     }
162   }
163   ]]>
164   </mx:Script>
165   <mx:Label x="313" y="11" text="ver.2008101102"/>
166 </mx:Application>
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。