import type { Rect } from '../geometry';
import type { StylusState } from '../stylus';
import type { StrokeProtocol } from '../stroke-protocol';
export interface StampFn {
    (config: BrushConfig, state: BrushStrokeState, params: StampParams): void;
}
export interface RandomFn {
    (): number;
}
export interface BrushConfig {
    stamp: StampFn;
    flow: number;
    applyPressureToFlow: boolean;
    size: number;
    applyPressureToSize: boolean;
    spacing: number;
    angle: number;
    rotateToTangent: boolean;
    angleRandom: RandomFn;
    angleSpread: number;
    normalRandom: RandomFn;
    normalSpread: number;
    tangentRandom: RandomFn;
    tangentSpread: number;
}
export declare const defaultBrushConfig: Readonly<BrushConfig>;
export declare function getHardRoundStampFn(ctx: CanvasRenderingContext2D, color: string): StampFn;
export declare function getDrawHardRoundFn(color: string): DrawFn;
export declare function getSoftRoundStampFn(ctx: CanvasRenderingContext2D, color: string): StampFn;
export declare function getDrawSoftRoundFn(color: string): DrawFn;
export declare function getStarStampFn(ctx: CanvasRenderingContext2D, color: string, numPoints?: number, innerRatio?: number): StampFn;
export declare function getDrawStarFn(color: string, numPoints?: number, innerRatio?: number): DrawFn;
export declare function getBrushWidth(size: number, aspectRatio: number): number;
export declare function getBrushHeight(size: number): number;
export interface BrushStrokeState {
    prev: StylusState;
    tangent: number;
    delta: number;
    lastStamp: StampParams;
    reserved: boolean;
    boundingRect: Rect;
}
export interface BrushStrokeResult {
    boundingRect: Rect;
}
export interface StampParams {
    x: number;
    y: number;
    angle: number;
    pressure: number;
}
export interface DrawFn {
    (ctx: CanvasRenderingContext2D, width: number, height: number): void;
}
export declare function getStampFn(ctx: CanvasRenderingContext2D, drawFn: DrawFn, aspectRatio?: number): StampFn;
export declare type BrushStroke = StrokeProtocol<BrushConfig, BrushStrokeState, BrushStrokeResult>;
export declare const stroke: BrushStroke;
