Exemplo n.º 1
0
 public MouseAction(SDL.SDL_MouseButtonEvent ev)
 {
     MouseX    = ev.x;
     MouseY    = ev.y;
     NumClicks = ev.clicks;
     Button    = (MouseButton)ev.button;
 }
Exemplo n.º 2
0
        private void OnMouseInputEvent(SDL.SDL_MouseButtonEvent e)
        {
            MouseButton button = ConvertMouseButton(e.button);

            if (e.type == SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN)
            {
                MouseState.HandleButtonDown(button);
            }
            else
            {
                MouseState.HandleButtonUp(button);
            }
        }
Exemplo n.º 3
0
        public static MouseButton MapSdlMouseButton(SDL.SDL_MouseButtonEvent mouseButtonEvent)
        {
            switch (mouseButtonEvent.button)
            {
            case (byte)SDL.SDL_BUTTON_LEFT:
                return(MouseButton.Left);

            case (byte)SDL.SDL_BUTTON_MIDDLE:
                return(MouseButton.Middle);

            case (byte)SDL.SDL_BUTTON_RIGHT:
                return(MouseButton.Right);

            case (byte)SDL.SDL_BUTTON_X1:
                return(MouseButton.X1);

            case (byte)SDL.SDL_BUTTON_X2:
                return(MouseButton.X2);

            default:
                return(MouseButton.Unknown);
            }
        }
Exemplo n.º 4
0
        private unsafe int HandleSDLEvent(IntPtr userdata, IntPtr ptr)
        {
            SDL_Event *e = (SDL_Event *)ptr;

            switch (e->type)
            {
            case SDL.SDL_EventType.SDL_AUDIODEVICEADDED:
                Console.WriteLine("AUDIO ADDED: {0}", e->adevice.which);

                break;

            case SDL.SDL_EventType.SDL_AUDIODEVICEREMOVED:
                Console.WriteLine("AUDIO REMOVED: {0}", e->adevice.which);

                break;


            case SDL.SDL_EventType.SDL_WINDOWEVENT:

                switch (e->window.windowEvent)
                {
                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_ENTER:
                    Mouse.MouseInWindow = true;

                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE:
                    Mouse.MouseInWindow = false;

                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
                    Plugin.OnFocusGained();

                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
                    Plugin.OnFocusLost();

                    break;
                }

                break;

            case SDL.SDL_EventType.SDL_KEYDOWN:

                Keyboard.OnKeyDown(e->key);

                if (Plugin.ProcessHotkeys((int)e->key.keysym.sym, (int)e->key.keysym.mod, true))
                {
                    _ignoreNextTextInput = false;
                    UIManager.KeyboardFocusControl?.InvokeKeyDown(e->key.keysym.sym, e->key.keysym.mod);

                    _scene.OnKeyDown(e->key);
                }
                else
                {
                    _ignoreNextTextInput = true;
                }

                break;

            case SDL.SDL_EventType.SDL_KEYUP:

                Keyboard.OnKeyUp(e->key);
                UIManager.KeyboardFocusControl?.InvokeKeyUp(e->key.keysym.sym, e->key.keysym.mod);
                _scene.OnKeyUp(e->key);
                Plugin.ProcessHotkeys(0, 0, false);

                if (e->key.keysym.sym == SDL_Keycode.SDLK_PRINTSCREEN)
                {
                    string path = Path.Combine(FileSystemHelper.CreateFolderIfNotExists(CUOEnviroment.ExecutablePath, "Data", "Client", "Screenshots"), $"screenshot_{DateTime.Now:yyyy-MM-dd_hh-mm-ss}.png");

                    using (Stream stream = File.Create(path))
                    {
                        _buffer.SaveAsPng(stream, _buffer.Width, _buffer.Height);

                        GameActions.Print($"Screenshot stored in: {path}", 0x44, MessageType.System);
                    }
                }

                break;

            case SDL.SDL_EventType.SDL_TEXTINPUT:

                if (_ignoreNextTextInput)
                {
                    break;
                }

                string s = StringHelper.ReadUTF8(e->text.text);

                if (!string.IsNullOrEmpty(s))
                {
                    UIManager.KeyboardFocusControl?.InvokeTextInput(s);
                    _scene.OnTextInput(s);
                }
                break;

            case SDL.SDL_EventType.SDL_MOUSEMOTION:
                Mouse.Update();

                if (Mouse.IsDragging)
                {
                    UIManager.OnMouseDragging();
                    _scene.OnMouseDragging();
                }

                if (Mouse.IsDragging && !_dragStarted)
                {
                    _dragStarted = true;
                }

                break;

            case SDL.SDL_EventType.SDL_MOUSEWHEEL:
                Mouse.Update();
                bool isup = e->wheel.y > 0;

                Plugin.ProcessMouse(0, e->wheel.y);

                UIManager.OnMouseWheel(isup);
                _scene.OnMouseWheel(isup);

                break;

            case SDL.SDL_EventType.SDL_MOUSEBUTTONUP:
            case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN:
                Mouse.Update();
                bool isDown = e->type == SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN;

                if (_dragStarted && !isDown)
                {
                    _dragStarted = false;
                }

                SDL.SDL_MouseButtonEvent mouse = e->button;

                switch ((uint)mouse.button)
                {
                case SDL_BUTTON_LEFT:

                    if (isDown)
                    {
                        Mouse.Begin();
                        Mouse.LButtonPressed    = true;
                        Mouse.LDropPosition     = Mouse.Position;
                        Mouse.CancelDoubleClick = false;
                        uint ticks = Time.Ticks;

                        if (Mouse.LastLeftButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks)
                        {
                            Mouse.LastLeftButtonClickTime = 0;

                            bool res = UIManager.ValidForDClick() ? UIManager.OnLeftMouseDoubleClick() : _scene.OnLeftMouseDoubleClick();

                            if (!res)
                            {
                                _scene.OnLeftMouseDown();
                                UIManager.OnLeftMouseButtonDown();
                            }
                            else
                            {
                                Mouse.LastLeftButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        _scene.OnLeftMouseDown();
                        UIManager.OnLeftMouseButtonDown();

                        Mouse.LastLeftButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastLeftButtonClickTime != 0xFFFF_FFFF)
                        {
                            if (!UIManager.HadMouseDownOnGump(MouseButtonType.Left))
                            {
                                _scene.OnLeftMouseUp();
                            }
                            UIManager.OnLeftMouseButtonUp();
                        }
                        Mouse.LButtonPressed = false;
                        Mouse.End();
                    }

                    break;

                case SDL_BUTTON_MIDDLE:

                    if (isDown)
                    {
                        Mouse.Begin();
                        Mouse.MButtonPressed    = true;
                        Mouse.MDropPosition     = Mouse.Position;
                        Mouse.CancelDoubleClick = false;
                        uint ticks = Time.Ticks;

                        if (Mouse.LastMidButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks)
                        {
                            Mouse.LastMidButtonClickTime = 0;

                            if (!_scene.OnMiddleMouseDoubleClick())
                            {
                                _scene.OnMiddleMouseDown();
                                UIManager.OnMiddleMouseButtonDown();
                            }

                            break;
                        }

                        Plugin.ProcessMouse(e->button.button, 0);

                        _scene.OnMiddleMouseDown();
                        UIManager.OnMiddleMouseButtonDown();

                        Mouse.LastMidButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastMidButtonClickTime != 0xFFFF_FFFF)
                        {
                            if (!UIManager.HadMouseDownOnGump(MouseButtonType.Middle))
                            {
                                _scene.OnMiddleMouseUp();
                            }
                            UIManager.OnMiddleMouseButtonUp();
                        }

                        Mouse.MButtonPressed = false;
                        Mouse.End();
                    }

                    break;

                case SDL_BUTTON_RIGHT:

                    if (isDown)
                    {
                        Mouse.Begin();
                        Mouse.RButtonPressed    = true;
                        Mouse.RDropPosition     = Mouse.Position;
                        Mouse.CancelDoubleClick = false;
                        uint ticks = Time.Ticks;

                        if (Mouse.LastRightButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks)
                        {
                            Mouse.LastRightButtonClickTime = 0;

                            bool res = _scene.OnRightMouseDoubleClick() || UIManager.OnRightMouseDoubleClick();

                            if (!res)
                            {
                                _scene.OnRightMouseDown();
                                UIManager.OnRightMouseButtonDown();
                            }
                            else
                            {
                                Mouse.LastRightButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        _scene.OnRightMouseDown();
                        UIManager.OnRightMouseButtonDown();

                        Mouse.LastRightButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastRightButtonClickTime != 0xFFFF_FFFF)
                        {
                            if (!UIManager.HadMouseDownOnGump(MouseButtonType.Right))
                            {
                                _scene.OnRightMouseUp();
                            }
                            UIManager.OnRightMouseButtonUp();
                        }
                        Mouse.RButtonPressed = false;
                        Mouse.End();
                    }

                    break;

                case SDL_BUTTON_X1:
                case SDL_BUTTON_X2:
                    if (isDown)
                    {
                        Mouse.Begin();
                        Mouse.XButtonPressed    = true;
                        Mouse.CancelDoubleClick = false;
                        Plugin.ProcessMouse(e->button.button, 0);
                        _scene.OnExtraMouseDown(mouse.button - 1);
                        UIManager.OnExtraMouseButtonDown(mouse.button - 1);
                    }
                    else
                    {
                        if (!UIManager.HadMouseDownOnGump(MouseButtonType.XButton1) && !UIManager.HadMouseDownOnGump(MouseButtonType.XButton2))
                        {
                            _scene.OnExtraMouseUp(mouse.button - 1);
                        }
                        UIManager.OnExtraMouseButtonUp(mouse.button - 1);

                        Mouse.XButtonPressed = false;
                        Mouse.End();
                    }

                    break;
                }

                break;
            }

            return(0);
        }
Exemplo n.º 5
0
        private unsafe void HandleSDLEvent(ref SDL.SDL_Event e)
        {
            switch (e.type)
            {
            case SDL.SDL_EventType.SDL_AUDIODEVICEADDED:
                Console.WriteLine("AUDIO ADDED: {0}", e.adevice.which);

                break;

            case SDL.SDL_EventType.SDL_AUDIODEVICEREMOVED:
                Console.WriteLine("AUDIO REMOVED: {0}", e.adevice.which);

                break;


            case SDL.SDL_EventType.SDL_WINDOWEVENT:

                switch (e.window.windowEvent)
                {
                case SDL_WindowEventID.SDL_WINDOWEVENT_MOVED:


                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_ENTER:
                    Mouse.MouseInWindow = true;

                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE:
                    Mouse.MouseInWindow = false;

                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
                    Plugin.OnFocusGained();

                    // SDL_CaptureMouse(SDL_bool.SDL_TRUE);
                    //Log.Debug("FOCUS");
                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
                    Plugin.OnFocusLost();
                    //Log.Debug("NO FOCUS");
                    //SDL_CaptureMouse(SDL_bool.SDL_FALSE);

                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_TAKE_FOCUS:

                    //Log.Debug("TAKE FOCUS");
                    break;

                case SDL.SDL_WindowEventID.SDL_WINDOWEVENT_HIT_TEST:

                    break;
                }

                break;

            case SDL.SDL_EventType.SDL_SYSWMEVENT:

                break;

            case SDL.SDL_EventType.SDL_KEYDOWN:

                Keyboard.OnKeyDown(e.key);

                if (Plugin.ProcessHotkeys((int)e.key.keysym.sym, (int)e.key.keysym.mod, true))
                {
                    _ignoreNextTextInput = false;

                    //UIManager.MouseOverControl?.InvokeKeyDown(e.key.keysym.sym, e.key.keysym.mod);
                    //if (UIManager.MouseOverControl != UIManager.KeyboardFocusControl)
                    UIManager.KeyboardFocusControl?.InvokeKeyDown(e.key.keysym.sym, e.key.keysym.mod);

                    _scene.OnKeyDown(e.key);
                }
                else
                {
                    _ignoreNextTextInput = true;
                }

                break;

            case SDL.SDL_EventType.SDL_KEYUP:

                Keyboard.OnKeyUp(e.key);

                //if (e.key.keysym.sym == SDL_Keycode.SDLK_0)
                //{


                //    byte[] firebreathcode = {

                //   0xC0,
                //  0x00, 0x00, 0x00, 0x00 , // source serial
                //  0x00 ,0x00 ,0x00 , 0x00,  // target serial
                //    0x00, 0xAA,  // graphic
                //    0xAC, 0x06, // src X
                //    0x74, 0x06,  // src Y
                //    0x28,       // src Z
                //   0x3F, 0x06, // targ X
                //    0x74, 0x06, // targY
                //        0x2B,   // targZ
                //        0x3F, 0x01, 0xF0 , 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ,0x00, 0x00,
                //   0x00, 0x00, 0x00, 0x00,
                //    };
                //    int xx =  (0x06 << 8) | (0xAC ) ;
                //    int yy =  (0x06 << 8) | (0x74 ) ;
                //    int txx = (0x06 << 8) |  (0x3F);
                //    int tyy = (0x06 << 8) | (0x74 );

                //    NetClient.EnqueuePacketFromPlugin(firebreathcode, 36);
                //}

                //UIManager.MouseOverControl?.InvokeKeyUp(e.key.keysym.sym, e.key.keysym.mod);
                //if (UIManager.MouseOverControl != UIManager.KeyboardFocusControl)
                UIManager.KeyboardFocusControl?.InvokeKeyUp(e.key.keysym.sym, e.key.keysym.mod);

                _scene.OnKeyUp(e.key);

                break;

            case SDL.SDL_EventType.SDL_TEXTINPUT:

                if (_ignoreNextTextInput)
                    break;

                fixed(SDL.SDL_Event *ev = &e)
                {
                    string s = StringHelper.ReadUTF8(ev->text.text);

                    if (!string.IsNullOrEmpty(s))
                    {
                        UIManager.KeyboardFocusControl?.InvokeTextInput(s);
                        _scene.OnTextInput(s);
                    }
                }

                break;

            case SDL.SDL_EventType.SDL_MOUSEMOTION:
                Mouse.Update();

                if (Mouse.IsDragging)
                {
                    UIManager.OnMouseDragging();
                    _scene.OnMouseDragging();
                }

                if (Mouse.IsDragging && !_dragStarted)
                {
                    _dragStarted = true;
                }

                break;

            case SDL.SDL_EventType.SDL_MOUSEWHEEL:
                Mouse.Update();
                bool isup = e.wheel.y > 0;

                Plugin.ProcessMouse(0, e.wheel.y);

                UIManager.OnMouseWheel(isup);
                _scene.OnMouseWheel(isup);

                break;

            case SDL.SDL_EventType.SDL_MOUSEBUTTONUP:
            case SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN:
                Mouse.Update();
                bool isDown    = e.type == SDL.SDL_EventType.SDL_MOUSEBUTTONDOWN;
                bool resetTime = false;

                if (_dragStarted && !isDown)
                {
                    _dragStarted = false;
                    resetTime    = true;
                }

                SDL.SDL_MouseButtonEvent mouse = e.button;

                switch ((uint)mouse.button)
                {
                case SDL_BUTTON_LEFT:

                    if (isDown)
                    {
                        Mouse.Begin();
                        Mouse.LButtonPressed    = true;
                        Mouse.LDropPosition     = Mouse.Position;
                        Mouse.CancelDoubleClick = false;
                        uint ticks = SDL_GetTicks();

                        if (Mouse.LastLeftButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks)
                        {
                            Mouse.LastLeftButtonClickTime = 0;
                            bool res;

                            if (UIManager.ValidForDClick())
                            {
                                res = UIManager.OnLeftMouseDoubleClick();
                            }
                            else
                            {
                                res = _scene.OnLeftMouseDoubleClick();
                            }

                            //bool res = _scene.OnLeftMouseDoubleClick() || UIManager.OnLeftMouseDoubleClick();

                            MouseDoubleClickEventArgs arg = new MouseDoubleClickEventArgs(Mouse.Position.X, Mouse.Position.Y, MouseButton.Left);

                            if (!arg.Result && !res)
                            {
                                _scene.OnLeftMouseDown();
                                UIManager.OnLeftMouseButtonDown();
                            }
                            else
                            {
                                Mouse.LastLeftButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        _scene.OnLeftMouseDown();
                        UIManager.OnLeftMouseButtonDown();

                        Mouse.LastLeftButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (resetTime)
                        {
                            Mouse.LastLeftButtonClickTime = 0;
                        }

                        if (Mouse.LastLeftButtonClickTime != 0xFFFF_FFFF)
                        {
                            _scene.OnLeftMouseUp();
                            UIManager.OnLeftMouseButtonUp();
                        }
                        Mouse.LButtonPressed = false;
                        Mouse.End();

                        Mouse.LastClickPosition = Mouse.Position;
                    }

                    break;

                case SDL_BUTTON_MIDDLE:

                    if (isDown)
                    {
                        Mouse.Begin();
                        Mouse.MButtonPressed    = true;
                        Mouse.MDropPosition     = Mouse.Position;
                        Mouse.CancelDoubleClick = false;
                        uint ticks = SDL_GetTicks();

                        if (Mouse.LastMidButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks)
                        {
                            Mouse.LastMidButtonClickTime = 0;
                            var res = _scene.OnMiddleMouseDoubleClick();

                            MouseDoubleClickEventArgs arg = new MouseDoubleClickEventArgs(Mouse.Position.X, Mouse.Position.Y, MouseButton.Middle);

                            if (!arg.Result && !res)
                            {
                                _scene.OnMiddleMouseDown();
                            }

                            break;
                        }

                        Plugin.ProcessMouse(e.button.button, 0);

                        _scene.OnMiddleMouseDown();
                        Mouse.LastMidButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        Mouse.MButtonPressed = false;
                        Mouse.End();
                    }

                    break;

                case SDL_BUTTON_RIGHT:

                    if (isDown)
                    {
                        Mouse.Begin();
                        Mouse.RButtonPressed    = true;
                        Mouse.RDropPosition     = Mouse.Position;
                        Mouse.CancelDoubleClick = false;
                        uint ticks = SDL_GetTicks();

                        if (Mouse.LastRightButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks)
                        {
                            Mouse.LastRightButtonClickTime = 0;

                            var res = _scene.OnRightMouseDoubleClick() || UIManager.OnRightMouseDoubleClick();

                            MouseDoubleClickEventArgs arg = new MouseDoubleClickEventArgs(Mouse.Position.X, Mouse.Position.Y, MouseButton.Right);

                            if (!arg.Result && !res)
                            {
                                _scene.OnRightMouseDown();
                                UIManager.OnRightMouseButtonDown();
                            }
                            else
                            {
                                Mouse.LastRightButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        _scene.OnRightMouseDown();
                        UIManager.OnRightMouseButtonDown();

                        Mouse.LastRightButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (resetTime)
                        {
                            Mouse.LastRightButtonClickTime = 0;
                        }

                        if (Mouse.LastRightButtonClickTime != 0xFFFF_FFFF)
                        {
                            _scene.OnRightMouseUp();
                            UIManager.OnRightMouseButtonUp();
                        }
                        Mouse.RButtonPressed = false;
                        Mouse.End();
                    }

                    break;

                case SDL_BUTTON_X1:

                    if (isDown)
                    {
                        Plugin.ProcessMouse(e.button.button, 0);
                    }

                    break;

                case SDL_BUTTON_X2:

                    if (isDown)
                    {
                        Plugin.ProcessMouse(e.button.button, 0);
                    }

                    break;
                }

                break;
            }
        }
Exemplo n.º 6
0
 /// <summary>
 /// Handle mouse double click to select word under the mouse.
 /// </summary>
 /// <param name="parent">the control hosting the html to set cursor and invalidate</param>
 /// <param name="e">mouse event args</param>
 public void HandleMouseDoubleClick(SDL.SDL_MouseButtonEvent e)
 {
     _htmlContainerInt.HandleMouseDoubleClick(new ControlAdapter(SDL2Adapter.Instance, e.ToRPoint(), e), e.ToRPoint());
 }
Exemplo n.º 7
0
        public void ProcessMouseEvent(SDL.SDL_MouseButtonEvent button)
        {
            bool pressed = button.state == SDL.SDL_PRESSED;

            SetButtonState(TranslateButton(button.button), pressed);
        }
Exemplo n.º 8
0
 public static RMouseEvent ToRMouseEvent(this SDL.SDL_MouseButtonEvent e)
 {
     return(new RMouseEvent((e.button & SDL.SDL_BUTTON_LEFT) != 0));
 }
Exemplo n.º 9
0
 public static RPoint ToRPoint(this SDL.SDL_MouseButtonEvent e)
 {
     return(new RPoint(e.x, e.y));
 }
Exemplo n.º 10
0
 public ControlAdapter(RAdapter adapter, RPoint mouse_location, SDL.SDL_MouseButtonEvent mouse_event) : base(adapter)
 {
     _mouseLocation    = mouse_location;
     _leftMouseButton  = (mouse_event.button & SDL.SDL_BUTTON_LEFT) > 0;
     _rightMouseButton = (mouse_event.button & SDL.SDL_BUTTON_RIGHT) > 0;
 }
Exemplo n.º 11
0
 public MouseButtonDownEventArgs(SDL.SDL_MouseButtonEvent evt)
 {
     _evt = evt;
 }