' Not spew,' said Alphaglosined impatiently. 'It's S-P-E-W. Stands for the System Propagation of Event Wells.'
So what is an Event Well, you may ask. Well good question. I don't quite know, but it has something to do with creating events at a higher level then the system that created them and propagating them to a nice user (developer) interface.
In the end what exactly are the goals for S.P.E.W? Well not much, just a unified event loop, bindings and of course interfacing to OS constructs that can have major performance impact like windowing.
So why should we take you seriously? After all glib exists. Well, you're still reading this aren't you.
- Windows 7+ (tested on Windows 10 officially only)
Depends upon LibUV for sockets+timer+file watcher support. Can load+extract from a Nuget package. The linked packed is fat, meaning it should work on Linux, OSX and Windows.
Warning: Windows 64bit for dmd is currently bugged when using the diagnostic code. OpenGL bindings is too large for debug information.
- General structure
- Event loop
- Abstraction
- Basic implementation
- Wells:
- X11
- WinAPI
- Cocoa
- LibUV
- GLIB
- Poll (posix)
- Epoll (linux)
- D-Bus (system-d)
- Consumers:
- X11
- WinAPI
- Cocoa
- Streams
- TCP
- Client LibUV
- Client Fallback
- Server LibUV
- Server Fallbak
- UDP
- Local LibUV
- Local Fallback
- Remote LibUV
- Remote Fallback
- TCP
- File system
- Watcher
- LibUV
- Fallback
- Watcher
- Timer
- WinAPI
- LibUV
- Fallback
- Windowing
- X11
- Core
- Features:
- notifications
- FreeDesktop
- D-Bus org.freedesktop.Notifications
- cursor
- icon
- screenshot
- Clipboard
- Drag&Drop
- notifications
- Contexts:
- VRAM
- OpenGL
- Robot
- WinAPI
- Core
- Features:
- notifications
- cursor
- icon
- menu
- screenshot
- Clipboard
- Drag&Drop
- Contexts:
- VRAM
- OpenGL
- Robot
- Cocoa
- Core
- Features:
- notifications
- cursor
- icon
- menu
- screenshot
- Clipboard
- Drag&Drop
- Contexts:
- VRAM
- OpenGL
- Robot
- X11
Warning:
- For X11 under e.g. KDE you won't get a notification window support. You must create an external config file to make it appear.
Short list of won't-implement:
- Contexts
- DirectX
- Vulkan
- Metal
- Input
- Game controllers, I suggest you to use a library like libstem_gamepad or NVGamepad.
- Audio, I suggest you use Port Audio or libsoundio.
Boost