<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication 
    xmlns:mx="http://www.adobe.com/2006/mxml" 
    layout="absolute" 
    applicationComplete="windowedapplication1_applicationCompleteHandler(event)"  
    backgroundAlpha="1" 
    backgroundColor="#FFFFFF" frameRate="60" viewSourceURL="srcview/index.html">
    
    <mx:Script>
        <![CDATA[
            import flash.events.TouchEvent;
            import flash.ui.Multitouch;
            import flash.ui.MultitouchInputMode;
            
            import mx.events.FlexEvent;

            private var touchMap : Object = {}
    
            protected function windowedapplication1_applicationCompleteHandler(event:FlexEvent):void
            {
                stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
                Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT
                
                addEventListener( TouchEvent.TOUCH_BEGIN, onTouchBegin );
                addEventListener( TouchEvent.TOUCH_END, onTouchEnd );
                addEventListener( TouchEvent.TOUCH_MOVE, onTouchMove );
            }
            
            private function onTouchBegin( event : TouchEvent ) : void
            {
                var key : String = event.touchPointID.toString();
                
                var touchPoint : Object = {};
                touchPoint.x = event.stageX;
                touchPoint.y = event.stageY;
                touchPoint.sizeX = event.sizeX;
                touchPoint.sizeY = event.sizeY;
                touchPoint.color = Math.random() * 0xFFFFFF;
                
                touchMap[ key ] = touchPoint;
                invalidateDisplayList();
            }
            
            private function onTouchEnd( event : TouchEvent ) : void
            {
                var key : String = event.touchPointID.toString();
                delete touchMap[ key ];
                invalidateDisplayList();
            }
            
            private function onTouchMove( event : TouchEvent ) : void
            {
                var key : String = event.touchPointID.toString();
                if ( touchMap[ key ] )
                {
                    touchMap[ key ].x = event.stageX;
                    touchMap[ key ].y = event.stageY;
                    touchMap[ key ].sizeX = event.sizeX;
                    touchMap[ key ].sizeY = event.sizeY;
                }
                invalidateDisplayList();
            }
            override protected function updateDisplayList(w:Number, h:Number) : void
            {
                super.updateDisplayList(w,h);
                with (drawTarget.graphics)
                {
                    clear();
                    
                    for each ( var touchPoint : Object in touchMap )
                    {
                        beginFill( touchPoint.color );
                        drawEllipse( touchPoint.x-(touchPoint.sizeX/2), touchPoint.y-(touchPoint.sizeY/2), touchPoint.sizeX, touchPoint.sizeY );
                    }
                }
            }

        ]]>
    </mx:Script>
    
    <mx:UIComponent id="drawTarget" />
    
</mx:WindowedApplication>