Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Set event.sourceEvent in ExecuteCodeAction callback for pointer triggers #13518

Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/dev/core/src/Events/pointerEvents.ts
Expand Up @@ -142,7 +142,7 @@ export class PointerInfo extends PointerInfoBase {
/** @internal */
public _generatePickInfo(): void {
if (this._inputManager) {
this._pickInfo = this._inputManager._pickMove((this.event as IPointerEvent).pointerId);
this._pickInfo = this._inputManager._pickMove(this.event as IPointerEvent);
this._inputManager._setRayOnPointerInfo(this._pickInfo, this.event);
this._inputManager = null;
}
Expand Down
25 changes: 13 additions & 12 deletions packages/dev/core/src/Inputs/scene.inputManager.ts
Expand Up @@ -214,7 +214,7 @@ export class InputManager {
}
}

this._setCursorAndPointerOverMesh(pickResult, evt.pointerId, scene);
this._setCursorAndPointerOverMesh(pickResult, evt, scene);

for (const step of scene._pointerMoveStage) {
const isMeshPicked = pickResult?.pickedMesh ? true : false;
Expand All @@ -225,7 +225,7 @@ export class InputManager {

if (scene.onPointerMove) {
// Because of lazy picking, we need to force a pick to update the pickResult
pickResult = pickResult || this._pickMove(evt.pointerId);
pickResult = pickResult || this._pickMove(evt);
scene.onPointerMove(evt, pickResult, type);
}

Expand Down Expand Up @@ -290,7 +290,7 @@ export class InputManager {
}

/** @internal */
public _pickMove(pointerId: number): PickingInfo {
public _pickMove(evt: IMouseEvent): PickingInfo {
const scene = this._scene;
const pickResult = scene.pick(
this._unTranslatedPointerX,
Expand All @@ -301,26 +301,26 @@ export class InputManager {
scene.pointerMoveTrianglePredicate
);

this._setCursorAndPointerOverMesh(pickResult, pointerId, scene);
this._setCursorAndPointerOverMesh(pickResult, evt, scene);

return pickResult;
}

private _setCursorAndPointerOverMesh(pickResult: Nullable<PickingInfo>, pointerId: number, scene: Scene) {
private _setCursorAndPointerOverMesh(pickResult: Nullable<PickingInfo>, evt: IMouseEvent, scene: Scene) {
const engine = scene.getEngine();
const canvas = engine.getInputElement();

if (pickResult?.pickedMesh) {
this.setPointerOverMesh(pickResult.pickedMesh, pointerId, pickResult);

this.setPointerOverMesh(pickResult.pickedMesh, (evt as IPointerEvent).pointerId, pickResult, evt as IPointerEvent);
if (!scene.doNotHandleCursors && canvas && this._pointerOverMesh) {
const actionManager = this._pointerOverMesh._getActionManagerForTrigger();
if (actionManager && actionManager.hasPointerTriggers) {
canvas.style.cursor = actionManager.hoverCursor || scene.hoverCursor;
}
}
} else {
this.setPointerOverMesh(null, pointerId, pickResult);
this.setPointerOverMesh(null, (evt as IPointerEvent).pointerId, pickResult, evt as IPointerEvent);
}
}

Expand Down Expand Up @@ -756,7 +756,7 @@ export class InputManager {
(!scene.cameraToUseForPointers || (scene.cameraToUseForPointers.layerMask & mesh.layerMask) !== 0);
}

const pickResult = scene._registeredActions > 0 ? this._pickMove((evt as IPointerEvent).pointerId) : null;
const pickResult = scene._registeredActions > 0 ? this._pickMove(evt) : null;
this._processPointerMove(pickResult, evt as IPointerEvent);
};

Expand Down Expand Up @@ -1043,8 +1043,9 @@ export class InputManager {
* @param mesh - defines the mesh to use
* @param pointerId - optional pointer id when using more than one pointer. Defaults to 0
* @param pickResult - optional pickingInfo data used to find mesh
* @param evt - optional pointer event
*/
public setPointerOverMesh(mesh: Nullable<AbstractMesh>, pointerId: number = 0, pickResult?: Nullable<PickingInfo>): void {
public setPointerOverMesh(mesh: Nullable<AbstractMesh>, pointerId: number = 0, pickResult?: Nullable<PickingInfo>, evt?: IPointerEvent): void {
if (this._meshUnderPointerId[pointerId] === mesh && (!mesh || !mesh._internalAbstractMeshDataInfo._pointerOverDisableMeshTesting)) {
return;
}
Expand All @@ -1055,7 +1056,7 @@ export class InputManager {
if (underPointerMesh) {
actionManager = underPointerMesh._getActionManagerForTrigger(Constants.ACTION_OnPointerOutTrigger);
if (actionManager) {
actionManager.processTrigger(Constants.ACTION_OnPointerOutTrigger, ActionEvent.CreateNew(underPointerMesh, undefined, { pointerId }));
actionManager.processTrigger(Constants.ACTION_OnPointerOutTrigger, ActionEvent.CreateNew(underPointerMesh, evt, { pointerId }));
RaananW marked this conversation as resolved.
Show resolved Hide resolved
}
}

Expand All @@ -1065,7 +1066,7 @@ export class InputManager {

actionManager = mesh._getActionManagerForTrigger(Constants.ACTION_OnPointerOverTrigger);
if (actionManager) {
actionManager.processTrigger(Constants.ACTION_OnPointerOverTrigger, ActionEvent.CreateNew(mesh, undefined, { pointerId, pickResult }));
actionManager.processTrigger(Constants.ACTION_OnPointerOverTrigger, ActionEvent.CreateNew(mesh, evt, { pointerId, pickResult }));
}
} else {
delete this._meshUnderPointerId[pointerId];
Expand Down