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); }
internal static void EndWindow() { LGuiFrame.End(); LGuiGraphics.SetTargetCommandList(null); if (!CurrentWindowCanHandleMouseMsg(false)) { CurrentWindow_ = 0; return; } HandleMouseMsg(ref WindowList_[CurrentWindow_].Rect); CurrentWindow_ = 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); }
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); }
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); }
internal static void End() { LGuiFrame.End(); LGuiGraphics.RestoreCurrentLevel(); }