feyris-tan ef86554f9a Import
2025-05-12 22:09:16 +02:00

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;
}
}