package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;

    [SWF(width="240", height="240", backgroundColor="#FFFFFF", frameRate="30")]

    // ネイティブウィンドウの操作
    public class NativeWindow3DEx extends Sprite {

        private var window0:Pv3dWindow; ///< ウィンドウ0
        private var window1:Pv3dWindow; ///< ウィンドウ1

        /// コンストラクタ
        public function NativeWindow3DEx() {
            //メインウィンドウへのイベント追加
            stage.nativeWindow.addEventListener(Event.CLOSE,onClose);
            //メインループの追加
            this.addEventListener(Event.ENTER_FRAME, loop);

            //通常ウィンドウの生成
            window0 = makeWindow(false);
            window0.x = stage.nativeWindow.x+stage.nativeWindow.width;
            window0.y = stage.nativeWindow.y;

            //透過ウィンドウの生成
            window1 = makeWindow(true);
            window1.x = window0.x+window0.width;
            window1.y = window0.y;

            //透過ウィンドウのステージへのイベント追加
            window1.stage.addEventListener(
                MouseEvent.MOUSE_DOWN,onMouseDown);
        }

        /// 新規ウィンドウの生成
        private function makeWindow(transparent:Boolean):Pv3dWindow {
            //ウィンドウ初期化オプション
            var options:NativeWindowInitOptions = new NativeWindowInitOptions();
            options.type=NativeWindowType.NORMAL;

            if (!transparent) {
                options.transparent = false;
                options.systemChrome = NativeWindowSystemChrome.STANDARD;
            } else {
                options.transparent = true;
                options.systemChrome = NativeWindowSystemChrome.NONE;
            }

            //ウィンドウの生成
            var window:Pv3dWindow=new Pv3dWindow(options);
            window.title = "新規ウィンドウ";
            window.stage.align = StageAlign.TOP_LEFT;
            window.stage.scaleMode = StageScaleMode.NO_SCALE;
            window.stage.stageWidth = 240;
            window.stage.stageHeight = 240;
            window.visible = true;
            return window;
        }

        /// メインウィンドウのクローズイベントの処理
        private function onClose(evt:Event):void {
            window0.close();
            window1.close();
        }

        /// 透過ウィンドウのマウスダウンイベントの処理
        private function onMouseDown(evt:MouseEvent):void {
            window1.startMove();
        }

        /// メインループ
        public function loop( event:Event ):void {
            window0.loop3D(event);
            window1.loop3D(event);
        }
    }
}