Flexでマウスキャプチャ

GUIツールキットには普通、マウスキャプチャの概念があることが多いと思います。コンポーネント上でマウスボタンを押してから離すまでの間、マウスがコンポーネント領域外に出たとしても、同一のコンポーネントに対してマウスイベントが発生し続けるような挙動です。

Flexでこれを実現する方法が分からなかったので、Flexのソースを読んでみたところ、以下のようにsystemManager.getSandboxRoot()を使えば良いみたいです。

private function handleMouseDown(e:MouseEvent):void {
    var root:DisplayObject = systemManager.getSandboxRoot();
    root.addEventListener(MouseEvent.MOUSE_MOVE, handleRootMouseMove);
    root.addEventListener(MouseEvent.MOUSE_UP, handleRootMouseUp);
}

private function handleRootMouseMove(e:MouseEvent):void {
    var p:Point = this.globalToLocal(new Point(e.stageX, e.stageY));
    // ...
}

private function handleRootMouseUp(e:MouseEvent):void {
    var root:DisplayObject = systemManager.getSandboxRoot();
    root.removeEventListener(MouseEvent.MOUSE_MOVE, handleRootMouseMove);
    root.removeEventListener(MouseEvent.MOUSE_UP, handleRootMouseUp);
}