FairyGUI.InputTextField.__keydown C# (CSharp) Method

__keydown() private method

private __keydown ( EventContext context ) : void
context EventContext
return void
        void __keydown(EventContext context)
        {
            if (!_editing || context.isDefaultPrevented)
                return;

            InputEvent evt = context.inputEvent;

            switch (evt.keyCode)
            {
                case KeyCode.Backspace:
                    {
                        context.PreventDefault();
                        if (_selectionStart != null)
                            ReplaceSelection(null);
                        else if (_caretPosition > 0)
                        {
                            int tmp = _caretPosition;
                            _caretPosition--;
                            ReplaceText(textField.text.Substring(0, tmp - 1) + textField.text.Substring(tmp));
                        }

                        break;
                    }

                case KeyCode.Delete:
                    {
                        context.PreventDefault();
                        if (_selectionStart != null)
                            ReplaceSelection(null);
                        else if (_caretPosition < textField.text.Length)
                            ReplaceText(textField.text.Substring(0, _caretPosition) + textField.text.Substring(_caretPosition + 1));

                        break;
                    }

                case KeyCode.LeftArrow:
                    {
                        context.PreventDefault();
                        if (evt.shift)
                        {
                            if (_selectionStart == null)
                                _selectionStart = GetCharPosition(_caretPosition);
                        }
                        else
                            ClearSelection();
                        if (_caretPosition > 0)
                        {
                            TextField.CharPosition cp = GetCharPosition(_caretPosition - 1);
                            AdjustCaret(cp);
                        }
                        break;
                    }

                case KeyCode.RightArrow:
                    {
                        context.PreventDefault();
                        if (evt.shift)
                        {
                            if (_selectionStart == null)
                                _selectionStart = GetCharPosition(_caretPosition);
                        }
                        else
                            ClearSelection();
                        if (_caretPosition < textField.text.Length)
                        {
                            TextField.CharPosition cp = GetCharPosition(_caretPosition + 1);
                            AdjustCaret(cp);
                        }
                        break;
                    }

                case KeyCode.UpArrow:
                    {
                        context.PreventDefault();
                        if (evt.shift)
                        {
                            if (_selectionStart == null)
                                _selectionStart = GetCharPosition(_caretPosition);
                        }
                        else
                            ClearSelection();

                        TextField.CharPosition cp = GetCharPosition(_caretPosition);
                        if (cp.lineIndex == 0)
                            return;

                        TextField.LineInfo line = textField.lines[cp.lineIndex - 1];
                        cp = GetCharPosition(new Vector2(_caret.x, line.y + textField.y));
                        AdjustCaret(cp);
                        break;
                    }

                case KeyCode.DownArrow:
                    {
                        context.PreventDefault();
                        if (evt.shift)
                        {
                            if (_selectionStart == null)
                                _selectionStart = GetCharPosition(_caretPosition);
                        }
                        else
                            ClearSelection();

                        TextField.CharPosition cp = GetCharPosition(_caretPosition);
                        if (cp.lineIndex == textField.lines.Count - 1)
                            cp.caretIndex = textField.charPositions.Count - 1;
                        else
                        {
                            TextField.LineInfo line = textField.lines[cp.lineIndex + 1];
                            cp = GetCharPosition(new Vector2(_caret.x, line.y + textField.y));
                        }
                        AdjustCaret(cp);
                        break;
                    }

                case KeyCode.PageUp:
                    {
                        context.PreventDefault();
                        ClearSelection();

                        break;
                    }

                case KeyCode.PageDown:
                    {
                        context.PreventDefault();
                        ClearSelection();

                        break;
                    }

                case KeyCode.Home:
                    {
                        context.PreventDefault();
                        ClearSelection();

                        TextField.CharPosition cp = GetCharPosition(_caretPosition);
                        TextField.LineInfo line = textField.lines[cp.lineIndex];
                        cp = GetCharPosition(new Vector2(int.MinValue, line.y + textField.y));
                        AdjustCaret(cp);
                        break;
                    }

                case KeyCode.End:
                    {
                        context.PreventDefault();
                        ClearSelection();

                        TextField.CharPosition cp = GetCharPosition(_caretPosition);
                        TextField.LineInfo line = textField.lines[cp.lineIndex];
                        cp = GetCharPosition(new Vector2(int.MaxValue, line.y + textField.y));
                        AdjustCaret(cp);

                        break;
                    }

                //Select All
                case KeyCode.A:
                    {
                        if (evt.ctrl)
                        {
                            context.PreventDefault();
                            _selectionStart = GetCharPosition(0);
                            AdjustCaret(GetCharPosition(textField.text.Length));
                        }
                        break;
                    }

                //Copy
                case KeyCode.C:
                    {
                        if (evt.ctrl && !_displayAsPassword)
                        {
                            context.PreventDefault();
                            string s = GetSelection();
                            if (!string.IsNullOrEmpty(s))
                                DoCopy(s);
                        }
                        break;
                    }

                //Paste
                case KeyCode.V:
                    {
                        if (evt.ctrl)
                        {
                            context.PreventDefault();
                            DoPaste();
                        }
                        break;
                    }

                //Cut
                case KeyCode.X:
                    {
                        if (evt.ctrl && !_displayAsPassword)
                        {
                            context.PreventDefault();
                            string s = GetSelection();
                            if (!string.IsNullOrEmpty(s))
                            {
                                DoCopy(s);
                                ReplaceSelection(null);
                            }
                        }
                        break;
                    }

                case KeyCode.Return:
                case KeyCode.KeypadEnter:
                    {
                        if (!evt.ctrl && !evt.shift)
                        {
                            context.PreventDefault();

                            if (!textField.singleLine)
                                ReplaceSelection("\n");
                        }
                        break;
                    }
            }
        }