( eventType: string, region: any, callback: (pointer: Pointer) => boolean | void, )
| 708 | * }, |
| 709 | */ |
| 710 | export function registerPointerEvent( |
| 711 | eventType: string, |
| 712 | region: any, |
| 713 | callback: (pointer: Pointer) => boolean | void, |
| 714 | ): void { |
| 715 | // make sure the mouse/touch events are initialized |
| 716 | enablePointerEvent(); |
| 717 | |
| 718 | if (pointerEventList.indexOf(eventType) === -1) { |
| 719 | throw new Error(`invalid event type : ${eventType}`); |
| 720 | } |
| 721 | |
| 722 | if (typeof region === "undefined") { |
| 723 | throw new Error( |
| 724 | `registerPointerEvent: region for ${String(region)} event is undefined `, |
| 725 | ); |
| 726 | } |
| 727 | |
| 728 | const eventTypes = findAllActiveEvents( |
| 729 | activeEventList, |
| 730 | pointerEventMap[eventType], |
| 731 | ); |
| 732 | |
| 733 | // register the event |
| 734 | if (!eventHandlers.has(region)) { |
| 735 | eventHandlers.set(region, { |
| 736 | region: region, |
| 737 | callbacks: {}, |
| 738 | pointerId: null, |
| 739 | }); |
| 740 | } |
| 741 | |
| 742 | // allocate array if not defined |
| 743 | const handlers = eventHandlers.get(region)!; |
| 744 | for (let i = 0; i < eventTypes.length; i++) { |
| 745 | const eventType = eventTypes[i]; |
| 746 | if (handlers.callbacks[eventType]) { |
| 747 | handlers.callbacks[eventType].push(callback); |
| 748 | } else { |
| 749 | handlers.callbacks[eventType] = [callback]; |
| 750 | } |
| 751 | } |
| 752 | } |
| 753 | |
| 754 | /** |
| 755 | * allows the removal of event listeners from the object target. |
no test coverage detected