Esempio n. 1
0
        public static void ProcessMouseEvent(SDL_Event ev)
        {
            switch (ev.type)
            {
            case SDL_EventType.SDL_MOUSEBUTTONDOWN:
                SetMouseButtonState(ev.button.button, true);
                if (OnMouseDown != null)
                {
                    var button = TranslatePlatformMouseButton(ev.button.button);
                    OnMouseDown.Invoke(button);
                }
                break;

            case SDL_EventType.SDL_MOUSEBUTTONUP:
                SetMouseButtonState(ev.button.button, false);
                if (OnMouseUp != null)
                {
                    var button = TranslatePlatformMouseButton(ev.button.button);
                    OnMouseUp.Invoke(button);
                }
                break;

            case SDL_EventType.SDL_MOUSEMOTION:
                OnMouseMove?.Invoke();
                break;
            }
        }
Esempio n. 2
0
 static public void InvokeOnMouseDown(OpenTK.Input.MouseButtonEventArgs e)
 {
     if (OnMouseDown != null)
     {
         OnMouseDown.Invoke(null, e);
     }
 }
Esempio n. 3
0
 // use this when you want to run the delegate corresponding to this button
 public void Clicked()
 {
     if (MouseEvent != null)
     {
         MouseEvent.Invoke();
     }
 }
Esempio n. 4
0
        public static void GUIEvents()
        {
            var current = Event.current;

            switch (current.type)
            {
            case EventType.MouseDown:
                if (mouseDownEvent != null)
                {
                    mouseDownEvent.Invoke();
                }
                break;

            case EventType.MouseDrag:
                if (mouseDragEvent != null)
                {
                    mouseDragEvent.Invoke();
                }
                break;

            case EventType.MouseUp:
                if (mouseUpEvent != null)
                {
                    mouseUpEvent.Invoke();
                }
                break;
            }
        }
Esempio n. 5
0
        private static void InputEventHandler(InputEventArgs e)
        {
            switch (e.Type)
            {
            case InputEventType.KeyUp: OnKeyUp.Invoke(e); break;

            case InputEventType.KeyDown: OnKeyDown.Invoke(e); break;

            case InputEventType.MouseUp: OnMouseUp.Invoke(e); break;

            case InputEventType.MouseDown: OnMouseDown.Invoke(e); break;

            case InputEventType.MouseMove: OnMouseMove.Invoke(e); break;
            }
        }
Esempio n. 6
0
 void Start()
 {
     foreach (var item in spawnInstances)
     {
         item.onMouseDown.AddListener((GameObject instance) =>
         {
             onMouseDown.Invoke(instance);
         });
         item.onSpawn.AddListener((GameObject instance) =>
         {
             instances.Add(instance);
             onSpawn.Invoke(instance);
         });
         item.onDestroy.AddListener((GameObject instance) =>
         {
             instances.Remove(instance);
             onDestroy.Invoke(instance);
         });
     }
 }
Esempio n. 7
0
        /// <summary>
        /// Update cursor and keyboard events
        /// </summary>
        private void UpdateCursorAndKeyboardEvents()
        {
            if (!Visible)
            {
                return;
            }

            MouseEvent    mouseState = MouseHandler.GetState();
            KeyboardState kbState    = KeyboardHandler.GetState();
            var           mouseSize  = new Vector2(5);

            var mouseRect = new Rectangle((int)mouseState.X, (int)mouseState.Y, (int)mouseSize.X, (int)mouseSize.Y);

            var thisRect = new Rectangle((int)Position.X, (int)Position.Y, (int)Size.X, (int)Size.Y);

            //First check position
            if (mouseRect.Intersects(thisRect))
            {
                //Second, check buttons

                //Left
                if (LastMouseCheck.LeftButton == ButtonState.Released && mouseState.LeftButton == ButtonState.Pressed)
                {
                    OnMouseDown?.Invoke(this, mouseState.Position, MouseButtons.Left);
                }

                if (LastMouseCheck.LeftButton == ButtonState.Pressed && mouseState.LeftButton == ButtonState.Released)
                {
                    OnMouseUp?.Invoke(this, mouseState.Position, MouseButtons.Left);
                    OnMouseClick?.Invoke(this, mouseState.Position, MouseButtons.Left);
                }

                //Right
                if (LastMouseCheck.RightButton == ButtonState.Released && mouseState.RightButton == ButtonState.Pressed)
                {
                    OnMouseDown?.Invoke(this, mouseState.Position, MouseButtons.Right);
                }

                if (LastMouseCheck.RightButton == ButtonState.Pressed && mouseState.RightButton == ButtonState.Released)
                {
                    OnMouseUp?.Invoke(this, mouseState.Position, MouseButtons.Right);
                    OnMouseClick?.Invoke(this, mouseState.Position, MouseButtons.Right);
                }

                //Middle
                if (LastMouseCheck.MiddleButton == ButtonState.Released && mouseState.MiddleButton == ButtonState.Pressed)
                {
                    OnMouseDown?.Invoke(this, mouseState.Position, MouseButtons.Middle);
                }

                if (LastMouseCheck.MiddleButton == ButtonState.Pressed && mouseState.MiddleButton == ButtonState.Released)
                {
                    OnMouseUp?.Invoke(this, mouseState.Position, MouseButtons.Middle);
                    OnMouseClick?.Invoke(this, mouseState.Position, MouseButtons.Middle);
                }

                //Check move

                if (LastMouseCheck.Position != mouseState.Position)
                {
                    OnMouseMove?.Invoke(this, mouseState.Position, MouseButtons.None);
                }

                //Hook Keyboard

                if (kbState.GetPressedKeys().Count() > 0 && LastKeyboardState.GetPressedKeys().Count() > 0)
                {
                    //check pressed keys
                    List <Keys> pressedKeys = kbState.GetPressedKeys().Except(LastKeyboardState.GetPressedKeys()).ToList();

                    foreach (Keys p in pressedKeys)
                    {
                        OnKeyPress?.Invoke(this, p, kbState);
                    }

                    //check released keys
                    List <Keys> releasedKeys = LastKeyboardState.GetPressedKeys().Except(kbState.GetPressedKeys()).ToList();

                    foreach (Keys r in releasedKeys)
                    {
                        OnKeyUp?.Invoke(this, r, kbState);
                        OnKeyPress?.Invoke(this, r, kbState);
                    }
                }
            }
            else
            {
                // Leave == Release

                //Left
            }

            LastMouseCheck    = mouseState;
            LastKeyboardState = kbState;
        }
Esempio n. 8
0
 /// <summary>
 /// Plain mouse down, does not affect mouse recordings.
 /// </summary>
 public void MouseDown(MouseEventArgs args)
 {
     OnMouseDown?.Invoke(this, args);
 }
        /// <summary>
        ///   Mouse hook procedure
        /// </summary>
        /// <param name="code">Always 0 (HC_ACTION)</param>
        /// <param name="wParam">The identifier of the mouse message.</param>
        /// <param name="lParam">A pointer to an MSLLHOOKSTRUCT structure.</param>
        /// <returns>Depending on <paramref name="code" /> and other conditions, it may yield different values.</returns>
        private int LowLevelMouseProc(int code, IntPtr wParam, IntPtr lParam)
        {
            if (code == HC_ACTION)
            {
                // this is a mouse event
                var eventInfo = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(MSLLHOOKSTRUCT));
                ExtendedEventArgs <MouseEventArgs, bool> eventArgs = null;

                switch (wParam.ToInt32())
                {
                case (int)User32.WindowMessage.WM_MOUSEMOVE:
                    OnMouseMove?.Invoke(this,
                                        eventArgs = new ExtendedEventArgs <MouseEventArgs, bool>(new MouseEventArgs(this.buttonState,
                                                                                                                    0,
                                                                                                                    eventInfo.pt.x,
                                                                                                                    eventInfo.pt.y,
                                                                                                                    0)));
                    return(eventArgs?.ExtendedData == true ? 1 : 0);

                case (int)User32.WindowMessage.WM_LBUTTONDOWN:
                    this.buttonState |= MouseButtons.Left;
                    OnMouseDown?.Invoke(this,
                                        eventArgs = new ExtendedEventArgs <MouseEventArgs, bool>(new MouseEventArgs(this.buttonState,
                                                                                                                    1,
                                                                                                                    eventInfo.pt.x,
                                                                                                                    eventInfo.pt.y,
                                                                                                                    0)));
                    return(eventArgs?.ExtendedData == true ? 1 : 0);

                case (int)User32.WindowMessage.WM_RBUTTONDOWN:
                    this.buttonState |= MouseButtons.Right;
                    OnMouseDown?.Invoke(this,
                                        eventArgs = new ExtendedEventArgs <MouseEventArgs, bool>(new MouseEventArgs(this.buttonState,
                                                                                                                    1,
                                                                                                                    eventInfo.pt.x,
                                                                                                                    eventInfo.pt.y,
                                                                                                                    0)));
                    return(eventArgs?.ExtendedData == true ? 1 : 0);

                case (int)User32.WindowMessage.WM_LBUTTONUP:
                    this.buttonState &= ~MouseButtons.Left;
                    OnMouseUp?.Invoke(this,
                                      eventArgs = new ExtendedEventArgs <MouseEventArgs, bool>(new MouseEventArgs(this.buttonState,
                                                                                                                  0,
                                                                                                                  eventInfo.pt.x,
                                                                                                                  eventInfo.pt.y,
                                                                                                                  0)));
                    return(eventArgs?.ExtendedData == true ? 1 : 0);

                case (int)User32.WindowMessage.WM_RBUTTONUP:
                    this.buttonState &= ~MouseButtons.Right;
                    OnMouseUp?.Invoke(this,
                                      eventArgs = new ExtendedEventArgs <MouseEventArgs, bool>(new MouseEventArgs(this.buttonState,
                                                                                                                  0,
                                                                                                                  eventInfo.pt.x,
                                                                                                                  eventInfo.pt.y,
                                                                                                                  0)));
                    return(eventArgs?.ExtendedData == true ? 1 : 0);
                }
            }

            // pass unprocessed messages to system
            return(User32.CallNextHookEx(this.hookHandle, code, wParam, lParam));
        }
        internal void DispatchEvent(Map map, MapJsEventArgs eventArgs)
        {
            switch (eventArgs.Type)
            {
            case "click":
                OnClick?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "contextmenu":
                OnContextMenu?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "dblclick":
                OnDblClick?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "layeradded":
                OnLayerAdded?.Invoke(new MapEventArgs(map, eventArgs.Type));
                break;

            case "layerremoved":
                OnLayerRemoved?.Invoke(new MapEventArgs(map, eventArgs.Type));
                break;

            case "mousedown":
                OnMouseDown?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "mouseenter":
                OnMouseEnter?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "mouseleave":
                OnMouseLeave?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "mousemove":
                OnMouseMove?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "mouseout":
                OnMouseOut?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "mouseover":
                OnMouseOver?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "mouseup":
                OnMouseUp?.Invoke(new MapMouseEventArgs(map, eventArgs));
                break;

            case "touchcancel":
                OnTouchCancel?.Invoke(new MapTouchEventArgs(map, eventArgs));
                break;

            case "touchend":
                OnTouchEnd?.Invoke(new MapTouchEventArgs(map, eventArgs));
                break;

            case "touchmove":
                OnTouchMove?.Invoke(new MapTouchEventArgs(map, eventArgs));
                break;

            case "touchstart":
                OnTouchStart?.Invoke(new MapTouchEventArgs(map, eventArgs));
                break;

            case "wheel":
                OnWheel?.Invoke(new MapEventArgs(map, eventArgs.Type));
                break;
            }
        }
Esempio n. 11
0
 void OnMouseDown()
 {
     onMouseDown.Invoke(gameObject);
     Debug.Log("InstanceLifeCycle OnMouseDown " + gameObject.name);
 }
Esempio n. 12
0
 internal void InvokeMouseDown(float mouseX, float mouseY)
 {
     OnMouseDown?.Invoke(this, mouseX - Transform.Position.x, mouseY - Transform.Position.y);
 }
Esempio n. 13
0
 internal void TriggerOnMouseDown(MouseState state, MouseButton buttons)
 {
     OnMouseDown?.Invoke(state, buttons);
 }
Esempio n. 14
0
File: Events.cs Progetto: kuviman/Q
 static void InitEvents()
 {
     Log.Info("Registering window events");
     window.RenderFrame += (sender, e) => {
         timer.Tick();
         RenderState.SetupViewport();
         OnRender?.Invoke();
         State?.Render();
         window.SwapBuffers();
         FinalizeGLResources();
     };
     window.UpdateFrame += (sender, e) => {
         OnUpdate?.Invoke(e.Time);
         var state = State;
         if (state != null)
         {
             state.Update(e.Time);
             if (state.Closed)
             {
                 State = null;
             }
         }
         if (State == null)
         {
             Kill();
         }
     };
     window.KeyDown += (sender, e) => {
         var key = (Key)e.Key;
         if (e.IsRepeat)
         {
             OnKeyRepeat?.Invoke(key);
             State?.KeyRepeat(key);
         }
         else
         {
             OnKeyDown?.Invoke(key);
             State?.KeyDown(key);
         }
         if (e.Key == OpenTK.Input.Key.F4 && e.Modifiers.HasFlag(OpenTK.Input.KeyModifiers.Alt))
         {
             window.Close();
         }
     };
     window.KeyUp += (sender, e) => {
         OnKeyUp?.Invoke((Key)e.Key);
         State?.KeyUp((Key)e.Key);
     };
     window.KeyPress += (sender, e) => {
         OnCharInput?.Invoke(e.KeyChar);
         State?.CharInput(e.KeyChar);
     };
     window.MouseDown += (sender, e) => {
         OnMouseDown?.Invoke((MouseButton)e.Button, Mouse.Position);
         State?.MouseDown((MouseButton)e.Button, Mouse.Position);
     };
     window.MouseUp += (sender, e) => {
         OnMouseUp?.Invoke((MouseButton)e.Button, Mouse.Position);
         State?.MouseUp((MouseButton)e.Button, Mouse.Position);
     };
     window.MouseMove += (sender, e) => {
         OnMouseMove?.Invoke(Mouse.Position);
         State?.MouseMove(Mouse.Position);
     };
     window.MouseWheel += (sender, e) => {
         OnMouseWheel?.Invoke(e.DeltaPrecise);
         State?.MouseWheel(e.DeltaPrecise);
     };
     window.Resize += (sender, e) => {
         OpenTK.Graphics.OpenGL.GL.Viewport(0, 0, Width, Height);
     };
 }
Esempio n. 15
0
 public void MouseDown(object sender, MouseEventArgs mouseEventArgs)
 {
     OnMouseDown?.Invoke(sender, mouseEventArgs);
 }
Esempio n. 16
0
        /// <summary>
        /// Create the DropDown list.
        /// </summary>
        /// <param name="size">List size (refers to the whole size of the list + the header when dropdown list is opened).</param>
        /// <param name="anchor">Position anchor.</param>
        /// <param name="offset">Offset from anchor position.</param>
        /// <param name="skin">Panel skin to use for this DropDown list and header.</param>
        public DropDown(Vector2 size, Anchor anchor = Anchor.Auto, Vector2?offset = null, PanelSkin skin = PanelSkin.ListBackground) :
            base(size, anchor, offset)
        {
            // default padding of self is 0
            Padding = Vector2.Zero;

            // to get collision right when list is opened
            UseActualSizeForCollision = true;

            // create the panel and paragraph used to show currently selected value (what's shown when drop-down is closed)
            _selectedTextPanel     = new Panel(new Vector2(0, SelectedPanelHeight), skin, Anchor.TopLeft);
            _selectedTextParagraph = UserInterface.DefaultParagraph(string.Empty, Anchor.CenterLeft);
            _selectedTextParagraph.UseActualSizeForCollision = false;
            _selectedTextParagraph.UpdateStyle(SelectList.DefaultParagraphStyle);
            _selectedTextParagraph.UpdateStyle(DefaultParagraphStyle);
            _selectedTextParagraph.UpdateStyle(DefaultSelectedParagraphStyle);
            _selectedTextPanel.AddChild(_selectedTextParagraph, true);

            // create the arrow down icon
            _arrowDownImage = new Image(Resources.ArrowDown, new Vector2(ArrowSize, ArrowSize), ImageDrawMode.Stretch, Anchor.CenterRight, new Vector2(-10, 0));
            _selectedTextPanel.AddChild(_arrowDownImage, true);

            // create the list component
            _selectList = new SelectList(size, Anchor.TopCenter, Vector2.Zero, skin);

            // update list offset and space before
            _selectList.SetOffset(new Vector2(0, SelectedPanelHeight));
            _selectList.SpaceBefore = Vector2.Zero;

            // add the header and select list as children
            AddChild(_selectedTextPanel);
            AddChild(_selectList);

            // add callback on list value change
            _selectList.OnValueChange = (Entity entity) =>
            {
                // hide list
                ListVisible = false;

                // set selected text
                _selectedTextParagraph.Text = (SelectedValue ?? DefaultText);
            };

            // hide the list by default
            _selectList.Visible = false;

            // setup the callback to show / hide the list when clicking the dropbox
            _selectedTextPanel.OnClick = (Entity self) =>
            {
                // change visibility
                ListVisible = !ListVisible;
            };

            // set starting text
            _selectedTextParagraph.Text = (SelectedValue ?? DefaultText);

            // update styles
            _selectList.UpdateStyle(DefaultStyle);

            // make the list events trigger the dropdown events
            _selectList.OnListChange       += (Entity entity) => { OnListChange?.Invoke(this); };
            _selectList.OnMouseDown        += (Entity entity) => { OnMouseDown?.Invoke(this); };
            _selectList.OnMouseReleased    += (Entity entity) => { OnMouseReleased?.Invoke(this); };
            _selectList.WhileMouseDown     += (Entity entity) => { WhileMouseDown?.Invoke(this); };
            _selectList.WhileMouseHover    += (Entity entity) => { WhileMouseHover?.Invoke(this); };
            _selectList.OnClick            += (Entity entity) => { OnClick?.Invoke(this); };
            _selectList.OnValueChange      += (Entity entity) => { OnValueChange?.Invoke(this); };
            _selectList.OnMouseEnter       += (Entity entity) => { OnMouseEnter?.Invoke(this); };
            _selectList.OnMouseLeave       += (Entity entity) => { OnMouseLeave?.Invoke(this); };
            _selectList.OnMouseWheelScroll += (Entity entity) => { OnMouseWheelScroll?.Invoke(this); };
            _selectList.OnStartDrag        += (Entity entity) => { OnStartDrag?.Invoke(this); };
            _selectList.OnStopDrag         += (Entity entity) => { OnStopDrag?.Invoke(this); };
            _selectList.WhileDragging      += (Entity entity) => { WhileDragging?.Invoke(this); };
            _selectList.BeforeDraw         += (Entity entity) => { BeforeDraw?.Invoke(this); };
            _selectList.AfterDraw          += (Entity entity) => { AfterDraw?.Invoke(this); };
            _selectList.BeforeUpdate       += (Entity entity) => { BeforeUpdate?.Invoke(this); };
            _selectList.AfterUpdate        += (Entity entity) => { AfterUpdate?.Invoke(this); };

            // make the selected value panel trigger the dropdown events
            _selectedTextPanel.OnMouseDown        += (Entity entity) => { OnMouseDown?.Invoke(this); };
            _selectedTextPanel.OnMouseReleased    += (Entity entity) => { OnMouseReleased?.Invoke(this); };
            _selectedTextPanel.WhileMouseDown     += (Entity entity) => { WhileMouseDown?.Invoke(this); };
            _selectedTextPanel.WhileMouseHover    += (Entity entity) => { WhileMouseHover?.Invoke(this); };
            _selectedTextPanel.OnClick            += (Entity entity) => { OnClick?.Invoke(this); };
            _selectedTextPanel.OnValueChange      += (Entity entity) => { OnValueChange?.Invoke(this); };
            _selectedTextPanel.OnMouseEnter       += (Entity entity) => { OnMouseEnter?.Invoke(this); };
            _selectedTextPanel.OnMouseLeave       += (Entity entity) => { OnMouseLeave?.Invoke(this); };
            _selectedTextPanel.OnMouseWheelScroll += (Entity entity) => { OnMouseWheelScroll?.Invoke(this); };
            _selectedTextPanel.OnStartDrag        += (Entity entity) => { OnStartDrag?.Invoke(this); };
            _selectedTextPanel.OnStopDrag         += (Entity entity) => { OnStopDrag?.Invoke(this); };
            _selectedTextPanel.WhileDragging      += (Entity entity) => { WhileDragging?.Invoke(this); };
            _selectedTextPanel.BeforeDraw         += (Entity entity) => { BeforeDraw?.Invoke(this); };
            _selectedTextPanel.AfterDraw          += (Entity entity) => { AfterDraw?.Invoke(this); };
            _selectedTextPanel.BeforeUpdate       += (Entity entity) => { BeforeUpdate?.Invoke(this); };
            _selectedTextPanel.AfterUpdate        += (Entity entity) => { AfterUpdate?.Invoke(this); };
        }
Esempio n. 17
0
 public override void MouseDown(UIMouseEvent evt)
 {
     _isDragging = true;
     OnMouseDown?.Invoke(evt, this);
 }
Esempio n. 18
0
 public override void MouseDown(UIMouseEvent evt)
 {
     OnMouseDown?.Invoke(evt, this);
 }
Esempio n. 19
0
 internal void MouseDown(MouseEventArgs e)
 {
     OnMouseDown?.Invoke(e);
 }
Esempio n. 20
0
        /// <summary>
        /// Updates the internal adminstrates and triggers events where required.
        /// </summary>
        void HandleOnStep()
        {
            //mouse can enter/leave target without moving (the target may move!)
            bool isOnTarget = _target.collider.Enabled && _target.HitTestPoint(MyGame.WorldMousePosition.x, MyGame.WorldMousePosition.y);

            if (isOnTarget && !_wasOnTarget)
            {
                OnMouseOverTarget?.Invoke(_target, MouseEventType.MouseOverTarget);
            }
            else if (!isOnTarget && _wasOnTarget)
            {
                OnMouseOffTarget?.Invoke(_target, MouseEventType.MouseOffTarget);
            }

            //did we just press the mouse down?
            if (!_wasMouseDown && Input.GetMouseButton(0))
            {
                OnMouseDown?.Invoke(_target, MouseEventType.MouseDown);
                if (isOnTarget)
                {
                    OnMouseDownOnTarget?.Invoke(_target, MouseEventType.MouseDownOnTarget);
                }
                _wasMouseDown         = true;
                _wasMouseDownOnTarget = isOnTarget;

                _offset   = _target.TransformPoint(0, 0);
                _offset.x = _offset.x - Input.mouseX;
                _offset.y = _offset.y - Input.mouseY;
            }
            else if (_wasMouseDown && !Input.GetMouseButton(0))
            {
                OnMouseUp?.Invoke(_target, MouseEventType.MouseUp);
                if (isOnTarget)
                {
                    OnMouseUpOnTarget?.Invoke(_target, MouseEventType.MouseUpOnTarget);
                }
                if (isOnTarget && _wasMouseDownOnTarget)
                {
                    OnMouseClick?.Invoke(_target, MouseEventType.MouseClick);
                }

                _wasMouseDown         = false;
                _wasMouseDownOnTarget = false;
                _offset.x             = _offset.y = 0;
            }

            if (_lastX != Input.mouseX || _lastY != Input.mouseY)
            {
                _lastX = Input.mouseX;
                _lastY = Input.mouseY;
                if (OnMouseMove != null)
                {
                    OnMouseMove(_target, MouseEventType.MouseMove);
                }
                if (isOnTarget)
                {
                    OnMouseMoveOnTarget?.Invoke(_target, MouseEventType.MouseMoveOnTarget);
                }
            }

            _wasOnTarget = isOnTarget;
        }
Esempio n. 21
0
 private void MouseHook_OnMouseDown(object sender, Point p)
 {
     DisposeHook();
     OnMouseDown?.Invoke(this, p);
 }
Esempio n. 22
0
 // 鼠标左键在窗口内按下
 public virtual void onMouseDown(Vector3 mousePos)
 {
     mMouseDownPosition = mousePos;
     mPressCallback?.Invoke(this, true);
     mOnMouseDown?.Invoke(mousePos);
 }
Esempio n. 23
0
        public void Update(GameTime gameTime)
        {
            _currentState = Mouse.GetState();

            #region mouse clicked

            if (_currentState.RightButton == ButtonState.Released &&
                _previousState.RightButton == ButtonState.Pressed)
            {
                OnMouseClicked?.Invoke(MouseButtonID.Right, gameTime);
            }

            if (_currentState.LeftButton == ButtonState.Released &&
                _previousState.LeftButton == ButtonState.Pressed)
            {
                OnMouseClicked?.Invoke(MouseButtonID.Left, gameTime);
            }

            if (_currentState.MiddleButton == ButtonState.Released &&
                _previousState.MiddleButton == ButtonState.Pressed)
            {
                OnMouseClicked?.Invoke(MouseButtonID.Middle, gameTime);
            }

            #endregion

            #region mouse down

            if ((_previousState.LeftButton == ButtonState.Pressed &&
                 _previousState.Position != _currentState.Position) ||
                _previousState.LeftButton == ButtonState.Released)
            {
                if (_currentState.LeftButton == ButtonState.Pressed)
                {
                    OnMouseDown?.Invoke(MouseButtonID.Left, gameTime);
                }
            }

            if ((_previousState.MiddleButton == ButtonState.Pressed &&
                 _previousState.Position != _currentState.Position) ||
                _previousState.MiddleButton == ButtonState.Released)
            {
                if (_currentState.MiddleButton == ButtonState.Pressed)
                {
                    OnMouseDown?.Invoke(MouseButtonID.Middle, gameTime);
                }
            }

            if ((_previousState.RightButton == ButtonState.Pressed &&
                 _previousState.Position != _currentState.Position) ||
                _previousState.RightButton == ButtonState.Released)
            {
                if (_currentState.RightButton == ButtonState.Pressed)
                {
                    OnMouseDown?.Invoke(MouseButtonID.Right, gameTime);
                }
            }

            #endregion

            if (_currentState.ScrollWheelValue != _previousState.ScrollWheelValue)
            {
                var scrollValue = _currentState.ScrollWheelValue - _previousState.ScrollWheelValue;
                var direction   = MouseScrollDirection.Up;
                if ((_currentState.ScrollWheelValue - _previousState.ScrollWheelValue) < 0)
                {
                    direction = MouseScrollDirection.Down;
                }

                OnMouseScroll?.Invoke(direction, _currentState.ScrollWheelValue, gameTime);
            }

            if (_currentState.Position != _previousState.Position)
            {
                OnMouseMoved?.Invoke(new Vector2(_previousState.X, _previousState.Y), gameTime);
            }

            _previousState = _currentState;
        }
Esempio n. 24
0
 public void OnPointerDown(PointerEventData eventData)
 {
     OnMouseDown?.Invoke();
     LockCursor();
 }
Esempio n. 25
0
        /// <summary>
        /// A callback function which will be called every time a mouse activity detected.
        /// </summary>
        /// <param name="nCode">
        /// [in] Specifies whether the hook procedure must process the message.
        /// If nCode is HC_ACTION, the hook procedure must process the message.
        /// If nCode is less than zero, the hook procedure must pass the message to the
        /// CallNextHookEx function without further processing and must return the
        /// value returned by CallNextHookEx.
        /// </param>
        /// <param name="wParam">
        /// [in] Specifies whether the message was sent by the current thread.
        /// If the message was sent by the current thread, it is nonzero; otherwise, it is zero.
        /// </param>
        /// <param name="lParam">
        /// [in] Pointer to a CWPSTRUCT structure that contains details about the message.
        /// </param>
        /// <returns>
        /// If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.
        /// If nCode is greater than or equal to zero, it is highly recommended that you call CallNextHookEx
        /// and return the value it returns; otherwise, other applications that have installed WH_CALLWNDPROC
        /// hooks will not receive hook notifications and may behave incorrectly as a result. If the hook
        /// procedure does not call CallNextHookEx, the return value should be zero.
        /// </returns>
        private int MouseHookProc(int nCode, int wParam, IntPtr lParam)
        {
            // if ok and someone listens to our events
            if ((nCode >= 0) && (OnMouseActivity != null || OnMouseDown != null || OnMouseUp != null))
            {
                //Marshall the data from callback.
                MouseLLHookStruct mouseHookStruct = (MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseLLHookStruct));

                //detect button clicked
                MouseButtons button     = MouseButtons.None;
                short        mouseDelta = 0;

                //mouseButton down
                bool isMouseButtonDown = false;
                //mouseButton up
                bool isMouseButtonUp = false;
                switch (wParam)
                {
                case WM_LBUTTONDOWN:
                    //case WM_LBUTTONUP:
                    //case WM_LBUTTONDBLCLK:
                    button            = MouseButtons.Left;
                    isMouseButtonDown = true;
                    break;

                case WM_LBUTTONUP:
                    button          = MouseButtons.Left;
                    isMouseButtonUp = true;
                    break;

                case WM_RBUTTONDOWN:
                    //case WM_RBUTTONUP:
                    //case WM_RBUTTONDBLCLK:
                    button            = MouseButtons.Right;
                    isMouseButtonDown = true;
                    break;

                case WM_RBUTTONUP:
                    button          = MouseButtons.Right;
                    isMouseButtonUp = true;
                    break;

                case WM_MOUSEWHEEL:
                    //If the message is WM_MOUSEWHEEL, the high-order word of mouseData member is the wheel delta.
                    //One wheel click is defined as WHEEL_DELTA, which is 120.
                    //(value >> 16) & 0xffff; retrieves the high-order word from the given 32-bit value
                    mouseDelta = (short)((mouseHookStruct.mouseData >> 16) & 0xffff);
                    //TODO: X BUTTONS (I havent them so was unable to test)
                    //If the message is WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP,
                    //or WM_NCXBUTTONDBLCLK, the high-order word specifies which X button was pressed or released,
                    //and the low-order word is reserved. This value can be one or more of the following values.
                    //Otherwise, mouseData is not used.
                    break;
                }

                //double clicks
                int clickCount = 0;
                if (button != MouseButtons.None)
                {
                    if (wParam == WM_LBUTTONDBLCLK || wParam == WM_RBUTTONDBLCLK)
                    {
                        clickCount = 2;
                    }
                    else
                    {
                        clickCount = 1;
                    }
                }

                //generate event
                MouseEventArgs e = new MouseEventArgs(
                    button,
                    clickCount,
                    mouseHookStruct.pt.x,
                    mouseHookStruct.pt.y,
                    mouseDelta);
                //raise it
                OnMouseActivity?.Invoke(this, e);

                //raise mouseDown
                if (isMouseButtonDown)
                {
                    OnMouseDown?.Invoke(this, e);
                }

                //raise mouseUp
                if (isMouseButtonUp)
                {
                    OnMouseUp?.Invoke(this, e);
                }
            }
            //call next hook
            return(CallNextHookEx(hMouseHook, nCode, wParam, lParam));
        }
Esempio n. 26
0
        /// <summary>
        /// GUI部品を更新する。
        /// </summary>
        /// <param name="mouse">マウス。</param>
        /// <param name="pointX">マウスの相対X座標。</param>
        /// <param name="pointY">マウスの相対Y座標。</param>
        public virtual void Update(Mouse mouse = null, int?pointX = null, int?pointY = null)
        {
            if (mouse == null)
            {
                LeftJudge = (false, (0, 0));

                LongClickCounter.Stop();
                LongClickCounter.Reset();

                Dragging = false;
                return;
            }

            if (!pointX.HasValue || !pointY.HasValue)
            {
                MousePoint = (mouse.Point.x - X, mouse.Point.y - Y);
            }
            else
            {
                MousePoint = (pointX.Value - X, pointY.Value - Y);
            }

            var outSide = IsOutSide();

            if (!outSide)
            {
                OnHovering?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                if (!Hovering)
                {
                    OnMouseEnter?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                    Hovering = true;
                }
            }
            else
            {
                if (Hovering)
                {
                    OnMouseLeave?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                    Hovering = false;
                }
            }

            if (mouse.IsPushedButton(MouseButton.Left))
            {
                // マウス初回クリック処理
                if (!outSide)
                {
                    LeftJudge = (true, MousePoint);
                    LongClickCounter?.Start();
                    OnMouseDown?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                }
            }
            else if (mouse.IsPushingButton(MouseButton.Left))
            {
                // マウスが要素内をクリックしてるかどうかの判定
                if (LeftJudge.Item1)
                {
                    if (outSide)
                    {
                        LeftJudge = (false, MousePoint);
                        OnMouseUp?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                        LongClickCounter.Stop();
                        LongClickCounter.Reset();
                    }
                    else
                    {
                        LongClickCounter?.Tick();
                        if (LongClickCounter.State == TimerState.Stopped)
                        {
                            // ロングタップ
                            LeftJudge = (false, MousePoint);
                            OnMouseUp?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                            if (!Dragging)
                            {
                                LongClicked?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                            }
                            LongClickCounter.Stop();
                            LongClickCounter.Reset();

                            Dragging = false;
                        }
                    }
                }
            }
            else if (mouse.IsLeftButton(MouseButton.Left))
            {
                // クリック判定
                if (LeftJudge.Item1)
                {
                    if (!Dragging)
                    {
                        Clicked?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                    }
                    OnMouseUp?.Invoke(this, new MouseClickEventArgs(MousePoint.x, MousePoint.y));
                }
                LongClickCounter.Stop();
                LongClickCounter.Reset();

                Dragging = false;
            }

            foreach (var item in Child)
            {
                item.Update(mouse, MousePoint.x, MousePoint.y);
            }
        }
Esempio n. 27
0
 public void NotifyMouseDown(MouseEvent eventArgs)
 {
     OnMouseDown?.Invoke(this, eventArgs);
 }
Esempio n. 28
0
File: Mouse.cs Progetto: nchos88/SOA
        private void HookMouseCallback(HookData hookData)
        {
            MouseEventInformation info = MouseEventInformation.Get(hookData);

            int          mx     = info.X;
            int          my     = info.Y;
            MouseButtons button = info.Button;

            // 마우스 다운
            if (info.IsMouseDown)
            {
                if (IsDoubleClick(info))
                {
                    info = info.ToDobuleClickMouseEventInformation();
                }

                OnMouseDown?.Invoke(mx, my, button);

                if (info.Clicks == 2)
                {
                    m_DoubleButton |= info.Button;
                }

                if (info.Clicks == 1)
                {
                    m_SingleButton |= button;
                }
            }

            // 마우스 업
            if (info.IsMouseUp)
            {
                OnMouseUp?.Invoke(mx, my, button);

                // 마우스 클릭
                if ((m_SingleButton & button) != MouseButtons.None)
                {
                    OnMouseClick?.Invoke(mx, my, button);
                    m_SingleButton &= ~button;
                }

                // 마우스 더블 클릭
                if ((m_DoubleButton & button) != MouseButtons.None)
                {
                    OnMouseDoubleClick?.Invoke(mx, my, button);
                    m_DoubleButton &= ~button;
                }

                if (info.Clicks == 2)
                {
                    m_PreviousClickedButton = MouseButtons.None;
                    m_PreviousClickedTime   = 0;
                    m_PreviousClickedX      = m_DefaultPositionXY;
                    m_PreviousClickedY      = m_DefaultPositionXY;
                }

                if (info.Clicks == 1)
                {
                    m_PreviousClickedButton = info.Button;
                    m_PreviousClickedTime   = info.Timestamp;
                    m_PreviousClickedX      = mx;
                    m_PreviousClickedY      = my;
                }
            }

            // 마우스 스크롤
            if (info.IsMouseWheelScrolled)
            {
                OnMouseWheel?.Invoke(mx, my, button, info.Delta > 0 ? 1 : -1);
            }

            // 마우스 이동
            if (IsMoved(mx, my))
            {
                m_PreviousX = mx;
                m_PreviousY = my;

                OnMouseMove?.Invoke(mx, my, button);
            }

            // 마우스 드래그
            if ((m_SingleButton & MouseButtons.Left) != MouseButtons.None)
            {
                if (m_DragStartPositionX == m_DefaultPositionXY && m_DragStartPositionY == m_DefaultPositionXY)
                {
                    m_DragStartPositionX = mx;
                    m_DragStartPositionY = my;
                }

                // 마우스 드래그 스타트
                if (m_dragMode == false)
                {
                    bool isXDragging = Math.Abs(mx - m_DragStartPositionX) > m_SystemDragX;
                    bool isYDragging = Math.Abs(my - m_DragStartPositionY) > m_SystemDragY;

                    m_dragMode = isXDragging || isYDragging;

                    if (m_dragMode == true)
                    {
                        OnMouseDragStart?.Invoke(mx, my, button);
                    }
                }
            }
            else
            {
                m_DragStartPositionX = m_DefaultPositionXY;
                m_DragStartPositionY = m_DefaultPositionXY;

                // 마우스 드래그 엔드
                if (m_dragMode == true)
                {
                    OnMouseDragEnd?.Invoke(mx, my, button);

                    m_dragMode = false;
                }
            }
        }
Esempio n. 29
0
 protected virtual void MouseDown(GUIMouseButtonEventArgs args)
 {
     OnMouseDown?.Invoke(args);
 }
Esempio n. 30
0
 public virtual void MouseDown(MouseButton button, Vec2 position)
 {
     OnMouseDown?.Invoke(button, position);
 }