First implementation of Event system

Signed-off-by: Francis Bouvier <francis@lightpanda.io>
This commit is contained in:
Francis Bouvier
2024-01-17 00:12:57 +01:00
parent 6bac8763f7
commit ae6a714573
5 changed files with 133 additions and 0 deletions

View File

@@ -341,9 +341,51 @@ fn DOMErr(except: DOMException) DOMError!void {
};
}
// Event
pub const Event = c.dom_event;
pub const EventHandler = fn (?*Event, ?*anyopaque) callconv(.C) void;
pub fn eventCreate() !*Event {
var evt: ?*Event = undefined;
const err = c._dom_event_create(&evt);
try DOMErr(err);
return evt.?;
}
pub fn eventInit(evt: *Event, eventType: []const u8) !void {
const s = try strFromData(eventType);
const err = c._dom_event_init(evt, s, false, false);
try DOMErr(err);
}
// EventTarget
pub const EventTarget = c.dom_event_target;
fn eventTargetVtable(et: *EventTarget) c.dom_event_target_vtable {
return getVtable(c.dom_event_target_vtable, EventTarget, et);
}
pub fn eventTargetAddEventListener(
et: *EventTarget,
eventType: []const u8,
data: ?*anyopaque,
comptime handler: EventHandler,
) !void {
const s = try strFromData(eventType);
var listener: ?*c.dom_event_listener = undefined;
const errLst = c.dom_event_listener_create(handler, data, &listener);
try DOMErr(errLst);
const err = eventTargetVtable(et).add_event_listener.?(et, s, listener, true);
try DOMErr(err);
}
pub fn eventTargetDispatchEvent(et: *EventTarget, event: *Event) !bool {
var res: bool = undefined;
const err = eventTargetVtable(et).dispatch_event.?(et, event, &res);
try DOMErr(err);
return res;
}
// NodeType
pub const NodeType = enum(u4) {