/// Modded by JCxYIS /// 20220502 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; using UnityEngine.EventSystems; public class ImeDelegateImpl : ImeDelegateBase, IDragHandler, IPointerDownHandler, IPointerUpHandler { /// /// JC: Wrapper of Text and InputField /// public class TextComponent { public string text { get { return TextGetter.Invoke(); } set { TextSetter.Invoke(value); } } private Func TextGetter; private Action TextSetter; public static explicit operator TextComponent(InputField inputField) { TextComponent tc = new TextComponent(); tc.TextGetter = () => inputField.text; tc.TextSetter = str => inputField.text = str; return tc; } public static explicit operator TextComponent(Text text) { TextComponent tc = new TextComponent(); tc.TextGetter = () => text.text; tc.TextSetter = str => text.text = str; return tc; } } public TextComponent mText; public GameObject mPanel; public ImeManager mManager; private Texture2D mTexture; private Vector2 mTextureSize = new Vector2(780, 390); //ImeDelegateBase public override void OnIMEShow(Vector2 vSize) { Debug.Log("OnIMEShow"); mTextureSize = vSize; mManager.Draw(mTexture); mPanel.SetActive(true); } public override void OnIMEHide() { Debug.Log("OnIMEHide"); mPanel.SetActive(false); } public override void OnIMECommit(string strCommit) { mText.text += strCommit; } public override void OnIMEKey(SGImeKey key) { switch (key) { case SGImeKey.KEYCODE_DEL: String strText = mText.text; mText.text = strText.Remove(strText.Length - 1); break; case SGImeKey.KEYCODE_ENTER: mText.text = ""; break; } } public override void OnIMEError(SGImeError nType, string strErr) { } //MonoBehaviour void Start() { // clickTest = GameObject.Find("Text2").GetComponent(); CreateTexture(); } void Update() { Debug.Log("panel update"); mManager.Draw(mTexture); } //other private void CreateTexture() { // Create a texture mTexture = new Texture2D(780, 390, TextureFormat.RGBA32, false); // Set point filtering just so we can see the pixels clearly mTexture.filterMode = FilterMode.Point; // Call Apply() so it's actually uploaded to the GPU mTexture.Apply(); Debug.Log("texture created"); // Set texture onto cube //GameObject cube = GameObject.Find("Cube"); //cube.GetComponent().material.mainTexture = mTexture; // Set texture onto panel Sprite sprite = Sprite.Create(mTexture, new Rect(0, 0, 780, 390), Vector2.zero); UnityEngine.UI.Image img = mPanel.GetComponent(); img.sprite = sprite; mPanel.SetActive(false); } private void CorrectPos(ref float x, ref float y) { float w = UnityEngine.Screen.width; float h = UnityEngine.Screen.height; y = h - y; //adjust ratio x = x * mTextureSize[0] / w; y = y * mTextureSize[1] / h; } private void DispatchMessageToAndroid(SGImeMotionEventType type, PointerEventData eventData) { if (null != mManager) { float x = eventData.position.x; float y = eventData.position.y; CorrectPos(ref x, ref y); mManager.OnTouch(x, y, type); } } private void LogEvent(string prefix, PointerEventData eventData) { Debug.Log(prefix + ": " + eventData.pointerCurrentRaycast.gameObject.name + " x=" + eventData.position.x + ",y=" + eventData.position.y); } public void OnBeginDrag(PointerEventData eventData) { LogEvent("Drag Begin", eventData); } public void OnDrag(PointerEventData eventData) { LogEvent("Dragging", eventData); DispatchMessageToAndroid(SGImeMotionEventType.ACTION_MOVE, eventData); } public void OnEndDrag(PointerEventData eventData) { LogEvent("Drag Ended", eventData); } public void OnPointerClick(PointerEventData eventData) { LogEvent("Clicked", eventData); } public void OnPointerDown(PointerEventData eventData) { LogEvent("Mouse Down", eventData); DispatchMessageToAndroid(SGImeMotionEventType.ACTION_DOWN, eventData); } public void OnPointerEnter(PointerEventData eventData) { LogEvent("Mouse Enter", eventData); } public void OnPointerExit(PointerEventData eventData) { //no event data Debug.Log("Mouse Exit"); } public void OnPointerUp(PointerEventData eventData) { LogEvent("Mouse Up", eventData); DispatchMessageToAndroid(SGImeMotionEventType.ACTION_UP, eventData); } }