Exemple #1
0
 public MouseActionArgs(Point location, MouseButtons mouseButton, MouseButtonStates mouseButtonState, short wheelDelta = 0)
 {
     Location         = location;
     MouseButton      = mouseButton;
     MouseButtonState = mouseButtonState;
     WheelDelta       = wheelDelta;
 }
        static public void Reset()
        {
            _IsLeftBtnClicked  = false;
            _IsRightBtnClicked = false;

            _LeftBtn  = MouseButtonStates.NONE;
            _RightBtn = MouseButtonStates.NONE;
        }
Exemple #3
0
        public override void Dragging(GameTime gameTime, MouseButtonStates state)
        {
            if (state == MouseButtonStates.DragEnded) {
                return;
            }

            if (state == MouseButtonStates.DragStarted) {
                ScrollOffsetPreDrag = ScrollOffset;
            }

            ScrollOffset = ScrollOffsetPreDrag + MouseState.LeftButton.DragState.Movement.X * 3f;
        }
 internal void OnMouseEnter(MouseEventArgs args)
 {
     HoverState = HoverStates.Hovering;
     foreach (var button in MouseButtonStates.Where(x => x.Value == ButtonState.Pressed).ToList())
     {
         if (!args.Buttons.Contains(button.Key))
         {
             MouseButtonStates[button.Key] = ButtonState.Released;
         }
     }
     MouseEnter?.Invoke(this, args);
     ChangeVisualState();
 }
Exemple #5
0
        public override void Dragging(GameTime gameTime, MouseButtonStates state)
        {
            if (Parent == null || state == MouseButtonStates.DragEnded) {
                return;
            }

            if (state == MouseButtonStates.DragStarted) {
                ParentPreDrag = Parent.Position;
            }

            Parent.Position.X = ParentPreDrag.X + MouseState.LeftButton.DragState.Movement.X;
            Parent.Position.Y = ParentPreDrag.Y + MouseState.LeftButton.DragState.Movement.Y;
        }
        /// <summary>
        /// Обновление данных
        /// </summary>
        static public void Update()
        {
            var State = Mouse.GetState();

            _X = State.X;
            _Y = State.Y;
            _IsRightBtnClicked = false;
            _IsLeftBtnClicked  = false;

            if (State.RightButton == ButtonState.Pressed)
            {
                _RightBtn = MouseButtonStates.PRESSED;
                TimeRightBtnClick.Start();
            }
            else
            if (State.RightButton == ButtonState.Released && _RightBtn == MouseButtonStates.PRESSED)
            {
                _RightBtn = MouseButtonStates.RELEASED;
                TimeRightBtnClick.Stop();
                if (TimeRightBtnClick.ElapsedMilliseconds <= 200)
                {
                    _IsRightBtnClicked = true;
                }
                TimeRightBtnClick.Reset();
            }
            else
            {
                _RightBtn = MouseButtonStates.NONE;
            }

            if (State.LeftButton == ButtonState.Pressed)
            {
                _LeftBtn = MouseButtonStates.PRESSED;
                TimeLeftBtnClick.Start();
            }
            else
            if (State.LeftButton == ButtonState.Released && _LeftBtn == MouseButtonStates.PRESSED)
            {
                _LeftBtn = MouseButtonStates.RELEASED;
                TimeLeftBtnClick.Stop();
                if (TimeLeftBtnClick.ElapsedMilliseconds <= 200)
                {
                    _IsLeftBtnClicked = true;
                }
                TimeLeftBtnClick.Reset();
            }
            else
            {
                _LeftBtn = MouseButtonStates.NONE;
            }
        }
Exemple #7
0
        public void MouseEvents_MouseEventRaisedWithCorrectValues()
        {
            const ControlKeyStates controlKeys = ControlKeyStates.LEFT_ALT_PRESSED | ControlKeyStates.CAPSLOCK_ON;
            const int scroll = 123;
            const MouseButtonStates buttons = MouseButtonStates.LeftButtonPressed;
            Point position             = (3, 7).Pt();
            const MouseEventFlags kind = MouseEventFlags.Wheeled;

            var api = new StubbedNativeCalls();

            using var controller = new StubbedConsoleController();
            var graphicsProvider = new StubbedGraphicsProvider();

            var args = new ConsoleMouseEventArgs(new MOUSE_EVENT_RECORD
            {
                ButtonState   = buttons,
                ControlKeys   = controlKeys,
                EventFlags    = kind,
                MousePosition = new COORD(position),
                Scroll        = scroll
            });

            using var sut = new ConControls.Controls.ConsoleWindow(api, controller, graphicsProvider);
            bool raised = false;

            sut.MouseEvent += OnMouse;
            controller.MouseEventEvent(controller, args);
            raised.Should().BeTrue();
            raised          = false;
            sut.MouseEvent -= OnMouse;
            controller.MouseEventEvent(controller, args);
            raised.Should().BeFalse();

            void OnMouse(object sender, MouseEventArgs e)
            {
                sender.Should().Be(sut);
                e.ControlKeys.Should().Be(controlKeys);
                e.Scroll.Should().Be(scroll);
                e.ButtonState.Should().Be(buttons);
                e.Position.Should().Be(position);
                e.Kind.Should().Be(kind);
                raised = true;
            }
        }
Exemple #8
0
 internal MouseButtonState(MouseButtonStates state, MouseDragState dragState)
 {
     this.dragState = dragState;
     this.state     = state;
 }
Exemple #9
0
 internal MouseButtonState(MouseButtonStates state)
 {
     this = new MouseButtonState(state, new MouseDragState());
 }
Exemple #10
0
        private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode < 0 || Enable == false)
            {
                return(API.CallNextHookEx(_hookID, nCode, wParam, lParam));
            }

            API.MSLLHOOKSTRUCT hookStruct = (API.MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(API.MSLLHOOKSTRUCT));

            Point             location         = new Point(hookStruct.pt.X, hookStruct.pt.Y);
            MouseButtons      mouseButton      = MouseButtons.None;
            MouseButtonStates mouseButtonState = MouseButtonStates.Move;
            short             wheelDelta       = 0;

            switch ((API.MouseMessages)wParam)
            {
            case API.MouseMessages.WM_NCMOUSEMOVE:
            case API.MouseMessages.WM_MOUSEMOVE:
            {
                mouseButton      = MouseButtons.None;
                mouseButtonState = MouseButtonStates.Move;
            }
            break;

            case API.MouseMessages.WM_NCLBUTTONDOWN:
            case API.MouseMessages.WM_LBUTTONDOWN:
            {
                mouseButton      = MouseButtons.Left;
                mouseButtonState = MouseButtonStates.Down;
            }
            break;

            case API.MouseMessages.WM_NCLBUTTONUP:
            case API.MouseMessages.WM_LBUTTONUP:
            {
                mouseButton      = MouseButtons.Left;
                mouseButtonState = MouseButtonStates.Up;
            }
            break;

            case API.MouseMessages.WM_NCLBUTTONDBLCLK:
            case API.MouseMessages.WM_LBUTTONDBLCLK:
            {
                mouseButton      = MouseButtons.Left;
                mouseButtonState = MouseButtonStates.DoubleClick;
            }
            break;

            case API.MouseMessages.WM_NCRBUTTONDOWN:
            case API.MouseMessages.WM_RBUTTONDOWN:
            {
                mouseButton      = MouseButtons.Right;
                mouseButtonState = MouseButtonStates.Down;
            }
            break;

            case API.MouseMessages.WM_NCRBUTTONUP:
            case API.MouseMessages.WM_RBUTTONUP:
            {
                mouseButton      = MouseButtons.Right;
                mouseButtonState = MouseButtonStates.Up;
            }
            break;

            case API.MouseMessages.WM_NCRBUTTONDBLCLK:
            case API.MouseMessages.WM_RBUTTONDBLCLK:
            {
                mouseButton      = MouseButtons.Right;
                mouseButtonState = MouseButtonStates.DoubleClick;
            }
            break;

            case API.MouseMessages.WM_NCMBUTTONDOWN:
            case API.MouseMessages.WM_MBUTTONDOWN:
            {
                mouseButton      = MouseButtons.Middle;
                mouseButtonState = MouseButtonStates.Down;
            }
            break;

            case API.MouseMessages.WM_NCMBUTTONUP:
            case API.MouseMessages.WM_MBUTTONUP:
            {
                mouseButton      = MouseButtons.Middle;
                mouseButtonState = MouseButtonStates.Up;
            }
            break;

            case API.MouseMessages.WM_NCMBUTTONDBLCLK:
            case API.MouseMessages.WM_MBUTTONDBLCLK:
            {
                mouseButton      = MouseButtons.Middle;
                mouseButtonState = MouseButtonStates.DoubleClick;
            }
            break;

            case API.MouseMessages.WM_NCXBUTTONDOWN:
            case API.MouseMessages.WM_XBUTTONDOWN:
            {
                switch ((ushort)(hookStruct.mouseData >> 16))
                {
                case 0x0001:
                    mouseButton = MouseButtons.XButton1;
                    break;

                case 0x0002:
                    mouseButton = MouseButtons.XButton2;
                    break;
                }
                mouseButtonState = MouseButtonStates.Down;
            }
            break;

            case API.MouseMessages.WM_NCXBUTTONUP:
            case API.MouseMessages.WM_XBUTTONUP:
            {
                switch ((ushort)(hookStruct.mouseData >> 16))
                {
                case 0x0001:
                    mouseButton = MouseButtons.XButton1;
                    break;

                case 0x0002:
                    mouseButton = MouseButtons.XButton2;
                    break;
                }
                mouseButtonState = MouseButtonStates.Up;
            }
            break;

            case API.MouseMessages.WM_NCXBUTTONDBLCLK:
            case API.MouseMessages.WM_XBUTTONDBLCLK:
            {
                switch ((ushort)(hookStruct.mouseData >> 16))
                {
                case 0x0001:
                    mouseButton = MouseButtons.XButton1;
                    break;

                case 0x0002:
                    mouseButton = MouseButtons.XButton2;
                    break;
                }
                mouseButtonState = MouseButtonStates.DoubleClick;
            }
            break;

            case API.MouseMessages.WM_MOUSEWHEEL:
            {
                mouseButton      = MouseButtons.None;
                mouseButtonState = MouseButtonStates.Wheel;
                wheelDelta       = (short)(hookStruct.mouseData >> 16);
            }
            break;
            }

            if (MouseAction(new MouseActionArgs(location, mouseButton, mouseButtonState, wheelDelta)))
            {
                return((IntPtr)1);
            }

            return(API.CallNextHookEx(_hookID, nCode, wParam, lParam));
        }
Exemple #11
0
 public override void Dragging(GameTime gameTime, MouseButtonStates state)
 {
     if (Parent != null) {
         Parent.Dragging(gameTime, state);
     } else {
         base.Dragging(gameTime, state);
     }
 }