import { Sprite } from "./Sprite";
import { AlphaCmd } from "./cmd/AlphaCmd";
import { ClipRectCmd } from "./cmd/ClipRectCmd";
import { DrawCircleCmd } from "./cmd/DrawCircleCmd";
import { DrawCurvesCmd } from "./cmd/DrawCurvesCmd";
import { DrawImageCmd } from "./cmd/DrawImageCmd";
import { DrawLineCmd } from "./cmd/DrawLineCmd";
import { DrawLinesCmd } from "./cmd/DrawLinesCmd";
import { DrawPathCmd } from "./cmd/DrawPathCmd";
import { DrawPieCmd } from "./cmd/DrawPieCmd";
import { DrawPolyCmd } from "./cmd/DrawPolyCmd";
import { DrawRectCmd } from "./cmd/DrawRectCmd";
import { DrawTextureCmd } from "./cmd/DrawTextureCmd";
import { DrawTexturesCmd } from "./cmd/DrawTexturesCmd";
import { DrawTrianglesCmd } from "./cmd/DrawTrianglesCmd";
import { FillTextCmd } from "./cmd/FillTextCmd";
import { FillTextureCmd } from "./cmd/FillTextureCmd";
import { RestoreCmd } from "./cmd/RestoreCmd";
import { RotateCmd } from "./cmd/RotateCmd";
import { SaveCmd } from "./cmd/SaveCmd";
import { ScaleCmd } from "./cmd/ScaleCmd";
import { TransformCmd } from "./cmd/TransformCmd";
import { TranslateCmd } from "./cmd/TranslateCmd";
import { Matrix } from "../maths/Matrix";
import { Point } from "../maths/Point";
import { Rectangle } from "../maths/Rectangle";
import { Context } from "../resource/Context";
import { Texture } from "../resource/Texture";
/**
 * <code>Graphics</code> 类用于创建绘图显示对象。Graphics可以同时绘制多个位图或者矢量图，还可以结合save，restore，transform，scale，rotate，translate，alpha等指令对绘图效果进行变化。
 * Graphics以命令流方式存储，可以通过cmds属性访问所有命令流。Graphics是比Sprite更轻量级的对象，合理使用能提高应用性能(比如把大量的节点绘图改为一个节点的Graphics命令集合，能减少大量节点创建消耗)。
 * @see laya.display.Sprite#graphics
 */
export declare class Graphics {
    /**@private */
    private _cmds;
    /**@private */
    protected _vectorgraphArray: any[] | null;
    /**@private */
    private _graphicBounds;
    /**@private */
    autoDestroy: boolean;
    constructor();
    /**
     * <p>销毁此对象。</p>
     */
    destroy(): void;
    /**
     * <p>清空绘制命令。</p>
     * @param recoverCmds 是否回收绘图指令数组，设置为true，则对指令数组进行回收以节省内存开销，建议设置为true进行回收，但如果手动引用了数组，不建议回收
     */
    clear(recoverCmds?: boolean): void;
    /**@private */
    private _clearBoundsCache;
    /**@private */
    private _initGraphicBounds;
    /**
     * @private
     * 命令流。存储了所有绘制命令。
     */
    get cmds(): any[];
    set cmds(value: any[]);
    /**
     * 获取位置及宽高信息矩阵(比较耗CPU，频繁使用会造成卡顿，尽量少用)。
     * @param realSize	（可选）使用图片的真实大小，默认为false
     * @return 位置与宽高组成的 一个 Rectangle 对象。
     */
    getBounds(realSize?: boolean): Rectangle;
    /**
     * @private
     * @param realSize	（可选）使用图片的真实大小，默认为false
     * 获取端点列表。
     */
    getBoundPoints(realSize?: boolean): any[];
    /**
     * 绘制单独图片
     * @param texture		纹理。
     * @param x 		（可选）X轴偏移量。
     * @param y 		（可选）Y轴偏移量。
     * @param width		（可选）宽度。
     * @param height	（可选）高度。
     */
    drawImage(texture: Texture, x?: number, y?: number, width?: number, height?: number): DrawImageCmd | null;
    /**
     * 绘制纹理，相比drawImage功能更强大，性能会差一些
     * @param texture		纹理。
     * @param x 		（可选）X轴偏移量。
     * @param y 		（可选）Y轴偏移量。
     * @param width		（可选）宽度。
     * @param height	（可选）高度。
     * @param matrix	（可选）矩阵信息。
     * @param alpha		（可选）透明度。
     * @param color		（可选）颜色滤镜。
     * @param blendMode （可选）混合模式。
     */
    drawTexture(texture: Texture | null, x?: number, y?: number, width?: number, height?: number, matrix?: Matrix | null, alpha?: number, color?: string | null, blendMode?: string | null, uv?: number[]): DrawTextureCmd | null;
    /**
     * 批量绘制同样纹理。
     * @param texture 纹理。
     * @param pos 绘制次数和坐标。
     */
    drawTextures(texture: Texture, pos: any[]): DrawTexturesCmd | null;
    /**
     * 绘制一组三角形
     * @param texture	纹理。
     * @param x			X轴偏移量。
     * @param y			Y轴偏移量。
     * @param vertices  顶点数组。
     * @param indices	顶点索引。
     * @param uvData	UV数据。
     * @param matrix	缩放矩阵。
     * @param alpha		alpha
     * @param color		颜色变换
     * @param blendMode	blend模式
     */
    drawTriangles(texture: Texture, x: number, y: number, vertices: Float32Array, uvs: Float32Array, indices: Uint16Array, matrix?: Matrix | null, alpha?: number, color?: string | null, blendMode?: string | null, colorNum?: number): DrawTrianglesCmd;
    /**
     * 用texture填充。
     * @param texture		纹理。
     * @param x			X轴偏移量。
     * @param y			Y轴偏移量。
     * @param width		（可选）宽度。
     * @param height	（可选）高度。
     * @param type		（可选）填充类型 repeat|repeat-x|repeat-y|no-repeat
     * @param offset	（可选）贴图纹理偏移
     *
     */
    fillTexture(texture: Texture, x: number, y: number, width?: number, height?: number, type?: string, offset?: Point | null): FillTextureCmd | null;
    /**
     * 设置剪裁区域，超出剪裁区域的坐标不显示。
     * @param x X 轴偏移量。
     * @param y Y 轴偏移量。
     * @param width 宽度。
     * @param height 高度。
     */
    clipRect(x: number, y: number, width: number, height: number): ClipRectCmd;
    /**
     * 在画布上绘制文本。
     * @param text 在画布上输出的文本。
     * @param x 开始绘制文本的 x 坐标位置（相对于画布）。
     * @param y 开始绘制文本的 y 坐标位置（相对于画布）。
     * @param font 定义字号和字体，比如"20px Arial"。
     * @param color 定义文本颜色，比如"#ff0000"。
     * @param textAlign 文本对齐方式，可选值："left"，"center"，"right"。
     */
    fillText(text: string, x: number, y: number, font: string, color: string, textAlign: string): FillTextCmd;
    /**
     * 在画布上绘制“被填充且镶边的”文本。
     * @param text			在画布上输出的文本。
     * @param x				开始绘制文本的 x 坐标位置（相对于画布）。
     * @param y				开始绘制文本的 y 坐标位置（相对于画布）。
     * @param font			定义字体和字号，比如"20px Arial"。
     * @param fillColor		定义文本颜色，比如"#ff0000"。
     * @param textAlign		文本对齐方式，可选值："left"，"center"，"right"。
     * @param lineWidth		镶边线条宽度。
     * @param borderColor	定义镶边文本颜色。
     */
    fillBorderText(text: string, x: number, y: number, font: string, fillColor: string, textAlign: string, lineWidth: number, borderColor: string): FillTextCmd;
    /*** @private */
    fillWords(words: any[], x: number, y: number, font: string, color: string): FillTextCmd;
    /*** @private */
    fillBorderWords(words: any[], x: number, y: number, font: string, fillColor: string, borderColor: string, lineWidth: number): FillTextCmd;
    /**
     * 在画布上绘制文本（没有填色）。文本的默认颜色是黑色。
     * @param text		在画布上输出的文本。
     * @param x			开始绘制文本的 x 坐标位置（相对于画布）。
     * @param y			开始绘制文本的 y 坐标位置（相对于画布）。
     * @param font		定义字体和字号，比如"20px Arial"。
     * @param color		定义文本颜色，比如"#ff0000"。
     * @param lineWidth	线条宽度。
     * @param textAlign	文本对齐方式，可选值："left"，"center"，"right"。
     */
    strokeText(text: string, x: number, y: number, font: string, color: string, lineWidth: number, textAlign: string): FillTextCmd;
    /**
     * 设置透明度。
     * @param value 透明度。
     */
    alpha(alpha: number): AlphaCmd;
    /**
     * 替换绘图的当前转换矩阵。
     * @param mat 矩阵。
     * @param pivotX	（可选）水平方向轴心点坐标。
     * @param pivotY	（可选）垂直方向轴心点坐标。
     */
    transform(matrix: Matrix, pivotX?: number, pivotY?: number): TransformCmd;
    /**
     * 旋转当前绘图。(推荐使用transform，性能更高)
     * @param angle		旋转角度，以弧度计。
     * @param pivotX	（可选）水平方向轴心点坐标。
     * @param pivotY	（可选）垂直方向轴心点坐标。
     */
    rotate(angle: number, pivotX?: number, pivotY?: number): RotateCmd;
    /**
     * 缩放当前绘图至更大或更小。(推荐使用transform，性能更高)
     * @param scaleX	水平方向缩放值。
     * @param scaleY	垂直方向缩放值。
     * @param pivotX	（可选）水平方向轴心点坐标。
     * @param pivotY	（可选）垂直方向轴心点坐标。
     */
    scale(scaleX: number, scaleY: number, pivotX?: number, pivotY?: number): ScaleCmd;
    /**
     * 重新映射画布上的 (0,0) 位置。
     * @param x 添加到水平坐标（x）上的值。
     * @param y 添加到垂直坐标（y）上的值。
     */
    translate(tx: number, ty: number): TranslateCmd;
    /**
     * 保存当前环境的状态。
     */
    save(): SaveCmd;
    /**
     * 返回之前保存过的路径状态和属性。
     */
    restore(): RestoreCmd;
    /**
     * @private
     * 替换文本内容。
     * @param text 文本内容。
     * @return 替换成功则值为true，否则值为flase。
     */
    replaceText(text: string): boolean;
    /**@private */
    private _isTextCmd;
    /**
     * @private
     * 替换文本颜色。
     * @param color 颜色。
     */
    replaceTextColor(color: string): void;
    /**@private */
    private _setTextCmdColor;
    /**
     * 加载并显示一个图片。
     * @param url		图片地址。
     * @param x			（可选）显示图片的x位置。
     * @param y			（可选）显示图片的y位置。
     * @param width		（可选）显示图片的宽度，设置为0表示使用图片默认宽度。
     * @param height	（可选）显示图片的高度，设置为0表示使用图片默认高度。
     * @param complete	（可选）加载完成回调。
     */
    loadImage(url: string, x?: number, y?: number, width?: number, height?: number, complete?: Function | null): void;
    /**
     * 绘制一条线。
     * @param fromX		X轴开始位置。
     * @param fromY		Y轴开始位置。
     * @param toX		X轴结束位置。
     * @param toY		Y轴结束位置。
     * @param lineColor	颜色。
     * @param lineWidth	（可选）线条宽度。
     */
    drawLine(fromX: number, fromY: number, toX: number, toY: number, lineColor: string, lineWidth?: number): DrawLineCmd;
    /**
     * 绘制一系列线段。
     * @param x			开始绘制的X轴位置。
     * @param y			开始绘制的Y轴位置。
     * @param points	线段的点集合。格式:[x1,y1,x2,y2,x3,y3...]。
     * @param lineColor	线段颜色，或者填充绘图的渐变对象。
     * @param lineWidth	（可选）线段宽度。
     */
    drawLines(x: number, y: number, points: any[], lineColor: any, lineWidth?: number): DrawLinesCmd | null;
    /**
     * 绘制一系列曲线。
     * @param x			开始绘制的 X 轴位置。
     * @param y			开始绘制的 Y 轴位置。
     * @param points	线段的点集合，格式[controlX, controlY, anchorX, anchorY...]。
     * @param lineColor	线段颜色，或者填充绘图的渐变对象。
     * @param lineWidth	（可选）线段宽度。
     */
    drawCurves(x: number, y: number, points: any[], lineColor: any, lineWidth?: number): DrawCurvesCmd;
    /**
     * 绘制矩形。
     * @param x			开始绘制的 X 轴位置。
     * @param y			开始绘制的 Y 轴位置。
     * @param width		矩形宽度。
     * @param height	矩形高度。
     * @param fillColor	填充颜色，或者填充绘图的渐变对象。
     * @param lineColor	（可选）边框颜色，或者填充绘图的渐变对象。
     * @param lineWidth	（可选）边框宽度。
     */
    drawRect(x: number, y: number, width: number, height: number, fillColor: any, lineColor?: any, lineWidth?: number): DrawRectCmd;
    /**
     * 绘制圆形。
     * @param x			圆点X 轴位置。
     * @param y			圆点Y 轴位置。
     * @param radius	半径。
     * @param fillColor	填充颜色，或者填充绘图的渐变对象。
     * @param lineColor	（可选）边框颜色，或者填充绘图的渐变对象。
     * @param lineWidth	（可选）边框宽度。
     */
    drawCircle(x: number, y: number, radius: number, fillColor: any, lineColor?: any, lineWidth?: number): DrawCircleCmd;
    /**
     * 绘制扇形。
     * @param x				开始绘制的 X 轴位置。
     * @param y				开始绘制的 Y 轴位置。
     * @param radius		扇形半径。
     * @param startAngle	开始角度。
     * @param endAngle		结束角度。
     * @param fillColor		填充颜色，或者填充绘图的渐变对象。
     * @param lineColor		（可选）边框颜色，或者填充绘图的渐变对象。
     * @param lineWidth		（可选）边框宽度。
     */
    drawPie(x: number, y: number, radius: number, startAngle: number, endAngle: number, fillColor: any, lineColor?: any, lineWidth?: number): DrawPieCmd;
    /**
     * 绘制多边形。
     * @param x			开始绘制的 X 轴位置。
     * @param y			开始绘制的 Y 轴位置。
     * @param points	多边形的点集合。
     * @param fillColor	填充颜色，或者填充绘图的渐变对象。
     * @param lineColor	（可选）边框颜色，或者填充绘图的渐变对象。
     * @param lineWidth	（可选）边框宽度。
     */
    drawPoly(x: number, y: number, points: any[], fillColor: any, lineColor?: any, lineWidth?: number): DrawPolyCmd;
    /**
     * 绘制路径。
     * @param x		开始绘制的 X 轴位置。
     * @param y		开始绘制的 Y 轴位置。
     * @param paths	路径集合，路径支持以下格式：[["moveTo",x,y],["lineTo",x,y],["arcTo",x1,y1,x2,y2,r],["closePath"]]。
     * @param brush	（可选）刷子定义，支持以下设置{fillStyle:"#FF0000"}。
     * @param pen	（可选）画笔定义，支持以下设置{strokeStyle,lineWidth,lineJoin:"bevel|round|miter",lineCap:"butt|round|square",miterLimit}。
     */
    drawPath(x: number, y: number, paths: any[], brush?: any, pen?: any): DrawPathCmd;
    /**
     * @private
     * 绘制带九宫格的图片
     * @param	texture
     * @param	x
     * @param	y
     * @param	width
     * @param	height
     * @param	sizeGrid
     */
    draw9Grid(texture: Texture, x: number, y: number, width: number, height: number, sizeGrid: any[]): void;
}
