Пример #1
0
        public void Draw(Rect bounds)
        {
            bounds = bounds.PadSides(4);

            var inputBounds = bounds.WithHeight(20).InnerAlignWithBottomCenter(bounds);
            var linesBounds = bounds.Above(inputBounds).Clip(bounds);

            // EditorGUI.DrawRect(linesBounds, Colors.PrimaryColor);

            GUI.SetNextControlName("TerminalInput");
            var gtBounds = inputBounds.WithWidth(18);

            GUI.Label(gtBounds, ">", Styles.TerminalTextfieldStyle);
            CurrentInput = EditorGUI.TextField(inputBounds.RightOf(gtBounds).Clip(inputBounds), CurrentInput, Styles.TerminalTextfieldStyle);

            var lines  = _frontend.Lines.ToArray();
            var height = 17;
            var lineItemTemplateBounds = linesBounds.WithHeight(height);
            var totalHeight            = height * lines.Length;

            ScrollPosition = GUI.BeginScrollView(linesBounds.AddHeight(-(int)inputBounds.height), ScrollPosition, linesBounds.WithHeight(totalHeight).AddWidth(-20));

            foreach (var line in lines)
            {
                EditorGUI.SelectableLabel(lineItemTemplateBounds, line, Styles.TerminalLineStyle);
                lineItemTemplateBounds = lineItemTemplateBounds.Below(lineItemTemplateBounds);
            }
            GUI.EndScrollView(true);

            if (Event.current.isKey)
            {
                if (Event.current.keyCode == KeyCode.Return && !string.IsNullOrEmpty(CurrentInput))
                {
                    var cache = CurrentInput;
                    _frontend.Post(cache);
                    CurrentInput = null;
                    EditorGUI.FocusTextInControl("TerminalInput");
                }
            }
        }