UNPKG

@aurigma/design-atoms

Version:

Design Atoms is a part of Customer's Canvas SDK which allows for manipulating individual design elements through your code.

125 lines 6.2 kB
import { InputState, Button } from "../../InputManager/IInputManager"; import { MultiSelectMode } from "../../../Commands/SelectionCommand/SelectItemsCommand"; import { PointF, RectangleF, normalizeAngle } from "@aurigma/design-atoms-model/Math"; import { DefaultCursorHelper } from "./DefaultCursorHandler"; import { PointerInputHandlerHelper } from "./PointerInputHandlerHelper"; import { ItemHandlerHoverHandler } from "./ItemHandlerHoverHandler"; import { CoordinateSystem } from "../../../Viewer/CoordinateSystem"; import { Cursor } from "./../../../Utils/Common"; import { SelectionCommand, ViewerCommand } from "@aurigma/design-atoms-interfaces"; export class DefaultMouseInputHandler { constructor(_commandManager, _selectionHandler, _rubberbandHandler, eventManager, _hitTestManager, _dndHandler, _canvas, rotateHandler) { this._commandManager = _commandManager; this._selectionHandler = _selectionHandler; this._rubberbandHandler = _rubberbandHandler; this._hitTestManager = _hitTestManager; this._dndHandler = _dndHandler; this._canvas = _canvas; this._scrollModeEnabled = false; this._spacePressed = false; this.onHover = async (params) => { if (!this._scrollModeEnabled) { await this._pointerInputHandler.onPointerHover(params); if (this._canvas.inPlaceEditingHandler != null || this._dndHandler.isDragStarted()) { this._hoverHandler.hide(); return; } } const handlers = this._hitTestManager.getItemHandlersByHitTest(params.workspace, CoordinateSystem.workspace); this._itemHandlerHoverHandler.onHover(handlers); if (this._selectionHandler.isIdle) { const itemToSelect = this._pointerInputHandler.getItemToSelect(params.workspace, true); if (itemToSelect == null) { this._hoverHandler.hide(); } else { this._hoverHandler.show(this._canvas.handlerFactory.get(itemToSelect)); } } else { this._hoverHandler.hide(); } this._updateCursor(params); }; this._handleRubberband = (params) => { const rubberband = this._rubberbandHandler.updateRubberband(params.workspace, params.startWorkspace, params.state); if (params.state !== InputState.Finished) return; const args = { rect: RectangleF.fromLtrbObject(rubberband), multiSelectMode: (params.ctrlKey || params.shiftKey) ? MultiSelectMode.Add : MultiSelectMode.None }; this._commandManager.execute(SelectionCommand.selectItemsByRect, args); }; this._pointerInputHandler = new PointerInputHandlerHelper(_canvas, _commandManager, _selectionHandler, _hitTestManager, eventManager, _dndHandler, rotateHandler); this._itemHandlerHoverHandler = new ItemHandlerHoverHandler(eventManager); this._hoverHandler = this._canvas.hoverHandler; } async onClick(params) { await this._pointerInputHandler.onPointerClick(params, params.ctrlKey || params.shiftKey || params.metaKey); if (params.button == Button.Tertiary) this._scrollModeEnabled = false; this._updateCursor(params); } async onPointerDown(params) { if (params.button == Button.Tertiary) this._scrollModeEnabled = true; if (this._spacePressed && params.button == Button.Primary) this._scrollModeEnabled = true; await this._pointerInputHandler.onPointerDown(params); this._updateCursor(params); params.preventDefault(); } async onMove(params) { if (this.scrollMode) { await this._scroll(params); if (params.state === InputState.Finished) this._scrollModeEnabled = false; } else { await this._pointerInputHandler.onPointerMove(params, false); if (this._canvas.contentEditingPlaceholderItemHandler != null || this._canvas.inPlaceEditingHandler != null || this._dndHandler.isDragStarted()) return; if ((this._selectionHandler.isIdle && params.state !== InputState.Finished) || this._rubberbandHandler.isActive) return this._handleRubberband(params); } params.preventDefault(); } async onDoubleClick(params) { await this._pointerInputHandler.onDoubleClick(params); } get scrollMode() { return this._scrollModeEnabled; } set spacePressed(value) { this._spacePressed = value; } async _scroll(params) { const startPoint = params.state === InputState.Started ? params.startPage.clone() : this._lastPoint; const args = { delta: new PointF(startPoint.x - params.page.x, startPoint.y - params.page.y) }; await this._commandManager.execute(ViewerCommand.moveViewPort, args); this._lastPoint = params.state === InputState.Finished ? null : params.page.clone(); } _updateCursor(params) { const canvasAngle = this._canvas.viewer.contentAngle; const angle = this._selectionHandler.visibleRectangle && normalizeAngle(this._selectionHandler.visibleRectangle.angle - canvasAngle); const cursor = DefaultCursorHelper.getCursor(params.workspace, this._selectionHandler.selectionHitTestManager, this._hitTestManager, this._rubberbandHandler, angle, this._selectionHandler.allowMove); if (this._spacePressed && !this.scrollMode) { this._canvas.viewer.setCursor(Cursor.grab); } else if (this.scrollMode) { this._canvas.viewer.setCursor(Cursor.grabbing); } else { this._canvas.viewer.setCursor(cursor); } } dispose() { } } //# sourceMappingURL=DefaultMouseInputHandler.js.map