private static void HandleTextFieldEventForDesktop(Rect position, int id, GUIContent content, bool multiline, int maxLength, GUIStyle style, TextEditor editor) { Event current = Event.current; bool flag = false; switch (current.type) { case EventType.MouseDown: if (position.Contains(current.mousePosition)) { GUIUtility.hotControl = id; GUIUtility.keyboardControl = id; editor.m_HasFocus = true; editor.MoveCursorToPosition(Event.current.mousePosition); if (Event.current.clickCount == 2 && GUI.skin.settings.doubleClickSelectsWord) { editor.SelectCurrentWord(); editor.DblClickSnap(TextEditor.DblClickSnapping.WORDS); editor.MouseDragSelectsWholeWords(true); } if (Event.current.clickCount == 3 && GUI.skin.settings.tripleClickSelectsLine) { editor.SelectCurrentParagraph(); editor.MouseDragSelectsWholeWords(true); editor.DblClickSnap(TextEditor.DblClickSnapping.PARAGRAPHS); } current.Use(); } break; case EventType.MouseUp: if (GUIUtility.hotControl == id) { editor.MouseDragSelectsWholeWords(false); GUIUtility.hotControl = 0; current.Use(); } break; case EventType.MouseDrag: if (GUIUtility.hotControl == id) { if (current.shift) { editor.MoveCursorToPosition(Event.current.mousePosition); } else { editor.SelectToPosition(Event.current.mousePosition); } current.Use(); } break; case EventType.KeyDown: if (GUIUtility.keyboardControl != id) { return; } if (editor.HandleKeyEvent(current)) { current.Use(); flag = true; content.text = editor.content.text; } else { 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) { font = GUI.skin.font; } if (font.HasCharacter(character) || character == '\n') { editor.Insert(character); flag = true; } else { if (character == '\0') { if (Input.compositionString.Length > 0) { editor.ReplaceSelection(string.Empty); flag = true; } current.Use(); } } } break; case EventType.Repaint: if (GUIUtility.keyboardControl != id) { style.Draw(position, content, id, false); } else { editor.DrawCursor(content.text); } break; } if (GUIUtility.keyboardControl == id) { GUIUtility.textFieldInput = true; } if (flag) { GUI.changed = true; content.text = editor.content.text; if (maxLength >= 0 && content.text.Length > maxLength) { content.text = content.text.Substring(0, maxLength); } current.Use(); } }