23 lines
1.1 KiB
TypeScript
23 lines
1.1 KiB
TypeScript
import {Tool} from '../tools';
|
|
import {createMachine} from 'xstate';
|
|
import type {BoundingBox} from "../helpers/get-bounding-box-of-multiple-entities.ts";
|
|
import {GET_ALIGN_ACTION, GET_ALIGN_TOOL_STATE} from "./align-tool.helpers.ts";
|
|
import type {Entity} from "../entities/Entity.ts";
|
|
import {middle} from "../helpers/middle.ts";
|
|
|
|
/**
|
|
* AlignCenterHorizontal tool state machine
|
|
* This state machine is responsible for aligning entities on the canvas
|
|
* It uses the select tool state machine to select entities to align
|
|
* When the user presses enter, the selected entities are center horizontal aligned
|
|
*/
|
|
export const alignCenterHorizontalToolStateMachine = createMachine(
|
|
GET_ALIGN_TOOL_STATE(Tool.ALIGN_CENTER_HORIZONTAL),
|
|
GET_ALIGN_ACTION((entity: Entity, boundingBox: BoundingBox) => {
|
|
const entityBoundingBox = entity.getBoundingBox();
|
|
const centerBoundingBoxX = middle(boundingBox.minX, boundingBox.maxX);
|
|
const centerEntityX = middle(entityBoundingBox.xmin, entityBoundingBox.xmax);
|
|
entity.move(centerBoundingBoxX - centerEntityX, 0);
|
|
})
|
|
);
|