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();
}
}