|
@@ -0,0 +1,288 @@
|
|
|
|
+//+build !js
|
|
|
|
+package wasm_js_interface
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+Event_Kind :: enum u32 {
|
|
|
|
+ Invalid,
|
|
|
|
+
|
|
|
|
+ Load,
|
|
|
|
+ Unload,
|
|
|
|
+ Error,
|
|
|
|
+ Resize,
|
|
|
|
+ Visibility_Change,
|
|
|
|
+ Fullscreen_Change,
|
|
|
|
+ Fullscreen_Error,
|
|
|
|
+
|
|
|
|
+ Click,
|
|
|
|
+ Double_Click,
|
|
|
|
+ Mouse_Move,
|
|
|
|
+ Mouse_Over,
|
|
|
|
+ Mouse_Out,
|
|
|
|
+ Mouse_Up,
|
|
|
|
+ Mouse_Down,
|
|
|
|
+
|
|
|
|
+ Key_Up,
|
|
|
|
+ Key_Down,
|
|
|
|
+ Key_Press,
|
|
|
|
+
|
|
|
|
+ Scroll,
|
|
|
|
+ Wheel,
|
|
|
|
+
|
|
|
|
+ Focus,
|
|
|
|
+ Submit,
|
|
|
|
+ Blur,
|
|
|
|
+ Change,
|
|
|
|
+ Select,
|
|
|
|
+
|
|
|
|
+ Animation_Start,
|
|
|
|
+ Animation_End,
|
|
|
|
+ Animation_Iteration,
|
|
|
|
+ Animation_Cancel,
|
|
|
|
+
|
|
|
|
+ Copy,
|
|
|
|
+ Cut,
|
|
|
|
+ Paste,
|
|
|
|
+
|
|
|
|
+ // Drag,
|
|
|
|
+ // Drag_Start,
|
|
|
|
+ // Drag_End,
|
|
|
|
+ // Drag_Enter,
|
|
|
|
+ // Drag_Leave,
|
|
|
|
+ // Drag_Over,
|
|
|
|
+ // Drop,
|
|
|
|
+
|
|
|
|
+ Pointer_Cancel,
|
|
|
|
+ Pointer_Down,
|
|
|
|
+ Pointer_Enter,
|
|
|
|
+ Pointer_Leave,
|
|
|
|
+ Pointer_Move,
|
|
|
|
+ Pointer_Over,
|
|
|
|
+ Pointer_Up,
|
|
|
|
+ Got_Pointer_Capture,
|
|
|
|
+ Lost_Pointer_Capture,
|
|
|
|
+ Pointer_Lock_Change,
|
|
|
|
+ Pointer_Lock_Error,
|
|
|
|
+
|
|
|
|
+ Selection_Change,
|
|
|
|
+ Selection_Start,
|
|
|
|
+
|
|
|
|
+ Touch_Cancel,
|
|
|
|
+ Touch_End,
|
|
|
|
+ Touch_Move,
|
|
|
|
+ Touch_Start,
|
|
|
|
+
|
|
|
|
+ Transition_Start,
|
|
|
|
+ Transition_End,
|
|
|
|
+ Transition_Run,
|
|
|
|
+ Transition_Cancel,
|
|
|
|
+
|
|
|
|
+ Context_Menu,
|
|
|
|
+
|
|
|
|
+ Custom,
|
|
|
|
+
|
|
|
|
+}
|
|
|
|
+event_kind_string := [Event_Kind]string{
|
|
|
|
+ .Invalid = "",
|
|
|
|
+
|
|
|
|
+ .Load = "load",
|
|
|
|
+ .Unload = "unload",
|
|
|
|
+ .Error = "error",
|
|
|
|
+ .Resize = "resize",
|
|
|
|
+ .Visibility_Change = "visibilitychange",
|
|
|
|
+ .Fullscreen_Change = "fullscreenchange",
|
|
|
|
+ .Fullscreen_Error = "fullscreenerror",
|
|
|
|
+
|
|
|
|
+ .Click = "click",
|
|
|
|
+ .Double_Click = "dblclick",
|
|
|
|
+ .Mouse_Move = "mousemove",
|
|
|
|
+ .Mouse_Over = "mouseover",
|
|
|
|
+ .Mouse_Out = "mouseout",
|
|
|
|
+ .Mouse_Up = "mouseup",
|
|
|
|
+ .Mouse_Down = "mousedown",
|
|
|
|
+
|
|
|
|
+ .Key_Up = "keyup",
|
|
|
|
+ .Key_Down = "keydown",
|
|
|
|
+ .Key_Press = "keypress",
|
|
|
|
+
|
|
|
|
+ .Scroll = "scroll",
|
|
|
|
+ .Wheel = "wheel",
|
|
|
|
+
|
|
|
|
+ .Focus = "focus",
|
|
|
|
+ .Submit = "submit",
|
|
|
|
+ .Blur = "blur",
|
|
|
|
+ .Change = "change",
|
|
|
|
+ .Select = "select",
|
|
|
|
+
|
|
|
|
+ .Animation_Start = "animationstart",
|
|
|
|
+ .Animation_End = "animationend",
|
|
|
|
+ .Animation_Iteration = "animationiteration",
|
|
|
|
+ .Animation_Cancel = "animationcancel",
|
|
|
|
+
|
|
|
|
+ .Copy = "copy",
|
|
|
|
+ .Cut = "cut",
|
|
|
|
+ .Paste = "paste",
|
|
|
|
+
|
|
|
|
+ // .Drag, = "drag",
|
|
|
|
+ // .Drag_Start, = "dragstart",
|
|
|
|
+ // .Drag_End, = "dragend",
|
|
|
|
+ // .Drag_Enter, = "dragenter",
|
|
|
|
+ // .Drag_Leave, = "dragleave",
|
|
|
|
+ // .Drag_Over, = "dragover",
|
|
|
|
+ // .Drop, = "drop",
|
|
|
|
+
|
|
|
|
+ .Pointer_Cancel = "pointercancel",
|
|
|
|
+ .Pointer_Down = "pointerdown",
|
|
|
|
+ .Pointer_Enter = "pointerenter",
|
|
|
|
+ .Pointer_Leave = "pointerleave",
|
|
|
|
+ .Pointer_Move = "pointermove",
|
|
|
|
+ .Pointer_Over = "pointerover",
|
|
|
|
+ .Pointer_Up = "pointerup",
|
|
|
|
+ .Got_Pointer_Capture = "gotpointercapture",
|
|
|
|
+ .Lost_Pointer_Capture = "lostpointercapture",
|
|
|
|
+ .Pointer_Lock_Change = "pointerlockchange",
|
|
|
|
+ .Pointer_Lock_Error = "pointerlockerror",
|
|
|
|
+
|
|
|
|
+ .Selection_Change = "selectionchange",
|
|
|
|
+ .Selection_Start = "selectionstart",
|
|
|
|
+
|
|
|
|
+ .Transition_Start = "transitionstart",
|
|
|
|
+ .Transition_End = "transitionend",
|
|
|
|
+ .Transition_Run = "transitionrun",
|
|
|
|
+ .Transition_Cancel = "transitioncancel",
|
|
|
|
+
|
|
|
|
+ .Touch_Cancel = "touchcancel",
|
|
|
|
+ .Touch_End = "touchend",
|
|
|
|
+ .Touch_Move = "touchmove",
|
|
|
|
+ .Touch_Start = "touchstart",
|
|
|
|
+
|
|
|
|
+ .Context_Menu = "contextmenu",
|
|
|
|
+
|
|
|
|
+ .Custom = "?custom?",
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+Delta_Mode :: enum u32 {
|
|
|
|
+ Pixel = 0,
|
|
|
|
+ Line = 1,
|
|
|
|
+ Page = 2,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+Key_Location :: enum u8 {
|
|
|
|
+ Standard = 0,
|
|
|
|
+ Left = 1,
|
|
|
|
+ Right = 2,
|
|
|
|
+ Numpad = 3,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+KEYBOARD_MAX_KEY_SIZE :: 16
|
|
|
|
+KEYBOARD_MAX_CODE_SIZE :: 16
|
|
|
|
+
|
|
|
|
+Event_Target_Kind :: enum u32 {
|
|
|
|
+ Element = 0,
|
|
|
|
+ Document = 1,
|
|
|
|
+ Window = 2,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+Event_Phase :: enum u8 {
|
|
|
|
+ None = 0,
|
|
|
|
+ Capturing_Phase = 1,
|
|
|
|
+ At_Target = 2,
|
|
|
|
+ Bubbling_Phase = 3,
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+Event_Option :: enum u8 {
|
|
|
|
+ Bubbles = 0,
|
|
|
|
+ Cancelable = 1,
|
|
|
|
+ Composed = 2,
|
|
|
|
+}
|
|
|
|
+Event_Options :: distinct bit_set[Event_Option; u8]
|
|
|
|
+
|
|
|
|
+Event :: struct {
|
|
|
|
+ kind: Event_Kind,
|
|
|
|
+ target_kind: Event_Target_Kind,
|
|
|
|
+ current_target_kind: Event_Target_Kind,
|
|
|
|
+ id: string,
|
|
|
|
+ timestamp: f64,
|
|
|
|
+
|
|
|
|
+ phase: Event_Phase,
|
|
|
|
+ options: Event_Options,
|
|
|
|
+ is_composing: bool,
|
|
|
|
+ is_trusted: bool,
|
|
|
|
+
|
|
|
|
+ using data: struct #raw_union #align 8 {
|
|
|
|
+ scroll: struct {
|
|
|
|
+ delta: [2]f64,
|
|
|
|
+ },
|
|
|
|
+ visibility_change: struct {
|
|
|
|
+ is_visible: bool,
|
|
|
|
+ },
|
|
|
|
+ wheel: struct {
|
|
|
|
+ delta: [3]f64,
|
|
|
|
+ delta_mode: Delta_Mode,
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ key: struct {
|
|
|
|
+ key: string,
|
|
|
|
+ code: string,
|
|
|
|
+ location: Key_Location,
|
|
|
|
+
|
|
|
|
+ ctrl: bool,
|
|
|
|
+ shift: bool,
|
|
|
|
+ alt: bool,
|
|
|
|
+ meta: bool,
|
|
|
|
+
|
|
|
|
+ repeat: bool,
|
|
|
|
+
|
|
|
|
+ _key_buf: [KEYBOARD_MAX_KEY_SIZE]byte,
|
|
|
|
+ _code_buf: [KEYBOARD_MAX_KEY_SIZE]byte,
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+ mouse: struct {
|
|
|
|
+ screen: [2]i64,
|
|
|
|
+ client: [2]i64,
|
|
|
|
+ offset: [2]i64,
|
|
|
|
+ page: [2]i64,
|
|
|
|
+ movement: [2]i64,
|
|
|
|
+
|
|
|
|
+ ctrl: bool,
|
|
|
|
+ shift: bool,
|
|
|
|
+ alt: bool,
|
|
|
|
+ meta: bool,
|
|
|
|
+
|
|
|
|
+ button: i16,
|
|
|
|
+ buttons: bit_set[0..<16; u16],
|
|
|
|
+ },
|
|
|
|
+ },
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ user_data: rawptr,
|
|
|
|
+ callback: proc(e: Event),
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+add_event_listener :: proc(id: string, kind: Event_Kind, user_data: rawptr, callback: proc(e: Event), use_capture := false) -> bool {
|
|
|
|
+ panic("vendor:wasm/js not supported on non JS targets")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+remove_event_listener :: proc(id: string, kind: Event_Kind, user_data: rawptr, callback: proc(e: Event)) -> bool {
|
|
|
|
+ panic("vendor:wasm/js not supported on non JS targets")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+add_window_event_listener :: proc(kind: Event_Kind, user_data: rawptr, callback: proc(e: Event), use_capture := false) -> bool {
|
|
|
|
+ panic("vendor:wasm/js not supported on non JS targets")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+remove_window_event_listener :: proc(kind: Event_Kind, user_data: rawptr, callback: proc(e: Event)) -> bool {
|
|
|
|
+ panic("vendor:wasm/js not supported on non JS targets")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+remove_event_listener_from_event :: proc(e: Event) -> bool {
|
|
|
|
+ panic("vendor:wasm/js not supported on non JS targets")
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+add_custom_event_listener :: proc(id: string, name: string, user_data: rawptr, callback: proc(e: Event), use_capture := false) -> bool {
|
|
|
|
+ panic("vendor:wasm/js not supported on non JS targets")
|
|
|
|
+}
|
|
|
|
+remove_custom_event_listener :: proc(id: string, name: string, user_data: rawptr, callback: proc(e: Event)) -> bool {
|
|
|
|
+ panic("vendor:wasm/js not supported on non JS targets")
|
|
|
|
+}
|
|
|
|
+
|