mirror of
https://github.com/manyfold3d/manyfold.git
synced 2026-10-22 19:52:18 -05:00
66 lines
1.5 KiB
TypeScript
66 lines
1.5 KiB
TypeScript
import * as Comlink from 'comlink'
|
|
|
|
interface UnifiedEvent {
|
|
type: string
|
|
altKey?: boolean
|
|
ctrlKey?: boolean
|
|
metaKey?: boolean
|
|
shiftKey?: boolean
|
|
button?: number
|
|
buttons?: number
|
|
clientX?: number
|
|
clientY?: number
|
|
pageX?: number
|
|
pageY?: number
|
|
pointerType?: string
|
|
deltaX?: number
|
|
deltaY?: number
|
|
keyCode?: number
|
|
code?: string
|
|
}
|
|
|
|
const handler: Comlink.TransferHandler<Event, UnifiedEvent> = {
|
|
canHandle: (obj): obj is Event => (obj instanceof Event),
|
|
serialize: (ev: Event) => {
|
|
let serializedEvent: UnifiedEvent = { type: ev.type }
|
|
if (ev instanceof PointerEvent) {
|
|
serializedEvent = {
|
|
altKey: ev.altKey,
|
|
ctrlKey: ev.ctrlKey,
|
|
metaKey: ev.metaKey,
|
|
shiftKey: ev.shiftKey,
|
|
button: ev.button,
|
|
buttons: ev.buttons,
|
|
clientX: ev.clientX,
|
|
clientY: ev.clientY,
|
|
pageX: ev.pageX,
|
|
pageY: ev.pageY,
|
|
pointerType: ev.pointerType,
|
|
...serializedEvent
|
|
}
|
|
}
|
|
if (ev instanceof WheelEvent) {
|
|
serializedEvent = {
|
|
deltaX: ev.deltaX,
|
|
deltaY: ev.deltaY,
|
|
...serializedEvent
|
|
}
|
|
}
|
|
if (ev instanceof KeyboardEvent) {
|
|
serializedEvent = {
|
|
altKey: ev.altKey,
|
|
ctrlKey: ev.ctrlKey,
|
|
metaKey: ev.metaKey,
|
|
shiftKey: ev.shiftKey,
|
|
keyCode: ev.keyCode,
|
|
code: ev.code,
|
|
...serializedEvent
|
|
}
|
|
}
|
|
return [serializedEvent, []]
|
|
},
|
|
deserialize: (obj) => obj as Event
|
|
}
|
|
|
|
Comlink.transferHandlers.set('EVENT', handler)
|