Пример #1
0
 public MouseEvent(float dX, float dY, Point Position, EventType Type, bool[] ButtonState, MouseEvent lastEvent)
 {
     this.dX = dX;
     this.dY = dY;
     this.Position = Position;
     this.Type = Type;
     this.lastEvent = lastEvent;
     if(ButtonState.Length == 3)
         this.ButtonState = ButtonState;
 }
Пример #2
0
        private void HandleWindowDragEvent(MouseEvent evt, int relX, int relY)
        {
            if (dragCorner == Corner.TITLE)
            {
                // Drag movement
                Move((int)evt.dX, (int)evt.dY);
                WindowManager.Instance.Cursor = WindowManager.CursorType.MOVE;
            }
            else if (dragCorner == Corner.BOTRIGHT)
            {
                WindowManager.Instance.Cursor = WindowManager.CursorType.SCALE;
                // only make size bigger if mouse is near the borders
                float dx = ((evt.dX > 0) ? ((Size.Width - relX < dragPosition.X) ? evt.dX : 0) : evt.dX);
                float dy = ((evt.dY > 0) ? ((Size.Height - relY < dragPosition.Y) ? evt.dY : 0) : evt.dY);
                System.Console.WriteLine(evt.dX + ":" + evt.dY);
                ResizeDelta(new Size((int)dx, (int)dy));
            }
            else if (dragCorner == Corner.RIGHT)
            {
                WindowManager.Instance.Cursor = WindowManager.CursorType.VERT;
                // only make size bigger if mouse is near the borders
                float dx = ((evt.dX > 0) ? ((Size.Width - relX < dragPosition.X) ? evt.dX : 0) : evt.dX);
                ResizeDelta(new Size((int)dx, 0));
            }
            else if (dragCorner == Corner.BOT)
            {
                WindowManager.Instance.Cursor = WindowManager.CursorType.HORIZ;
                // only make size bigger if mouse is near the borders
                float dy = ((evt.dY > 0) ? ((Size.Height - relY < dragPosition.Y) ? evt.dY : 0) : evt.dY);

                ResizeDelta(new Size(0, (int)dy));
            }
            else if (dragCorner == Corner.LEFT)
            {
                WindowManager.Instance.Cursor = WindowManager.CursorType.VERT;
                // only make size bigger if mouse is near the borders
                float dx = ((evt.dX < 0) ? ((relX < -(dragPosition.X - dragOriginalSize.Width)) ? evt.dX : 0) : evt.dX);
                Size tempSize = Size;
                if (ResizeDelta(new Size((int)-dx, 0)))
                    Move(tempSize.Width - Size.Width, 0);
            }
            else if (dragCorner == Corner.TOP)
            {
                WindowManager.Instance.Cursor = WindowManager.CursorType.HORIZ;
                // only make size bigger if mouse is near the borders
                float dy = ((evt.dY < 0) ? ((relY < -(dragPosition.Y - dragOriginalSize.Height)) ? evt.dY : 0) : evt.dY);
                Size tempSize = Size;
                if (ResizeDelta(new Size(0, (int)-dy)))
                    Move(0, tempSize.Height - Size.Height);
            }
        }
Пример #3
0
        // Handle mouse buttonrelease event
        public override void MouseUpEvent(MouseEvent evt)
        {
            // Special case for mouselock
            if (MouseLock)
            {
                MouseLockControl.MouseUp(evt);
            }
            else
            {
                // Finalize dragging
                if (dragging && !evt.ButtonState[0])
                {
                    // Stop dragging
                    dragging = false;
                    WindowManager.Instance.ReleaseMouseLock();
                }

                // Send MouseUp event to controls if no border were hit
                Corner corner = CheckIsMouseHitBorders(evt.Position, false);
                if (corner == Corner.MIDDLE || Borderless)
                    panel.MouseUp(evt);
            }
        }
Пример #4
0
        // Handle mouse movement event
        public override void MouseMoveEvent(MouseEvent evt)
        {
            // Special case for mouselock
            if (MouseLock)
            {
                MouseLockControl.MouseMove(evt);
            }
            else
            {
                // Set cursor if not dragging, and not borderless
                bool setCursor = (dragging || Borderless ? false : true);
                Corner corner = CheckIsMouseHitBorders(evt.Position, setCursor);

                int relX = evt.Position.X - Position.X;
                int relY = evt.Position.Y - Position.Y;
                // Handle dragging
                if (dragging && dragCorner != Corner.MIDDLE && !Borderless)
                {
                    HandleWindowDragEvent(evt, relX, relY);
                }
                // Else send event to panel
                else if (corner == Corner.MIDDLE || Borderless)
                {
                    // Send events to panel
                    panel.MouseMove(evt);
                }

                // Update list over controls with mouseenter
                List<Control> toremove = new List<Control>();
                foreach (Control control in ControlsWithMouseEnter)
                {
                    // Is mouse not within control anymore?
                    if (!control.Bound.Contains(evt.Position.X, evt.Position.Y))
                        toremove.Add(control);
                }
                // Send mouseexit events to controls that lost mouseenter-state
                foreach (Control control in toremove)
                {
                    control.MouseExit(evt);
                    ControlsWithMouseEnter.Remove(control);
                }
            }
        }
Пример #5
0
 // Window lost mouse coverage and mush flush its cache of controls with mouseenter
 public override void MouseExitEvent(MouseEvent evt)
 {
     if (!MouseLock)
     {
         foreach (Control control in ControlsWithMouseEnter)
         {
             control.MouseExit(evt);
         }
         ControlsWithMouseEnter.Clear();
         WindowManager.Instance.Cursor = WindowManager.CursorType.NORMAL;
     }
     else
     {
         MouseLockControl.MouseExit(evt);
     }
 }
Пример #6
0
 // Handle mouse downbutton event
 public override void MouseDownEvent(MouseEvent evt)
 {
     // Special case if a control has mouselock
     if (MouseLock)
     {
         MouseLockControl.MouseDown(evt);
     }
     else
     {
         // Check if a border were hit
         int relX = evt.Position.X - Position.X;
         int relY = evt.Position.Y - Position.Y;
         Corner corner = CheckIsMouseHitBorders(evt.Position, false);
         // Check if border is hit
         if (corner != Corner.MIDDLE && !Borderless)
         {
             // Recieved buttonpress on a border
             if (!dragging && evt.ButtonState[0] && (evt.Type & MouseEvent.EventType.BUTTON0CHANGED) > 0)
             {
                 // Initialize dragging
                 dragCorner = corner;
                 dragging = true;
                 WindowManager.Instance.GetMouseLock(this);
                 dragPosition = new Dimension(Size.Width - relX, Size.Height - relY);
                 dragOriginalSize = Size;
             }
         }
         else
         {
             // Send mouse event to panel
             panel.MouseDown(evt);
         }
     }
 }
Пример #7
0
 public virtual void MouseUpEvent(MouseEvent evt)
 {
 }
Пример #8
0
 public override void MouseExitEvent(MouseEvent evt)
 {
     state = ButtonState.NORMAL;
 }
Пример #9
0
 public void ContainerMouseMoveEvent(MouseEvent evt)
 {
     foreach (Control control in Controls)
     {
         if (control.Bound.Contains(evt.Position.X, evt.Position.Y))
         {
             if (!Window.ControlsWithMouseEnter.Contains(control))
             {
                 Window.ControlsWithMouseEnter.Add(control);
                 control.MouseEnter(evt);
             }
             control.MouseMove(evt);
         }
     }
 }
Пример #10
0
        // Incomming mouse event from Input layer
        public void HandleMouseEvent(MouseEvent evt)
        {
            // Ignore if UI not in focus
            if (!ShowManager)
                return;

            // Special case for windows that has privileged focus over mouse
            if (MouseLock && MouseLockWindow != null)
            {
                // Check button statechange and send events
                if ((evt.Type & MouseEvent.EventType.MOUSEDOWN) > 0)
                {
                    MouseLockWindow.MouseDown(evt);
                    // Send window to front, if necessary
                    if (MouseLockWindow.Zvalue < nextZvalue - 1)
                        MouseLockWindow.Zvalue = nextZvalue++;
                }
                if ((evt.Type & MouseEvent.EventType.MOUSEUP) > 0)
                    MouseLockWindow.MouseUp(evt);
                if ((evt.Type & MouseEvent.EventType.MOVE) > 0 && MouseLockWindow != null)
                    MouseLockWindow.MouseMove(evt);
            }
            // Iterate windows and try to find one that has been hit
            else
            {
                // sort windows - most recent focussed first
                Windows.Sort(new WindowComparer());

                // Iterate over windows untill a window is hit
                bool windowHit = false;
                foreach (Window window in Windows)
                {
                    if (!window.Visible)
                        continue;
                    // Check against bounds
                    if (window.Bound.Contains(evt.Position))
                    {
                        windowHit = true;
                        //window.Update();

                        // Entering new window?
                        if (LastWindowMouseEnter != window)
                        {
                            // Notify old window
                            if (LastWindowMouseEnter != null)
                                LastWindowMouseEnter.MouseExit(evt);
                            LastWindowMouseEnter = window;
                            // Notify new window
                            window.MouseEnter(evt);
                        }

                        // Check button statechange and send events
                        if ((evt.Type & MouseEvent.EventType.MOUSEDOWN) > 0)
                        {
                            window.MouseDown(evt);
                            // Send window to front, if necessary
                            if (window.Zvalue < nextZvalue - 1)
                                window.Zvalue = nextZvalue++;
                        }
                        if ((evt.Type & MouseEvent.EventType.MOUSEUP) > 0)
                            window.MouseUp(evt);
                        if ((evt.Type & MouseEvent.EventType.MOVE) > 0)
                            window.MouseMove(evt);

                        break;
                    }
                }

                // No window hit - show default cursor
                if (!windowHit)
                    Cursor = 0;
            }
        }
Пример #11
0
        private void UpdateMouseSlimDX()
        {
            // Do Non-WPF input handling
            // Switch to next MouseArgs
            // Check delta
            mousedx = 0; mousedy = 0;
            int deltaX = 0, deltaY = 0;
            // RawInput only for delta x/y
            if (MouseState == client.MouseState.GAME && MouseRawInput)
            {
                if (NextRawMouse != null)
                {
                    // Use raw input
                    for (int i = 0; i < NextRawMouseList.Count; i++)
                    {
                        MouseInputEventArgs e = NextRawMouseList[i].Key;
                        long ticks = NextRawMouseList[i].Value;
                        deltaX += e.X;
                        deltaY += e.Y;

                        if ((e.ButtonFlags & MouseButtonFlags.LeftDown) == MouseButtonFlags.LeftDown)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE1, true, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.LeftUp) == MouseButtonFlags.LeftUp)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE1, false, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.RightDown) == MouseButtonFlags.RightDown)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE2, true, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.RightUp) == MouseButtonFlags.RightUp)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE2, false, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.MiddleDown) == MouseButtonFlags.MiddleDown)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE3, true, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.MiddleUp) == MouseButtonFlags.MiddleUp)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE3, false, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.Button4Down) == MouseButtonFlags.Button4Down)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE4, true, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.Button4Up) == MouseButtonFlags.Button4Up)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE4, false, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.Button5Down) == MouseButtonFlags.Button5Down)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE5, true, ticks);
                        if ((e.ButtonFlags & MouseButtonFlags.Button5Up) == MouseButtonFlags.Button5Up)
                            KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MOUSE5, false, ticks);

                        if ((e.ButtonFlags & MouseButtonFlags.MouseWheel) == MouseButtonFlags.MouseWheel)
                        {
                            if (NextRawMouse.WheelDelta != 0)
                            {
                                if (NextRawMouse.WheelDelta == -120)
                                {
                                    // Scroll down
                                        KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MWHEELDOWN, true, 0);
                                        KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MWHEELDOWN, false, 0);
                                }
                                else if (NextRawMouse.WheelDelta == 120)
                                {
                                    // Scroll up
                                    KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MWHEELUP, true, ticks);
                                    KeyHags.Instance.ParseBinding((int)KeyHags.CubeKeys.K_MWHEELUP, false, ticks + 10);
                                }
                                else
                                {
                                    Common.Instance.WriteLine("MouseWheel: Fix me! Value: " + NextRawMouse.WheelDelta);
                                }
                                Common.Instance.WriteLine(""+NextRawMouse.WheelDelta);
                                //if (Common.Instance.PlanetGame != null)
                                //    Common.Instance.PlanetGame.HandleScroll(NextRawMouse.WheelDelta);
                            }
                        }

                    }
                    NextRawMouseList.Clear();
                    CurrentRawMouse = NextRawMouse;
                    NextRawMouse = null;
                }
            }
            else if (MouseState == client.MouseState.CONSOLE)
            {
                NextRawMouseList.Clear();
            }
            if (compatNextMouseArgs.Count > 0)
            {
                if (MouseState == client.MouseState.CONSOLE)
                {
                    compatNextMouseArgs.Clear();
                    return;
                }
                compatLastMouseArgs = compatCurrentMouseArgs;
                compatCurrentMouseArgs = compatNextMouseArgs;
                compatLastMouseArgs.Clear();
                compatNextMouseArgs = compatLastMouseArgs;

                // Avoid cyclic dependencies
                if (LastMouseEvent != null && CurrentMouseEvent != null)
                {
                    CurrentMouseEvent.lastEvent = null;
                    LastMouseEvent = CurrentMouseEvent;
                }

                // Get latest event
                System.Windows.Forms.MouseEventArgs evnt = null;
                if (compatCurrentMouseArgs.Count > 1)
                {
                    evnt = compatCurrentMouseArgs[compatCurrentMouseArgs.Count - 1];
                }
                else
                    evnt = compatCurrentMouseArgs[0];

                // Screen-space Position
                Point pos = evnt.Location;

                // Forms Input
                if ((MouseState != client.MouseState.GAME || !MouseRawInput) && (evnt.X != mouseX || evnt.Y != mouseY))
                {
                    deltaX = (int)mouseX - evnt.X;
                    deltaY = (int)mouseY - evnt.Y;
                }

                // Mouse centering will create an event with the delta movement, that we have to substract here
                if (MouseCentered && (MouseState != client.MouseState.GAME || MouseRawInput))
                {
                    deltaX -= MouseDeltaAfterCenter.X;
                    deltaY -= MouseDeltaAfterCenter.Y;
                }

                // Button states
                bool[] buttonState = new bool[3];
                buttonState[0] = (evnt.Button & System.Windows.Forms.MouseButtons.Left) == System.Windows.Forms.MouseButtons.Left ? true : false;
                buttonState[1] = (evnt.Button & System.Windows.Forms.MouseButtons.Middle) == System.Windows.Forms.MouseButtons.Middle ? true : false;
                buttonState[2] = (evnt.Button & System.Windows.Forms.MouseButtons.Right) == System.Windows.Forms.MouseButtons.Right ? true : false;

                MouseEvent.EventType type = MouseEvent.EventType.NONE;
                if (deltaX != 0 || deltaY != 0)
                    type |= MouseEvent.EventType.MOVE;

                // Compare buttons state changes
                if (buttonState[0] != mousebuttons[0]) type |= MouseEvent.EventType.BUTTON0CHANGED;
                if (buttonState[1] != mousebuttons[1]) type |= MouseEvent.EventType.BUTTON1CHANGED;
                if (buttonState[2] != mousebuttons[2]) type |= MouseEvent.EventType.BUTTON2CHANGED;

                for (int i = 0; i < 3; i++)
                {
                    // Have one button + movement? Drag.
                    if (buttonState[i] == true && (type & MouseEvent.EventType.MOVE) == MouseEvent.EventType.MOVE)
                        type |= MouseEvent.EventType.DRAG;
                    // Look for new buttons pressed
                    if (buttonState[i] == true && mousebuttons[i] == false)
                        type |= MouseEvent.EventType.MOUSEDOWN;
                    // Look for buttons now released
                    else if (buttonState[i] == false && mousebuttons[i] == true)
                        type |= MouseEvent.EventType.MOUSEUP;
                }

                if (HiddenMouseSwitched)
                    HiddenMouseSwitched = false;

                // Create mouse event
                CurrentMouseEvent = new MouseEvent(-deltaX, -deltaY, pos, type, buttonState, LastMouseEvent);
                mousebuttons = buttonState;
                mouseX = pos.X;
                mouseY = pos.Y;

                // If i GUI, send to WindowManager
                if (MouseState == client.MouseState.GUI && (type > 0))
                {
                    WindowManager.Instance.HandleMouseEvent(CurrentMouseEvent);
                    mousedy = mousedx = 0;
                }
                else
                {
                    mousedx = deltaX;
                    mousedy = deltaY;
                }
            }
            else if (CurrentMouseEvent != null)
            {
                CurrentMouseEvent.lastEvent = null;
                LastMouseEvent = CurrentMouseEvent;
                CurrentMouseEvent = new MouseEvent(0, 0, CurrentMouseEvent.Position, MouseEvent.EventType.NONE, CurrentMouseEvent.ButtonState, CurrentMouseEvent);
            }
        }
Пример #12
0
 public virtual void MouseExitEvent(MouseEvent evt)
 {
 }
Пример #13
0
 public virtual void MouseEnterEvent(MouseEvent evt)
 {
 }
Пример #14
0
 // Default event methods.. useful for override
 public virtual void MouseDownEvent(MouseEvent evt)
 {
 }
Пример #15
0
 public override void MouseDownEvent(MouseEvent evt)
 {
     state = ButtonState.DOWN;
 }
Пример #16
0
 public void ContainerMouseUpEvent(MouseEvent evt)
 {
     foreach (Control control in Controls)
     {
         if (control.Bound.Contains(evt.Position.X, evt.Position.Y))
         control.MouseUp(evt);
     }
 }
Пример #17
0
 public override void MouseEnterEvent(MouseEvent evt)
 {
     state = ButtonState.HOVER;
 }
Пример #18
0
 // Metods to propagate events to all contained controls
 public void ContainerMouseDownEvent(MouseEvent evt)
 {
     foreach (Control control in Controls)
     {
         if (control.Bound.Contains(evt.Position.X, evt.Position.Y))
         {
             control.MouseDown(evt);
             // Only give focus to a panel if another control doesn't already have it
             if (!(control is Panel) || Window.FocusControl == null)
                 Window.FocusControl = control;
         }
     }
 }
Пример #19
0
 public override void MouseUpEvent(MouseEvent evt)
 {
     // Go back to hightlight if mouse is still covering button
     if (Bound.Contains(evt.Position.X, evt.Position.Y))
     {
         state = ButtonState.HOVER;
         Selected();
     }
     else
         state = ButtonState.NORMAL;
 }
Пример #20
0
 public virtual void MouseMoveEvent(MouseEvent evt)
 {
 }