In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Quad Painter

Quad Painter
*  
*  Objective:
*  To draw a picture by recursive refining areas of colour.
*  
*  Click to activate.
*  Up and Down arrow keys increase and decrease the brightness 
*  of the square the mouse is currently over.
*  Click a square to break it into 4 quadrants.
*
Get Adobe Flash player
by Jareth 09 Jan 2009
// forked from Jareth's Divide Painter
/** Quad Painter
 *  
 *  Objective:
 *  To draw a picture by recursive refining areas of colour.
 *  
 *  Click to activate.
 *  Up and Down arrow keys increase and decrease the brightness 
 *  of the square the mouse is currently over.
 *  Click a square to break it into 4 quadrants.
 *
 */

package {
    
    import flash.display.Sprite;
    import flash.events.KeyboardEvent;
    import flash.events.MouseEvent;
    import flash.geom.Point;
    import flash.geom.Rectangle;
    import flash.ui.Keyboard;

    public class DividePainter extends Sprite {

        private var canvas:Sprite;

        private var click:Point;
        private var selected:int;

        private var rects:Array; 
        private var colours:Array;   
        private var clips:Array;

        private var firstClick:Boolean = false;

        public function DividePainter() {
            canvas = new Sprite();
            addChildAt(canvas, 0);

            rects = [new Rectangle(0, 0, stage.stageWidth, stage.stageHeight)];
            colours = [0xFFFFFF];
            clips = [canvas.addChild(new Sprite())];
            
            selected = 0;
            clips[selected].name = "" + selected;
            clips[selected].addEventListener(MouseEvent.MOUSE_OVER, selectClip, false, 0, true);
            clips[selected].addEventListener(MouseEvent.CLICK, splitClip, false, 0, true);

            drawRect(selected);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, reset, false, 0, true);
        }

        private function drawRect(index:int):void{
            var rect:Rectangle = rects[index];
            var colour:Number = colours[index];
            var clip:Sprite = clips[index];
            clip.graphics.clear();
            clip.graphics.beginFill(colour);
            clip.graphics.lineStyle(1, 0xCCCCCC);            
            clip.graphics.drawRect(rect.left, rect.top, rect.width, rect.height);
        }

        private function splitClip(e:MouseEvent):void {
            if (firstClick) {
                var topLeft:Rectangle = rects[selected].clone();
                var topRight:Rectangle = rects[selected].clone();
                var bottomLeft:Rectangle = rects[selected].clone();
                var bottomRight:Rectangle = rects[selected].clone();
                    
                var halfWidth:int = rects[selected].width / 2;            
                var halfHeight:int = rects[selected].height / 2;
                var colour:Number = colours[selected];
                canvas.removeChild(clips[selected]);

                topLeft.right -= halfWidth;
                topLeft.bottom -= halfHeight;

                topRight.left += halfWidth;
                topRight.bottom -= halfHeight;

                bottomLeft.right -= halfWidth;
                bottomLeft.top += halfHeight;

                bottomRight.left += halfWidth;
                bottomRight.top += halfHeight;

                pushRect(topLeft, colour);
                pushRect(topRight, colour);
                pushRect(bottomLeft, colour);
                pushRect(bottomRight, colour);
            }
            firstClick = true;
        }    

        private function pushRect(rect:Rectangle, colour:Number):void {
            rects.push(rect);
            colours.push(colour);
            clips.push(canvas.addChild(new Sprite()));

            var index:int = clips.length-1;
            clips[index].name = "" + (index);
            clips[index].addEventListener(MouseEvent.CLICK, splitClip, false, 0, true);
            clips[index].addEventListener(MouseEvent.MOUSE_OVER, selectClip, false, 0, true);

            drawRect(index);
        }

        private function changeColour(e:MouseEvent):void {
            selected = e.currentTarget.name;
            colours[selected] = 0;
            drawRect(selected);
        }

        private function selectClip(e:MouseEvent):void {
            selected = e.currentTarget.name;
        }

        private function reset(e:KeyboardEvent):void {
            if (e.keyCode == Keyboard.SPACE) {
                rects = [new Rectangle(0, 0, stage.stageWidth, stage.stageHeight)];
                colours = [0xFFFFFF];
                clips = [canvas.addChild(new Sprite())];
                selected = 0;
                drawRect(selected);
            } else if (e.keyCode == Keyboard.UP) {
                colours[selected] += colours[selected] < 0xFFFFFF ? 0x070707 : 0x000000;
                drawRect(selected);
            } else if (e.keyCode == Keyboard.DOWN) {
                colours[selected] -= colours[selected] > 0x060606 ? 0x070707 : 0x000000;
                drawRect(selected);
            }
        }

    }
}