Ejemplo n.º 1
0
        internal static bool OnProcess(int ID, ref string Text, LGuiRect Rect, uint MaxLength, LGuiInputTextFlags Flags, Func <char, bool> Callback)
        {
            var RenderPos = new LGuiVec2(Rect.X + 3, Rect.Y + 1);

            var Info = new LGuiTextRenderInfo();

            Info.TextColor  = LGuiStyle.GetColor(LGuiStyleColorIndex.Text);
            Info.Font       = LGuiContext.Font;
            Info.IsHidden   = (Flags & LGuiInputTextFlags.Password) == LGuiInputTextFlags.Password;
            Info.HiddenChar = '*';
            Info.CountX     = (uint)LGuiMisc.Floor((Rect.Width - 6) / Info.Font.FontWidth);
            Info.CountY     = (Flags & LGuiInputTextFlags.Multiline) == LGuiInputTextFlags.Multiline
                ? (uint)LGuiMisc.Floor((Rect.Height - 2) / Info.Font.FontHeight)
                : 1u;

            Info.OnlyShowText = false;
            if ((Flags & LGuiInputTextFlags.OnlyDisplay) == LGuiInputTextFlags.OnlyDisplay)
            {
                Info.Text         = Text;
                Info.OnlyShowText = true;

                LGuiTextRenderer.Render(Info, RenderPos);
                return(false);
            }

            if (CurrentState == null || CurrentState.ID != ID)
            {
                CurrentState = new LGuiTextFieldState(ID, Text, (Flags & LGuiInputTextFlags.Multiline) != LGuiInputTextFlags.Multiline);
                if ((Flags & LGuiInputTextFlags.AutoSelectAll) == LGuiInputTextFlags.AutoSelectAll)
                {
                    CurrentState.SelectAll();
                }
            }
            HandleKeyEvent(CurrentState, Flags, Callback);
            HandleMouseEvent(CurrentState, Info.Font, RenderPos);

            CurrentState.MaxLength = MaxLength;
            Info.CursorColor       = Info.TextColor;
            if ((Flags & LGuiInputTextFlags.InsertMode) == LGuiInputTextFlags.InsertMode)
            {
                CurrentState.InsertMode = true;
                Info.CursorWidth        = 1u;
                Info.CursorColor.A      = 0.5f;
            }
            else
            {
                Info.CursorWidth = 0u;
            }

            var Cursor = (uint)CurrentState.GetCursor();

            if (Cursor < CurrentState.OffsetX)
            {
                CurrentState.OffsetX = Cursor;
            }
            else if (Cursor > CurrentState.OffsetX + Info.CountX)
            {
                CurrentState.OffsetX = Cursor - Info.CountX;
            }

            Info.Text        = CurrentState.Text;
            Info.SelectStart = (uint)CurrentState.GetSelectStart();
            Info.SelectEnd   = (uint)CurrentState.GetSelectEnd();
            Info.SelectColor = LGuiColor.Blue;
            Info.Spacing     = CurrentState.Spacing;

            Info.Cursor  = Cursor;
            Info.OffsetX = CurrentState.OffsetX;
            Info.OffsetY = CurrentState.OffsetY;

            LGuiTextRenderer.Render(Info, RenderPos);

            if ((Flags & LGuiInputTextFlags.EnterReturnsTrue) == LGuiInputTextFlags.EnterReturnsTrue)
            {
                Text = CurrentState.Text;
                var ValueChanged = LGuiContext.IO.IsKeyPressed(LGuiKeys.Enter);
                if (ValueChanged)
                {
                    LGuiContext.FocusID = 0;
                }
                return(ValueChanged);
            }
            else
            {
                var NewText      = CurrentState.Text;
                var ValueChanged = NewText != Text;
                Text = NewText;
                return(ValueChanged);
            }
        }