<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="init()" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import Sedna.Ui.Containers.Container;
import mx.events.ListEvent;
import mx.containers.HBox;
import mx.events.CloseEvent;
import mx.controls.Label;
import mx.containers.TitleWindow
import mx.events.ColorPickerEvent;
import com.adobe.images.PNGEncoder
private var seccp:ColorPicker
private var i:icn
private var path:String
private var exp:Boolean
private function init():void
{
i = new icn("Qi",0x0099FF,0x000099,0x000066)
i.TextSize = 100
c1.selectedColor = 0x0099FF
c2.selectedColor = 0x000099
tc.selectedColor = 0x000066
da.addChild(i)
seccp = c1
c1.addEventListener(ColorPickerEvent.CHANGE , c1Change)
c2.addEventListener(ColorPickerEvent.CHANGE , c2Change)
pn.addEventListener(Event.CHANGE , pnChange)
tx.addEventListener(Event.CHANGE , txChange)
fs.addEventListener(Event.CHANGE , fsChange)
tc.addEventListener(Event.CHANGE , tcChange)
efa.addEventListener(MouseEvent.CLICK , ex)
savebt.addEventListener(MouseEvent.CLICK , sClick)
ec.addEventListener(MouseEvent.CLICK , ecClick)
}
private function c1Change(e:ColorPickerEvent):void
{
i.C1 = e.color
}
private function c2Change(e:ColorPickerEvent):void
{
i.C2 = e.color
}
private function pnChange(e:Event):void
{
var arr:Array = pn.text.split(" ")
if(arr.length == 1)
{
var s:String = pn.text.charAt(0).toUpperCase() + pn.text.charAt(1).toLowerCase()
tx.text = s
}else
{
var chars:Array = new Array()
for (var o:uint;o<arr.length;o++)
{
chars.push(arr[o].charAt(0).toLowerCase())
}
var s2:String = chars[0] as String
s2 = s2.toUpperCase()
chars = chars.splice(1,3)
s2 += chars.join("")
tx.text = s2
}
txChange(null)
}
private function txChange(e:Event):void
{
i.Text = tx.text
}
private function fsChange(e:Event):void
{
i.TextSize = fs.value
}
private function tcChange(e:ColorPickerEvent):void
{
i.TextColor = e.color
}
private function ex (e:MouseEvent):void
{
var f:File = File.documentsDirectory
f.browseForDirectory("Select A directory to save")
f.addEventListener(Event.SELECT , sel)
exp = true
}
private function sClick (e:MouseEvent):void
{
var f:File = File.documentsDirectory
f.browseForDirectory("Select A directory to save")
f.addEventListener(Event.SELECT , sel)
}
private function sel(e:Event):void
{
path = e.target.nativePath
createSave()
}
private function ecClick(e:MouseEvent):void
{
var cols:Object = generateColors(acc.selectedColor)
c1.selectedColor = cols.c1
i.C1 = cols.c1
c2.selectedColor = cols.c2
i.C2 = cols.c2
tc.selectedColor = cols.ct
i.TextColor = cols.ct
}
private function createSave():void
{
var sw:TitleWindow = new TitleWindow()
sw.showCloseButton = true
addChild(sw)
sw.addEventListener(MouseEvent.MOUSE_DOWN , function(e:Event):void{sw.startDrag()})
sw.addEventListener(MouseEvent.MOUSE_UP , function(e:Event):void{sw.stopDrag()})
sw.addEventListener(CloseEvent.CLOSE , function(e:Event):void{removeChild(sw)})
sw.title = "Enter a file name"
var t:Label = new Label()
t.text = "File name(without the extension):"
var ti:TextInput = new TextInput()
ti.width = 200
var cont:HBox = new HBox()
var ok:Button = new Button()
ok.label = "ok"
ok.addEventListener(MouseEvent.CLICK , okClick)
sw.addChild(t)
sw.addChild(ti)
sw.addChild(cont)
cont.addChild(ok)
function okClick (e:Event):void
{
var fn:String = ti.text
var im:Array = new Array()
if(!exp)
{
im.push(new Container(new Bitmap(preview(265))))
}else
{
im.push(new Container(new Bitmap(preview(128))))
im.push(new Container(new Bitmap(preview(48))))
im.push(new Container(new Bitmap(preview(32))))
im.push(new Container(new Bitmap(preview(16))))
};
createPreview(im,fn)
removeChild(sw);
}
var cancel:Button = new Button()
cancel.label = "cancel"
cancel.addEventListener(MouseEvent.CLICK , cancelClick)
cont.addChild(cancel)
function cancelClick(e:Event):void
{
removeChild(sw);
}
}
private function createPreview(images:Array,outName:String):void
{
var sw:TitleWindow = new TitleWindow()
sw.showCloseButton = true
addChild(sw)
sw.addEventListener(MouseEvent.MOUSE_DOWN , function(e:Event):void{sw.startDrag()})
sw.addEventListener(MouseEvent.MOUSE_UP , function(e:Event):void{sw.stopDrag()})
sw.addEventListener(CloseEvent.CLOSE , function(e:Event):void{removeChild(sw)})
sw.title = "Preview"
var cont:HBox = new HBox()
sw.addChild(cont)
for (var o:uint;o<images.length;o++)
{
cont.addChild(images[o])
}
var bcont:HBox = new HBox()
sw.addChild(bcont)
var ok:Button = new Button()
ok.label = "ok"
ok.addEventListener(MouseEvent.CLICK , okClick)
bcont.addChild(ok)
function okClick(e:Event):void
{
write(outName)
removeChild(sw);
}
var cancel:Button = new Button()
cancel.label = "cancel"
cancel.addEventListener(MouseEvent.CLICK , cancelClick)
bcont.addChild(cancel)
function cancelClick(e:Event):void
{
removeChild(sw);
}
}
private function save(name:String,size:uint):void
{
var f:File = new File(path + "/" + name)
var fs:FileStream = new FileStream()
fs.addEventListener(IOErrorEvent.IO_ERROR , error)
fs.open(f , FileMode.WRITE)
var tma:Matrix = new Matrix()
tma.createBox(2,2)
var tbd:BitmapData = new BitmapData(256,256)
tbd.draw(i,tma,null,null,null,true)
var bmp:Bitmap = new Bitmap(tbd,"auto",true)
bmp.scaleX = size/256
bmp.scaleY = size/256
var ma:Matrix = new Matrix()
ma.createBox(size/256,size/256)
var bd:BitmapData = new BitmapData(size,size)
bd.draw(bmp,ma,null,null,null,true)
var ba:ByteArray = PNGEncoder.encode(bd)
fs.writeBytes(ba)
fs.close()
}
private function error(e:IOErrorEvent):void
{
var sw:TitleWindow = new TitleWindow()
sw.showCloseButton = true
addChild(sw)
sw.addEventListener(MouseEvent.MOUSE_DOWN , function(e:Event):void{sw.startDrag()})
sw.addEventListener(MouseEvent.MOUSE_UP , function(e:Event):void{sw.stopDrag()})
sw.addEventListener(CloseEvent.CLOSE , function(e:Event):void{removeChild(sw)})
sw.title = "Error"
var l:Text = new Text()
l.text = "Error on writing the file , you might not have permision to write this file.\nError ID:" + e.errorID + "\nDescription:" + e.text
sw.addChild(l)
var cont:HBox = new HBox()
sw.addChild(cont)
var ok:Button = new Button()
ok.label = "ok"
ok.addEventListener(MouseEvent.CLICK , okClick)
cont.addChild(ok)
function okClick(e:Event):void
{
removeChild(sw);
}
}
private function preview(size:uint):BitmapData
{
var tma:Matrix = new Matrix()
tma.createBox(2,2)
var tbd:BitmapData = new BitmapData(256,256)
tbd.draw(i,tma,null,null,null,true)
var bmp:Bitmap = new Bitmap(tbd,"auto",true)
bmp.scaleX = size/256
bmp.scaleY = size/256
var ma:Matrix = new Matrix()
ma.createBox(size/256,size/256)
var bd:BitmapData = new BitmapData(size,size)
bd.draw(bmp,ma,null,null,null,true)
return bd
}
private function write(fn:String):void
{
if(!exp)
{
save(fn+".png",265)
}else
{
save(fn+"-128x128.png",128)
save(fn+"-48x48.png",48)
save(fn+"-32x32.png",32)
save(fn+"-16x16.png",16)
exp = false
}
}
private function generateColors(rgb:uint):Object
{
var prop:Object = new Object()
var cols:Object = hex24torgb(rgb)
var hsbs:Object = rgbtohsb(cols.red,cols.green,cols.blue)
var c1rgb:Object = hsbtorgb(hsbs.hue,hsbs.saturation,hsbs.brightness*1.45)
var c1:uint = rgbtohex24(c1rgb.red,c1rgb.green,c1rgb.blue)
var c2rgb:Object = hsbtorgb(hsbs.hue,hsbs.saturation,hsbs.brightness*.55)
var c2:uint = rgbtohex24(c2rgb.red,c2rgb.green,c2rgb.blue)
var ctrgb:Object = hsbtorgb(hsbs.hue,hsbs.saturation,hsbs.brightness-hsbs.brightness*.55)
var ct:uint = rgbtohex24(ctrgb.red,ctrgb.green,ctrgb.blue)
prop = {
c1:c1
,c2:c2
,ct:ct
}
return prop
}
public static function rgbtohsb(red:Number,green:Number,blue:Number):Object
{
var min:Number=Math.min(Math.min(red,green),blue)
var brightness:Number=Math.max(Math.max(red,green),blue)
var delta:Number=brightness-min
var saturation:Number=(brightness == 0) ? 0 : delta/brightness
var hue:Number
if(saturation == 0)
{
hue=0
}
else
{
if(red == brightness)
{
hue=(60*(green-blue))/delta
}
else if(green == brightness)
{
hue=120+(60*(blue-red))/delta
}
else
{
hue=240+(60*(red-green))/delta
}
if(hue<0) hue+=360
}
saturation*=100
brightness=(brightness/255)*100
return {hue:hue,saturation:saturation,brightness:brightness}
}
public static function hsbtorgb(hue:Number,saturation:Number,brightness:Number):Object
{
if(hue > 360)
{
hue -=360
}
if(saturation > 100)
{
saturation = 100
}
if(brightness > 100)
{
brightness = 100
}
var red:Number, green:Number, blue:Number
hue%=360;
if(brightness==0)
{
return {red:0, green:0, blue:0}
}
saturation/=100;
brightness/=100;
hue/=60;
var o:Number = Math.floor(hue);
var f:Number = hue-o;
var p:Number = brightness*(1-saturation);
var q:Number = brightness*(1-(saturation*f));
var t:Number = brightness*(1-(saturation*(1-f)));
switch(o)
{
case 0:
red=brightness; green=t; blue=p;
break;
case 1:
red=q; green=brightness; blue=p;
break;
case 2:
red=p; green=brightness; blue=t;
break;
case 3:
red=p; green=q; blue=brightness;
break;
case 4:
red=t; green=p; blue=brightness;
break;
case 5:
red=brightness; green=p; blue=q;
break;
}
red=Math.round(red*255)
green=Math.round(green*255)
blue=Math.round(blue*255)
return {red:red, green:green, blue:blue}
}
public static function hex24torgb(color:Number):Object
{
var r:Number=color >> 16 & 0xff
var g:Number=color >> 8 & 0xFF
var b:Number=color & 0xFF
return {red:r,green:g,blue:b}
}
public static function rgbtohex24(red:Number,green:Number,blue:Number):Number
{
return (red<<16 | green<<8 | blue)
}
]]>
</mx:Script>
<mx:Grid width="100%" height="100%">
<mx:GridRow width="100%" height="100%">
<mx:GridItem width="100%" height="100%">
<mx:VBox width="100%" height="100%">
<mx:Label text="Properties" styleName="MainTitle" color="#00809C"/>
<mx:Label text="Background Gradient" styleName="MiddleTile"/>
<mx:HBox width="100%" height="28">
<mx:Label text="First Color:"/>
<mx:ColorPicker id="c1"/>
</mx:HBox>
<mx:HBox width="100%" height="28">
<mx:Label text="Second Color:"/>
<mx:ColorPicker id="c2"/>
</mx:HBox>
<mx:HRule width="100%"/>
<mx:Label text="Text" color="#046377"/>
<mx:HBox width="100%">
<mx:Label text="Text Color:"/>
<mx:ColorPicker id="tc"/>
</mx:HBox>
<mx:HBox width="100%">
<mx:Label text="Program Name:"/>
<mx:TextInput id="pn" width="100%" text="Quick Icon"/>
</mx:HBox>
<mx:HBox width="100%">
<mx:Label text="Text(4 chars max):"/>
<mx:TextInput id="tx" maxChars="4" width="100%" text="Qi"/>
</mx:HBox>
<mx:HBox width="100%">
<mx:Label text="Font Size:"/>
<mx:HSlider id="fs" width="100%" minimum="60" maximum="120" enabled="true" liveDragging="true" allowTrackClick="true" value="100"/>
</mx:HBox>
<mx:HRule width="100%"/>
<mx:HBox width="100%" horizontalGap="8" verticalAlign="middle" horizontalAlign="left">
<mx:Label text="Auto colorization color:"/>
<mx:ColorPicker id="acc"/>
</mx:HBox>
<mx:HBox width="100%">
<mx:Button label="Auto colorize" labelPlacement="left" id="ec" enabled="true"/>
</mx:HBox>
</mx:VBox>
</mx:GridItem>
<mx:GridItem>
<mx:VBox width="100%" height="100%">
<mx:Panel layout="absolute" title="Preview" color="#00809C" fontSize="14" fontWeight="bold" fontFamily="Arial">
<mx:Canvas width="256" height="256" id="da">
</mx:Canvas>
</mx:Panel>
<mx:HBox width="100%" height="100%">
<mx:Text id="ab" width="100%">
<mx:text>Developed By Toki Zeus Ralad.Free for download, edit and redistribute.By editing or redistributing maintain Credits. I'm not responsable by any resoults of you creations.Respect Adobe registered Logos.Bugs/sugestions : tokizr@gmail.com</mx:text>
</mx:Text>
</mx:HBox>
<mx:HBox width="100%" horizontalGap="6" horizontalAlign="right" verticalAlign="middle">
<mx:Button label="Save" labelPlacement="left" id="savebt" enabled="true"/>
<mx:Button label="Export For AIR" labelPlacement="left" id="efa" enabled="true"/>
</mx:HBox>
</mx:VBox>
</mx:GridItem>
</mx:GridRow>
</mx:Grid>
<mx:Style source="MainTitle.css"/>
<mx:Style source="MiddleTitle.css"/>
</mx:WindowedApplication>