private static void DoTextField(Rect position, int id, GUIContent content, bool multiline, int maxLength, GUIStyle style) { if ((maxLength >= 0) && (content.text.Length > maxLength)) { content.text = content.text.Substring(0, maxLength); } GUI2.CheckOnGUI(); TextEditor stateObject = (TextEditor)GUIUtility.GetStateObject(typeof(TextEditor), id); stateObject.content.text = content.text; stateObject.SaveBackup(); stateObject.position = position; stateObject.style = style; stateObject.multiline = multiline; stateObject.controlID = id; stateObject.ClampPos(); Event current = Event.current; bool flag = false; switch (current.type) { case EventType.MouseDown: if (position.Contains(current.mousePosition)) { GUIUtility.hotControl = id; GUIUtility.keyboardControl = id; stateObject.MoveCursorToPosition(Event.current.mousePosition); if ((Event.current.clickCount == 2) && skin.settings.doubleClickSelectsWord) { stateObject.SelectCurrentWord(); stateObject.DblClickSnap(TextEditor.DblClickSnapping.WORDS); stateObject.MouseDragSelectsWholeWords(true); } if ((Event.current.clickCount == 3) && skin.settings.tripleClickSelectsLine) { stateObject.SelectCurrentParagraph(); stateObject.MouseDragSelectsWholeWords(true); stateObject.DblClickSnap(TextEditor.DblClickSnapping.PARAGRAPHS); } current.Use(); } break; case EventType.MouseUp: if (GUIUtility.hotControl == id) { stateObject.MouseDragSelectsWholeWords(false); GUIUtility.hotControl = 0; current.Use(); } break; case EventType.MouseDrag: if (GUIUtility.hotControl == id) { if (!current.shift) { stateObject.SelectToPosition(Event.current.mousePosition); } else { stateObject.MoveCursorToPosition(Event.current.mousePosition); } current.Use(); break; } break; case EventType.KeyDown: if (GUIUtility.keyboardControl != id) { return; } if (!stateObject.HandleKeyEvent(current)) { if ((current.keyCode == KeyCode.Tab) || (current.character == '\t')) { return; } char character = current.character; if (((character == '\n') && !multiline) && !current.alt) { return; } Font font = style.font; if (font == null) { font = skin.font; } if (font.HasCharacter(character) || (character == '\n')) { stateObject.Insert(character); flag = true; } else if (character == '\0') { if (Input.compositionString.Length > 0) { stateObject.ReplaceSelection(string.Empty); flag = true; } current.Use(); } break; } current.Use(); flag = true; content.text = stateObject.content.text; break; case EventType.Repaint: if (GUIUtility.keyboardControl != id) { style.Draw(position, content, id, false); break; } stateObject.DrawCursor(content.text); break; } if (GUIUtility.keyboardControl == id) { GUI2.textFieldInput = true; } if (flag) { changed = true; content.text = stateObject.content.text; if ((maxLength >= 0) && (content.text.Length > maxLength)) { content.text = content.text.Substring(0, maxLength); } current.Use(); } }