mirror of
				https://github.com/lightpanda-io/browser.git
				synced 2025-10-30 15:41:48 +00:00 
			
		
		
		
	events: add EventTargetBase
EventTargetBase implements event target vtable for pure zig struct
This commit is contained in:
		| @@ -3,6 +3,7 @@ const std = @import("std"); | ||||
| const c = @cImport({ | ||||
|     @cInclude("dom/dom.h"); | ||||
|     @cInclude("dom/bindings/hubbub/parser.h"); | ||||
|     @cInclude("events/event_target.h"); | ||||
| }); | ||||
|  | ||||
| const Callback = @import("jsruntime").Callback; | ||||
| @@ -622,6 +623,33 @@ pub fn eventTargetDispatchEvent(et: *EventTarget, event: *Event) !bool { | ||||
|     return res; | ||||
| } | ||||
|  | ||||
| // EventTargetBase is used to implement EventTarget for pure zig struct. | ||||
| pub const EventTargetTBase = struct { | ||||
|     const Self = @This(); | ||||
|  | ||||
|     vtable: ?*const c.struct_dom_event_target_vtable = &c.struct_dom_event_target_vtable{ | ||||
|         .dispatch_event = dispatch_event, | ||||
|         .remove_event_listener = remove_event_listener, | ||||
|         .add_event_listener = add_event_listener, | ||||
|     }, | ||||
|     eti: c.dom_event_target_internal = c.dom_event_target_internal{ .listeners = null }, | ||||
|  | ||||
|     pub fn add_event_listener(et: [*c]c.dom_event_target, t: [*c]c.dom_string, l: ?*c.struct_dom_event_listener, capture: bool) callconv(.C) c.dom_exception { | ||||
|         const self = @as(*Self, @ptrCast(et)); | ||||
|         return c._dom_event_target_add_event_listener(&self.eti, t, l, capture); | ||||
|     } | ||||
|  | ||||
|     pub fn dispatch_event(et: [*c]c.dom_event_target, evt: ?*c.struct_dom_event, res: [*c]bool) callconv(.C) c.dom_exception { | ||||
|         const self = @as(*Self, @ptrCast(et)); | ||||
|         return c._dom_event_target_dispatch(et, &self.eti, evt, c.DOM_BUBBLING_PHASE, res); | ||||
|     } | ||||
|  | ||||
|     pub fn remove_event_listener(et: [*c]c.dom_event_target, t: [*c]c.dom_string, l: ?*c.struct_dom_event_listener, capture: bool) callconv(.C) c.dom_exception { | ||||
|         const self = @as(*Self, @ptrCast(et)); | ||||
|         return c._dom_event_target_add_event_listener(&self.eti, t, l, capture); | ||||
|     } | ||||
| }; | ||||
|  | ||||
| // NodeType | ||||
|  | ||||
| pub const NodeType = enum(u4) { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Pierre Tachoire
					Pierre Tachoire