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); }
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()); } }; }