/**
 * 画笔
 */
import { StyleManager } from './StyleManager';
interface DrawLineOptions {
    lineCap?: CanvasLineCap;
    lineJoin?: CanvasLineJoin;
    borderWidth?: number;
    borderColor?: string;
    fillColor?: string;
    lineDash?: number[];
}
interface DrawTextOptions {
    font?: string;
    color?: string;
    align?: CanvasTextAlign | "left" | "right";
    baseLine?: CanvasTextBaseline;
    bold?: boolean;
}
interface DrawCellTextOptions extends DrawTextOptions {
    icon?: HTMLImageElement | {
        src: string;
    } | null;
    iconWidth?: number;
    iconHeight?: number;
    iconOffsetX?: number;
    iconOffsetY?: number;
}
interface DrawRectOptions {
    borderWidth?: number;
    borderColor?: string;
    fillColor?: string;
    shadowOffsetX?: number;
    shadowOffsetY?: number;
    shadowBlur?: number;
    shadowColor?: string;
    /** Which sides to draw borders on. 'all' = strokeRect (default), 'right-bottom' = only right and bottom edges */
    borderSides?: 'all' | 'right-bottom';
}
interface DrawIconOptions extends DrawTextOptions {
}
interface DrawCellAffixIconOptions {
    color?: string;
    fillColor?: string;
}
declare class Paint {
    ctx: CanvasRenderingContext2D;
    styleManager: StyleManager;
    constructor(target: HTMLCanvasElement, styleManager?: StyleManager);
    scaleCanvas(dpr: number): void;
    drawLine(points: number[][], options?: DrawLineOptions): void;
    /**
     * 在指定位置渲染文本
     * @param text 渲染的文本
     * @param x 渲染的x轴位置
     * @param y 渲染的y轴位置
     * @param options 配置选项
     */
    drawText(text: string | number, x: number, y: number, options?: DrawTextOptions): void;
    /**
     * 在指定宽高的盒子里渲染文本，会结合文本的长度和盒子的宽来决定对齐方式
     * @param text 渲染的文本
     * @param x 渲染的初始x轴位置
     * @param y 渲染的初始y轴位置
     * @param width 盒子的宽
     * @param height 盒子的高
     * @param padding 左右边距
     * @param options color, font, align...
     */
    drawCellText(text: string | number, x: number, y: number, width: number, height: number, padding: number, options?: DrawCellTextOptions): void;
    drawCellAffixIcon(icon: string, x: number, y: number, width: number, height: number, options?: DrawCellAffixIconOptions): void;
    /**
     * 在文本前指定距离的位置渲染一个图标
     * @param label 支持字符串图标或者实体字符
     * @param text 指定文本
     * @param x x坐标
     * @param y y坐标
     * @param width 宽度
     * @param padding 边距
     * @param offsetX 横坐标位移
     * @param offsetY 纵坐标位移
     * @param options 配置选项
     */
    drawIcon(label: string, text: string | number, x: number, y: number, width: number, padding: number, offsetX: number, offsetY: number, options?: DrawIconOptions): void;
    drawRect(x: number, y: number, width: number, height: number, options?: DrawRectOptions): void;
    drawRoundRect(x: number, y: number, width: number, height: number, raidus: number, options?: DrawRectOptions): void;
    drawImage(img: HTMLImageElement | HTMLCanvasElement | {
        src: string;
    }, x: number, y: number, width: number, height: number): void;
    /**
     * 用 Canvas API 绘制 checkbox（替代 PNG 图片缩放）
     * 精确控制线宽和尺寸，视觉效果与浏览器原生 checkbox 一致
     *
     * @param x - checkbox 左上角 X 坐标
     * @param y - checkbox 左上角 Y 坐标
     * @param size - checkbox 尺寸（宽=高），默认 14
     * @param checked - 是否选中
     * @param options - 可选的颜色配置
     */
    drawCheckbox(x: number, y: number, size?: number, checked?: boolean, options?: {
        /** 选中时的背景色，默认 #1890ff */
        checkedBgColor?: string;
        /** 未选中时的边框色，默认 #d9d9d9 */
        borderColor?: string;
        /** 未选中时的背景色，默认 #fff */
        bgColor?: string;
        /** 勾选标记色，默认 #fff */
        checkmarkColor?: string;
        /** 圆角半径，默认 2 */
        borderRadius?: number;
        /** 半选状态（indeterminate），蓝色背景 + 白色横线 */
        indeterminate?: boolean;
    }): void;
    clearCanvas(x?: number, y?: number, width?: number, height?: number): void;
    /**
     * 计算长文本自动换行
     * @param text 文本
     * @param width 单元格宽度
     * @param padding 左右需要留出的padding
     */
    getTextWrapping(text: string | number, width: number, padding: number): string[];
    /**
     * 绘制线性渐变矩形（用于 Stage 分组内阴影等场景）
     * 使用多 stop 非线性渐变模拟 CSS box-shadow inset 的高斯衰减效果
     * @param x 矩形左上角 x 坐标
     * @param y 矩形左上角 y 坐标
     * @param width 矩形宽度
     * @param height 矩形高度（即渐变范围）
     * @param options 渐变配置
     */
    drawGradientRect(x: number, y: number, width: number, height: number, options: {
        direction: 'top' | 'bottom';
        color: string;
    }): void;
    /**
     * 测量文本宽度
     * @param text 文本
     * @param fontSize 字体大小
     */
    measureText(text: string, fontSize?: number): number;
}
export default Paint;
