package com.emmanuelbonnet.utils { import flash.events.MouseEvent; import flash.events.Event; import flash.utils.Proxy; import flash.utils.flash_proxy; public class ReleaseOutside extends Proxy { private var _scope:Object; function ReleaseOutside(pScope:Object) { _scope = pScope; _init(); } private function _init():void { _scope.addEventListener(MouseEvent.MOUSE_DOWN, _onPressFOS); } private function _onPressFOS(ev:MouseEvent):void { _scope.addEventListener(MouseEvent.ROLL_OUT, _onRollOutFOS); } private function _onRollOutFOS(ev:MouseEvent):void { if(ev.buttonDown) _scope.stage.addEventListener(MouseEvent.MOUSE_UP, _onReleaseOutsideFOS); _scope.removeEventListener(MouseEvent.ROLL_OUT, _onRollOutFOS); } private function _onReleaseOutsideFOS(ev:MouseEvent):void { var e:Event = new Event("releaseOutside"); _scope.dispatchEvent(e); _scope.stage.removeEventListener(MouseEvent.MOUSE_UP, _onReleaseOutsideFOS); } override flash_proxy function callProperty(methodName:*, ... args):* { return _scope[methodName].apply(_scope, args); } override flash_proxy function getProperty(name:*):* { return _scope[name]; } override flash_proxy function setProperty(name:*, value:*):void { _scope[name] = value; } } }