package com.drawingapp { import flash.display.DisplayObjectContainer; import flash.display.Sprite; import com.cursormanager.CursorManager; import com.drawingapp.screen.Screen; import com.cursormanager.CursorEvent; import com.drawingapp.cursors.DrawingToolCursor; import flash.events.MouseEvent; import com.drawingapp.tools.Tools; import com.drawingapp.tools.Tool; public class DrawingApp { private var _screen:Screen; public function get screen():Screen { return _screen; } private var cursorManager:CursorManager; private var canvas:Sprite; private var tools:Tools; public function DrawingApp() { createScreen(); createCursorManager(); createTools(); createCanvas(); } public function run():void { canvas.addEventListener( MouseEvent.MOUSE_DOWN, onCanvasMouse ); canvas.addEventListener( MouseEvent.MOUSE_UP, onCanvasMouse ); } private function createScreen():void { _screen = new Screen(); } private function createCursorManager():void { cursorManager = new CursorManager(); screen.cursorLayer.addChild( cursorManager.cursor ); screen.addEventListener( CursorEvent.CHANGE, handleCursorEvent ); screen.addEventListener( CursorEvent.DEFAULT, handleCursorEvent ); } private function createTools():void { tools = new Tools(); screen.uiLayer.addChild( tools ); } private function createCanvas():void { canvas = new Canvas(); screen.canvasLayer.addChild( canvas ); canvas.mouseChildren = false; canvas.x = 22; canvas.y = 3; } private function onCanvasMouse( event:MouseEvent ):void { switch ( event.type ) { case MouseEvent.MOUSE_DOWN: tools.currentTool.enable( canvas ); break; case MouseEvent.MOUSE_UP: tools.currentTool.disable(); break;s } } // the last place the application has to handle a cursor event before it is passed to the cursor manager private function handleCursorEvent( event:CursorEvent ):void { if ( !event.cursor ) { if ( event.cursorInfo == "toolcursor" ) { event.cursor = new DrawingToolCursor(); } } cursorManager.handleCursorEvent( event ); } } }