bool InMask(InteractiveComponent component, Vector2 cursorPos, Canvas canvas) { if (component.Node.MaskCheck != 0 && !canvas.masks[component.Node.MaskCheck - 1].Node.GetTransform.GlobalRect.Contains(cursorPos.X, cursorPos.Y)) { return(false); } return(true); }
internal void CheckMouse() { if (!GLWindow.gLWindow.IsFocused) { return; } var ms = GLWindow.gLWindow.MouseState; //Console.WriteLine(ms.Position); //var point = GLWindow.gLWindow.PointToClient(new Vector2i((int)ms.Position.X, (int)ms.Position.Y)); //Vector2 cursorWindowPosition = new Vector2(point.X, point.Y); Vector2 cursorWindowPosition = ms.Position; //skip out of boundary if (cursorWindowPosition.X < 0 || cursorWindowPosition.Y < 0 || cursorWindowPosition.X > GLWindow.gLWindow.Size.X || cursorWindowPosition.Y > GLWindow.gLWindow.Size.Y) { return; } //converting y coordinate cursorWindowPosition.Y = GLWindow.gLWindow.Size.Y - cursorWindowPosition.Y; //detect drag for elements not supporting it if (!dragEnabled && clicked) { if (Math.Abs(cursorWindowPosition.X - clickStartPosition.X) > dragThresold.X || Math.Abs(cursorWindowPosition.Y - clickStartPosition.Y) > dragThresold.Y) { clickContext = null; dragEnabled = true; clicked = false; } } else if (dragEnabled && clicked) { //inform active component about mouse position clickContext?.PositionUpdate(cursorWindowPosition.X, cursorWindowPosition.Y); } //inform current element about mouseup if (clicked && !ms.IsButtonDown(MouseButton.Left)) { clickContext?.ClickUpState(); clickContext = null; dragEnabled = false; } else { foreach (var canvas in activeCanvases) { for (int i = canvas.activeButtons.Count - 1; i >= 0; i--) { var button = canvas.activeButtons[i]; if ((button.IsAllowDrag || !dragEnabled) && InMask(button, cursorWindowPosition, canvas) && button.Node.GetTransform.GlobalRect.Contains(cursorWindowPosition.X, cursorWindowPosition.Y)) { //fill context on click if (!clicked && ms.IsButtonDown(MouseButton.Left)) { dragEnabled = button.IsAllowDrag; button.ClickDownState(); clickContext = button; clickStartPosition = cursorWindowPosition; } else if (clickContext != button) { //Console.WriteLine(button); button.Hover(); } break; } else if (button != clickContext) { button.Normal(); } } } } clicked = ms.IsButtonDown(MouseButton.Left); }