in packages/core/gsi/src/polaris/PolarisGSI.ts [375:439]
private _handlePointerEvent(
/**
* The canvas px coords, origin is on top left
*/
canvasCoords: CoordV2,
/**
* The layer event name that should be triggered
*/
triggerEventName: 'pick' | 'hover'
) {
// Collect pick results
const result = this._raycastLayers(canvasCoords, {
deepPicking: this.getProp('deepPicking') ?? false,
})
// trigger non-picked layer with eventName & no arguments
if (!result) {
this.traverseVisible((obj) => {
// @note pickable only exits on StandardLayer
// @note do not bypass type check using props manager
const layer = obj as StandardLayer
if (layer.isStandardLayer && layer.getProp('pickable')) {
layer.dispatchEvent({ type: triggerEventName })
}
})
return
}
if (Array.isArray(result)) {
const resultArr = result
const pickedLayers = resultArr.map((e) => e.layer)
this.traverseVisible((obj) => {
// @note pickable only exits on StandardLayer
// @note do not bypass type check using props manager
const layer = obj as StandardLayer
const index = pickedLayers.indexOf(layer)
// if (layer.isStandardLayer && layer.getProp('pickable')) {
if (index >= 0) {
// trigger picked layer with eventName & result argument
layer.dispatchEvent({ type: triggerEventName, result: resultArr[index] })
} else {
// trigger non-picked layer with eventName & no arguments
layer.dispatchEvent({ type: triggerEventName })
}
// }
})
} else {
const resultEvent = result
const pickedLayer = resultEvent.layer
this.traverseVisible((obj) => {
// @note pickable only exits on StandardLayer
// @note do not bypass type check using props manager
const layer = obj as StandardLayer
// if (layer.isStandardLayer && layer.getProp('pickable')) {
if (layer === pickedLayer) {
// trigger picked layer with eventName & result argument
layer.dispatchEvent({ type: triggerEventName, result: resultEvent })
} else {
// trigger non-picked layer with eventName & no arguments
layer.dispatchEvent({ type: triggerEventName })
}
// }
})
}
}