PIXI.EventBoundary
class EventBoundary
Event boundaries are "barriers" where events coming from an upstream scene are modified before downstream propagation.
Root event boundary
The rootBoundary handles events coming from the <canvas />. PIXI.EventSystem handles the normalization from native Events into FederatedEvents. The rootBoundary then does the hit-testing and event dispatch for the upstream normalized event.
Additional event boundaries
An additional event boundary may be desired within an application's scene graph. For example, if a portion of the scene is is flat with many children at one level - a spatial hash maybe needed to accelerate hit testing. In this scenario, the container can be detached from the scene and glued using a custom event boundary.
import { Container } from '@pixi/display';
import { EventBoundary } from '@pixi/events';
import { SpatialHash } from 'pixi-spatial-hash';
class HashedHitTestingEventBoundary
{
private spatialHash: SpatialHash;
constructor(scene: Container, spatialHash: SpatialHash)
{
super(scene);
this.spatialHash = spatialHash;
}
hitTestRecursive(...)
{
// TODO: If target === this.rootTarget, then use spatial hash to get a
// list of possible children that match the given (x,y) coordinates.
}
}
class VastScene extends DisplayObject
{
protected eventBoundary: EventBoundary;
protected scene: Container;
protected spatialHash: SpatialHash;
constructor()
{
this.scene = new Container();
this.spatialHash = new SpatialHash();
this.eventBoundary = new HashedHitTestingEventBoundary(this.scene, this.spatialHash);
// Populate this.scene with a ton of children, while updating this.spatialHash
}
}
Constructor
new PIXI.EventBoundary(rootTarget: PIXI.DisplayObject) → {}
Name | Type | Attributes | Description |
---|---|---|---|
rootTarget | PIXI.DisplayObject |
<optional> |
The holder of the event boundary. |
Summary
Properties from EventBoundary
Cursor | string |
The cursor preferred by the event targets underneath this boundary. |
EventEmitter |
Emits events after they were dispatched into the scene graph. |
boolean |
This flag would emit |
PIXI.DisplayObject |
The root event-target residing below the event boundary. |
Map<typeof PIXI.FederatedEvent, PIXI.FederatedEvent[]> |
|
Record<string, any> |
|
Record<string, PIXI.FederatedEvent<{ fn : (e: Array) => void, priority : number }>> |
Maps event types to forwarding handles for them. |
Methods from EventBoundary
Public Properties
cursor: Cursor | string
The cursor preferred by the event targets underneath this boundary.
dispatch: EventEmitter
Emits events after they were dispatched into the scene graph.
This can be used for global events listening, regardless of the scene graph being used. It should not be used by interactive libraries for normal use.
Special events that do not bubble all the way to the root target are not emitted from here, e.g. pointerenter, pointerleave, click.
moveOnAll: boolean = false
This flag would emit pointermove
, touchmove
, and mousemove
events on all DisplayObjects.
The moveOnAll
semantics mirror those of earlier versions of PixiJS. This was disabled in favor of
the Pointer Event API's approach.
rootTarget: PIXI.DisplayObject
The root event-target residing below the event boundary.
All events are dispatched trickling down and bubbling up to this rootTarget
.
Protected Properties
protected eventPool: Map<typeof PIXI.FederatedEvent, PIXI.FederatedEvent[]>
The event pool maps event constructors to an free pool of instances of those specific events.
protected mappingState: Record<string, any>
State object for mapping methods.
protected mappingTable: Record<string, PIXI.FederatedEvent<{ fn : (e: Array) => void, priority : number }>>
Maps event types to forwarding handles for them.
EventBoundary provides mapping for "pointerdown", "pointermove", "pointerout", "pointerleave", "pointerover", "pointerup", and "pointerupoutside" by default.
Public Methods
addEventMapping(type: string, fn: (e: PIXI.FederatedEvent) => void) → {void}
Adds an event mapping for the event type
handled by fn
.
Event mappings can be used to implement additional or custom events. They take an event coming from the upstream scene (or directly from the PIXI.EventSystem) and dispatch new downstream events generally trickling down and bubbling up to this.rootTarget.
To modify the semantics of existing events, the built-in mapping methods of EventBoundary should be overridden instead.
Name | Type | Description |
---|---|---|
type | string |
The type of upstream event to map. |
fn | (e: PIXI.FederatedEvent) => void |
The mapping method. The context of this function must be bound manually, if desired. |
Type | Description |
---|---|
void |
all(e: PIXI.FederatedEvent, type: string, target: PIXI.FederatedEventTarget) → {void}
Emits the event e to all display objects. The event is propagated in the bubbling phase always.
This is used in the pointermove
legacy mode.
Name | Type | Attributes | Description |
---|---|---|---|
e | PIXI.FederatedEvent |
The emitted event. |
|
type | string |
<optional> |
The listeners to notify. |
target | PIXI.FederatedEventTarget |
Type | Description |
---|---|
void |
dispatchEvent(e: PIXI.FederatedEvent, type: string) → {void}
Dispatches the given event
Name | Type | Attributes | Description |
---|---|---|---|
e | PIXI.FederatedEvent | ||
type | string |
<optional> |
Type | Description |
---|---|
void |
hitTest(x: number, y: number) → {PIXI.DisplayObject}
Finds the DisplayObject that is the target of a event at the given coordinates.
The passed (x,y) coordinates are in the world space above this event boundary.
Name | Type | Description |
---|---|---|
x | number | |
y | number |
Type | Description |
---|---|
PIXI.DisplayObject |
mapEvent(e: PIXI.FederatedEvent) → {void}
Maps the given upstream event through the event boundary and propagates it downstream.
Name | Type | Description |
---|---|---|
e | PIXI.FederatedEvent |
Type | Description |
---|---|
void |
propagate(e: PIXI.FederatedEvent, type: string) → {void}
Propagate the passed event from from this.rootTarget to its
target e.target
.
Name | Type | Attributes | Description |
---|---|---|---|
e | PIXI.FederatedEvent |
The event to propagate. |
|
type | string |
<optional> |
Type | Description |
---|---|
void |
propagationPath(target: PIXI.FederatedEventTarget) → {PIXI.FederatedEventTarget[]}
Finds the propagation path from rootTarget to the passed
target
. The last element in the path is target
.
Name | Type | Description |
---|---|---|
target | PIXI.FederatedEventTarget |
Type | Description |
---|---|
PIXI.FederatedEventTarget[] |
Protected Methods
protected allocateEvent(constructor: { new (boundary: PIXI.EventBoundary): T }) → {T}
Allocate a specific type of event from this.eventPool.
This allocation is constructor-agnostic, as long as it only takes one argument - this event boundary.
Name | Type | Description |
---|---|---|
constructor | { new (boundary: PIXI.EventBoundary): T } |
The event's constructor. |
Type | Description |
---|---|
T |
protected clonePointerEvent(from: PIXI.FederatedPointerEvent, type: string) → {PIXI.FederatedPointerEvent}
Clones the event from
, with an optional type
override.
The event is allocated using this.allocateEvent.
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
from | PIXI.FederatedPointerEvent |
The event to clone. |
||
type | string |
<optional> |
from.type |
The type of the returned event. |
Type | Description |
---|---|
PIXI.FederatedPointerEvent |
protected copyData(from: PIXI.FederatedEvent, to: PIXI.FederatedEvent) → {void}
Copies base PIXI.FederatedEvent data from from
into to
.
The following properties are copied:
- isTrusted
- srcElement
- timeStamp
- type
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent |
The event to copy data from. |
to | PIXI.FederatedEvent |
The event to copy data into. |
Type | Description |
---|---|
void |
protected copyMouseData(from: PIXI.FederatedEvent, to: PIXI.FederatedEvent) → {void}
Copies mouse PIXI.FederatedMouseEvent data from from
to to
.
The following properties are copied:
- altKey
- button
- buttons
- clientX
- clientY
- metaKey
- movementX
- movementY
- pageX
- pageY
- x
- y
- screen
- global
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent | |
to | PIXI.FederatedEvent |
Type | Description |
---|---|
void |
protected copyPointerData(from: PIXI.FederatedEvent, to: PIXI.FederatedEvent) → {void}
Copies pointer PIXI.FederatedPointerEvent data from from
into to
.
The following properties are copied:
- pointerId
- width
- height
- isPrimary
- pointerType
- pressure
- tangentialPressure
- tiltX
- tiltY
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent | |
to | PIXI.FederatedEvent |
Type | Description |
---|---|
void |
protected copyWheelData(from: PIXI.FederatedWheelEvent, to: PIXI.FederatedWheelEvent) → {void}
Copies wheel PIXI.FederatedWheelEvent data from from
into to
.
The following properties are copied:
- deltaMode
- deltaX
- deltaY
- deltaZ
Name | Type | Description |
---|---|---|
from | PIXI.FederatedWheelEvent | |
to | PIXI.FederatedWheelEvent |
Type | Description |
---|---|
void |
protected createPointerEvent(from: PIXI.FederatedPointerEvent, type: string, target: PIXI.FederatedEventTarget) → {PIXI.FederatedPointerEvent}
Creates an event whose originalEvent
is from
, with an optional type
and target
override.
The event is allocated using this.allocateEvent.
Name | Type | Attributes | Default | Description |
---|---|---|---|---|
from | PIXI.FederatedPointerEvent |
The |
||
type | string |
<optional> |
from.type |
The type of the returned event. |
target | PIXI.FederatedEventTarget |
<optional> |
The target of the returned event. |
Type | Description |
---|---|
PIXI.FederatedPointerEvent |
protected createWheelEvent(from: PIXI.FederatedWheelEvent) → {PIXI.FederatedWheelEvent}
Creates a wheel event whose originalEvent
is from
.
The event is allocated using this.allocateEvent.
Name | Type | Description |
---|---|---|
from | PIXI.FederatedWheelEvent |
The upstream wheel event. |
Type | Description |
---|---|
PIXI.FederatedWheelEvent |
protected findMountedTarget(propagationPath: PIXI.FederatedEventTarget[]) → {PIXI.FederatedEventTarget}
Finds the most specific event-target in the given propagation path that is still mounted in the scene graph.
This is used to find the correct pointerup
and pointerout
target in the case that the original pointerdown
or pointerover
target was unmounted from the scene graph.
Name | Type | Description |
---|---|---|
propagationPath | PIXI.FederatedEventTarget[] |
The propagation path was valid in the past. |
Type | Description |
---|---|
PIXI.FederatedEventTarget |
|
protected freeEvent(event: T) → {void}
Frees the event and puts it back into the event pool.
It is illegal to reuse the event until it is allocated again, using this.allocateEvent
.
It is also advised that events not allocated from this.allocateEvent not be freed. This is because of the possibility that the same event is freed twice, which can cause it to be allocated twice & result in overwriting.
Name | Type | Description |
---|---|---|
event | T |
The event to be freed. |
Type | Description |
---|---|
void |
protected hitPruneFn(displayObject: PIXI.DisplayObject, location: PIXI.Point) → {boolean}
Checks whether the display object or any of its children cannot pass the hit test at all.
EventBoundary's implementation uses the hitArea and PIXI.DisplayObject._mask for pruning.
Name | Type | Description |
---|---|---|
displayObject | PIXI.DisplayObject | |
location | PIXI.Point |
Type | Description |
---|---|
boolean |
protected hitTestFn(displayObject: PIXI.DisplayObject, location: PIXI.Point) → {boolean}
Checks whether the display object passes hit testing for the given location.
Name | Type | Description |
---|---|---|
displayObject | PIXI.DisplayObject | |
location | PIXI.Point |
Type | Description |
---|---|
boolean |
|
protected hitTestRecursive(currentTarget: PIXI.DisplayObject, interactive: boolean, location: PIXI.Point, testFn: (object: PIXI.DisplayObject, pt: PIXI.Point) => boolean, pruneFn: (object: PIXI.DisplayObject, pt: PIXI.Point) => boolean) → {PIXI.DisplayObject[]}
Recursive implementation for hitTest.
Name | Type | Attributes | Description |
---|---|---|---|
currentTarget | PIXI.DisplayObject |
The DisplayObject that is to be hit tested. |
|
interactive | boolean |
Flags whether |
|
location | PIXI.Point |
The location that is being tested for overlap. |
|
testFn | (object: PIXI.DisplayObject, pt: PIXI.Point) => boolean |
Callback that determines whether the target passes hit testing. This callback
can assume that |
|
pruneFn | (object: PIXI.DisplayObject, pt: PIXI.Point) => boolean |
<optional> |
Callback that determiness whether the target and all of its children cannot pass the hit test. It is used as a preliminary optimization to prune entire subtrees of the scene graph. |
Type | Description |
---|---|
PIXI.DisplayObject[] |
An array holding the hit testing target and all its ancestors in order. The first element is the target itself and the last is rootTarget. This is the opposite order w.r.t. the propagation path. If no hit testing target is found, null is returned. |
protected mapPointerDown(from: PIXI.FederatedEvent) → {void}
Maps the upstream pointerdown
events to a downstream pointerdown
event.
touchstart
, rightdown
, mousedown
events are also dispatched for specific pointer types.
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent |
Type | Description |
---|---|
void |
protected mapPointerMove(from: PIXI.FederatedEvent) → {void}
Maps the upstream pointermove
to downstream pointerout
, pointerover
, and pointermove
events, in that order.
The tracking data for the specific pointer has an updated overTarget
. mouseout
, mouseover
,
mousemove
, and touchmove
events are fired as well for specific pointer types.
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent |
The upstream |
Type | Description |
---|---|
void |
protected mapPointerOut(from: PIXI.FederatedEvent) → {void}
Maps the upstream pointerout
to downstream pointerout
, pointerleave
events, in that order.
The tracking data for the specific pointer is cleared of a overTarget
.
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent |
The upstream |
Type | Description |
---|---|
void |
protected mapPointerOver(from: PIXI.FederatedEvent) → {void}
Maps the upstream pointerover
to downstream pointerover
and pointerenter
events, in that order.
The tracking data for the specific pointer gets a new overTarget
.
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent |
The upstream |
Type | Description |
---|---|
void |
protected mapPointerUp(from: PIXI.FederatedEvent) → {void}
Maps the upstream pointerup
event to downstream pointerup
, pointerupoutside
, and click
/pointertap
events,
in that order.
The pointerupoutside
event bubbles from the original pointerdown
target to the most specific
ancestor of the pointerdown
and pointerup
targets, which is also the click
event's target. touchend
,
rightup
, mouseup
, touchendoutside
, rightupoutside
, mouseupoutside
, and tap
are fired as well for
specific pointer types.
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent |
The upstream |
Type | Description |
---|---|
void |
protected mapPointerUpOutside(from: PIXI.FederatedEvent) → {void}
Maps the upstream pointerupoutside
event to a downstream pointerupoutside
event, bubbling from the original
pointerdown
target to rootTarget
.
(The most specific ancestor of the pointerdown
event and the pointerup
event must the EventBoundary
's
root because the pointerup
event occurred outside of the boundary.)
touchendoutside
, mouseupoutside
, and rightupoutside
events are fired as well for specific pointer
types. The tracking data for the specific pointer is cleared of a pressTarget
.
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent |
The upstream |
Type | Description |
---|---|
void |
protected mapWheel(from: PIXI.FederatedEvent) → {void}
Maps the upstream wheel
event to a downstream wheel
event.
Name | Type | Description |
---|---|---|
from | PIXI.FederatedEvent |
The upstream |
Type | Description |
---|---|
void |
protected notifyTarget(e: PIXI.FederatedEvent, type: string) → {void}
Notify all the listeners to the event's currentTarget
.
Name | Type | Attributes | Description |
---|---|---|---|
e | PIXI.FederatedEvent |
The event passed to the target. |
|
type | string |
<optional> |
Type | Description |
---|---|
void |
protected trackingData(id: number) → {TrackingData}
Name | Type | Description |
---|---|---|
id | number |
The pointer ID. |
Type | Description |
---|---|
TrackingData |
The tracking data stored for the given pointer. If no data exists, a blank state will be created. |