Skip to content

Instantly share code, notes, and snippets.

@run-dlang
Created January 15, 2022 23:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save run-dlang/d58d084752a1f65148b33c796535a4e2 to your computer and use it in GitHub Desktop.
Save run-dlang/d58d084752a1f65148b33c796535a4e2 to your computer and use it in GitHub Desktop.
Code shared from run.dlang.io.
import std.stdio;
enum EventType
{
WindowResize,
WindowTitleChange
}
struct WindowResize
{
uint newWidth, newHeight;
}
struct WindowTitle
{
string newTitle;
}
alias EventHandler = void function(Event);
class EventEngine
{
EventHandler[EventType] handlers;
void addHandler(EventType type, EventHandler handler)
{
handlers[type] = handler;
}
void emit(Event evt)
{
handlers[evt.type](evt);
}
}
struct Event
{
EventType type;
union
{
WindowResize windowResize;
WindowTitle windowTitle;
}
}
void onResize(Event evt)
{
writefln("Resized: %d %d", evt.windowResize.newWidth, evt.windowResize.newHeight);
}
void onWindowTitle(Event evt)
{
writefln("Window title changed: %s", evt.windowTitle.newTitle);
}
void main()
{
EventEngine engine = new EventEngine();
engine.addHandler(EventType.WindowResize, &onResize);
engine.addHandler(EventType.WindowTitleChange, &onWindowTitle);
Event resizeEvent;
resizeEvent.type = EventType.WindowResize;
resizeEvent.windowResize.newWidth = 1024;
resizeEvent.windowResize.newHeight = 768;
engine.emit(resizeEvent);
Event titleEvent;
titleEvent.windowTitle.newTitle = "new title";
titleEvent.type = EventType.WindowTitleChange;
engine.emit(titleEvent);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment