//Frame 1:
import flash.display.Graphics;
import flash.display.*;
import flash.display.Stage;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.filters.BitmapFilterQuality;
import flash.filters.BitmapFilter;
import flash.filters.BitmapFilterType;
import flash.filters.BlurFilter;
import flash.filters.BevelFilter;
import fl.controls.Button;
import fl.controls.RadioButton;
import fl.controls.RadioButtonGroup;
import fl.controls.TextInput;
import flash.utils.getDefinitionByName;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.FullScreenEvent;
import flash.geom.ColorTransform;
import flash.external.ExternalInterface;
import com.adobe.images.JPGEncoder;
//import Zeh Fernando's excellent Tweener package
import caurina.transitions.*;
var numBasicDots:Number = 25;
title_txt.visible = false;
url_txt.visible = false;
var currentThemeTitle:String;
var dynamicColorArray:Array = new Array();
var numCirclesToGen:Number;
//my favorite little random function - seed it with floor and ceiling and it brings back a random interger from the range
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}
function randRange2(min:Number, max:Number):Number {
var randomNum1:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum1;
}
function splatRange(min1:Number, max1:Number):Number {
var randomSplat1:Number = Math.floor(Math.random() * (max1 - min1 + 1)) + min1;
return randomSplat1;
}
var myBasicTimer:Timer = new Timer(200);
myBasicTimer.repeatCount = numBasicDots;
myBasicTimer.addEventListener("timer", timedFunction);
myBasicTimer.addEventListener("timerComplete", timerCompleteFunction);
// Function will be called every 500 milliseconds
function timedFunction(eventArgs:TimerEvent) {
removeChild(getChildByName("dot"+(myBasicTimer.currentCount-1)));
removeChild(getChildByName("splat"+(myBasicTimer.currentCount-1)));
}
function timerCompleteFunction(eventArgs:TimerEvent) {
play();
}
function kulerCreator() {
var Splat1:Splater1 = new Splater1();
var Splat2:Splater2 = new Splater2();
var Splat3:Splater3 = new Splater3();
var Splat4:Splater4 = new Splater4();
var Splat5:Splater5 = new Splater5();
var Splat6:Splater6 = new Splater6();
var arraySplat:Array = new Array();
arraySplat.push(Splat1,Splat2,Splat3,Splat4,Splat5,Splat6);
// Create blur filters to apply to the circles drawn.
var blur1:BlurFilter = new BlurFilter();
blur1.blurX = 100;
blur1.blurY = 100;
blur1.quality = BitmapFilterQuality.MEDIUM;
var blur2:BlurFilter = new BlurFilter();
blur2.blurX = 3;
blur2.blurY = 3;
blur2.quality = BitmapFilterQuality.MEDIUM;
var blur3:BlurFilter = new BlurFilter();
blur3.blurX = 12;
blur3.blurY = 12;
blur3.quality = BitmapFilterQuality.MEDIUM;
var blur4:BlurFilter = new BlurFilter();
blur4.blurX = 50;
blur4.blurY = 50;
blur4.quality = BitmapFilterQuality.MEDIUM;
var blurArray:Array = new Array([blur1], [blur2], [blur3], [blur4]);
var colorArray:Array = new Array('0x026109', '0x037F0C', '0x5BB520', '0xAAD70E');
for (var i:Number=0; i<numBasicDots; i++) {
var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(colorArray[randRange(0,colorArray.length)], Math.random() );
mySprite.graphics.lineStyle(randRange(0,30), colorArray[randRange(0,colorArray.length)], Math.random(), true);
var currRand:Number = randRange2(1,300);
mySprite.graphics.drawCircle(randRange2(0,stage.stageWidth), randRange2(0,stage.stageHeight+100), currRand);
mySprite.filters = blurArray[randRange(0,blurArray.length)];
mySprite.alpha = 0;
mySprite.scaleX = 0;
mySprite.scaleY = 0;
this.addChild(mySprite);
mySprite.name = "dot"+i;
Tweener.addTween(mySprite, {alpha:1, _scale:1, time:randRange(0,5), transition:"easeOutSine"});
}
//Split for easy seperation later
for (var i:Number=0; i<numBasicDots; i++) {
//Use color transform and assing it the color values start with white values on your movie
var myFreakinColor:ColorTransform;
myFreakinColor = new ColorTransform();
myFreakinColor.color = colorArray[randRange(0,colorArray.length)], Math.random();
var Splat1:Splater1 = new Splater1();
Splat1.name = "splater"+i;
Splat1.transform.colorTransform = myFreakinColor;
var Splat2:Splater2 = new Splater2();
Splat2.name = "splater"+i;
Splat2.transform.colorTransform = myFreakinColor;
var Splat3:Splater3 = new Splater3();
Splat3.name = "splater"+i;
Splat3.transform.colorTransform = myFreakinColor;
var Splat4:Splater4 = new Splater4();
Splat4.name = "splater"+i;
Splat4.transform.colorTransform = myFreakinColor;
var Splat5:Splater5 = new Splater5();
Splat5.name = "splater"+i;
Splat5.transform.colorTransform = myFreakinColor;
var Splat6:Splater6 = new Splater6();
Splat6.name = "splater"+i;
Splat6.transform.colorTransform = myFreakinColor;
var arraySplat:Array = new Array();
arraySplat.push(Splat1,Splat2,Splat3,Splat4,Splat5,Splat6);
var mySplat:MovieClip = arraySplat[randRange(0,5)] as MovieClip;
mySplat.transform.colorTransform = myFreakinColor;
mySplat.filters = blurArray[randRange(0,blurArray.length)];
mySplat.alpha = 0;
mySplat.scaleX = 0;
mySplat.scaleY = 0;
mySplat.x = (randRange(0,stage.stageHeight+100));
mySplat.y = (randRange(0,stage.stageWidth+100));
this.addChild(mySplat);
mySplat.name = "splat"+i;
trace(mySplat);
Tweener.addTween(mySplat, {alpha:1, _scale:1, time:randRange(0,5), transition:"easeOutSine"});
}
//instantiate the UI onto the stage.
var ui = new creatorUI();
this.addChild(ui);
}
kulerCreator();
stop();
//Frame2
Frame2:
title_txt.visible = true;
url_txt.visible = true;
deleteButton_mc.visible = false;
saveImageButton_mc.visible = false;
var Sketch_mc:Sketch = new Sketch();
addChild(Sketch_mc);
function kulerCreatorLive() {
// Create blur filters to apply to the circles drawn.
var blur1:BlurFilter = new BlurFilter();
blur1.blurX = 1;
blur1.blurY = 1;
blur1.quality = BitmapFilterQuality.MEDIUM;
var blur2:BlurFilter = new BlurFilter();
blur2.blurX = 3;
blur2.blurY = 3;
blur2.quality = BitmapFilterQuality.MEDIUM;
var blur3:BlurFilter = new BlurFilter();
blur3.blurX = 12;
blur3.blurY = 12;
blur3.quality = BitmapFilterQuality.MEDIUM;
var blur4:BlurFilter = new BlurFilter();
blur4.blurX = 50;
blur4.blurY = 50;
blur4.quality = BitmapFilterQuality.MEDIUM;
var blurArray:Array = new Array([blur1], [blur2], [blur3], [blur4]);
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}
function randRange2(min:Number, max:Number):Number {
var randomNum1:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum1;
}
for (var i:Number=0; i<numCirclesToGen; i++) {
var mySprite:Sprite = new Sprite();
mySprite.graphics.beginFill(uint("0x" + dynamicColorArray[randRange(0,dynamicColorArray.length)]), Math.random() );
mySprite.graphics.lineStyle(randRange(0,30), uint("0x" + dynamicColorArray[randRange(0,dynamicColorArray.length)]), Math.random(), true);
mySprite.graphics.drawCircle(randRange2(0,stage.stageWidth), randRange2(0,stage.stageHeight), randRange2(1,300));
mySprite.filters = blurArray[randRange(0,blurArray.length)];
mySprite.alpha = 0;
mySprite.scaleX = 0;
mySprite.scaleY = 0;
mySprite.name = "liveDot" + i;
Sketch_mc.addChild(mySprite);
Tweener.addTween(mySprite, {alpha:1, _scale:1, /*x:randRange(0,stage.stageWidth-(mySprite.width/2)), y:randRange(0,stage.stageHeight-(mySprite.height/2)),*/ time:randRange(0,5), delay:i*0.25, transition:"easeOutSine"});
}
for (var i:Number=0; i<numCirclesToGen; i++) {
var myFreakinColor:ColorTransform;
myFreakinColor = new ColorTransform();
myFreakinColor.color = uint("0x" + dynamicColorArray[randRange(0,dynamicColorArray.length)]), Math.random();
var Splat1:Splater1 = new Splater1();
Splat1.name = "splater"+i;
Splat1.transform.colorTransform = myFreakinColor;
var Splat2:Splater2 = new Splater2();
Splat2.name = "splater"+i;
Splat2.transform.colorTransform = myFreakinColor;
var Splat3:Splater3 = new Splater3();
Splat3.name = "splater"+i;
Splat3.transform.colorTransform = myFreakinColor;
var Splat4:Splater4 = new Splater4();
Splat4.name = "splater"+i;
Splat4.transform.colorTransform = myFreakinColor;
var Splat5:Splater5 = new Splater5();
Splat5.name = "splater"+i;
Splat5.transform.colorTransform = myFreakinColor;
var Splat6:Splater6 = new Splater6();
Splat6.name = "splater"+i;
Splat6.transform.colorTransform = myFreakinColor;
var arraySplat:Array = new Array();
arraySplat.push(Splat1,Splat2,Splat3,Splat4,Splat5,Splat6);
var mySplat:MovieClip = arraySplat[randRange(0,5)] as MovieClip;
mySplat.transform.colorTransform = myFreakinColor;
mySplat.filters = blurArray[randRange(0,blurArray.length)];
mySplat.alpha = 0;
mySplat.scaleX = 0;
mySplat.scaleY = 0;
mySplat.x = (randRange(0,stage.stageHeight+100));
mySplat.y = (randRange(0,stage.stageWidth+100));
Sketch_mc.addChild(mySplat);
mySplat.name = "liveSplat"+i;
trace(mySplat);
Tweener.addTween(mySplat, {alpha:1, _scale:1, /*x:randRange(0,stage.stageWidth-(mySprite.width/2)), y:randRange(0,stage.stageHeight-(mySprite.height/2)),*/ time:randRange(0,5), delay:i*0.25, transition:"easeOutSine"});
}
}
//calls the contstructor to make the circles
kulerCreatorLive();
// move prompts and buttons over top of the generated circles...
// AS3 version of swapdepths
var topPosition:uint = this.numChildren - 1;
this.setChildIndex(title_txt, topPosition);
this.setChildIndex(uiPanel, topPosition);
this.setChildIndex(deleteButton_mc, topPosition);
this.setChildIndex(saveImageButton_mc, topPosition);
this.setChildIndex(url_txt, topPosition);
function deleteKuler(argument) {
//trace(numCirclesToGen);
for (var i:Number=0; i<numCirclesToGen; i++) {
trace(i);
var tempClip:MovieClip = this;
title_txt.visible = false;
url_txt.visible = false;
deleteButton_mc.visible = false;
Tweener.addTween(tempClip.box, {_color:"0x000000", time:1});
Tweener.addTween(Sketch_mc.getChildByName("liveDot"+i), {_scale:1, alpha:0, time:tempClip.randRange(1,3), delay:i*0.1, onComplete:function() {Sketch_mc.removeChild(this)}});
Tweener.addTween(Sketch_mc.getChildByName("liveSplat"+i), {_scale:1, alpha:0, time:tempClip.randRange(1,3), delay:i*0.1, onComplete:function() { Sketch_mc.removeChild(this)}});
stage.displayState = "normal";
play();
}
//trace("Creating kuler");
}
function showKulerNav(argument) {
deleteButton_mc.visible = true;
saveImageButton_mc.visible = true;
}
function hideKulerNav(argument) {
deleteButton_mc.visible = false;
saveImageButton_mc.visible = false;
}
uiPanel.addEventListener(MouseEvent.MOUSE_OVER, showKulerNav);
uiPanel.addEventListener(MouseEvent.ROLL_OUT, hideKulerNav);
deleteButton_mc.addEventListener(MouseEvent.MOUSE_OVER, showKulerNav);
deleteButton_mc.addEventListener(MouseEvent.MOUSE_OUT, hideKulerNav);
saveImageButton_mc.addEventListener(MouseEvent.MOUSE_OVER, showKulerNav);
saveImageButton_mc.addEventListener(MouseEvent.MOUSE_OUT, hideKulerNav);
deleteButton_mc.addEventListener("click", deleteKuler);
saveImageButton_mc.addEventListener("click", saveImage);
function saveImage(argument){
var jpgSource:BitmapData = new BitmapData (Sketch_mc.width, Sketch_mc.height);
jpgSource.draw(Sketch_mc);
var jpgEncoder:JPGEncoder = new JPGEncoder(90);
var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var jpgURLRequest:URLRequest = new URLRequest("jpg_encoder_download.php?name=sketch.jpg");
jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = jpgStream;
navigateToURL(jpgURLRequest, "_blank");
}
stop();
//UI Panel:
import caurina.transitions.*;
import fl.controls.RadioButton;
import fl.controls.RadioButtonGroup;
//turn off text prompts until they are ready to be used on a successful search
ready.visible = false;
create_mc.visible = false;
submit_mc.visible = true;
input_mc.visible = true;
shape_number_label.visible = false;
bg_color_label.visible = false;
number_shapes_slider.visible = false;
black_rb.visible = false;
white_rb.visible = false;
options_bg_mc.visible = false;
prompt.visible = false;
//create radio button group for background color choosing
var bgcolor_rg:RadioButtonGroup = new RadioButtonGroup("group1");
black_rb.group = bgcolor_rg;
white_rb.group = bgcolor_rg;
submit_mc.addEventListener("click", submitSearch);
function submitSearch(argument) {
if (input_mc.text != "") {
prompt.text = "Searching Kuler...";
prompt.appendText("\nBe Patient. Art takes time. ;-)");
var kulerURL:String = "http://kuler.adobe.com/kuler/API/rss/search.cfm?searchQuery=tag:" + this.input_mc.text;
var kulerRequest:URLRequest = new URLRequest(kulerURL);
var kulerLoader:URLLoader = new URLLoader();
kulerLoader.load(new URLRequest(kulerURL));
//trace("submitsearch:" + input_mc.text);
// Assign listeners for downloading feed
kulerLoader.addEventListener(Event.COMPLETE, feedDownloadedHandler);
kulerLoader.addEventListener(Event.INIT, feedStartedHandler);
// Error listeners
kulerLoader.addEventListener(IOErrorEvent.IO_ERROR, feedDownloadError);
kulerLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, feedDownloadError);
//
//Feed Event handlers
//
//Called when feed retrive begins
function feedStartedHandler(event:Event):void {
trace("Beginning Feed");
}
// Called when feed has completely downloaded
function feedDownloadedHandler(event:Event):String {
prompt.text = "No results found, try again.";
// use a try-catch block in case
// xml parsing fails
try {
var tempClip:MovieClip = root as MovieClip;
// convert the loaded text into XML
var kulerXML:XML = XML(kulerLoader.data);
// if XML succeeded (no error)
// show it in the output window
trace(kulerXML);
//add kuler namespace to the app so we can use the custom rss in the service
namespace kulerNS = "http://kuler.adobe.com/kuler/API/rss/";
use namespace kulerNS;
var currentTheme:Object = kulerXML..item[tempClip.randRange(0, kulerXML..item.length())];
//trace("Current Theme is: " + currentTheme);
//let the user know there is success by setting text in the prompt.
var currentThemeTitle:String = currentTheme..themeTitle.text();
var currentThemeAuthor:String = currentTheme..themeAuthor.authorLabel.text();
prompt.visible = true;
prompt.text = "Found " + kulerXML.channel.recordCount + " results... |