import { RotatedRectangleF, PointF } from "@aurigma/design-atoms-model/Math";
import { SelectionState } from "./SelectionHandler";
import { ISelectionProcessModifier } from "./ISelectionProcessModifier";
import { BaseRectangleItemHandler } from "../../ItemHandlers/BaseRectangleItemHandler";
export declare class SelectionRectangleHandler {
    private _selectionModifier;
    constructor(_selectionModifier?: ISelectionProcessModifier);
    private _rectangle;
    private _startRectangle;
    private _startPoint;
    private _lastPoint;
    private _resizeIndex;
    private _resizeOrigin;
    private _allowNegativeResize;
    private _itemHandlerResizeStartRects;
    private _state;
    get rectangle(): RotatedRectangleF;
    startRotatingByPoint(startPoint: PointF, startRectangle: RotatedRectangleF): void;
    updateRotatingByPoint(params: IRotateByPointParams): void;
    startMovingByPoint: (startPoint: PointF, startRectangle: RotatedRectangleF) => void;
    updateMovingByPoint: (args: IMoveByPointParams) => void;
    startResizingByPoint: (startPoint: PointF, startRectangle: RotatedRectangleF, resizeIndex: number, allowNegativeResize: boolean, itemHandlers: BaseRectangleItemHandler[]) => void;
    private _getItemHandlersRects;
    updateResizingByPoint(args: IResizeByPointParams, itemHandlers?: BaseRectangleItemHandler[]): void;
    startMove(startRectangle: RotatedRectangleF): void;
    move(params: IMoveParams): void;
    private _updateRectangle;
    private _setState;
    private _reset;
    private _rectangleChanged;
    addRectangleChanged(handler: (args: ISelectionRectangleEventArgs) => any): void;
    removeRectangleChanged(handler: (args: ISelectionRectangleEventArgs) => any): void;
    private _rectangleAngleChanged;
    addRectangleAngleChanged(handler: (args: IRectangleRotatedEventArgs) => any): void;
    removeRectangleAngleChanged(handler: (args: IRectangleRotatedEventArgs) => any): void;
    private _rectangleResized;
    addRectangleResized(handler: (args: IRectangleResizedEventArgs) => any): void;
    removeRectangleResized(handler: (args: IRectangleResizedEventArgs) => any): void;
    private _rectangleCenterChanged;
    addRectangleMoved(handler: (args: IRectangleMovedEventArgs) => any): void;
    removeRectangleMoved(handler: (args: IRectangleMovedEventArgs) => any): void;
    private _stateChanged;
    addStateChanged(handler: (state: SelectionState) => any): void;
    removeStateChanged(handler: (state: SelectionState) => any): void;
    private _checkStartArguments;
    private _checkUpdateArguments;
    private _setStartParams;
}
export interface ISelectionRectangleEventArgs {
    rectangle: RotatedRectangleF;
    finished: boolean;
}
export interface IRectangleRotatedEventArgs extends ISelectionRectangleOperationParams {
    angle: number;
    origin: PointF;
}
export interface IRectangleResizedEventArgs extends ISelectionRectangleOperationParams {
    origin: PointF;
    scaleX: number;
    scaleY: number;
    angle?: number;
}
export interface IRectangleMovedEventArgs extends ISelectionRectangleOperationParams {
    delta: PointF;
}
export interface ISelectionRectangleOperationParams {
    finished: boolean;
}
export interface IRotateByPointParams extends ISelectionRectangleOperationParams {
    tolerance: number;
    rotationStep: number;
    point: PointF;
}
export interface IMoveByPointParams extends ISelectionRectangleOperationParams {
    point: PointF;
    allowMoveHorizontal?: boolean;
    allowMoveVertical?: boolean;
}
export interface IMoveParams extends ISelectionRectangleOperationParams {
    delta: PointF;
    allowMoveHorizontal?: boolean;
    allowMoveVertical?: boolean;
}
export interface IResizeByPointParams extends ISelectionRectangleOperationParams {
    point: PointF;
    arbitraryResize: boolean;
    resizeIndex: number;
}
