{"version":3,"file":"Trackpad.mjs","sources":["../../../src/utils/trackpad/Trackpad.ts"],"sourcesContent":["import { Point, Rectangle } from 'pixi.js';\nimport { ConstrainEase, SlidingNumber } from './SlidingNumber';\n\ninterface TrackpadOptions\n{\n    /** override the easing function when constraining */\n    xEase?: ConstrainEase;\n    yEase?: ConstrainEase;\n\n    maxSpeed?: number;\n    constrain?: boolean;\n\n    disableEasing?: boolean;\n}\n\n/** Easing controller for the {@link ScrollBox}. */\nexport class Trackpad\n{\n    xAxis: SlidingNumber;\n    yAxis: SlidingNumber;\n\n    protected _isDown: boolean = false;\n    protected _globalPosition: Point | undefined;\n    protected _frame: Rectangle | undefined;\n    protected _bounds: Rectangle | undefined;\n    protected _dirty: boolean = false;\n    protected disableEasing = false;\n\n    constructor(options: TrackpadOptions)\n    {\n        this.xAxis = new SlidingNumber({\n            ease: options.xEase,\n            maxSpeed: options.maxSpeed,\n            constrain: options.constrain,\n        });\n\n        this.yAxis = new SlidingNumber({\n            ease: options.yEase,\n            maxSpeed: options.maxSpeed,\n            constrain: options.constrain,\n        });\n\n        this.disableEasing = options.disableEasing ?? false;\n\n        this._frame = new Rectangle();\n\n        this._bounds = new Rectangle();\n        this._globalPosition = new Point();\n    }\n\n    pointerDown(pos: Point): void\n    {\n        this._globalPosition = pos;\n        this.xAxis.grab(pos.x);\n        this.yAxis.grab(pos.y);\n        this._isDown = true;\n    }\n\n    pointerUp(): void\n    {\n        this._isDown = false;\n    }\n\n    pointerMove(pos: Point): void\n    {\n        this._globalPosition = pos;\n    }\n\n    update(): void\n    {\n        if (this._dirty && this._bounds && this._frame)\n        {\n            this._dirty = false;\n\n            this.xAxis.min = this._bounds.left;\n            this.xAxis.min = this._bounds.right - this._frame.width;\n\n            this.xAxis.min = this._bounds.top;\n            this.xAxis.min = this._bounds.bottom - this._frame.height;\n        }\n\n        if (this._isDown && this._globalPosition)\n        {\n            this.xAxis.hold(this._globalPosition.x);\n            this.yAxis.hold(this._globalPosition.y);\n        }\n        else\n        {\n            this.xAxis.slide(this.disableEasing);\n            this.yAxis.slide(this.disableEasing);\n        }\n    }\n\n    resize(w: number, h: number): void\n    {\n        if (!this._frame) return;\n\n        this._frame.x = 0;\n        this._frame.width = w;\n\n        this._frame.y = 0;\n        this._frame.height = h;\n\n        this._dirty = true;\n    }\n\n    setBounds(minX: number, maxX: number, minY: number, maxY: number): void\n    {\n        if (!this._bounds) return;\n\n        this._bounds.x = minX;\n        this._bounds.width = maxX - minX;\n        this._bounds.y = minY;\n        this._bounds.height = maxY - minY;\n\n        this._dirty = true;\n    }\n\n    get x(): number\n    {\n        return this.xAxis.value;\n    }\n\n    get y(): number\n    {\n        return this.yAxis.value;\n    }\n}\n"],"names":[],"mappings":"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"}