import type { LineCap, LineJoin, LineStyle } from 'modern-path2d';
import type { Batchable2D, ColorValue } from '../../core';
import { Path2D } from 'modern-path2d';
import { Texture2D } from '../resources';
export type TransformUv = (uvs: Float32Array, index: number) => void;
export type TransformVertex = (vertices: Float32Array, index: number) => void;
export interface CanvasBatchable extends Batchable2D {
    type: 'stroke' | 'fill';
    texture?: Texture2D;
    transformUv?: TransformUv;
    transformVertex?: TransformVertex;
    size?: {
        width: number;
        height: number;
    };
}
export interface StrokeDraw extends Partial<CanvasBatchable> {
    type: 'stroke';
    path: Path2D;
    lineStyle: LineStyle;
}
export interface FillDraw extends Partial<CanvasBatchable> {
    type: 'fill';
    path: Path2D;
}
export declare class CanvasContext extends Path2D {
    fillStyle?: ColorValue | Texture2D;
    strokeStyle?: ColorValue | Texture2D;
    strokeAlignment?: number;
    lineCap?: LineCap;
    lineJoin?: LineJoin;
    lineWidth?: number;
    miterLimit?: number;
    transformUv?: TransformUv;
    transformVertex?: TransformVertex;
    protected _draws: (StrokeDraw | FillDraw)[];
    protected _parseDrawStyle(source?: ColorValue | Texture2D): {
        texture?: Texture2D;
    };
    stroke(options?: Partial<StrokeDraw>): void;
    fillRect(x: number, y: number, width: number, height: number): void;
    strokeRect(x: number, y: number, width: number, height: number): void;
    fill(options?: Partial<FillDraw>): void;
    copy(source: CanvasContext): this;
    resetStatus(): void;
    reset(): this;
    toBatchables(): CanvasBatchable[];
}
