コード例 #1
0
    protected override void LateUpdate()
    {
        base.LateUpdate();

        if (isFocused && BindedLine != null && BindedLine.NeedFixInput())
        {
            BindedLine.FixTextInputAction();
        }
    }
コード例 #2
0
    public override void OnUpdateSelected(BaseEventData eventData)
    {
        if (!isFocused || BindedLine == null || BindedLine.Tree == null)
        {
            return;
        }

        bool consumedEvent = false;

        int          compositionBugCount = -1;
        Event        popEvent            = new Event();
        List <Event> currentEvents       = new List <Event>();

        while (Event.PopEvent(popEvent))
        {
            currentEvents.Add(new Event(popEvent));
        }
        if (currentEvents.Find((Event e) => e.rawType == EventType.MouseDown) != null)
        {
            compositionBugCount = 0;
            foreach (Event maybeDuplicatedEvent in currentEvents)
            {
                if (maybeDuplicatedEvent.rawType == EventType.keyDown)
                {
                    ++compositionBugCount;
                }
            }
        }
        foreach (Event processingEvent in currentEvents)
        {
            if (processingEvent.rawType == EventType.KeyDown)
            {
                consumedEvent = true;

                var  currentEventModifiers = processingEvent.modifiers;
                bool ctrl     = SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX ? (currentEventModifiers & EventModifiers.Command) != 0 : (currentEventModifiers & EventModifiers.Control) != 0;
                bool shift    = (currentEventModifiers & EventModifiers.Shift) != 0;
                bool alt      = (currentEventModifiers & EventModifiers.Alt) != 0;
                bool ctrlOnly = ctrl && !alt && !shift;

                cachedCaretPos_ = m_CaretSelectPosition;
                switch (processingEvent.keyCode)
                {
                case KeyCode.V:
                    if (ctrlOnly)
                    {
                        // process in ownerTree
                    }
                    break;

                case KeyCode.Space:
                    if (ctrlOnly)
                    {
                        // process in ownerTree
                    }
                    else
                    {
                        KeyPressed(processingEvent);
                    }
                    break;

                case KeyCode.C:
                case KeyCode.X:
                    if (ctrlOnly && isSelected_)
                    {
                        // process in ownerTree
                    }
                    else
                    {
                        KeyPressed(processingEvent);
                    }
                    break;

                case KeyCode.Semicolon:
                    if (ctrlOnly && BindedLine.Tree.HasSelection == false)
                    {
                        DateTime now     = DateTime.Now;
                        string   oldText = text;
                        BindedLine.Tree.ActionManager.Execute(new Action(
                                                                  execute: () =>
                        {
                            Paste(now.ToString(GameContext.Config.TimeFormat));
                        },
                                                                  undo: () =>
                        {
                            text = oldText;
                        }
                                                                  ));
                    }
                    break;

                case KeyCode.Colon:
                case KeyCode.Equals:                //日本語キーボードだとこっちになってるらしい。どうしたものか。Configにするか。
                    if (ctrlOnly && BindedLine.Tree.HasSelection == false)
                    {
                        DateTime date    = DateTime.Now;
                        string   oldText = text;
                        BindedLine.Tree.ActionManager.Execute(new Action(
                                                                  execute: () =>
                        {
                            Paste(date.ToString(GameContext.Config.DateFormat));
                        },
                                                                  undo: () =>
                        {
                            text = oldText;
                        }
                                                                  ));
                    }
                    break;

                case KeyCode.Delete:
                {
                    if (BindedLine.Tree.HasSelection)
                    {
                        // process in ownerTree
                    }
                    else
                    {
                        bool use = cachedCaretPos_ < text.Length;
                        KeyPressed(processingEvent);
                        if (use)
                        {
                            BindedLine.Tree.OnDeleteKeyConsumed();
                        }
                    }
                }
                break;

                case KeyCode.Backspace:
                {
                    if (BindedLine.Tree.HasSelection)
                    {
                        // process in ownerTree
                    }
                    else
                    {
                        KeyPressed(processingEvent);
                    }
                }
                break;

                case KeyCode.DownArrow:
                {
                    if (BindedLine.NextVisibleLine != null)
                    {
                        // process in ownerTree
                    }
                    else
                    {
                        KeyPressed(processingEvent);
                        BindedLine.FixTextInputAction();
                    }
                }
                break;

                case KeyCode.UpArrow:
                {
                    if (BindedLine.PrevVisibleLine != null)
                    {
                        // process in ownerTree
                    }
                    else
                    {
                        KeyPressed(processingEvent);
                        BindedLine.FixTextInputAction();
                    }
                }
                break;

                case KeyCode.RightArrow:
                case KeyCode.LeftArrow:
                {
                    KeyPressed(processingEvent);
                    desiredCaretPos_ = m_CaretSelectPosition;
                    BindedLine.FixTextInputAction();
                    if (GameContext.Window.TagIncrementalDialog.IsActive)
                    {
                        if (Line.GetTagInCaretPosition(BindedLine.Text, desiredCaretPos_) == null)
                        {
                            GameContext.Window.TagIncrementalDialog.Close();
                        }
                    }
                }
                break;

                case KeyCode.Home:
                case KeyCode.End:
                {
                    KeyPressed(processingEvent);
                    desiredCaretPos_ = m_CaretSelectPosition;
                    BindedLine.FixTextInputAction();
                }
                break;

                default:
                    if (ctrlOnly && processingEvent.keyCode == KeyCode.None && processingEvent.character.ToString() == " ")
                    {
                        // process in ownerTree
                    }
                    else if (ctrl == false && alt == false && processingEvent.keyCode == KeyCode.None && BindedLine.Tree.HasSelection && processingEvent.character.ToString() != Line.TabString)
                    {
                        LineField newField = BindedLine.Tree.DeleteSelection().Field;
                        newField.KeyPressed(processingEvent);
                        newField.CaretPosision = newField.text.Length;
                    }
                    else
                    {
                        if (compositionBugCount >= 0 && compositionBugCount % 2 == 0)
                        {
                            if (compositionBugCount == 0)
                            {
                                continue;
                            }
                            compositionBugCount -= 2;
                        }
                        KeyPressed(processingEvent);
                    }
                    break;
                }
            }
        }

        // ひらがな入力で、変換の最後の1文字だけ、BackspaceのKeyDownが来ない問題
        bool compositionStringDeleted = (compositionString.Length > 0 && Input.compositionString.Length == 0);

        if (consumedEvent || compositionStringDeleted)
        {
            UpdateLabel();
        }

        compositionString = Input.compositionString;

        eventData.Use();
    }
コード例 #3
0
 public override void OnPointerDown(PointerEventData eventData)
 {
     base.OnPointerDown(eventData);
     BindedLine.FixTextInputAction();
 }