{"version":3,"file":"ButtonEvents.mjs","sources":["../src/ButtonEvents.ts"],"sourcesContent":["import { Container, FederatedPointerEvent, isMobile } from 'pixi.js';\nimport { Signal } from 'typed-signals';\n\n/** Events controller used for {@link Button}. */\nexport class ButtonEvents\n{\n    protected _isMouseIn = false;\n    protected _isDown = false;\n\n    /** Event that is fired when the button is down. */\n    onDown: Signal<(btn?: this, e?: FederatedPointerEvent) => void>;\n    /**\n     * Event that fired when a down event happened inside the button\n     * and up event happened inside or outside of the button\n     */\n    onUp: Signal<(btn?: this, e?: FederatedPointerEvent) => void>;\n    /**\n     * Event that fired when mouse up event happens outside of the button\n     * after the down event happened inside the button boundaries.\n     */\n    onUpOut: Signal<(btn?: this, e?: FederatedPointerEvent) => void>;\n    /** Event that fired when the mouse is out of the view */\n    onOut: Signal<(btn?: this, e?: FederatedPointerEvent) => void>;\n    /** Event that is fired when the button is pressed. */\n    onPress: Signal<(btn?: this, e?: FederatedPointerEvent) => void>;\n    /** Event that is fired when the mouse hovers the button. Fired only if device is not mobile.*/\n    onHover: Signal<(btn?: this, e?: FederatedPointerEvent) => void>;\n\n    constructor()\n    {\n        this.onPress = new Signal();\n        this.onDown = new Signal();\n        this.onUp = new Signal();\n        this.onHover = new Signal();\n        this.onOut = new Signal();\n        this.onUpOut = new Signal();\n    }\n\n    protected connectEvents(view: Container)\n    {\n        if (isMobile.any)\n        {\n            view.on('pointerdown', this.processDown, this);\n            view.on('pointerup', this.processUp, this);\n            view.on('pointerupoutside', this.processUpOut, this);\n            view.on('pointerout', this.processOut, this);\n            view.on('pointertap', this.processPress, this);\n            view.on('pointerover', this.processOver, this);\n        }\n        else\n        {\n            view.on('mousedown', this.processDown, this);\n            view.on('mouseup', this.processUp, this);\n            view.on('mouseupoutside', this.processUpOut, this);\n            view.on('mouseout', this.processOut, this);\n            view.on('click', this.processPress, this);\n            view.on('mouseover', this.processOver, this);\n        }\n    }\n\n    protected disconnectEvents(view: Container)\n    {\n        if (isMobile.any)\n        {\n            view.off('pointerdown', this.processDown, this);\n            view.off('pointerup', this.processUp, this);\n            view.off('pointerupoutside', this.processUpOut, this);\n            view.off('pointerout', this.processOut, this);\n            view.off('pointertap', this.processPress, this);\n            view.off('pointerover', this.processOver, this);\n        }\n        else\n        {\n            view.off('mousedown', this.processDown, this);\n            view.off('mouseup', this.processUp, this);\n            view.off('mouseupoutside', this.processUpOut, this);\n            view.off('mouseout', this.processOut, this);\n            view.off('click', this.processPress, this);\n            view.off('mouseover', this.processOver, this);\n        }\n    }\n\n    protected processDown(e: FederatedPointerEvent): void\n    {\n        this._isDown = true;\n        this.onDown.emit(this, e);\n        this.down(e);\n    }\n\n    protected processUp(e?: FederatedPointerEvent)\n    {\n        if (this._isDown)\n        {\n            this.onUp.emit(this, e);\n            this.up(e);\n        }\n\n        this._isDown = false;\n    }\n\n    protected processUpOut(e?: FederatedPointerEvent)\n    {\n        if (this._isDown)\n        {\n            this.onUp.emit(this, e);\n            this.onUpOut.emit(this, e);\n            this.up(e);\n            this.upOut(e);\n        }\n\n        this._isDown = false;\n    }\n\n    protected processOut(e?: FederatedPointerEvent)\n    {\n        if (this._isMouseIn)\n        {\n            this._isMouseIn = false;\n            this.onOut.emit(this, e);\n            this.out(e);\n        }\n    }\n\n    protected processPress(e: FederatedPointerEvent)\n    {\n        this._isDown = false;\n        this.onPress.emit(this, e);\n        this.press(e);\n    }\n\n    protected processOver(e: FederatedPointerEvent)\n    {\n        if (isMobile.any) return;\n\n        this._isMouseIn = true;\n        this.onHover.emit(this, e);\n        this.hover(e);\n    }\n\n    /**\n     * Method called when the button pressed.\n     * To be overridden.\n     * @param {FederatedPointerEvent} _e - event data\n     */\n    down(_e?: FederatedPointerEvent)\n    {\n        // override me!\n    }\n\n    /**\n     * Method called when the button is up.\n     * To be overridden.\n     * @param {FederatedPointerEvent} _e - event data\n     */\n    up(_e?: FederatedPointerEvent)\n    {\n        // override me!\n    }\n\n    /**\n     * Method called when the up event happens outside of the button,\n     * after the down event happened inside the button boundaries.\n     * To be overridden.\n     * @param {FederatedPointerEvent} _e - event data\n     */\n    upOut(_e?: FederatedPointerEvent)\n    {\n        // override me!\n    }\n\n    /**\n     * Method called when the mouse leaves the button.\n     * To be overridden.\n     * @param {FederatedPointerEvent} _e - event data\n     */\n    out(_e?: FederatedPointerEvent)\n    {\n        // override me!\n    }\n\n    /**\n     * Method called when the mouse press down the button.\n     * To be overridden.\n     * @param {FederatedPointerEvent} _e - event data\n     */\n    press(_e?: FederatedPointerEvent)\n    {\n        // override me!\n    }\n\n    /**\n     * Method called when the mouse hovers the button.\n     * To be overridden.\n     * Fired only if device is not mobile.\n     * @param {FederatedPointerEvent} _e - event data\n     */\n    hover(_e?: FederatedPointerEvent)\n    {\n        // override me!\n    }\n\n    /** Getter that returns if the button is down. */\n    get isDown(): boolean\n    {\n        return this._isDown;\n    }\n}\n"],"names":[],"mappings":"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"}