<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" frameRate="32" creationComplete="initApp()" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import com.flashdev.bitmap.getPixelArray;
import mx.managers.*;
import mx.events.*;
import mx.core.*;
import flash.utils.*;
import flash.events.*;
import flash.net.*;
private const _strSaveJPGUrl:String = new String("savejpg.php");
private var _numColor:Number;
private var _numSize:Number;
private var _strTool:String;
private var _numCursorID:Number;
private var _booDraw:Boolean;
private var _bmpDraw:BitmapData;
private var _bmpDisplay:Bitmap;
private var _comDraw:UIComponent;
private var _objGetPixels:getPixelArray;
private var _winProgress:winProgressSm;
[Embed(source="imgs/pencil.png")]
private var curPencil:Class;
[Embed(source="imgs/paintbrush.png")]
private var curPaintbrush:Class;
[Embed(source="imgs/paintcan.png")]
private var curPaintBucket:Class;
private function initApp():void {
_booDraw = new Boolean(false);
_bmpDraw = new BitmapData(boxDraw.width, boxDraw.height, false, 0xFFFFFF);
_bmpDisplay = new Bitmap(_bmpDraw);
_comDraw = new UIComponent();
boxDraw.addChild(_comDraw);
_comDraw.addChild(_bmpDisplay);
changeDrawColor();
changeDrawSize();
selectDrawTool("pencil");
}
private function changeDrawColor():void {
_numColor = palColor.selectedColor;
}
private function changeDrawSize():void {
_numSize = numDrawSize.value;
}
private function selectDrawTool(strTool:String):void {
_strTool = strTool;
btnPencil.selected = false;
btnPaintbrush.selected = false;
btnPaintBucket.selected = false;
switch (strTool) {
case "pencil" : btnPencil.selected = true; break;
case "paintbrush" : btnPaintbrush.selected = true; break;
case "paintbucket" : btnPaintBucket.selected = true; break;
}
}
private function changeCursor():void {
clearCursor();
switch (_strTool) {
case "pencil" : _numCursorID = CursorManager.setCursor(curPencil); break;
case "paintbrush" : _numCursorID = CursorManager.setCursor(curPaintbrush); break;
case "paintbucket" : _numCursorID = CursorManager.setCursor(curPaintBucket); break;
}
}
private function clearCursor():void {
CursorManager.removeCursor(_numCursorID);
_booDraw = false;
}
private function drawToCanvas():void {
var potOffset:Point;
switch (_strTool) {
case "pencil" :
potOffset = new Point((_numSize / 2) * -1, ((_numSize / 2) * -1) + 14);
_bmpDraw.fillRect(new Rectangle(boxDraw.mouseX + potOffset.x, boxDraw.mouseY + potOffset.y, _numSize, _numSize), _numColor);
break;
case "paintbrush" :
potOffset = new Point(0, 14);
var shpCircle:Shape = new Shape();
shpCircle.graphics.beginFill(_numColor);
shpCircle.graphics.drawCircle(boxDraw.mouseX + potOffset.x, boxDraw.mouseY + potOffset.y, _numSize);
_bmpDraw.draw(shpCircle);
break;
case "paintbucket" :
potOffset = new Point(14, 12);
_bmpDraw.floodFill(boxDraw.mouseX + potOffset.x, boxDraw.mouseY + potOffset.y, _numColor);
break;
}
_bmpDisplay = new Bitmap(_bmpDraw);
}
private function onEnterFrame():void {
if (_booDraw) {
drawToCanvas();
}
}
private function onMouseDown():void {
_booDraw = true;
}
private function onMouseUp():void {
_booDraw = false;
}
private function clearDraw():void {
_bmpDraw.fillRect(new Rectangle(0, 0, boxDraw.width, boxDraw.height), 0xFFFFFF);
}
private function startSave():void {
_winProgress = winProgressSm(PopUpManager.createPopUp(this, winProgressSm, true));
_winProgress.title = "Processing bitmap data...";
_winProgress.progBar.label = "0%";
_winProgress.addEventListener("creationComplete", startProcess);
PopUpManager.centerPopUp(_winProgress);
}
public function startProcess(event:Event):void {
_objGetPixels = new getPixelArray(_bmpDraw);
_objGetPixels.addEventListener("progress", onProcessProg);
_objGetPixels.addEventListener("complete", saveToJPG);
_objGetPixels.process();
}
public function onProcessProg(event:Event):void {
_winProgress.progBar.setProgress(event.target.percent, 100);
_winProgress.progBar.label = event.target.percent + "%";
_winProgress.progBar.validateNow();
if (event.target.percent >= 99) {
_winProgress.title = "Rendering bitmap...";
}
}
private function saveToJPG(event:Event):void {
var varSend:URLVariables = new URLVariables();
varSend.width = _bmpDraw.width;
varSend.height = _bmpDraw.height;
varSend.data = event.target.dataString;
var request:URLRequest = new URLRequest();
request.data = varSend;
request.url = _strSaveJPGUrl;
request.method = URLRequestMethod.POST;
navigateToURL(request, "_self");
PopUpManager.removePopUp(_winProgress);
}
]]>
</mx:Script>
<mx:HBox id="appBox" width="600" horizontalCenter="0" height="400" verticalCenter="0">
<mx:Panel width="160" height="100%" layout="absolute" id="panTools" title="Tools">
<mx:VBox left="10" top="10" bottom="10" right="10" horizontalAlign="center">
<mx:Button label="Pencil" id="btnPencil" icon="@Embed('imgs/pencil.png')" height="30" width="100%" click="selectDrawTool('pencil')"/>
<mx:Button label="Paintbrush" id="btnPaintbrush" icon="@Embed('imgs/paintbrush.png')" width="100%" height="30" click="selectDrawTool('paintbrush')"/>
<mx:Button label="Paint Bucket" width="100%" height="30" id="btnPaintBucket" icon="@Embed('imgs/paintcan.png')" click="selectDrawTool('paintbucket')"/>
<mx:HRule width="100%"/>
<mx:NumericStepper id="numDrawSize" value="10" minimum="1" stepSize="1" maximum="100" width="100%" change="changeDrawSize()"/>
<mx:HBox width="100%" horizontalAlign="center" verticalAlign="middle" horizontalGap="0">
<mx:Image source="imgs/color_swatch.png"/>
<mx:ColorPicker width="100%" id="palColor" selectedColor="#800000" height="30" change="changeDrawColor()"/>
</mx:HBox>
</mx:VBox>
</mx:Panel>
<mx:Panel width="100%" height="100%" layout="absolute" id="panCanvas" title="Canvas">
<mx:Box bottom="0" right="0" id="boxDraw" enterFrame="onEnterFrame()" mouseDown="onMouseDown()" mouseUp="onMouseUp()" mouseOver="changeCursor()" mouseOut="clearCursor()" top="0" left="0"/>
<mx:ControlBar horizontalAlign="right">
<mx:Button label="Clear" height="30" icon="@Embed('imgs/picture_delete.png')" id="btnClear" click="clearDraw()"/>
<mx:Button label="Save..." id="btnSave" icon="@Embed('imgs/picture_save.png')" height="30" click="startSave()"/>
</mx:ControlBar>
</mx:Panel>
</mx:HBox>
</mx:Application>