root/as3/gunyarapaint/trunk/src/main.as

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

r21@poppop (orig r20): tasuku | 2008-03-10 19:39:18 +0900
お絵カキコとピコカキコを分ける

Line 
1 import flash.events.Event;
2
3 import gunyarapaint.Canvas;
4 import gunyarapaint.Com;
5
6 import mx.events.ColorPickerEvent;
7 import mx.events.FlexEvent;
8 import mx.events.ListEvent;
9 import mx.events.NumericStepperEvent;
10 import mx.events.SliderEvent;
11 import mx.managers.PopUpManager;
12
13 private var gpCanvas:gunyarapaint.Canvas;
14 private const CANVAS_WIDTH:uint = 400;
15 private const CANVAS_HEIGHT:uint = 300;
16 private var basex:uint, basey:uint;
17 private var appWidth:uint, appHeight:uint;
18
19 public function init():void { 
20   gpCanvas = new gunyarapaint.Canvas(CANVAS_WIDTH, CANVAS_HEIGHT, 12);
21   // gpCanvas.scrollRect = new Rectangle(0, 0, 300, 300);
22   canvas.addChild(gpCanvas);
23   gpCanvas.rotation = 0; //. うひひ
24  
25   // 太さ
26   thicknessStepper.addEventListener(NumericStepperEvent.CHANGE, thicknessStepperHandler);
27   // カラーピッカ
28   colorPicker.addEventListener(ColorPickerEvent.CHANGE, colorPickerHandler);
29   // スポイト
30   dropperButton.addEventListener(Event.CHANGE, dropperButtonHandler);
31   // 透明度
32   alphaSlider.addEventListener(SliderEvent.CHANGE, alphaSliderHandler);
33   // キャンバス回転
34   canvasRotate.addEventListener(SliderEvent.CHANGE, canvasRotateHandler);
35   canvasRotate.addEventListener(SliderEvent.THUMB_DRAG, canvasRotateHandler);
36   // 回転のときに勝手にApplicationの領域が拡大しないように
37   canvas.explicitWidth = 0;
38   canvas.explicitHeight = 0;
39  
40   // ブレンドモード
41   blendModeComboBox.dataProvider = [
42     {label: '通常', data: flash.display.BlendMode.NORMAL},
43     // {label: '消去', data: flash.display.BlendMode.ERASE},
44     {label: '比較(暗)', data: flash.display.BlendMode.DARKEN},
45     {label: '乗算', data: flash.display.BlendMode.MULTIPLY},
46     {label: '比較(明)', data: flash.display.BlendMode.LIGHTEN},
47     {label: 'スクリーン', data: flash.display.BlendMode.SCREEN},
48     {label: '覆い焼き', data: flash.display.BlendMode.ADD},
49     {label: 'オーバーレイ', data: flash.display.BlendMode.OVERLAY},
50     {label: 'ハードライト', data: flash.display.BlendMode.HARDLIGHT},
51     {label: '差の絶対値', data: flash.display.BlendMode.DIFFERENCE},
52     {label: '除外', data: flash.display.BlendMode.SUBTRACT},
53     {label: '反転', data: flash.display.BlendMode.INVERT}];
54   blendModeComboBox.addEventListener(ListEvent.CHANGE, blendModeComboBoxHandler);
55  
56   // アンドゥ・リドゥ
57   undoButton.addEventListener(FlexEvent.BUTTON_DOWN, undoButtonHandler);
58   redoButton.addEventListener(FlexEvent.BUTTON_DOWN, redoButtonHandler);
59    
60   // 補助線
61   additionalNumberStepper.addEventListener(NumericStepperEvent.CHANGE, additionalNumberStepperHandler);
62   additionalBoxCheckBox.addEventListener(Event.CHANGE, additionalBoxCheckBoxHandler);
63   additionalSkewCheckBox.addEventListener(Event.CHANGE, additionalSkewCheckBoxHandler);
64   // スポイトで色取ったイベント
65   gpCanvas.addEventListener('changeColor', changeColorHandler);
66   // undo/redoの状態変化
67   gpCanvas.addEventListener('changeUndoRedo', changeUndoRedoHandler);
68  
69   postOekakiButton.addEventListener(FlexEvent.BUTTON_DOWN, postOekakiButtonHandler);
70  
71   // いろんな初期値を保存…
72   basex = canvas.x;
73   basey = canvas.y;
74  
75   appWidth = this.width;
76   appHeight = this.height;
77 }
78
79 private function thicknessStepperHandler(evt:NumericStepperEvent):void {
80   gpCanvas.setLineThickness(evt.value);
81 }
82
83 private function colorPickerHandler(evt:ColorPickerEvent):void {
84   gpCanvas.setLineColor(evt.target.selectedColor);
85 }
86
87 private function alphaSliderHandler(evt:SliderEvent):void {
88   gpCanvas.setLineAlpha(evt.value);
89 }
90
91 private function canvasRotateHandler(evt:SliderEvent):void {
92   var deg:int = evt.value;
93   var rad:Number = deg * Math.PI / 180;
94   // TODO: dasai
95   if (deg >= 0) {
96     if (deg <= 90) {
97       canvas.x = basex + Math.sin(rad) * CANVAS_HEIGHT;
98       canvas.y = basey
99     } else {
100       // FIXME: implement
101     }
102   } else {
103     if (deg >= -90) {
104       canvas.x = basex;
105       canvas.y = basey - Math.sin(rad) * CANVAS_WIDTH;
106     } else {
107       // FIXME: implement
108     }
109   }
110   gpCanvas.rotation = evt.value;
111   this.height = CANVAS_HEIGHT * (Math.cos(rad) - 1) +
112                 CANVAS_WIDTH * Math.abs(Math.sin(rad)) + appHeight;
113 }
114
115 private function blendModeComboBoxHandler(evt:ListEvent):void {
116   gpCanvas.setLineBlendMode(String(evt.currentTarget.value));
117 }
118 private function undoButtonHandler(evt:FlexEvent):void {
119   gpCanvas.undo();
120 }
121 private function redoButtonHandler(evt:FlexEvent):void {
122   gpCanvas.redo();
123 }
124 private function dropperButtonHandler(evt:Event):void {
125   if (evt.target.selected) {
126     gpCanvas.setPenMode(gpCanvas.MODE_DROPPER);   
127   } else {
128     gpCanvas.setPenMode(gpCanvas.MODE_PEN);
129   }
130 }
131 private function changeColorHandler(evt:Event):void {
132   colorPicker.selectedColor = gpCanvas.getLineColor();
133   alphaSlider.value = 1.0;
134 }
135 private function additionalNumberStepperHandler(evt:NumericStepperEvent):void {
136   gpCanvas.setAdditionalNumber(evt.value);
137 }
138 private function additionalBoxCheckBoxHandler(evt:Event):void {
139   gpCanvas.setAdditionalBox(evt.target.selected);
140 }
141 private function additionalSkewCheckBoxHandler(evt:Event):void {
142   gpCanvas.setAdditionalSkew(evt.target.selected);
143 }
144 private function changeUndoRedoHandler(evt:Event):void {
145   var undoCount:Number = gpCanvas.getUndoCount();
146   var redoCount:Number = gpCanvas.getRedoCount();
147   if (undoCount > 0) {
148     undoButton.label = 'アンドゥ (' + undoCount + ')';
149     undoButton.enabled = true;
150   } else {
151     undoButton.label = 'アンドゥ';
152     undoButton.enabled = false;
153   }
154   if (redoCount > 0) {
155     redoButton.label = 'リドゥ (' + redoCount + ')';
156     redoButton.enabled = true;
157   } else {
158     redoButton.label = 'リドゥ';
159     redoButton.enabled = false;
160   }
161 }
162
163 private function postOekakiButtonHandler(evt:Event):void {
164 }
165
166
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。