示例#1
0
 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);
 }
示例#2
0
        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);
        }