Beispiel #1
0
        protected override void UpdateLayout()
        {
            skin = Enabled ? (HasFocus ? skinActive : (over ? skinHover : skinEnabled)) : skinDisabled;

            outer.Width = Math.Min(Math.Max(outer.Width, sizeMin.Width), sizeMax.Width);

            textSize = skin.Font.ProcessText(textProcessed, text,
                                             new SizeF(
                                                 WordWrap ?
                                                 (AutoSize ? float.MaxValue : outer.Width - skin.Border.Horizontal - skin.Padding.Horizontal)
                        : SizeMax.Width - skin.Border.Horizontal - skin.Padding.Horizontal,
                                                 Multiline ?
                                                 (AutoSize ? float.MaxValue : outer.Height - skin.Border.Vertical - skin.Padding.Vertical)
                        : skin.Font.LineSpacing),
                                             skin.TextAlign);
            int minHeight = Math.Max(sizeMin.Height, (int)textSize.Height + skin.Border.Vertical + skin.Padding.Vertical);

            if (AutoSize)
            {
                outer.Width  = (int)textSize.Width + skin.Border.Horizontal + skin.Padding.Horizontal;
                outer.Height = minHeight;
                outer.Width  = Math.Min(Math.Max(outer.Width, sizeMin.Width), sizeMax.Width);
            }

            outer.Height = Math.Min(Math.Max(Multiline ? outer.Height : (int)skin.Font.LineSpacing + skin.Border.Vertical + skin.Padding.Vertical, sizeMin.Height), sizeMax.Height);

            background = new Rectangle(
                skin.Border.Left, skin.Border.Top,
                outer.Width - skin.Border.Horizontal, outer.Height - skin.Border.Vertical);
            Inner = new Rectangle(
                background.Left + skin.Padding.Left, background.Top + skin.Padding.Top,
                background.Width - skin.Padding.Horizontal, background.Height - skin.Padding.Vertical);

            cursorPosition.Position = new Vector2(float.MaxValue, float.MaxValue);
            cursorPosition          = skin.Font.GetTextPosition(textProcessed, cursorPosition);
            selectionStart.Position = new Vector2(float.MaxValue, float.MaxValue);
            selectionStart          = skin.Font.GetTextPosition(textProcessed, selectionStart);
        }
Beispiel #2
0
        public GLTextBox(GLGui gui) : base(gui)
        {
            Render     += OnRender;
            MouseDown  += OnMouseDown;
            MouseUp    += OnMouseUp;
            MouseEnter += OnMouseEnter;
            MouseLeave += OnMouseLeave;
            MouseMove  += OnMouseMove;
            Focus      += OnFocus;
            FocusLost  += OnFocusLost;
            KeyDown    += OnKeyDown;
            KeyPress   += OnKeyPress;

            skinEnabled  = Gui.Skin.TextBoxEnabled;
            skinActive   = Gui.Skin.TextBoxActive;
            skinHover    = Gui.Skin.TextBoxHover;
            skinDisabled = Gui.Skin.TextBoxDisabled;

            outer = new Rectangle(0, 0, 100, 0);

            ContextMenu = new GLContextMenu(gui);
            ContextMenu.Add(new GLContextMenuEntry(gui)
            {
                Text = "Copy"
            }).Click += (s, e) => { if (selectionStart.Index != cursorPosition.Index)
                                    {
                                        CopySelection();
                                    }
            };
            ContextMenu.Add(new GLContextMenuEntry(gui)
            {
                Text = "Paste"
            }).Click += (s, e) => { if (Clipboard.ContainsText())
                                    {
                                        Insert(Clipboard.GetText());
                                    }
            };
        }