void OnGUI()
    {
        // This function should do input injection (if enabled), and drawing.
        if (m_WebView == null /*|| m_WebView.IsLoading*/)
        {
            return;
        }

        Event e = Event.current;

        switch (e.type)
        {
        case EventType.Repaint:
        {
            if (m_WebView.IsDirty)
            {
                if (m_Texture == null)
                {
                    Debug.LogError("The WebTexture does not have a texture assigned and will not paint.");
                }
                else
                {
                    m_WebView.CopyBufferToTexture(m_Texture.GetNativeTexturePtr(), m_Texture.width, m_Texture.height);
                }
            }
            break;
        }

        case EventType.MouseDown:
        {
            if (!m_Interactive)
            {
                break;
            }

            if (m_MouseIsOver)
            {
                m_WebView.InjectMouseDown(MapMouseButtons(Event.current.button));
            }
            break;
        }

        case EventType.MouseUp:
        {
            if (!m_Interactive)
            {
                break;
            }

            if (m_MouseIsOver)
            {
                Focus();
                m_WebView.InjectMouseUp(MapMouseButtons(Event.current.button));
            }
            else
            {
                Unfocus();
            }
            break;
        }

        case EventType.KeyDown:
        {
            if (!m_Interactive)
            {
                break;
            }

            if (m_HasFocus)
            {
                if (e.character == 0)
                {
                    AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                    keyEvent.Type           = AwesomiumUnityWebKeyType.KeyDown;
                    keyEvent.VirtualKeyCode = MapKeys(e);
                    keyEvent.Modifiers      = MapModifiers(e);
                    m_WebView.InjectKeyboardEvent(keyEvent);
                }
                else
                {
                    AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                    keyEvent.Type      = AwesomiumUnityWebKeyType.Char;
                    keyEvent.Text      = new ushort[] { e.character, 0, 0, 0 };
                    keyEvent.Modifiers = MapModifiers(e);
                    m_WebView.InjectKeyboardEvent(keyEvent);
                }
            }
            break;
        }

        case EventType.KeyUp:
        {
            if (!m_Interactive)
            {
                break;
            }

            if (m_HasFocus)
            {
                AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                keyEvent.Type           = AwesomiumUnityWebKeyType.KeyUp;
                keyEvent.VirtualKeyCode = MapKeys(e);
                keyEvent.Modifiers      = MapModifiers(e);
                m_WebView.InjectKeyboardEvent(keyEvent);
            }
            break;
        }

        case EventType.ScrollWheel:
        {
            if (!m_Interactive)
            {
                break;
            }

            if (m_HasFocus)
            {
                m_WebView.InjectMouseWheel((int)e.delta.y * -10, (int)e.delta.x);
            }
            break;
        }
        }
    }
 private static extern void awe_webview_inject_keyboardevent( System.IntPtr _Instance, ref AwesomiumUnityWebKeyboardEvent _WebKeyBoardEvent );
    void OnGUI()
    {
        // This function should do input injection (if enabled), and drawing.
        if (m_WebView == null || m_WebView.IsLoading) return;

        Event e = Event.current;

        switch (e.type)
        {
        case EventType.Repaint:
        {
            if (m_WebView.IsDirty)
            {
                m_WebView.CopyBufferToTexture(m_Texture.GetNativeTexturePtr(), m_Texture.width, m_Texture.height);
            }
            break;
        }
        case EventType.MouseDown:
        {
            if (!m_Interactive)
                break;

            if (m_MouseIsOver)
            {
                m_WebView.InjectMouseDown(MapMouseButtons(Event.current.button));
            }
            break;
        }
        case EventType.MouseUp:
        {
            if (!m_Interactive)
                break;

            if (m_MouseIsOver)
            {
                Focus();
                m_WebView.InjectMouseUp(MapMouseButtons(Event.current.button));
            }
            else
            {
                Unfocus();
            }
            break;
        }
        case EventType.KeyDown:
        {
            if (!m_Interactive)
                break;

            if (m_HasFocus)
            {
                if (e.character == 0)
                {
                    AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                    keyEvent.Type = AwesomiumUnityWebKeyType.KeyDown;
                    keyEvent.VirtualKeyCode = MapKeys(e);
                    keyEvent.Modifiers = MapModifiers(e);
                    m_WebView.InjectKeyboardEvent(keyEvent);
                }
                else
                {
                    AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                    keyEvent.Type = AwesomiumUnityWebKeyType.Char;
                    keyEvent.Text = new ushort[] { e.character, 0, 0, 0 };
                    keyEvent.Modifiers = MapModifiers(e);
                    m_WebView.InjectKeyboardEvent(keyEvent);
                }
            }
            break;
        }
        case EventType.KeyUp:
        {
            if (!m_Interactive)
                break;

            if (m_HasFocus)
            {
                AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                keyEvent.Type = AwesomiumUnityWebKeyType.KeyUp;
                keyEvent.VirtualKeyCode = MapKeys(e);
                keyEvent.Modifiers = MapModifiers(e);
                m_WebView.InjectKeyboardEvent(keyEvent);
            }
            break;
        }
        case EventType.ScrollWheel:
        {
            if (!m_Interactive)
                break;

            if (m_HasFocus)
            {
                m_WebView.InjectMouseWheel((int)e.delta.y * -10, (int)e.delta.x);
            }
            break;
        }
        }
    }
 public void InjectKeyboardEvent( AwesomiumUnityWebKeyboardEvent _WebKeyBoardEvent )
 {
     awe_webview_inject_keyboardevent(m_Instance, ref _WebKeyBoardEvent);
 }
    void Update()
    {
        #region Unfocus?
        if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2))
        {
            if (!m_MouseIsOver)
            {
                Unfocus();
            }
        }
        #endregion

        #region Repaint
        if (m_WebView.IsDirty)
        {
            if (!m_Texture)
                Debug.LogError("The WebTexture does not have a texture assigned and will not paint.");
            else
                m_WebView.CopyBufferToTexture(m_Texture.GetNativeTexturePtr(), m_Texture.width, m_Texture.height);
        }
        #endregion

        #region InjectMouseMove_mouseHover_Awesomium
        //Make sure: 1. pivots are (X=0.5, Y=0.5)
        //2. Both pivots and anchors are set in the middle!
        if (m_MouseIsOver)
        {
            if (m_Interactive && m_RawImage)
            {
                Vector2 localCursor;
                var rect1 = GetComponent<RectTransform>();
                var pos1 = Input.mousePosition;
                if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(rect1, pos1,
                    null, out localCursor))
                    Debug.LogException(new System.Exception("Can't do ScreenPointToLocalPointInRectangle!"));

                m_XMousePos = localCursor.x;
                m_YMousePos = localCursor.y;

                //some math
                if (m_XMousePos < 0)
                    m_XMousePos = m_XMousePos + rect1.rect.width / 2;
                else m_XMousePos += rect1.rect.width / 2;

                if (m_YMousePos > 0)
                    m_YMousePos = m_YMousePos + rect1.rect.height / 2;
                else m_YMousePos += rect1.rect.height / 2;

                //flipping Y axis to make Awesomium happy
                m_YMousePos = rect1.rect.height - m_YMousePos;
                //Debug.Log(ypos);

                //Debug.Log("Correct Cursor Pos: " + xpos + " " + ypos);
                m_WebView.InjectMouseMove((int)m_XMousePos, (int)m_YMousePos);

                if (m_XMousePos < -1 || m_YMousePos < -1)
                {
                    Debug.LogError("Set pivots to: X=0.5, Y=0.5; Also set pivots and anchors to the middle of the current rect using Anchor Presets tool in the inspector.");

                }
            }
            else Debug.LogError("RawImage missing! (Perhaps browser is non-interactive?)");
        }
        #endregion

        /// Needs maintenance!
        /// 1. Cannot register held keys
        /// 2. Possible inability of registering shift keys e.g. Shift-Backslash does-
        ///    -NOT produce Question Mark (Might work after building the game)
        #region InjectKeyboardEvent_Awesomium
        if (m_Interactive && m_HasFocus)
        {
            KeyCode keyCodeUp = 0, keyCodeDown = 0, keyCodeHold = 0;
            AwesomiumUnityWebKeyModifiers keyModifier = 0;

            keyModifier = m_GetKeyModifier();

            #region Key_Hold
            //Not working
            //if (m_IsKeyHeldDown)
            //{
            //    if (!Input.GetKeyUp(m_HeldDownKey))
            //    {
            //        char myChar = (char)m_HeldDownKey;

            //        if (myChar >= 32 && myChar <= 126)
            //        {
            //            AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
            //            keyEvent.Type = AwesomiumUnityWebKeyType.Char;
            //            keyEvent.Text = new ushort[] { myChar, 0, 0, 0 };
            //            keyEvent.VirtualKeyCode = MapKeys(m_HeldDownKey);
            //            keyEvent.Modifiers = keyModifier;
            //            m_WebView.InjectKeyboardEvent(keyEvent);
            //        }
            //    }
            //    else
            //        m_IsKeyHeldDown = false;
            //}
            #endregion

            #region Key_Down
            keyCodeDown = m_GetKeyDown();

            if (keyCodeDown != 0)
            {
                //Debug.Log(keyCodeDown + " THIS IS DOWN!");
                char myChar = (char)keyCodeDown;

                //is it a character (letter/symbol/number)?
                if (myChar >= 32 && myChar <= 126)
                {
                    if(keyCodeDown != m_HeldDownKey){
                    AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                    keyEvent.Type = AwesomiumUnityWebKeyType.Char;
                    keyEvent.Text = new ushort[] { myChar, 0, 0, 0 };
                    keyEvent.VirtualKeyCode = MapKeys(keyCodeDown);
                    keyEvent.Modifiers = keyModifier;
                    m_WebView.InjectKeyboardEvent(keyEvent);

                    //m_HeldDownKey = keyCodeDown;
                    //m_IsKeyHeldDown = true;
                    }
                }
                //KeyPad! (not a letter/symbol/number)
                else
                {
                    AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                    keyEvent.Type = AwesomiumUnityWebKeyType.KeyDown;
                    keyEvent.VirtualKeyCode = MapKeys(keyCodeDown);
                    keyEvent.Modifiers = keyModifier;
                    m_WebView.InjectKeyboardEvent(keyEvent);
                }

            }
            #endregion

            #region Key_Up
            keyCodeUp = m_GetKeyUp();

            if (keyCodeUp != 0)
            {
                //Debug.Log(keyCodeUp + " THIS IS UP!");
                AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                keyEvent.Type = AwesomiumUnityWebKeyType.KeyUp;
                keyEvent.VirtualKeyCode = MapKeys(keyCodeUp);
                keyEvent.Modifiers = keyModifier;
                m_WebView.InjectKeyboardEvent(keyEvent);
            }
            #endregion
        }
        #endregion

        #region Example of: Copy, Paste, Zoom-in etc...

        ///Important Note: Ctrl, Alt, and Shift keys won't properly work while in Unity Editor; they will work ONLY in built solutions

        //if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.C))
        //{
        //    m_WebView.CopyClipboard();
        //}
        //if (Input.GetKeyDown(KeyCode.UpArrow))
        //{
        //    m_WebView.ZoomIn();
        //}
        //if (Input.GetKeyDown(KeyCode.DownArrow))
        //{
        //    m_WebView.ZoomOut();
        //}
        //if (Input.GetKeyDown(KeyCode.RightArrow))
        //{
        //    m_WebView.ZoomReset();
        //}
        #endregion
    }
예제 #6
0
 extern static private void awe_webview_inject_keyboardevent(System.IntPtr _Instance, ref AwesomiumUnityWebKeyboardEvent _WebKeyBoardEvent);
예제 #7
0
 public void InjectKeyboardEvent(AwesomiumUnityWebKeyboardEvent _WebKeyBoardEvent)
 {
     awe_webview_inject_keyboardevent(m_Instance, ref _WebKeyBoardEvent);
 }
예제 #8
0
    void Update()
    {
        #region Unfocus?
        if (Input.GetMouseButtonDown(0) || Input.GetMouseButtonDown(1) || Input.GetMouseButtonDown(2))
        {
            if (!m_MouseIsOver)
            {
                Unfocus();
            }
        }
        #endregion

        #region Repaint
        if (m_WebView.IsDirty)
        {
            if (!m_Texture)
            {
                Debug.LogError("The WebTexture does not have a texture assigned and will not paint.");
            }
            else
            {
                m_WebView.CopyBufferToTexture(m_Texture.GetNativeTexturePtr(), m_Texture.width, m_Texture.height);
            }
        }
        #endregion

        #region InjectMouseMove_mouseHover_Awesomium
        //Make sure: 1. pivots are (X=0.5, Y=0.5)
        //2. Both pivots and anchors are set in the middle!
        if (m_MouseIsOver)
        {
            if (m_Interactive && m_RawImage)
            {
                Vector2 localCursor;
                var     rect1 = GetComponent <RectTransform>();
                var     pos1  = Input.mousePosition;
                if (!RectTransformUtility.ScreenPointToLocalPointInRectangle(rect1, pos1,
                                                                             null, out localCursor))
                {
                    Debug.LogException(new System.Exception("Can't do ScreenPointToLocalPointInRectangle!"));
                }

                m_XMousePos = localCursor.x;
                m_YMousePos = localCursor.y;

                //some math
                if (m_XMousePos < 0)
                {
                    m_XMousePos = m_XMousePos + rect1.rect.width / 2;
                }
                else
                {
                    m_XMousePos += rect1.rect.width / 2;
                }

                if (m_YMousePos > 0)
                {
                    m_YMousePos = m_YMousePos + rect1.rect.height / 2;
                }
                else
                {
                    m_YMousePos += rect1.rect.height / 2;
                }

                //flipping Y axis to make Awesomium happy
                m_YMousePos = rect1.rect.height - m_YMousePos;
                //Debug.Log(ypos);

                //Debug.Log("Correct Cursor Pos: " + xpos + " " + ypos);
                m_WebView.InjectMouseMove((int)m_XMousePos, (int)m_YMousePos);

                if (m_XMousePos < -1 || m_YMousePos < -1)
                {
                    Debug.LogError("Set pivots to: X=0.5, Y=0.5; Also set pivots and anchors to the middle of the current rect using Anchor Presets tool in the inspector.");
                }
            }
            else
            {
                Debug.LogError("RawImage missing! (Perhaps browser is non-interactive?)");
            }
        }
        #endregion

        /// Needs maintenance!
        /// 1. Cannot register held keys
        /// 2. Possible inability of registering shift keys e.g. Shift-Backslash does-
        ///    -NOT produce Question Mark (Might work after building the game)
        #region InjectKeyboardEvent_Awesomium
        if (m_Interactive && m_HasFocus)
        {
            KeyCode keyCodeUp = 0, keyCodeDown = 0, keyCodeHold = 0;
            AwesomiumUnityWebKeyModifiers keyModifier = 0;

            keyModifier = m_GetKeyModifier();

            #region Key_Hold
            //Not working
            //if (m_IsKeyHeldDown)
            //{
            //    if (!Input.GetKeyUp(m_HeldDownKey))
            //    {
            //        char myChar = (char)m_HeldDownKey;

            //        if (myChar >= 32 && myChar <= 126)
            //        {
            //            AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
            //            keyEvent.Type = AwesomiumUnityWebKeyType.Char;
            //            keyEvent.Text = new ushort[] { myChar, 0, 0, 0 };
            //            keyEvent.VirtualKeyCode = MapKeys(m_HeldDownKey);
            //            keyEvent.Modifiers = keyModifier;
            //            m_WebView.InjectKeyboardEvent(keyEvent);
            //        }
            //    }
            //    else
            //        m_IsKeyHeldDown = false;
            //}
            #endregion

            #region Key_Down
            keyCodeDown = m_GetKeyDown();

            if (keyCodeDown != 0)
            {
                //Debug.Log(keyCodeDown + " THIS IS DOWN!");
                char myChar = (char)keyCodeDown;

                //is it a character (letter/symbol/number)?
                if (myChar >= 32 && myChar <= 126)
                {
                    if (keyCodeDown != m_HeldDownKey)
                    {
                        AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                        keyEvent.Type           = AwesomiumUnityWebKeyType.Char;
                        keyEvent.Text           = new ushort[] { myChar, 0, 0, 0 };
                        keyEvent.VirtualKeyCode = MapKeys(keyCodeDown);
                        keyEvent.Modifiers      = keyModifier;
                        m_WebView.InjectKeyboardEvent(keyEvent);

                        //m_HeldDownKey = keyCodeDown;
                        //m_IsKeyHeldDown = true;
                    }
                }
                //KeyPad! (not a letter/symbol/number)
                else
                {
                    AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                    keyEvent.Type           = AwesomiumUnityWebKeyType.KeyDown;
                    keyEvent.VirtualKeyCode = MapKeys(keyCodeDown);
                    keyEvent.Modifiers      = keyModifier;
                    m_WebView.InjectKeyboardEvent(keyEvent);
                }
            }
            #endregion

            #region Key_Up
            keyCodeUp = m_GetKeyUp();

            if (keyCodeUp != 0)
            {
                //Debug.Log(keyCodeUp + " THIS IS UP!");
                AwesomiumUnityWebKeyboardEvent keyEvent = new AwesomiumUnityWebKeyboardEvent();
                keyEvent.Type           = AwesomiumUnityWebKeyType.KeyUp;
                keyEvent.VirtualKeyCode = MapKeys(keyCodeUp);
                keyEvent.Modifiers      = keyModifier;
                m_WebView.InjectKeyboardEvent(keyEvent);
            }
            #endregion
        }
        #endregion

        #region Example of: Copy, Paste, Zoom-in etc...

        ///Important Note: Ctrl, Alt, and Shift keys won't properly work while in Unity Editor; they will work ONLY in built solutions

        //if (Input.GetKey(KeyCode.UpArrow) || Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.C))
        //{
        //    m_WebView.CopyClipboard();
        //}
        //if (Input.GetKeyDown(KeyCode.UpArrow))
        //{
        //    m_WebView.ZoomIn();
        //}
        //if (Input.GetKeyDown(KeyCode.DownArrow))
        //{
        //    m_WebView.ZoomOut();
        //}
        //if (Input.GetKeyDown(KeyCode.RightArrow))
        //{
        //    m_WebView.ZoomReset();
        //}
        #endregion
    }