@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
JavaScript
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