1#if UNITY_2018_2_OR_NEWER
2#define TMP_WEBGL_SUPPORT
16 class WrappedTMPInputField : IInputField
19 RebuildChecker checker;
20 Coroutine delayedGraphicRebuild;
22 public bool ReadOnly {
get {
return input.readOnly; } }
26 get {
return input.text; }
27 set { input.text = value; }
29 public string placeholder
33 if (!input.placeholder)
return "";
34 var text = input.placeholder.GetComponent<TMP_Text>();
35 return text ? text.text :
"";
41 get {
return (
int)input.textComponent.fontSize; }
51 get {
return (
LineType)input.lineType; }
54 public int characterLimit
56 get {
return input.characterLimit; }
59 public int caretPosition
61 get {
return input.caretPosition; }
66 get {
return input.isFocused; }
69 public int selectionFocusPosition
71 get {
return input.selectionStringFocusPosition; }
72 set { input.selectionStringFocusPosition = value; }
75 public int selectionAnchorPosition
77 get {
return input.selectionStringAnchorPosition; }
78 set { input.selectionStringAnchorPosition = value; }
81 public bool OnFocusSelectAll
83 get {
return input.onFocusSelectAll; }
86 public WrappedTMPInputField(TMP_InputField input)
89 checker =
new RebuildChecker(
this);
92 public RectTransform RectTransform()
98 return input.GetComponent<RectTransform>();
101 public void ActivateInputField()
103 input.ActivateInputField();
106 public void DeactivateInputField()
108 input.DeactivateInputField();
111 public void Rebuild()
113#if UNITY_2020_1_OR_NEWER
114 if (checker.NeedRebuild())
116 input.textComponent.SetVerticesDirty();
117 input.textComponent.SetLayoutDirty();
118 input.Rebuild(CanvasUpdate.LatePreRender);
121 if (input.textComponent.enabled && checker.NeedRebuild())
126 var rt = input.textComponent.GetComponent<RectTransform>();
127 var size = input.textComponent.GetPreferredValues();
128 if (size.x < rt.rect.xMax)
131 var pos = rt.anchoredPosition;
133 rt.anchoredPosition = pos;
136 var caret = input.GetComponentInChildren<TMP_SelectionCaret>();
137 var caretRect = caret.GetComponent<RectTransform>();
138 caretRect.anchoredPosition = rt.anchoredPosition;
145 input.textComponent.enabled = rectOverlaps(input.textComponent.rectTransform, input.textViewport);
146 input.textComponent.SetAllDirty();
147 input.Rebuild(CanvasUpdate.LatePreRender);
152 input.textComponent.enabled =
true;
157 bool rectOverlaps(RectTransform rectTrans1, RectTransform rectTrans2)
159 Rect rect1 =
new Rect(rectTrans1.localPosition.x, rectTrans1.localPosition.y, rectTrans1.rect.width, rectTrans1.rect.height);
160 Rect rect2 =
new Rect(rectTrans2.localPosition.x, rectTrans2.localPosition.y, rectTrans2.rect.width, rectTrans2.rect.height);
162 return rect1.Overlaps(rect2);