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 }
extern static private void awe_webview_inject_keyboardevent(System.IntPtr _Instance, ref AwesomiumUnityWebKeyboardEvent _WebKeyBoardEvent);
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 }