Created
January 15, 2022 23:10
-
-
Save run-dlang/d58d084752a1f65148b33c796535a4e2 to your computer and use it in GitHub Desktop.
Code shared from run.dlang.io.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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