245 lines
11 KiB
C#
245 lines
11 KiB
C#
using SDL2;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
using SDL2Demo.SdlWrapper;
|
|
using static SDL2.SDL;
|
|
|
|
namespace testdrid.SdlWrapper
|
|
{
|
|
internal class EventPoller
|
|
{
|
|
public static EventPoller GetInstance()
|
|
{
|
|
if (singleton == null)
|
|
{
|
|
singleton = new EventPoller();
|
|
}
|
|
|
|
return singleton;
|
|
}
|
|
|
|
private EventPoller()
|
|
{
|
|
}
|
|
|
|
private static EventPoller singleton;
|
|
private SDL_Event sdlEvent;
|
|
public IEventConsumer Junction { get; set; }
|
|
public void PollEvents()
|
|
{
|
|
while (SDL.SDL_PollEvent(out sdlEvent) != 0)
|
|
{
|
|
Junction.ProcessEvent(sdlEvent);
|
|
switch (sdlEvent.type)
|
|
{
|
|
case SDL_EventType.SDL_AUDIODEVICEADDED:
|
|
SDL_AudioDeviceEvent sdlAudioDeviceEvent = sdlEvent.adevice;
|
|
AudioDeviceAdded?.Invoke(sdlAudioDeviceEvent);
|
|
break;
|
|
case SDL_EventType.SDL_WINDOWEVENT:
|
|
SDL_WindowEvent sdlWindowEvent = sdlEvent.window;
|
|
switch (sdlWindowEvent.windowEvent)
|
|
{
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_SHOWN:
|
|
WindowShown?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_GAINED:
|
|
WindowFocusGained?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_EXPOSED:
|
|
WindowExposed?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_CLOSE:
|
|
WindowClose?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_ENTER:
|
|
WindowEnteredByMouseCursor?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_LEAVE:
|
|
WindowLeftByMouseCursor?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_FOCUS_LOST:
|
|
WindowFocusGained?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_MOVED:
|
|
WindowMoved?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_HIDDEN:
|
|
WindowHidden?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_SIZE_CHANGED:
|
|
WindowSizeChanged?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_MINIMIZED:
|
|
WindowMinimized?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_RESIZED:
|
|
WindowResized?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_RESTORED:
|
|
WindowResized?.Invoke(sdlWindowEvent);
|
|
break;
|
|
case SDL_WindowEventID.SDL_WINDOWEVENT_ICCPROF_CHANGED:
|
|
WindowIccProfileChanged?.Invoke(sdlWindowEvent);
|
|
break;
|
|
default:
|
|
Console.WriteLine(sdlWindowEvent.windowEvent.ToString());
|
|
throw new NotImplementedException(sdlWindowEvent.windowEvent.ToString());
|
|
}
|
|
break;
|
|
case SDL_EventType.SDL_TEXTEDITING:
|
|
SDL_TextEditingEvent sdlTextEditingEvent = sdlEvent.edit;
|
|
TextEditing?.Invoke(sdlTextEditingEvent);
|
|
break;
|
|
case SDL_EventType.SDL_MOUSEMOTION:
|
|
SDL_MouseMotionEvent sdlMouseMotionEvent = sdlEvent.motion;
|
|
MouseMotion?.Invoke(sdlMouseMotionEvent);
|
|
break;
|
|
case SDL_EventType.SDL_QUIT:
|
|
SDL_QuitEvent sdlQuitEvent = sdlEvent.quit;
|
|
Quit?.Invoke(sdlQuitEvent);
|
|
break;
|
|
case SDL_EventType.SDL_MOUSEBUTTONDOWN:
|
|
SDL_MouseButtonEvent sdlMouseButtonEvent = sdlEvent.button;
|
|
MouseButtonDown?.Invoke(sdlMouseButtonEvent);
|
|
break;
|
|
case SDL_EventType.SDL_MOUSEBUTTONUP:
|
|
SDL_MouseButtonEvent sdlMouseButtonEvent2 = sdlEvent.button;
|
|
MouseButtonUp?.Invoke(sdlMouseButtonEvent2);
|
|
break;
|
|
case SDL_EventType.SDL_MOUSEWHEEL:
|
|
SDL_MouseWheelEvent sdlMouseWheelEvent = sdlEvent.wheel;
|
|
MouseWheel?.Invoke(sdlMouseWheelEvent);
|
|
break;
|
|
case SDL_EventType.SDL_CLIPBOARDUPDATE:
|
|
ClipboardUpdate?.Invoke();
|
|
break;
|
|
case SDL_EventType.SDL_KEYDOWN:
|
|
SDL_KeyboardEvent sdlKeyboardEvent = sdlEvent.key;
|
|
KeyDown?.Invoke(sdlKeyboardEvent);
|
|
break;
|
|
case SDL_EventType.SDL_TEXTINPUT:
|
|
SDL_TextInputEvent sdlTextInputEvent = sdlEvent.text;
|
|
TextInput?.Invoke(sdlTextInputEvent);
|
|
break;
|
|
case SDL_EventType.SDL_KEYUP:
|
|
SDL_KeyboardEvent sdlEventKey = sdlEvent.key;
|
|
KeyUp?.Invoke(sdlEventKey);
|
|
break;
|
|
case SDL_EventType.SDL_RENDER_TARGETS_RESET:
|
|
RenderTargetsReset?.Invoke(sdlEvent);
|
|
break;
|
|
case SDL_EventType.SDL_DISPLAYEVENT:
|
|
switch (sdlEvent.display.displayEvent)
|
|
{
|
|
case SDL_DisplayEventID.SDL_DISPLAYEVENT_CONNECTED:
|
|
DisplayConnected?.Invoke(sdlEvent.display);
|
|
break;
|
|
case SDL_DisplayEventID.SDL_DISPLAYEVENT_DISCONNECTED:
|
|
DisplayDisconnected?.Invoke(sdlEvent.display);
|
|
break;
|
|
default:
|
|
throw new NotImplementedException(sdlEvent.display.displayEvent.ToString());
|
|
}
|
|
break;
|
|
case SDL_EventType.SDL_DROPBEGIN:
|
|
DropBegin?.Invoke(sdlEvent.drop);
|
|
break;
|
|
case SDL_EventType.SDL_JOYDEVICEADDED:
|
|
JoystickDeviceAdded?.Invoke(sdlEvent.jdevice);
|
|
break;
|
|
case SDL_EventType.SDL_CONTROLLERDEVICEADDED:
|
|
ControllerDeviceAdded?.Invoke(sdlEvent.cdevice);
|
|
break;
|
|
case SDL_EventType.SDL_AUDIODEVICEREMOVED:
|
|
AudioDeviceRemoved?.Invoke(sdlEvent.adevice);
|
|
break;
|
|
default:
|
|
Console.WriteLine(sdlEvent.type.ToString());
|
|
throw new NotImplementedException(sdlEvent.type.ToString());
|
|
}
|
|
}
|
|
}
|
|
|
|
public delegate void ControllerDeviceDelegate(SDL_ControllerDeviceEvent cde);
|
|
public event ControllerDeviceDelegate ControllerDeviceAdded;
|
|
|
|
public delegate void JoystickDeviceDelegate(SDL_JoyDeviceEvent jde);
|
|
public event JoystickDeviceDelegate JoystickDeviceAdded;
|
|
|
|
public delegate void DropEventDelegate(SDL_DropEvent de);
|
|
public event DropEventDelegate DropBegin;
|
|
|
|
public delegate void DisplayEventDelegate(SDL_DisplayEvent de);
|
|
public event DisplayEventDelegate DisplayConnected;
|
|
public event DisplayEventDelegate DisplayDisconnected;
|
|
|
|
public delegate void AudioDeviceEventDelegate(SDL_AudioDeviceEvent ade);
|
|
public event AudioDeviceEventDelegate AudioDeviceAdded;
|
|
public event AudioDeviceEventDelegate AudioDeviceRemoved;
|
|
|
|
public delegate void WindowEventDelegate(SDL_WindowEvent we);
|
|
public event WindowEventDelegate WindowShown;
|
|
|
|
public event WindowEventDelegate WindowFocusGained;
|
|
|
|
public delegate void TextEditingEventDelegate(SDL_TextEditingEvent tee);
|
|
public event TextEditingEventDelegate TextEditing;
|
|
|
|
public event WindowEventDelegate WindowExposed;
|
|
|
|
public event WindowEventDelegate WindowClose;
|
|
|
|
public event WindowEventDelegate WindowEnteredByMouseCursor;
|
|
|
|
public delegate void MouseMotionEventDelegate(SDL_MouseMotionEvent mme);
|
|
public event MouseMotionEventDelegate MouseMotion;
|
|
|
|
public event WindowEventDelegate WindowLeftByMouseCursor;
|
|
|
|
public delegate void QuitEventDelegate(SDL_QuitEvent qe);
|
|
public event QuitEventDelegate Quit;
|
|
|
|
public event WindowEventDelegate WindowFocusLost;
|
|
|
|
public event WindowEventDelegate WindowMoved;
|
|
|
|
public event WindowEventDelegate WindowHidden;
|
|
|
|
public event WindowEventDelegate WindowIccProfileChanged;
|
|
|
|
public delegate void MouseButtonEventDelegate(SDL_MouseButtonEvent mbe);
|
|
public event MouseButtonEventDelegate MouseButtonDown;
|
|
|
|
public event MouseButtonEventDelegate MouseButtonUp;
|
|
|
|
public delegate void MouseWheelEventDelegate(SDL_MouseWheelEvent mwe);
|
|
public event MouseWheelEventDelegate MouseWheel;
|
|
|
|
public delegate void ClipboardUpdateDelegate();
|
|
public event ClipboardUpdateDelegate ClipboardUpdate;
|
|
|
|
public delegate void KeyboardEventDelegate(SDL_KeyboardEvent ke);
|
|
public event KeyboardEventDelegate KeyDown;
|
|
|
|
public delegate void TextInputEventDelegate(SDL_TextInputEvent tie);
|
|
public event TextInputEventDelegate TextInput;
|
|
|
|
public event KeyboardEventDelegate KeyUp;
|
|
|
|
public event WindowEventDelegate WindowSizeChanged;
|
|
|
|
public delegate void InformalEventDelegate(SDL_Event sdlEvent);
|
|
public event InformalEventDelegate RenderTargetsReset;
|
|
|
|
public event WindowEventDelegate WindowMinimized;
|
|
|
|
public event WindowEventDelegate WindowResized;
|
|
|
|
public event WindowEventDelegate WindowRestored;
|
|
}
|
|
}
|