Esempio n. 1
0
        private void RunEventLoop()
        {
            unsafe
            {
                SDL_AddEventWatch((userData, eventPtr) =>
                {
                    SDL_Event *sdlEvent = (SDL_Event *)eventPtr;

                    if (sdlEvent->type == SDL_EventType.SDL_WINDOWEVENT &&
                        sdlEvent->window.windowEvent == SDL_WindowEventID.SDL_WINDOWEVENT_RESIZED)
                    {
                        this.gameThread.ScheduleAndWait(() =>
                        {
                            this.SizeChanged(sdlEvent->window.data1, sdlEvent->window.data2);
                            this.Render();


                            SDL_GL_SwapWindow(this.Window.Handle);
                        });
                    }

                    return(0);
                }, this.Window.Handle);
            }

            while (true)
            {
                while (SDL_PollEvent(out SDL_Event e) == 1)
                {
                    switch (e.type)
                    {
                    case SDL_EventType.SDL_KEYDOWN:
                        if (e.key.keysym.sym == SDL_Keycode.SDLK_ESCAPE)
                        {
                            return;
                        }

                        break;

                    case SDL_EventType.SDL_QUIT:
                        return;
                    }
                }

                while (!this.tasks.IsEmpty)
                {
                    this.tasks.TryDequeue(out Action result);

                    result.Invoke();
                }

                Thread.Sleep(5);
            }
        }
Esempio n. 2
0
        private unsafe int HookFunc(IntPtr userdata, IntPtr ev)
        {
            SDL_Event *e = (SDL_Event *)ev;

            switch (e->type)
            {
            // KEYBOARD
            case SDL_EventType.SDL_KEYDOWN:
                OnKeyDown(new InputKeyboardEvent(KeyboardEvent.Down, e->key.keysym.sym, 0, e->key.keysym.mod));

                break;

            case SDL_EventType.SDL_KEYUP:
                OnKeyUp(new InputKeyboardEvent(KeyboardEvent.Up, e->key.keysym.sym, 0, e->key.keysym.mod));

                break;

            case SDL_EventType.SDL_TEXTINPUT:
                string s = StringHelper.ReadUTF8(e->text.text);

                if (!string.IsNullOrEmpty(s))
                {
                    OnTextInput(new InputKeyboardEvent(KeyboardEvent.TextInput, SDL_Keycode.SDLK_UNKNOWN, 0, SDL_Keymod.KMOD_NONE)
                    {
                        KeyChar = s
                    });
                }

                break;

            // MOUSE
            case SDL_EventType.SDL_MOUSEBUTTONDOWN:
                OnMouseDown(new InputMouseEvent(MouseEvent.Down, CovertMouseButton(e->button.button), e->button.clicks, e->button.x, e->button.y, 0, SDL_Keymod.KMOD_NONE));

                break;

            case SDL_EventType.SDL_MOUSEBUTTONUP:
                OnMouseUp(new InputMouseEvent(MouseEvent.Up, CovertMouseButton(e->button.button), e->button.clicks, e->button.x, e->button.y, 0, SDL_Keymod.KMOD_NONE));

                break;

            case SDL_EventType.SDL_MOUSEMOTION:
                OnMouseMove(new InputMouseEvent(MouseEvent.Move, CovertMouseButton(e->button.button), 0, e->motion.x, e->motion.y, 0, SDL_Keymod.KMOD_NONE));

                break;

            case SDL_EventType.SDL_MOUSEWHEEL:
                OnMouseWheel(new InputMouseEvent(MouseEvent.WheelScroll, MouseButton.Middle, 0, e->wheel.x, e->wheel.y, 0, SDL_Keymod.KMOD_NONE));

                break;
            }

            return(1);
        }
Esempio n. 3
0
        private static unsafe Int32 SDLEventFilter(IntPtr userdata, SDL_Event * @event)
        {
            var uv = RequestCurrent();

            if (uv == null)
            {
                return(1);
            }

            switch (@event->type)
            {
            case SDL_APP_TERMINATING:
                uv.Messages.PublishImmediate(UltravioletMessages.ApplicationTerminating, null);
                return(0);

            case SDL_APP_WILLENTERBACKGROUND:
                uv.Messages.PublishImmediate(UltravioletMessages.ApplicationSuspending, null);
                return(0);

            case SDL_APP_DIDENTERBACKGROUND:
                uv.Messages.PublishImmediate(UltravioletMessages.ApplicationSuspended, null);
                return(0);

            case SDL_APP_WILLENTERFOREGROUND:
                uv.Messages.PublishImmediate(UltravioletMessages.ApplicationResuming, null);
                return(0);

            case SDL_APP_DIDENTERFOREGROUND:
                uv.Messages.PublishImmediate(UltravioletMessages.ApplicationResumed, null);
                return(0);

            case SDL_APP_LOWMEMORY:
                uv.Messages.PublishImmediate(UltravioletMessages.LowMemory, null);
                GC.Collect(GC.MaxGeneration, GCCollectionMode.Forced);
                return(0);
            }

            return(1);
        }
Esempio n. 4
0
        private unsafe int HookFunc(IntPtr userdata, IntPtr ev)
        {
            SDL_Event *e = (SDL_Event *)ev;

            switch (e->type)
            {
            case SDL_EventType.SDL_WINDOWEVENT:
                switch (e->window.windowEvent)
                {
                case SDL_WindowEventID.SDL_WINDOWEVENT_ENTER:
                    Mouse.MouseInWindow = true;
                    break;

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

                case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
                    // SDL_CaptureMouse(SDL_bool.SDL_TRUE);
                    //Log.Message(LogTypes.Debug, "FOCUS");
                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
                    //Log.Message(LogTypes.Debug, "NO FOCUS");
                    //SDL_CaptureMouse(SDL_bool.SDL_FALSE);

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_TAKE_FOCUS:
                    //Log.Message(LogTypes.Debug, "TAKE FOCUS");
                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_HIT_TEST:

                    break;
                }

                break;

            case SDL_EventType.SDL_SYSWMEVENT:
                break;

            case SDL_EventType.SDL_KEYDOWN:
                KeyDown?.Raise(e->key);

                break;

            case SDL_EventType.SDL_KEYUP:
                KeyUp.Raise(e->key);

                break;

            case SDL_EventType.SDL_TEXTINPUT:
                string s = StringHelper.ReadUTF8(e->text.text);

                if (!string.IsNullOrEmpty(s))
                {
                    TextInput.Raise(s);
                }

                break;

            case SDL_EventType.SDL_MOUSEMOTION:
                Mouse.Update();
                if (Mouse.IsDragging)
                {
                    MouseDragging.Raise();
                }

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

                break;

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

                break;

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

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

                SDL_MouseButtonEvent mouse = e->button;

                switch ((uint)mouse.button)
                {
                case SDL_BUTTON_LEFT:
                    Mouse.LButtonPressed = isDown;

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

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

                            if (LeftMouseDoubleClick != null && !LeftMouseDoubleClick.Invoke())
                            {
                                LeftMouseButtonDown.Raise();
                            }
                            else
                            {
                                Mouse.LastLeftButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        LeftMouseButtonDown.Raise();
                        Mouse.LastLeftButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastLeftButtonClickTime != 0xFFFF_FFFF)
                        {
                            LeftMouseButtonUp.Raise();
                        }
                        Mouse.End();
                    }

                    break;

                case SDL_BUTTON_MIDDLE:
                    Mouse.MButtonPressed = isDown;

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

                        if (Mouse.LastMidButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks)
                        {
                            if (MidMouseDoubleClick != null && !MidMouseDoubleClick.Invoke())
                            {
                                MidMouseButtonDown.Raise();
                            }
                            Mouse.LastMidButtonClickTime = 0;

                            break;
                        }

                        MidMouseButtonDown.Raise();
                        Mouse.LastMidButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        MidMouseButtonUp.Raise();
                        Mouse.End();
                    }

                    break;

                case SDL_BUTTON_RIGHT:
                    Mouse.RButtonPressed = isDown;

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

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

                            if (RightMouseDoubleClick != null && !RightMouseDoubleClick.Invoke())
                            {
                                RightMouseButtonDown.Raise();
                            }
                            else
                            {
                                Mouse.LastRightButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        RightMouseButtonDown.Raise();
                        Mouse.LastRightButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastRightButtonClickTime != 0xFFFF_FFFF)
                        {
                            RightMouseButtonUp.Raise();
                        }
                        Mouse.End();
                    }

                    break;

                case SDL_BUTTON_X1:

                    break;

                case SDL_BUTTON_X2:

                    break;
                }

                break;
            }

            //switch (e->type)
            //{
            //    // KEYBOARD
            //    case SDL_EventType.SDL_KEYDOWN:
            //        OnKeyDown(new InputKeyboardEvent(KeyboardEvent.Down, e->key.keysym.sym, 0, e->key.keysym.mod));

            //        break;
            //    case SDL_EventType.SDL_KEYUP:
            //        OnKeyUp(new InputKeyboardEvent(KeyboardEvent.Up, e->key.keysym.sym, 0, e->key.keysym.mod));

            //        break;
            //    case SDL_EventType.SDL_TEXTINPUT:
            //        string s = StringHelper.ReadUTF8(e->text.text);

            //        if (!string.IsNullOrEmpty(s))
            //            OnTextInput(new InputKeyboardEvent(KeyboardEvent.TextInput, SDL_Keycode.SDLK_UNKNOWN, 0, SDL_Keymod.KMOD_NONE) {KeyChar = s});

            //        break;

            //    // MOUSE
            //    case SDL_EventType.SDL_MOUSEBUTTONDOWN:
            //        MouseDown.Raise();
            //        OnMouseDown(new InputMouseEvent(MouseEvent.Down, CovertMouseButton(e->button.button), e->button.clicks, e->button.x, e->button.y, 0, SDL_Keymod.KMOD_NONE));

            //        break;
            //    case SDL_EventType.SDL_MOUSEBUTTONUP:
            //        MouseUp.Raise();
            //        OnMouseUp(new InputMouseEvent(MouseEvent.Up, CovertMouseButton(e->button.button), e->button.clicks, e->button.x, e->button.y, 0, SDL_Keymod.KMOD_NONE));

            //        switch (e->button.clicks)
            //        {
            //            case 1:
            //                MouseClick.Raise();
            //                break;
            //            case 2:
            //                MouseDoubleClick.Raise();
            //                break;
            //        }

            //        break;
            //    case SDL_EventType.SDL_MOUSEMOTION:
            //        MouseMove.Raise();
            //        OnMouseMove(new InputMouseEvent(MouseEvent.Move, CovertMouseButton(e->button.button), 0, e->motion.x, e->motion.y, 0, SDL_Keymod.KMOD_NONE));

            //        break;
            //    case SDL_EventType.SDL_MOUSEWHEEL:
            //        OnMouseWheel(new InputMouseEvent(MouseEvent.WheelScroll, MouseButton.Middle, 0, e->wheel.x, e->wheel.y, 0, SDL_Keymod.KMOD_NONE));

            //        break;
            //}

            return(1);
        }
Esempio n. 5
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);
        }
Esempio n. 6
0
 public static int SDL_PollEvent(SDL_Event * @event) => s_sdl_pollEvent(@event);
Esempio n. 7
0
 public static extern bool SDL_PollEvent(SDL_Event *eventt);
Esempio n. 8
0
        private unsafe int HookFunc(IntPtr userdata, IntPtr ev)
        {
            SDL_Event *e = (SDL_Event *)ev;

            switch (e->type)
            {
            case SDL_EventType.SDL_WINDOWEVENT:

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

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE:
                    Mouse.MouseInWindow = false;

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
                    Plugin.OnFocusGained();
                    // SDL_CaptureMouse(SDL_bool.SDL_TRUE);
                    //Log.Message(LogTypes.Debug, "FOCUS");
                    break;

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

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_TAKE_FOCUS:

                    //Log.Message(LogTypes.Debug, "TAKE FOCUS");
                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_HIT_TEST:

                    break;
                }

                break;

            case SDL_EventType.SDL_SYSWMEVENT:

                break;

            case SDL_EventType.SDL_KEYDOWN:

                if (Plugin.ProcessHotkeys((int)e->key.keysym.sym, (int)e->key.keysym.mod, true))
                {
                    Keyboard.IgnoreNextTextInput = false;
                    KeyDown?.Raise(e->key);
                }
                else
                {
                    Keyboard.IgnoreNextTextInput = true;
                }

                break;

            case SDL_EventType.SDL_KEYUP:
                //if (Plugin.ProcessHotkeys((int)e->key.keysym.sym, (int)e->key.keysym.mod, false))
                KeyUp.Raise(e->key);

                break;

            case SDL_EventType.SDL_TEXTINPUT:

                if (Keyboard.IgnoreNextTextInput)
                {
                    break;
                }

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

                if (!string.IsNullOrEmpty(s))
                {
                    TextInput.Raise(s);
                }

                break;

            case SDL_EventType.SDL_MOUSEMOTION:
                Mouse.Update();
                MouseMoving.Raise();
                if (Mouse.IsDragging)
                {
                    MouseDragging.Raise();
                }

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

                break;

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

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

                break;

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

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

                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;

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

                            LeftMouseDoubleClick.Raise(arg);

                            if (!arg.Result)
                            {
                                LeftMouseButtonDown.Raise();
                            }
                            else
                            {
                                Mouse.LastLeftButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        LeftMouseButtonDown.Raise();
                        Mouse.LastLeftButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastLeftButtonClickTime != 0xFFFF_FFFF)
                        {
                            LeftMouseButtonUp.Raise();
                        }
                        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 = SDL_GetTicks();

                        if (Mouse.LastMidButtonClickTime + Mouse.MOUSE_DELAY_DOUBLE_CLICK >= ticks)
                        {
                            MouseDoubleClickEventArgs arg = new MouseDoubleClickEventArgs(Mouse.Position.X, Mouse.Position.Y, MouseButton.Middle);

                            MidMouseDoubleClick.Raise(arg);

                            if (!arg.Result)
                            {
                                MidMouseButtonDown.Raise();
                            }
                            Mouse.LastMidButtonClickTime = 0;

                            break;
                        }

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

                        MidMouseButtonDown.Raise();
                        Mouse.LastMidButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        MidMouseButtonUp.Raise();
                        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;

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

                            RightMouseDoubleClick.Raise(arg);

                            if (!arg.Result)
                            {
                                RightMouseButtonDown.Raise();
                            }
                            else
                            {
                                Mouse.LastRightButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        RightMouseButtonDown.Raise();
                        Mouse.LastRightButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastRightButtonClickTime != 0xFFFF_FFFF)
                        {
                            RightMouseButtonUp.Raise();
                        }
                        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;
            }
            return(1);
        }
Esempio n. 9
0
        private int HandleSdlEvent(IntPtr userData, IntPtr ptr)
        {
            SDL_Event *sdlEvent = (SDL_Event *)ptr;

            if (Plugin.ProcessWndProc(sdlEvent) != 0)
            {
                if (sdlEvent->type == SDL_EventType.SDL_MOUSEMOTION)
                {
                    if (UIManager.GameCursor != null)
                    {
                        UIManager.GameCursor.AllowDrawSDLCursor = false;
                    }
                }

                return(0);
            }

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

                break;

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

                break;

            case SDL_EventType.SDL_WINDOWEVENT:

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

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE:
                    Mouse.MouseInWindow = false;

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
                    Plugin.OnFocusGained();

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
                    Plugin.OnFocusLost();

                    break;
                }

                break;

            case SDL_EventType.SDL_KEYDOWN:

                Keyboard.OnKeyDown(sdlEvent->key);

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

                    UIManager.KeyboardFocusControl?.InvokeKeyDown(sdlEvent->key.keysym.sym, sdlEvent->key.keysym.mod);

                    Scene.OnKeyDown(sdlEvent->key);
                }
                else
                {
                    _ignoreNextTextInput = true;
                }

                break;

            case SDL_EventType.SDL_KEYUP:

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

                if (sdlEvent->key.keysym.sym == SDL_Keycode.SDLK_PRINTSCREEN)
                {
                    TakeScreenshot();
                }

                break;

            case SDL_EventType.SDL_TEXTINPUT:

                if (_ignoreNextTextInput)
                {
                    break;
                }

                // Fix for linux OS: https://github.com/andreakarasho/ClassicUO/pull/1263
                if (Keyboard.Alt || Keyboard.Ctrl)
                {
                    break;
                }

                string s = UTF8_ToManaged((IntPtr)sdlEvent->text.text, false);

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

                break;

            case SDL_EventType.SDL_MOUSEMOTION:

                if (UIManager.GameCursor != null && !UIManager.GameCursor.AllowDrawSDLCursor)
                {
                    UIManager.GameCursor.AllowDrawSDLCursor = true;
                    UIManager.GameCursor.Graphic            = 0xFFFF;
                }

                Mouse.Update();

                if (Mouse.IsDragging)
                {
                    if (!Scene.OnMouseDragging())
                    {
                        UIManager.OnMouseDragging();
                    }
                }

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

                break;

            case SDL_EventType.SDL_MOUSEWHEEL:
                Mouse.Update();
                bool isScrolledUp = sdlEvent->wheel.y > 0;

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

                if (!Scene.OnMouseWheel(isScrolledUp))
                {
                    UIManager.OnMouseWheel(isScrolledUp);
                }

                break;

            case SDL_EventType.SDL_MOUSEBUTTONDOWN:
            {
                Mouse.Update();

                SDL_MouseButtonEvent mouse = sdlEvent->button;

                // The values in MouseButtonType are chosen to exactly match the SDL values
                MouseButtonType buttonType = (MouseButtonType)mouse.button;

                uint lastClickTime = 0;

                switch (buttonType)
                {
                case MouseButtonType.Left:
                    lastClickTime = Mouse.LastLeftButtonClickTime;

                    break;

                case MouseButtonType.Middle:
                    lastClickTime = Mouse.LastMidButtonClickTime;

                    break;

                case MouseButtonType.Right:
                    lastClickTime = Mouse.LastRightButtonClickTime;

                    break;
                }

                Mouse.ButtonPress(buttonType);
                uint ticks = Time.Ticks;

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

                    bool res = Scene.OnMouseDoubleClick(buttonType) || UIManager.OnMouseDoubleClick(buttonType);

                    if (!res)
                    {
                        if (!Scene.OnMouseDown(buttonType))
                        {
                            UIManager.OnMouseButtonDown(buttonType);
                        }
                    }
                    else
                    {
                        lastClickTime = 0xFFFF_FFFF;
                    }
                }
                else
                {
                    if (buttonType != MouseButtonType.Left && buttonType != MouseButtonType.Right)
                    {
                        Plugin.ProcessMouse(sdlEvent->button.button, 0);
                    }

                    if (!Scene.OnMouseDown(buttonType))
                    {
                        UIManager.OnMouseButtonDown(buttonType);
                    }

                    lastClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                }

                switch (buttonType)
                {
                case MouseButtonType.Left:
                    Mouse.LastLeftButtonClickTime = lastClickTime;

                    break;

                case MouseButtonType.Middle:
                    Mouse.LastMidButtonClickTime = lastClickTime;

                    break;

                case MouseButtonType.Right:
                    Mouse.LastRightButtonClickTime = lastClickTime;

                    break;
                }

                break;
            }

            case SDL_EventType.SDL_MOUSEBUTTONUP:
            {
                Mouse.Update();

                if (_dragStarted)
                {
                    _dragStarted = false;
                }

                SDL_MouseButtonEvent mouse = sdlEvent->button;

                // The values in MouseButtonType are chosen to exactly match the SDL values
                MouseButtonType buttonType = (MouseButtonType)mouse.button;

                uint lastClickTime = 0;

                switch (buttonType)
                {
                case MouseButtonType.Left:
                    lastClickTime = Mouse.LastLeftButtonClickTime;

                    break;

                case MouseButtonType.Middle:
                    lastClickTime = Mouse.LastMidButtonClickTime;

                    break;

                case MouseButtonType.Right:
                    lastClickTime = Mouse.LastRightButtonClickTime;

                    break;
                }

                if (lastClickTime != 0xFFFF_FFFF)
                {
                    if (!Scene.OnMouseUp(buttonType) || UIManager.LastControlMouseDown(buttonType) != null)
                    {
                        UIManager.OnMouseButtonUp(buttonType);
                    }
                }

                Mouse.ButtonRelease(buttonType);

                break;
            }
            }

            return(0);
        }
Esempio n. 10
0
        private int HandleSdlEvent(IntPtr userData, IntPtr ptr)
        {
            SDL_Event *sdlEvent = (SDL_Event *)ptr;

            if (Plugin.ProcessWndProc(sdlEvent) != 0)
            {
                if (sdlEvent->type == SDL_EventType.SDL_MOUSEMOTION)
                {
                    if (UIManager.GameCursor != null)
                    {
                        UIManager.GameCursor.AllowDrawSDLCursor = false;
                    }
                }

                return(0);
            }

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

                break;

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

                break;

            case SDL_EventType.SDL_WINDOWEVENT:

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

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE:
                    Mouse.MouseInWindow = false;

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
                    Plugin.OnFocusGained();

                    break;

                case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
                    Plugin.OnFocusLost();

                    break;
                }

                break;

            case SDL_EventType.SDL_KEYDOWN:

                Keyboard.OnKeyDown(sdlEvent->key);

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

                    Scene.OnKeyDown(sdlEvent->key);
                }
                else
                {
                    _ignoreNextTextInput = true;
                }

                break;

            case SDL_EventType.SDL_KEYUP:

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

                if (sdlEvent->key.keysym.sym == SDL_Keycode.SDLK_PRINTSCREEN)
                {
                    TakeScreenshot();
                }

                break;

            case SDL_EventType.SDL_TEXTINPUT:

                if (_ignoreNextTextInput)
                {
                    break;
                }

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

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

                break;

            case SDL_EventType.SDL_MOUSEMOTION:

                if (UIManager.GameCursor != null && !UIManager.GameCursor.AllowDrawSDLCursor)
                {
                    UIManager.GameCursor.AllowDrawSDLCursor = true;
                    UIManager.GameCursor.Graphic            = 0xFFFF;
                }

                Mouse.Update();

                if (Mouse.IsDragging)
                {
                    if (!Scene.OnMouseDragging())
                    {
                        UIManager.OnMouseDragging();
                    }
                }

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

                break;

            case SDL_EventType.SDL_MOUSEWHEEL:
                Mouse.Update();
                bool isScrolledUp = sdlEvent->wheel.y > 0;

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

                if (!Scene.OnMouseWheel(isScrolledUp))
                {
                    UIManager.OnMouseWheel(isScrolledUp);
                }

                break;

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

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

                SDL_MouseButtonEvent mouse = sdlEvent->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 = Scene.OnLeftMouseDoubleClick() || UIManager.OnLeftMouseDoubleClick();

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

                            break;
                        }

                        if (!Scene.OnLeftMouseDown())
                        {
                            UIManager.OnLeftMouseButtonDown();
                        }

                        Mouse.LastLeftButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastLeftButtonClickTime != 0xFFFF_FFFF)
                        {
                            if (!Scene.OnLeftMouseUp() || UIManager.LastControlMouseDown(MouseButtonType.Left) != null)
                            {
                                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;

                            bool res = Scene.OnMiddleMouseDoubleClick() || UIManager.OnMiddleMouseDoubleClick();

                            if (!res)
                            {
                                if (!Scene.OnMiddleMouseDown())
                                {
                                    UIManager.OnMiddleMouseButtonDown();
                                }
                            }
                            else
                            {
                                Mouse.LastMidButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

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

                        if (!Scene.OnMiddleMouseDown())
                        {
                            UIManager.OnMiddleMouseButtonDown();
                        }

                        Mouse.LastMidButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastMidButtonClickTime != 0xFFFF_FFFF)
                        {
                            if (!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)
                            {
                                if (!Scene.OnRightMouseDown())
                                {
                                    UIManager.OnRightMouseButtonDown();
                                }
                            }
                            else
                            {
                                Mouse.LastRightButtonClickTime = 0xFFFF_FFFF;
                            }

                            break;
                        }

                        if (!Scene.OnRightMouseDown())
                        {
                            UIManager.OnRightMouseButtonDown();
                        }

                        Mouse.LastRightButtonClickTime = Mouse.CancelDoubleClick ? 0 : ticks;
                    }
                    else
                    {
                        if (Mouse.LastRightButtonClickTime != 0xFFFF_FFFF)
                        {
                            if (!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(sdlEvent->button.button, 0);

                        if (!Scene.OnExtraMouseDown(mouse.button - 1))
                        {
                            UIManager.OnExtraMouseButtonDown(mouse.button - 1);
                        }

                        // TODO: doubleclick?
                    }
                    else
                    {
                        if (!Scene.OnExtraMouseUp(mouse.button - 1))
                        {
                            UIManager.OnExtraMouseButtonUp(mouse.button - 1);
                        }

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

                    break;
                }

                break;
            }

            return(0);
        }
Esempio n. 11
0
        /// <summary>
        /// 直接转换相关事件
        /// </summary>
        /// <param name="ev"></param>
        public static unsafe void HandleEvent(SDL_Event *ev)
        {
            if (_host == null)
            {
                return;
            }
            switch (ev->type)
            {
            case SDL_EventType.Quit:
                //Close();
                break;

            case SDL_EventType.Terminating:
                //Close();
                break;

            case SDL_EventType.WindowEvent:
                //SDL_WindowEvent windowEvent = Unsafe.Read<SDL_WindowEvent>(ev);
                //HandleWindowEvent(windowEvent);
                break;

            case SDL_EventType.KeyDown:
            case SDL_EventType.KeyUp:
                SDL_KeyboardEvent keyboardEvent = Unsafe.Read <SDL_KeyboardEvent>(ev);
                HandleKeyboardEvent(keyboardEvent);
                break;

            case SDL_EventType.TextEditing:
                break;

            case SDL_EventType.TextInput:
                SDL_TextInputEvent textInputEvent = Unsafe.Read <SDL_TextInputEvent>(ev);
                HandleTextInputEvent(textInputEvent);
                break;

            case SDL_EventType.KeyMapChanged:
                break;

            case SDL_EventType.MouseMotion:
                SDL_MouseMotionEvent mouseMotionEvent = Unsafe.Read <SDL_MouseMotionEvent>(ev);
                HandleMouseMotionEvent(mouseMotionEvent);
                break;

            case SDL_EventType.MouseButtonDown:
            case SDL_EventType.MouseButtonUp:
                SDL_MouseButtonEvent mouseButtonEvent = Unsafe.Read <SDL_MouseButtonEvent>(ev);
                HandleMouseButtonEvent(mouseButtonEvent);
                break;

            case SDL_EventType.MouseWheel:
                SDL_MouseWheelEvent mouseWheelEvent = Unsafe.Read <SDL_MouseWheelEvent>(ev);
                HandleMouseWheelEvent(mouseWheelEvent);
                break;

            case SDL_EventType.JoyAxisMotion:
                break;

            case SDL_EventType.JoyBallMotion:
                break;

            case SDL_EventType.JoyHatMotion:
                break;

            case SDL_EventType.JoyButtonDown:
                break;

            case SDL_EventType.JoyButtonUp:
                break;

            case SDL_EventType.JoyDeviceAdded:
                break;

            case SDL_EventType.JoyDeviceRemoved:
                break;

            case SDL_EventType.ControllerAxisMotion:
                break;

            case SDL_EventType.ControllerButtonDown:
                break;

            case SDL_EventType.ControllerButtonUp:
                break;

            case SDL_EventType.ControllerDeviceAdded:
                break;

            case SDL_EventType.ControllerDeviceRemoved:
                break;

            case SDL_EventType.ControllerDeviceRemapped:
                break;

            case SDL_EventType.FingerDown:
                break;

            case SDL_EventType.FingerUp:
                break;

            case SDL_EventType.FingerMotion:
                break;

            case SDL_EventType.DollarGesture:
                break;

            case SDL_EventType.DollarRecord:
                break;

            case SDL_EventType.MultiGesture:
                break;

            case SDL_EventType.ClipboardUpdate:
                break;

            case SDL_EventType.DropFile:
                break;

            case SDL_EventType.DropTest:
                break;

            case SDL_EventType.DropBegin:
                break;

            case SDL_EventType.DropComplete:
                break;

            case SDL_EventType.AudioDeviceAdded:
                break;

            case SDL_EventType.AudioDeviceRemoved:
                break;

            case SDL_EventType.RenderTargetsReset:
                break;

            case SDL_EventType.RenderDeviceReset:
                break;

            case SDL_EventType.UserEvent:
                break;

            case SDL_EventType.LastEvent:
                break;

            default:
                // Ignore
                break;
            }
        }