Esempio n. 1
0
        internal static bool Begin(string Title, LGuiRect Rect)
        {
            var ID = LGuiHash.CalculateID(Title);

            LGuiContext.SetPreviousControlID(ID);

            if (!LGuiMisc.CheckVisible(ref Rect))
            {
                return(false);
            }

            var IsOpen = LGuiContextCache.GetPopupOpen(Title);

            if (IsOpen)
            {
                if (LGuiContext.IO.IsMouseClick(LGuiMouseButtons.Left) && !LGuiMisc.Contains(ref Rect, ref LGuiContext.IO.MousePos))
                {
                    LGuiContextCache.SetPopupOpen(Title, false);
                    return(false);
                }

                LGuiGraphics.SetCurrentLevel(LGuiCommandLevel.Popup);
                LGuiGraphics.DrawRect(Rect, LGuiStyleColorIndex.Frame, true);
                LGuiFrame.Begin(Title, Rect, false);
            }

            return(IsOpen);
        }
Esempio n. 2
0
        internal static void EndWindow()
        {
            LGuiFrame.End();
            LGuiGraphics.SetTargetCommandList(null);

            if (!CurrentWindowCanHandleMouseMsg(false))
            {
                CurrentWindow_ = 0;
                return;
            }

            HandleMouseMsg(ref WindowList_[CurrentWindow_].Rect);

            CurrentWindow_ = 0;
        }
Esempio n. 3
0
        internal static bool Begin(LGuiVec2 Size)
        {
            if (!LGuiMisc.PreviousControlIsHovered())
            {
                return(false);
            }

            var Pos  = LGuiContext.IO.MousePos + new LGuiVec2(20, 5);
            var Rect = new LGuiRect(Pos, Size);

            LGuiGraphics.SetCurrentLevel(LGuiCommandLevel.Tips);
            LGuiGraphics.DrawRect(Rect, LGuiStyleColorIndex.Frame, true);
            LGuiFrame.Begin(LGuiSettings.DefaultToolTipsTitle, Rect, false);
            return(true);
        }
Esempio n. 4
0
        internal static bool OnProcess(string Title, LGuiRect Rect, ref LGuiColor Color)
        {
            LGuiFrame.Begin(Title, Rect);

            var ID = LGuiHash.CalculateID(Title);

            LGuiContext.SetPreviousControlID(ID);

            if (!LGuiMisc.CheckVisible(ref Rect))
            {
                return(false);
            }

            var Hsv          = LGuiContextCache.GetColorPickerHsv(Title);
            var FrameSpacing = LGuiStyle.GetFrameChildSpacing();
            var SpacingY     = LGuiStyle.GetValue(LGuiStyleValueIndex.ControlSpacingY);
            var SliderSize   = LGuiStyle.GetValue(LGuiStyleValueIndex.SliderSize);

            var ColorRect = new LGuiRect(Rect.Pos + FrameSpacing, new LGuiVec2(Rect.Width - FrameSpacing.X * 2.0f, Rect.Height - (SliderSize + SpacingY) * 4.0f - SpacingY * 3.0f - 20));

            RenderColorRect(ColorRect, Hsv.R);
            RenderColorCross(ColorRect, Hsv.G, Hsv.B);

            var IDColor = LGuiHash.CalculateID($"{Title}_ColorSelector");

            LGuiMisc.CheckAndSetContextID(ref ColorRect, IDColor);

            var HsvValueChanged = false;

            if (LGuiContext.ActiveID == IDColor)
            {
                var X = LGuiMisc.Lerp(0.0f, 1.0f, (LGuiContext.IO.MousePos.X - ColorRect.X) / ColorRect.Width);
                var Y = LGuiMisc.Lerp(0.0f, 1.0f, (ColorRect.Height - (LGuiContext.IO.MousePos.Y - ColorRect.Y)) / ColorRect.Height);

                if (X != Hsv.G || Y != Hsv.B)
                {
                    HsvValueChanged = true;
                    Hsv.G           = X;
                    Hsv.B           = Y;
                }
            }

            var HueRect = new LGuiRect(Rect.X + FrameSpacing.X, ColorRect.Bottom + FrameSpacing.Y, ColorRect.Width, 20);

            RenderHueRect(HueRect);
            RenderHueArrow(HueRect, Hsv.R);

            var IDHue = LGuiHash.CalculateID($"{Title}_HueSelector");

            LGuiMisc.CheckAndSetContextID(ref HueRect, IDHue);

            if (LGuiContext.ActiveID == IDHue)
            {
                var Hue = LGuiMisc.Lerp(0.0f, 1.0f, (LGuiContext.IO.MousePos.X - HueRect.X) / HueRect.Width);

                if (Hue != Hsv.R)
                {
                    HsvValueChanged = true;
                    Hsv.R           = Hue;
                }
            }

            HsvValueChanged |= HandleHsvSlider(Title, ref Hsv, new LGuiVec2(HueRect.X, HueRect.Bottom + SpacingY), HueRect.Width / 2.0f);

            if (HsvValueChanged)
            {
                Color = LGuiColor.Hsv2Rgb(Hsv);
                LGuiContextCache.SetColorPickerHsv(Title, Hsv);
            }

            var RgbValueChanged = false;

            if (HandleRgbSlider(Title, ref Color, new LGuiVec2(HueRect.X + HueRect.Width / 2.0f + 2.5f, HueRect.Bottom + SpacingY), HueRect.Width / 2.0f))
            {
                RgbValueChanged = true;
                LGuiContextCache.SetColorPickerHsv(Title, LGuiColor.Rgb2Hsv(Color));
            }

            var CurrentTitleWidth = LGuiContext.Font.FontWidth * 8.5f;

            LGuiGraphics.DrawText("Current:", new LGuiVec2(HueRect.X, HueRect.Bottom + SpacingY + (SliderSize + SpacingY) * 3.0f), LGuiStyleColorIndex.Text);
            LGuiGraphics.DrawRect(new LGuiRect(HueRect.X + CurrentTitleWidth, HueRect.Bottom + SpacingY + (SliderSize + SpacingY) * 3.0f, HueRect.Width / 2.0f - CurrentTitleWidth, SliderSize), Color, true, false);

            LGuiFrame.End();

            return(HsvValueChanged | RgbValueChanged);
        }
Esempio n. 5
0
        internal static bool BeginWindow(string Title, LGuiRect InitRect, LGuiWindowFlags Flags)
        {
            if (CurrentWindow_ != 0)
            {
                return(false);
            }

            var ID = LGuiHash.Calculate(Title);

            if (!WindowList_.ContainsKey(ID))
            {
                WindowList_.Add(ID, new LGuiWindowContext(Title, ID, WindowList_.Count, InitRect,
                                                          (Flags & LGuiWindowFlags.NoMove) != LGuiWindowFlags.NoMove,
                                                          (Flags & LGuiWindowFlags.NoFocus) != LGuiWindowFlags.NoFocus));

                FocusOrder++;
            }

            var Rect = WindowList_[ID].Rect;

            if (!LGuiMisc.CheckVisible(ref Rect))
            {
                return(false);
            }

            CurrentWindow_ = ID;
            if (FocusWindow_ == 0)
            {
                FocusWindow_ = CurrentWindow_;
                WindowList_[FocusWindow_].Order = FocusOrder;
            }

            LGuiGraphics.SetTargetCommandList(WindowList_[ID].DrawList);

            if ((Flags & LGuiWindowFlags.NoTitle) != LGuiWindowFlags.NoTitle)
            {
                var TitleRect  = new LGuiRect(Rect.Pos, new LGuiVec2(Rect.Width, LGuiContext.Font.FontHeight));
                var NoCollapse = ((Flags & LGuiWindowFlags.NoCollapse) == LGuiWindowFlags.NoCollapse);
                var Expand     = LGuiContextCache.GetWindowExpand(Title);

                var TitleTextOffset = NoCollapse ? 5.0f : 20.0f;

                if (Expand)
                {
                    LGuiGraphics.DrawRect(Rect, LGuiStyleColorIndex.Frame, true);
                }

                LGuiGraphics.DrawRect(TitleRect, LGuiStyleColorIndex.HeaderActive, true);
                LGuiGraphics.DrawText(Title, new LGuiVec2(TitleRect.X + TitleTextOffset, TitleRect.Y), LGuiStyleColorIndex.Text);

                if (!NoCollapse)
                {
                    if (Expand)
                    {
                        LGuiGraphics.DrawTriangle(
                            new LGuiVec2(TitleRect.X + 5, TitleRect.Top + 5),
                            new LGuiVec2(TitleRect.X + 15, TitleRect.Top + 5),
                            new LGuiVec2(TitleRect.X + 10, TitleRect.Bottom - 5),
                            LGuiStyle.GetColor(LGuiStyleColorIndex.Text), true);
                    }
                    else
                    {
                        LGuiGraphics.DrawTriangle(
                            new LGuiVec2(TitleRect.X + 5, TitleRect.Top + 5),
                            new LGuiVec2(TitleRect.X + 15, TitleRect.CenterY),
                            new LGuiVec2(TitleRect.X + 5, TitleRect.Bottom - 5),
                            LGuiStyle.GetColor(LGuiStyleColorIndex.Text), true);
                    }

                    var ArrowRect = new LGuiRect(TitleRect.X, TitleRect.Y, 20.0f, 20.0f);

                    LGuiMisc.CheckAndSetContextID(ref ArrowRect, ID);

                    if (LGuiMisc.CheckAndSetFocusID(ID))
                    {
                        Expand = !Expand;
                        LGuiContextCache.SetWindowExpand(Title, Expand);
                    }

                    if (!Expand)
                    {
                        HandleMouseMsg(ref TitleRect);
                        CurrentWindow_ = 0;
                        LGuiGraphics.SetTargetCommandList(null);
                        return(false);
                    }
                }

                LGuiGraphics.DrawRect(TitleRect, LGuiStyleColorIndex.Border, false);
                var ContextRect = new LGuiRect(Rect.X, TitleRect.Bottom, Rect.Width, Rect.Height - TitleRect.Height);
                LGuiFrame.Begin(Title, ContextRect, false);
            }
            else
            {
                LGuiGraphics.DrawRect(Rect, LGuiStyleColorIndex.Frame, true);
                LGuiFrame.Begin(Title, Rect, false);
            }


            return(true);
        }
Esempio n. 6
0
 internal static void End()
 {
     LGuiFrame.End();
     LGuiGraphics.RestoreCurrentLevel();
 }