コード例 #1
0
 public virtual void Difuse()
 {
     GUIFocusControl.Diffuse(this);
 }
コード例 #2
0
 public virtual void Focus()
 {
     GUIFocusControl.Focus(this);
 }
コード例 #3
0
 public override void Dispose()
 {
     GUIFocusControl.UnSubscribe(this);
 }
コード例 #4
0
 public FocusAbleGUIDrawer()
 {
     focusID = GUIFocusControl.Subscribe(this);
 }
コード例 #5
0
        public override void OnGUI(Rect position)
        {
            base.OnGUI(position);
            position = position.Zoom(AnchorType.MiddleCenter, new Vector2(-4, -1)).MoveUp(1);
            GUIStyle cancelBtnStyle = string.IsNullOrEmpty(value) ?Styles.SearchCancelButtonEmptyStyle : Styles.SearchCancelButtonStyle;

            position.width -= cancelBtnStyle.fixedWidth;

            Styles.SearchTextFieldStyle.fixedHeight = position.height;
            cancelBtnStyle.fixedHeight = position.height;

            Styles.SearchTextFieldStyle.alignment = TextAnchor.MiddleLeft;
            if (BestFit)
            {
                while (Styles.SearchTextFieldStyle.lineHeight < position.height - 15)
                {
                    Styles.SearchTextFieldStyle.fontSize++;
                }
            }

            string tmp = value;

            GUI.SetNextControlName(FocusID);
            this.TextField(position.MoveRight(1), ref tmp, Styles.SearchTextFieldStyle)
            .Button(() => {
                tmp         = string.Empty;
                GUI.changed = true;
                GUIUtility.keyboardControl = 0;
                if (onEndEdit != null)
                {
                    onEndEdit(value);
                }
            }, new Rect(position.xMax, position.y, cancelBtnStyle.fixedWidth, cancelBtnStyle.fixedHeight), GUIContent.none, cancelBtnStyle);

            if (tmp != value)
            {
                value = tmp;
                if (onValueChange != null)
                {
                    onValueChange(value);
                }
            }
            Event e = Event.current;

            if (position.Contains(e.mousePosition))
            {
                if (!Focused)
                {
                    if (e.type == EventType.MouseDown)
                    {
                        Focused = true;
                        GUIFocusControl.Focus(this);
                        if (e.type != EventType.Repaint && e.type != EventType.Layout)
                        {
                            Event.current.Use();
                        }
                    }
                }
            }
            if ((e.keyCode == KeyCode.Return || e.keyCode == KeyCode.Escape || e.character == '\n'))
            {
                GUIFocusControl.Diffuse(null);
                Focused = false;
                if (e.type != EventType.Repaint && e.type != EventType.Layout)
                {
                    Event.current.Use();
                }
                if (onEndEdit != null)
                {
                    onEndEdit(value);
                }
            }
        }
コード例 #6
0
        public override void OnGUI(Rect position)
        {
            base.OnGUI(position);
            Event e = Event.current;

            if (editing)
            {
                GUI.SetNextControlName(focusID);
                string tmp = value;
                this.TextField(position, ref tmp);
                if (value != tmp)
                {
                    value = tmp;
                    if (onValueChange != null)
                    {
                        onValueChange(value);
                    }
                }
            }
            else
            {
                this.Label(position, value);
            }

            if (position.Contains(e.mousePosition))
            {
                if (!focused)
                {
                    if (e.type == EventType.MouseDown && e.clickCount == 1)
                    {
                        if (_clickCount < 2)
                        {
                            if (_clickCount == 0)
                            {
                                _clickCount++;
                                _lastTime = System.DateTime.Now;
                            }
                            else if (_clickCount == 1)
                            {
                                if ((System.DateTime.Now - _lastTime).TotalSeconds > 0.2)
                                {
                                    _clickCount++;
                                }
                            }
                        }
                        if (_clickCount == 2)
                        {
                            GUIFocusControl.Focus(this);
                            if (e.type != EventType.Repaint && e.type != EventType.Layout)
                            {
                                Event.current.Use();
                            }
                        }
                    }
                    if (e.keyCode == KeyCode.F2)
                    {
                        _clickCount = 2;
                        GUIFocusControl.Focus(this);
                        if (e.type != EventType.Repaint && e.type != EventType.Layout)
                        {
                            Event.current.Use();
                        }
                    }
                }
            }
            else
            {
                if (e.type == EventType.MouseDrag && _clickCount > 0)
                {
                    _clickCount = 0;
                    GUIFocusControl.Diffuse(this);
                    if (onEndEdit != null)
                    {
                        onEndEdit(value);
                    }
                }
                if (e.type == EventType.MouseDown && e.clickCount == 1)
                {
                    _clickCount = 0;
                    GUIFocusControl.Diffuse(this);
                    if (onEndEdit != null)
                    {
                        onEndEdit(value);
                    }
                }
            }
            if (e.keyCode == KeyCode.Return || e.keyCode == KeyCode.Escape || e.character == '\n' || e.button == 1)
            {
                GUIFocusControl.Diffuse(this);
                if (e.type != EventType.Repaint && e.type != EventType.Layout)
                {
                    Event.current.Use();
                }
                if (onEndEdit != null)
                {
                    onEndEdit(value);
                }
            }
        }