import * as util from '../core/util';
import { ImagePatternObject } from '../graphic/Pattern';
import CanvasPainter from './Painter';
import { GradientObject } from '../graphic/Gradient';
import { IncrementalId, ZLevel, ZLevel2 } from '../core/types';
import Eventful from '../core/Eventful';
import Element, { ElementEventCallback } from '../Element';
import Displayable from '../graphic/Displayable';
import BoundingRect from '../core/BoundingRect';
export declare function isIncrementalLayer(layer: Layer): boolean;
export interface LayerConfig {
    clearColor?: string | GradientObject | ImagePatternObject;
    motionBlur?: boolean;
    lastFrameAlpha?: number;
}
export interface LayerDrawCursor {
    key: IncrementalId;
    used: boolean;
    drawIdx: number;
    notClearIdx: number;
    startIdx: number;
    endIdx: number;
    endIdxNew: number;
    first: Element['id'];
    last: Element['id'];
}
declare type LayerDrawCursorStartEnd = Pick<LayerDrawCursor, 'startIdx' | 'endIdx'>;
export default class Layer extends Eventful {
    id: string;
    dom: HTMLCanvasElement;
    domBack: HTMLCanvasElement;
    ctx: CanvasRenderingContext2D;
    ctxBack: CanvasRenderingContext2D;
    painter: CanvasPainter;
    clearColor: string | GradientObject | ImagePatternObject;
    motionBlur: boolean;
    lastFrameAlpha: number;
    dpr: number;
    virtual: boolean;
    config: {};
    zlevel: ZLevel;
    zlevel2: ZLevel2;
    maxRepaintRectCount: number;
    private _paintRects;
    __dirty: boolean;
    __firstTimePaint: boolean;
    __cursorStack: IncrementalId[];
    __cursors: util.HashMap<LayerDrawCursor, IncrementalId>;
    __prevIdx: LayerDrawCursorStartEnd;
    __builtin__: boolean;
    constructor(id: string | HTMLCanvasElement, painter: CanvasPainter, dpr?: number);
    afterBrush(): void;
    initContext(): void;
    setUnpainted(): void;
    createBackBuffer(): void;
    createRepaintRects(displayList: Displayable[], prevList: Displayable[], viewWidth: number, viewHeight: number): BoundingRect[];
    debugGetPaintRects(): BoundingRect[];
    resize(width: number, height: number): void;
    clear(clearAll?: boolean, clearColor?: string | GradientObject | ImagePatternObject, repaintRects?: BoundingRect[]): void;
    refresh: (clearColor?: string | GradientObject | ImagePatternObject) => void;
    renderToCanvas: (ctx: CanvasRenderingContext2D) => void;
    onclick: ElementEventCallback<unknown, this>;
    ondblclick: ElementEventCallback<unknown, this>;
    onmouseover: ElementEventCallback<unknown, this>;
    onmouseout: ElementEventCallback<unknown, this>;
    onmousemove: ElementEventCallback<unknown, this>;
    onmousewheel: ElementEventCallback<unknown, this>;
    onmousedown: ElementEventCallback<unknown, this>;
    onmouseup: ElementEventCallback<unknown, this>;
    oncontextmenu: ElementEventCallback<unknown, this>;
    ondrag: ElementEventCallback<unknown, this>;
    ondragstart: ElementEventCallback<unknown, this>;
    ondragend: ElementEventCallback<unknown, this>;
    ondragenter: ElementEventCallback<unknown, this>;
    ondragleave: ElementEventCallback<unknown, this>;
    ondragover: ElementEventCallback<unknown, this>;
    ondrop: ElementEventCallback<unknown, this>;
}
export {};
