Move `CanvasEventEmitter` to its own file