public virtual void Difuse() { GUIFocusControl.Diffuse(this); }
public virtual void Focus() { GUIFocusControl.Focus(this); }
public override void Dispose() { GUIFocusControl.UnSubscribe(this); }
public FocusAbleGUIDrawer() { focusID = GUIFocusControl.Subscribe(this); }
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); } } }
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); } } }