@aurigma/design-atoms
Version:
Design Atoms is a part of Customer's Canvas SDK which allows for manipulating individual design elements through your code.
94 lines • 6.12 kB
JavaScript
import { LineItemHandler, PlaceholderItemHandler, NewBaseTextItemHandler } from "../ItemHandlers";
import { ResizeGripsPermissions } from "@aurigma/design-atoms-model/Product/Items";
import { ResizeHelper } from "./Selection/SelectionHandler";
import { CoordinateSystem } from "../Viewer/CoordinateSystem";
var SelectionHitTestManager = /** @class */ (function () {
function SelectionHitTestManager(_selectionHandler, _hitTestManager) {
this._selectionHandler = _selectionHandler;
this._hitTestManager = _hitTestManager;
}
SelectionHitTestManager.prototype.hitTest = function (point) {
var _a;
if (!this._selectionHandler.enabled)
return {};
var rectangle = this._selectionHandler.visibleRectangle;
var itemHandlersByHitTest = this._hitTestManager.getItemHandlersByHitTest(point, CoordinateSystem.workspace);
if (rectangle == null) {
var selection = itemHandlersByHitTest.length === 0;
return { selection: selection };
}
var tolerance;
var currentItemHandler;
var itemHandlers = this._selectionHandler.selectedItemHandlers;
if (itemHandlers.length > 1) {
tolerance = itemHandlers.toArray().reduce(function (previousSelectionTolerance, currentItem) {
return Math.min(previousSelectionTolerance, currentItem.getSelectionTolerance());
}, itemHandlers.getItem(0).getSelectionTolerance());
}
else {
currentItemHandler = itemHandlers.getItem(0);
tolerance = (_a = currentItemHandler === null || currentItemHandler === void 0 ? void 0 : currentItemHandler.getSelectionTolerance()) !== null && _a !== void 0 ? _a : 0;
}
var onlyWidthResizeEnabled = itemHandlers.length === 1 && this._selectionHandler.currentItemHandler instanceof LineItemHandler;
var result = this._hitTestManager.hitTestSelection(rectangle, point, onlyWidthResizeEnabled, tolerance);
var isPlaceholderWithCoverModeEditing = false;
if (currentItemHandler instanceof PlaceholderItemHandler) {
var currentPlaceholder = currentItemHandler;
if (currentItemHandler.editing && itemHandlersByHitTest[0] == currentItemHandler)
result.selection = false;
if (currentPlaceholder.isContentUpdating() && (result.body && !result.resize)) {
result.drag = true;
return result;
}
isPlaceholderWithCoverModeEditing = currentItemHandler.editing && currentItemHandler.isCoverMode();
}
if (currentItemHandler instanceof NewBaseTextItemHandler && currentItemHandler.isInEdit) {
result.resize = false;
result.rotate = false;
result.body = false;
}
var permissions = this._selectionHandler.manipulationPermissions;
result.rotate = result.rotate && permissions.allowRotate && !isPlaceholderWithCoverModeEditing && this._selectionHandler.allowManipulation;
if (result.resize) {
var index = result.resizeIndex;
var edgeArbitraryResize = ResizeHelper.isEdgeResizeGrip(index) &&
this._getEdgeResize(permissions, currentItemHandler);
var cornerArbitraryResize = ResizeHelper.isCornerResizeGrip(index) &&
this._getCornerResize(permissions, currentItemHandler, false, ResizeGripsPermissions.arbitrary);
var cornerArbitraryResizeInvertedShift = ResizeHelper.isCornerResizeGrip(index) &&
this._getCornerResize(permissions, currentItemHandler, true, ResizeGripsPermissions.arbitrary);
var cornerProportionalResize = ResizeHelper.isCornerResizeGrip(index) &&
this._getCornerResize(permissions, currentItemHandler, false, ResizeGripsPermissions.proportional);
var cornerProportionalResizeInvertedShift = ResizeHelper.isCornerResizeGrip(index) &&
this._getCornerResize(permissions, currentItemHandler, true, ResizeGripsPermissions.proportional);
result.arbitraryResize = edgeArbitraryResize || cornerArbitraryResize;
result.cornerArbitraryResize = cornerArbitraryResize || cornerArbitraryResizeInvertedShift;
result.cornerProportionalResize = cornerProportionalResize || cornerProportionalResizeInvertedShift;
result.proportionalResize = cornerProportionalResize && !onlyWidthResizeEnabled;
result.resize = result.arbitraryResize || result.proportionalResize;
}
result.dragX = result.body && permissions.allowMoveHorizontal && this._selectionHandler.allowManipulation;
result.dragY = result.body && permissions.allowMoveVertical && this._selectionHandler.allowManipulation;
result.drag = result.dragX || result.dragY;
return result;
};
SelectionHitTestManager.prototype._getEdgeResize = function (permissions, currentItemHandler) {
if (currentItemHandler != null && currentItemHandler.getTypeName() === "PlainTextItemHandler" || !this._selectionHandler.allowManipulation)
return false;
var resizeGrips = permissions.resizeGrips;
return resizeGrips.edge;
};
SelectionHitTestManager.prototype._getCornerResize = function (permissions, currentItemHandler, shift, resizeType) {
if (resizeType === ResizeGripsPermissions.arbitrary &&
(currentItemHandler != null && currentItemHandler.getTypeName() === "PlainTextItemHandler") || !this._selectionHandler.allowManipulation)
return false;
var resizeGrips = permissions.resizeGrips;
if (resizeGrips.corner == null || resizeGrips.corner.length === 0)
return false;
var result = shift && resizeGrips.corner.length > 1 ? resizeGrips.corner[1] : resizeGrips.corner[0];
return result === resizeType;
};
return SelectionHitTestManager;
}());
export { SelectionHitTestManager };
//# sourceMappingURL=SelectionHitTestManager.js.map