public void InitializeContent(IDefault page)
        {
            var control = new UserControl1();

            this.frontcontrol = new FrontPanel();

            this.frontcontrol.RelativeToAbsolute =
                href =>
                {
                    if (href.StartsWith("/"))
                        return Native.Document.location.href.TakeUntilLastIfAny("/") + href;

                    return Native.Document.location.href + href;
                };


            Native.Document.body.ondragover +=
                evt =>
                {
                    evt.stopPropagation();
                    evt.preventDefault();

                    evt.dataTransfer.dropEffect = "copy"; // Explicitly show this is a copy.
                };

            Native.Document.body.ondrop +=
                evt =>
                {
                    #region dataTransfer
                    evt.dataTransfer.types.WithEach(
                        x =>
                        {
                            Console.WriteLine(x);

                            //SystemSounds.Beep.Play();
                            //Console.Beep();

                            #region text/uri-list
                            if (x == "text/uri-list")
                            {
                                var src = evt.dataTransfer.getData(x);

                                if (src != "about:blank")
                                {
                                    if (src.StartsWith("http://www.youtube.com/watch?v="))
                                        src = "http://www.youtube.com/embed/" + src.SkipUntilIfAny("http://www.youtube.com/watch?v=").TakeUntilIfAny("&");

                                    Console.WriteLine(new { src });


                                    frontcontrol.CreateWindowAndNavigate(src);
                                }
                            }
                            #endregion



                        }
                    );
                    #endregion
                };

            Console.Write("frontcontrol set");

            // http://www.addyosmani.com/resources/googlebox/test.js
            var TILT_BASE = 2.0f;

            var qtext = page.search_text;

            var tilt_cur = TILT_BASE;
            var tilt = TILT_BASE;
            var rot_cur = 1f;
            var rot = 1f;

            var lidAngle = 0f;
            var lidAngleV = 0f;
            var close_ok = false;
            var playing = false;

            var iframe = page.bottom_iframe;

            iframe.Hide();

            var rootTransMatrix = new M44();
            var rootTransNode = new TransformNode(rootTransMatrix);

            rootTransMatrix.rotX(tilt);

            M44 lidTrans1 = (new M44()).translate(0f, 100f, 0f);
            M44 lidTrans2 = new M44();

            var box = new CSSCube(200, 200, 80, rootTransNode);

            var gbox = page.gift_box;
            var gbox_childnodes = gbox.childNodes.ExceptTextNodes();

            for (var i = 0; i < 4; i++)
            {
                CSSFace f = box.getSide(i);
                f.element = gbox_childnodes[7 + i];
                f.backElement = gbox_childnodes[1 + i];
            }


            ((CSSFace)box.getTop()).element = gbox_childnodes[11];
            var frontElement = (IHTMLElement)gbox_childnodes[7];
            //var frontElement_firstChild = (IHTMLElement)frontElement.childNodes.ExceptTextNodes()[0];

            CSSFace bt = box.getBottom();
            bt.element = gbox_childnodes[5];
            bt.preTrans.rotX(Math.PI);
            box.getTop().backElement = gbox_childnodes[6];


            var floorFace = new CSSFace(bt.tNode, 256, 256);
            floorFace.element = gbox_childnodes[0];
            floorFace.N.z = 1f;

            #region updateTransform
            Action updateTransform =
                delegate
                {
                    box.localTrans.rotY(rot_cur);
                    box.localTrans._42 = (80f - box.height) / 2f;

                    rootTransMatrix.rotX(tilt_cur);
                    rootTransMatrix._42 = (80f - box.height) / 2f;

                    floorFace.postTrans.translate(-28, -88 - box.localTrans._42, 0);

                    box.applyTransform();
                    floorFace.applyTransform();
                };


            updateTransform();
            #endregion


            #region resizing
            var resizing = default(Action);

            var resize_handle = page.resize_handle;
            resize_handle.style.cursor = IStyle.CursorEnum.move;

            var prevHandleY = 0f;
            var prevBoxH = 0f;

            resize_handle.onmousedown +=
                e =>
                {
                    e.PreventDefault();
                    e.StopPropagation();

                    resizing = resize_handle.CaptureMouse();
                    //prevHandleY = e.screenY;
                    prevHandleY = e.OffsetY;
                    prevBoxH = box.height;


                };

            resize_handle.onmousemove +=
                e =>
                {
                    if (resizing != null)
                    {
                        e.PreventDefault();
                        e.StopPropagation();

                        var yy = rootTransMatrix._22;
                        if (yy < -0.01 || yy > 0.01)
                        {
                            //var dy = e.screenY - prevHandleY;
                            var dy = e.OffsetY - prevHandleY;

                            var h = prevBoxH - dy / yy;
                            if (h < 20) h = 20;
                            if (h > 200) h = 200;
                            box.changeHeight(h);

                            frontcontrol.Size = new System.Drawing.Size(
                                frontElement.Bounds.Width,
                                frontElement.Bounds.Height
                            );

                            //frontElement_firstChild.style.height = frontElement.style.height;
                            //frontElement_firstChild.style.width = frontElement.style.width;
                            updateTransform();
                        }
                        else
                        {

                            resizing();
                            resizing = null;
                        }
                    }
                };

            resize_handle.onmouseup +=
                e =>
                {
                    if (resizing != null)
                    {
                        resizing();
                        resizing = null;
                    }
                };
            #endregion



            #region intpMotion
            Func<bool> intpMotion =
                delegate
                {
                    var dR = rot_cur - rot;
                    var dT = tilt_cur - tilt;

                    if (dR < 0) dR = -dR;
                    if (dT < 0) dT = -dT;

                    var not_finished = false;
                    if (dR < 0.002)
                        rot_cur = rot;
                    else
                    {
                        not_finished = true;
                        rot_cur = rot_cur * 0.8f + rot * 0.2f;
                    }

                    if (dT < 0.002)
                        tilt_cur = tilt;
                    else
                    {
                        not_finished = true;
                        tilt_cur = tilt_cur * 0.8f + tilt * 0.2f;
                    }

                    return not_finished;

                };
            #endregion

            #region setLidRotate
            Action<float> setLidRotate =
                  a =>
                  {
                      lidTrans2.rotX(-a);
                      lidTrans2._42 = -100;
                      box.getTop().preTrans.mul(lidTrans1, lidTrans2);
                  };
            #endregion


            #region doAnimation
            Action doAnimation = null;

            doAnimation =
                delegate
                {
                    playing = false;
                    if (lidAngle > 0)
                    {
                        playing = true;
                        if (close_ok || lidAngleV > 0)
                            lidAngleV -= 0.01f;

                        lidAngle += lidAngleV;

                        if (lidAngle < 0)
                        {
                            lidAngle = 0;
                            iframe.src = "about:blank";
                            iframe.Hide();
                        }
                        else if (lidAngle >= 1.3f)
                        {
                            lidAngle = 1.3f;
                            playing = false;
                        }
                    }
                    else
                    {
                        lidAngle = 0f;
                        lidAngleV = 0f;
                    }

                    setLidRotate(lidAngle);

                    if ((resizing == null) && intpMotion())
                        playing = true;

                    updateTransform();

                    if (playing)
                    {
                        var _this = this;
                        Native.window.requestAnimationFrame +=
                            delegate
                            {
                                doAnimation();
                            };
                    }

                };
            #endregion


            #region onmousemove
            Native.Document.body.onmousemove +=
              e =>
              {
                  if (control.checkBox1.Checked)
                      return;

                  if (Native.Document.pointerLockElement == Native.Document.body)
                  {
                      rot += e.movementX * 0.01f;
                      tilt += e.movementY * 0.01f;
                  }
                  else
                  {
                      rot = e.CursorX * 0.006f - 0.9f;

                      tilt = (TILT_BASE - e.CursorY * 0.004f);
                  }
                  if (tilt < 0.5f) tilt = 0.5f;

                  //Console.WriteLine(new { rot, tilt }.ToString());

                  if (!playing)
                      doAnimation();
              };
            #endregion






            #region close_button
            page.close_button.onclick +=
              e =>
              {
                  e.StopPropagation();
                  close_ok = true;
                  if (lidAngle > 1.2)
                  {
                      lidAngle -= 0.1f;
                      lidAngleV = 0.01f;
                  }

                  if (!playing)
                      doAnimation();
              };
            #endregion

            #region onSearchClick
            Action onSearchClick =
                delegate
                {
                    lidAngle += 0.01f;
                    lidAngleV = 0.17f;
                    close_ok = false;

                    iframe.Show();

                    iframe.allowFullScreen = true;
                    // Refused to display document because display forbidden by X-Frame-Options.
                    iframe.src = frontcontrol.comboBox1.Text;

                    if (!playing)
                        doAnimation();
                };

            page.search_text.onkeydown +=
             e =>
             {
                 if (e.KeyCode == 13)
                 {
                     onSearchClick();
                 }
             };

            page.search_button.onclick +=
                e =>
                {
                    onSearchClick();
                };
            #endregion


            page.search_fullscreen.onmousedown +=
                e =>
                {
                    e.preventDefault();

                    if (e.MouseButton != IEvent.MouseButtonEnum.Left)
                        Native.Document.body.requestPointerLock();
                };

            Native.Document.body.onmouseup +=
              delegate
              {
                  Native.Document.exitPointerLock();
              };

            page.search_fullscreen.onclick +=
                delegate
                {
                    page.box_label.requestFullscreen();
                };


            {

                var ContainerShadow = new IHTMLDiv().AttachTo(page.box_label_container);

                ContainerShadow.style.position = IStyle.PositionEnum.absolute;
                ContainerShadow.style.left = "0px";
                ContainerShadow.style.top = "0px";
                ContainerShadow.style.right = "0px";
                ContainerShadow.style.bottom = "0px";

                var Container = new IHTMLDiv().AttachTo(page.box_label_container);

                Container.style.position = IStyle.PositionEnum.absolute;
                Container.style.left = "0px";
                Container.style.top = "0px";
                Container.style.right = "0px";
                Container.style.bottom = "0px";

                control.AttachControlTo(Container);
                //control.AutoSizeControlTo(ContainerShadow);
            }


            {

                var ContainerShadow = new IHTMLDiv().AttachTo(page.front_panel);

                ContainerShadow.style.position = IStyle.PositionEnum.absolute;
                ContainerShadow.style.left = "0px";
                ContainerShadow.style.top = "0px";
                ContainerShadow.style.right = "0px";
                ContainerShadow.style.bottom = "0px";

                var Container = new IHTMLDiv().AttachTo(page.front_panel);

                Container.style.position = IStyle.PositionEnum.absolute;
                Container.style.left = "0px";
                Container.style.top = "0px";
                Container.style.right = "0px";
                Container.style.bottom = "0px";

                frontcontrol.AttachControlTo(Container);
                //frontcontrol.AutoSizeControlTo(ContainerShadow);
                frontcontrol.Width = 200;
                frontcontrol.Height = 80;

                frontcontrol.button1.Click +=
                    delegate
                    {
                        onSearchClick();
                    };

                resize_handle.Orphanize().AttachTo(page.front_panel);


                var once = false;

                frontcontrol.NewForm +=
                    f =>
                    {
                        if (once)
                        {
#if DOESITWORK
                            Abstractatech.JavaScript.FormAsPopup.FormAsPopupExtensions.PopupInsteadOfClosing(f);
#endif

                            return;
                        }

                        once = true;

                        //f.DisableFormClosingHandler = true;

                        global::CSSMinimizeFormToSidebar.ApplicationExtension.InitializeSidebarBehaviour(
                            f
                        );
                    };
            }

        }
        void InitializeContent(IDefaultPage page)
        {
            // http://www.addyosmani.com/resources/googlebox/test.js
            var TILT_BASE = 2.0f;

            var qtext = page.search_text;

            var tilt_cur = TILT_BASE;
            var tilt = TILT_BASE;
            var rot_cur = 1f;
            var rot = 1f;

            var lidAngle = 0f;
            var lidAngleV = 0f;
            var close_ok = false;
            var playing = false;

            var iframe = page.bottom_iframe;

            iframe.Hide();

            var rootTransMatrix = new M44();
            var rootTransNode = new TransformNode(rootTransMatrix);

            rootTransMatrix.rotX(tilt);

            M44 lidTrans1 = (new M44()).translate(0f, 100f, 0f);
            M44 lidTrans2 = new M44();

            var box = new CSSCube(200, 200, 80, rootTransNode);

            var gbox = page.gift_box;
            var gbox_childnodes = gbox.childNodes.ExceptTextNodes();

            for (var i = 0; i < 4; i++)
            {
                CSSFace f = box.getSide(i);
                f.element = gbox_childnodes[7 + i];
                f.backElement = gbox_childnodes[1 + i];
            }


            ((CSSFace)box.getTop()).element = gbox_childnodes[11];
            var frontElement = (IHTMLElement)gbox_childnodes[7];
            var frontElement_firstChild = (IHTMLElement)frontElement.childNodes.ExceptTextNodes()[0];

            CSSFace bt = box.getBottom();
            bt.element = gbox_childnodes[5];
            bt.preTrans.rotX(Math.PI);
            box.getTop().backElement = gbox_childnodes[6];


            var floorFace = new CSSFace(bt.tNode, 256, 256);
            floorFace.element = gbox_childnodes[0];
            floorFace.N.z = 1f;

            #region updateTransform
            Action updateTransform =
                delegate
                {
                    box.localTrans.rotY(rot_cur);
                    box.localTrans._42 = (80f - box.height) / 2f;

                    rootTransMatrix.rotX(tilt_cur);
                    rootTransMatrix._42 = (80f - box.height) / 2f;

                    floorFace.postTrans.translate(-28, -88 - box.localTrans._42, 0);

                    box.applyTransform();
                    floorFace.applyTransform();
                };


            updateTransform();
            #endregion


            #region resizing
            var resizing = default(Action);

            var resize_handle = page.resize_handle;
            resize_handle.style.cursor = IStyle.CursorEnum.move;

            var prevHandleY = 0f;
            var prevBoxH = 0f;

            resize_handle.onmousedown +=
                e =>
                {
                    e.PreventDefault();
                    e.StopPropagation();

                    resizing = resize_handle.CaptureMouse();
                    //prevHandleY = e.screenY;
                    prevHandleY = e.OffsetY;
                    prevBoxH = box.height;


                };

            resize_handle.onmousemove +=
                e =>
                {
                    if (resizing != null)
                    {
                        e.PreventDefault();
                        e.StopPropagation();

                        var yy = rootTransMatrix._22;
                        if (yy < -0.01 || yy > 0.01)
                        {
                            //var dy = e.screenY - prevHandleY;
                            var dy = e.OffsetY - prevHandleY;

                            var h = prevBoxH - dy / yy;
                            if (h < 20) h = 20;
                            if (h > 200) h = 200;
                            box.changeHeight(h);

                            frontElement_firstChild.style.height = frontElement.style.height;
                            frontElement_firstChild.style.width = frontElement.style.width;
                            updateTransform();
                        }
                        else
                        {

                            resizing();
                            resizing = null;
                        }
                    }
                };

            resize_handle.onmouseup +=
                e =>
                {
                    if (resizing != null)
                    {
                        resizing();
                        resizing = null;
                    }
                };
            #endregion



            #region intpMotion
            Func<bool> intpMotion =
                delegate
                {
                    var dR = rot_cur - rot;
                    var dT = tilt_cur - tilt;

                    if (dR < 0) dR = -dR;
                    if (dT < 0) dT = -dT;

                    var not_finished = false;
                    if (dR < 0.002)
                        rot_cur = rot;
                    else
                    {
                        not_finished = true;
                        rot_cur = rot_cur * 0.8f + rot * 0.2f;
                    }

                    if (dT < 0.002)
                        tilt_cur = tilt;
                    else
                    {
                        not_finished = true;
                        tilt_cur = tilt_cur * 0.8f + tilt * 0.2f;
                    }

                    return not_finished;

                };
            #endregion

            #region setLidRotate
            Action<float> setLidRotate =
                  a =>
                  {
                      lidTrans2.rotX(-a);
                      lidTrans2._42 = -100;
                      box.getTop().preTrans.mul(lidTrans1, lidTrans2);
                  };
            #endregion


            #region doAnimation
            Action doAnimation = null;

            doAnimation =
                delegate
                {
                    playing = false;
                    if (lidAngle > 0)
                    {
                        playing = true;
                        if (close_ok || lidAngleV > 0)
                            lidAngleV -= 0.01f;

                        lidAngle += lidAngleV;

                        if (lidAngle < 0)
                        {
                            lidAngle = 0;
                            iframe.src = "about:blank";
                            iframe.Hide();
                        }
                        else if (lidAngle >= 1.3f)
                        {
                            lidAngle = 1.3f;
                            playing = false;
                        }
                    }
                    else
                    {
                        lidAngle = 0f;
                        lidAngleV = 0f;
                    }

                    setLidRotate(lidAngle);

                    if ((resizing == null) && intpMotion())
                        playing = true;

                    updateTransform();

                    if (playing)
                    {
                        var _this = this;
                        Native.Window.requestAnimationFrame +=
                            delegate
                            {
                                doAnimation();
                            };
                    }

                };
            #endregion


            #region onmousemove
            Native.Document.body.onmousemove +=
              e =>
              {
                  if (Native.Document.pointerLockElement == Native.Document.body)
                  {
                      rot += e.movementX * 0.01f;
                      tilt += e.movementY * 0.01f;
                  }
                  else
                  {
                      rot = e.CursorX * 0.006f - 0.9f;

                      tilt = (TILT_BASE - e.CursorY * 0.004f);
                  }
                  if (tilt < 0.5f) tilt = 0.5f;

                  //Console.WriteLine(new { rot, tilt }.ToString());

                  if (!playing)
                      doAnimation();
              };
            #endregion






            #region close_button
            page.close_button.onclick +=
              e =>
              {
                  e.StopPropagation();
                  close_ok = true;
                  if (lidAngle > 1.2)
                  {
                      lidAngle -= 0.1f;
                      lidAngleV = 0.01f;
                  }

                  if (!playing)
                      doAnimation();
              };
            #endregion

            #region onSearchClick
            Action onSearchClick =
                delegate
                {
                    lidAngle += 0.01f;
                    lidAngleV = 0.17f;
                    close_ok = false;

                    iframe.Show();

                    // Refused to display document because display forbidden by X-Frame-Options.
                    iframe.src = "http://example.com";

                    if (!playing)
                        doAnimation();
                };

            page.search_text.onkeydown +=
             e =>
             {
                 if (e.KeyCode == 13)
                 {
                     onSearchClick();
                 }
             };

            page.search_button.onclick +=
                e =>
                {
                    onSearchClick();
                };
            #endregion


            page.search_fullscreen.onmousedown +=
                e =>
                {
                    e.PreventDefault();

                    if (e.MouseButton != IEvent.MouseButtonEnum.Left)
                        Native.Document.body.requestPointerLock();
                };

            Native.Document.body.onmouseup +=
              delegate
              {
                  Native.Document.exitPointerLock();
              };

            page.search_fullscreen.onclick +=
                delegate
                {
                    page.box_label.requestFullscreen();
                };

        }
Example #3
0
        void InitializeContent(IDefaultPage page)
        {
            // http://www.addyosmani.com/resources/googlebox/test.js
            var TILT_BASE = 2.0f;

            var qtext = page.search_text;

            var tilt_cur = TILT_BASE;
            var tilt     = TILT_BASE;
            var rot_cur  = 1f;
            var rot      = 1f;

            var lidAngle  = 0f;
            var lidAngleV = 0f;
            var close_ok  = false;
            var playing   = false;

            var iframe = page.bottom_iframe;

            iframe.Hide();

            var rootTransMatrix = new M44();
            var rootTransNode   = new TransformNode(rootTransMatrix);

            rootTransMatrix.rotX(tilt);

            M44 lidTrans1 = (new M44()).translate(0f, 100f, 0f);
            M44 lidTrans2 = new M44();

            var box = new CSSCube(200, 200, 80, rootTransNode);

            var gbox            = page.gift_box;
            var gbox_childnodes = gbox.childNodes.ExceptTextNodes();

            for (var i = 0; i < 4; i++)
            {
                CSSFace f = box.getSide(i);
                f.element     = gbox_childnodes[7 + i];
                f.backElement = gbox_childnodes[1 + i];
            }


            ((CSSFace)box.getTop()).element = gbox_childnodes[11];
            var frontElement            = (IHTMLElement)gbox_childnodes[7];
            var frontElement_firstChild = (IHTMLElement)frontElement.childNodes.ExceptTextNodes()[0];

            CSSFace bt = box.getBottom();

            bt.element = gbox_childnodes[5];
            bt.preTrans.rotX(Math.PI);
            box.getTop().backElement = gbox_childnodes[6];


            var floorFace = new CSSFace(bt.tNode, 256, 256);

            floorFace.element = gbox_childnodes[0];
            floorFace.N.z     = 1f;

            #region updateTransform
            Action updateTransform =
                delegate
            {
                box.localTrans.rotY(rot_cur);
                box.localTrans._42 = (80f - box.height) / 2f;

                rootTransMatrix.rotX(tilt_cur);
                rootTransMatrix._42 = (80f - box.height) / 2f;

                floorFace.postTrans.translate(-28, -88 - box.localTrans._42, 0);

                box.applyTransform();
                floorFace.applyTransform();
            };


            updateTransform();
            #endregion


            #region resizing
            var resizing = default(Action);

            var resize_handle = page.resize_handle;
            resize_handle.style.cursor = IStyle.CursorEnum.move;

            var prevHandleY = 0f;
            var prevBoxH    = 0f;

            resize_handle.onmousedown +=
                e =>
            {
                e.PreventDefault();
                e.StopPropagation();

                resizing = resize_handle.CaptureMouse();
                //prevHandleY = e.screenY;
                prevHandleY = e.OffsetY;
                prevBoxH    = box.height;
            };

            resize_handle.onmousemove +=
                e =>
            {
                if (resizing != null)
                {
                    e.PreventDefault();
                    e.StopPropagation();

                    var yy = rootTransMatrix._22;
                    if (yy < -0.01 || yy > 0.01)
                    {
                        //var dy = e.screenY - prevHandleY;
                        var dy = e.OffsetY - prevHandleY;

                        var h = prevBoxH - dy / yy;
                        if (h < 20)
                        {
                            h = 20;
                        }
                        if (h > 200)
                        {
                            h = 200;
                        }
                        box.changeHeight(h);

                        frontElement_firstChild.style.height = frontElement.style.height;
                        frontElement_firstChild.style.width  = frontElement.style.width;
                        updateTransform();
                    }
                    else
                    {
                        resizing();
                        resizing = null;
                    }
                }
            };

            resize_handle.onmouseup +=
                e =>
            {
                if (resizing != null)
                {
                    resizing();
                    resizing = null;
                }
            };
            #endregion



            #region intpMotion
            Func <bool> intpMotion =
                delegate
            {
                var dR = rot_cur - rot;
                var dT = tilt_cur - tilt;

                if (dR < 0)
                {
                    dR = -dR;
                }
                if (dT < 0)
                {
                    dT = -dT;
                }

                var not_finished = false;
                if (dR < 0.002)
                {
                    rot_cur = rot;
                }
                else
                {
                    not_finished = true;
                    rot_cur      = rot_cur * 0.8f + rot * 0.2f;
                }

                if (dT < 0.002)
                {
                    tilt_cur = tilt;
                }
                else
                {
                    not_finished = true;
                    tilt_cur     = tilt_cur * 0.8f + tilt * 0.2f;
                }

                return(not_finished);
            };
            #endregion

            #region setLidRotate
            Action <float> setLidRotate =
                a =>
            {
                lidTrans2.rotX(-a);
                lidTrans2._42 = -100;
                box.getTop().preTrans.mul(lidTrans1, lidTrans2);
            };
            #endregion


            #region doAnimation
            Action doAnimation = null;

            doAnimation =
                delegate
            {
                playing = false;
                if (lidAngle > 0)
                {
                    playing = true;
                    if (close_ok || lidAngleV > 0)
                    {
                        lidAngleV -= 0.01f;
                    }

                    lidAngle += lidAngleV;

                    if (lidAngle < 0)
                    {
                        lidAngle   = 0;
                        iframe.src = "about:blank";
                        iframe.Hide();
                    }
                    else if (lidAngle >= 1.3f)
                    {
                        lidAngle = 1.3f;
                        playing  = false;
                    }
                }
                else
                {
                    lidAngle  = 0f;
                    lidAngleV = 0f;
                }

                setLidRotate(lidAngle);

                if ((resizing == null) && intpMotion())
                {
                    playing = true;
                }

                updateTransform();

                if (playing)
                {
                    var _this = this;
                    Native.Window.requestAnimationFrame +=
                        delegate
                    {
                        doAnimation();
                    };
                }
            };
            #endregion


            #region onmousemove
            Native.Document.body.onmousemove +=
                e =>
            {
                if (Native.Document.pointerLockElement == Native.Document.body)
                {
                    rot  += e.movementX * 0.01f;
                    tilt += e.movementY * 0.01f;
                }
                else
                {
                    rot = e.CursorX * 0.006f - 0.9f;

                    tilt = (TILT_BASE - e.CursorY * 0.004f);
                }
                if (tilt < 0.5f)
                {
                    tilt = 0.5f;
                }

                //Console.WriteLine(new { rot, tilt }.ToString());

                if (!playing)
                {
                    doAnimation();
                }
            };
            #endregion



            #region close_button
            page.close_button.onclick +=
                e =>
            {
                e.StopPropagation();
                close_ok = true;
                if (lidAngle > 1.2)
                {
                    lidAngle -= 0.1f;
                    lidAngleV = 0.01f;
                }

                if (!playing)
                {
                    doAnimation();
                }
            };
            #endregion

            #region onSearchClick
            Action onSearchClick =
                delegate
            {
                lidAngle += 0.01f;
                lidAngleV = 0.17f;
                close_ok  = false;

                iframe.Show();

                // Refused to display document because display forbidden by X-Frame-Options.
                iframe.src = "http://example.com";

                if (!playing)
                {
                    doAnimation();
                }
            };

            page.search_text.onkeydown +=
                e =>
            {
                if (e.KeyCode == 13)
                {
                    onSearchClick();
                }
            };

            page.search_button.onclick +=
                e =>
            {
                onSearchClick();
            };
            #endregion


            page.search_fullscreen.onmousedown +=
                e =>
            {
                e.PreventDefault();

                if (e.MouseButton != IEvent.MouseButtonEnum.Left)
                {
                    Native.Document.body.requestPointerLock();
                }
            };

            Native.Document.body.onmouseup +=
                delegate
            {
                Native.Document.exitPointerLock();
            };

            page.search_fullscreen.onclick +=
                delegate
            {
                page.box_label.requestFullscreen();
            };
        }