/// <reference types="offscreencanvas" />
import { DebugData, PAGScaleMode, PAGViewListenerEvent } from './types';
import { PAGPlayer } from './pag-player';
import { EventManager, Listener } from './utils/event-manager';
import { PAGSurface } from './pag-surface';
import { BackendContext } from './core/backend-context';
import { RenderCanvas } from './core/render-canvas';
import type { PAGComposition } from './pag-composition';
import type { Matrix } from './core/matrix';
export interface PAGViewOptions {
    /**
     * Use style to scale canvas. default false.
     * When target canvas is offscreen canvas, useScale is false.
     */
    useScale?: boolean;
    /**
     * Can choose Canvas2D mode in chrome. default false.
     */
    useCanvas2D?: boolean;
    /**
     * Render first frame when pag view init. default true.
     */
    firstFrame?: boolean;
}
export declare class PAGView {
    /**
     * Create pag view.
     * @param file pag file.
     * @param canvas target render canvas.
     * @param initOptions pag view options
     * @returns
     */
    static init(file: PAGComposition, canvas: string | HTMLCanvasElement | OffscreenCanvas, initOptions?: PAGViewOptions): Promise<PAGView | undefined>;
    protected static makePAGSurface(pagGlContext: BackendContext, width: number, height: number): PAGSurface;
    /**
     * The repeat count of player.
     */
    repeatCount: number;
    /**
     * Indicates whether or not this pag view is playing.
     */
    isPlaying: boolean;
    /**
     * Indicates whether or not this pag view is destroyed.
     */
    isDestroyed: boolean;
    protected pagViewOptions: PAGViewOptions;
    protected renderCanvas: RenderCanvas | null;
    protected pagGlContext: BackendContext | null;
    protected frameRate: number;
    protected pagSurface: PAGSurface | null;
    protected player: PAGPlayer;
    protected currentFrame: number;
    protected canvasElement: HTMLCanvasElement | OffscreenCanvas | null;
    protected timer: number | null;
    protected flushingNextFrame: boolean;
    protected playTime: number;
    protected startTime: number;
    protected repeatedTimes: number;
    protected eventManager: EventManager;
    private canvasContext;
    private rawWidth;
    private rawHeight;
    private debugData;
    private fpsBuffer;
    private file;
    constructor(pagPlayer: PAGPlayer, canvasElement: HTMLCanvasElement | OffscreenCanvas, file: PAGComposition);
    /**
     * The duration of current composition in microseconds.
     */
    duration(): number;
    /**
     * Adds a listener to the set of listeners that are sent events through the life of an animation,
     * such as start, repeat, and end.
     */
    addListener(eventName: PAGViewListenerEvent, listener: Listener): void;
    /**
     * Removes a listener from the set listening to this animation.
     */
    removeListener(eventName: PAGViewListenerEvent, listener?: Listener): void;
    /**
     * Start the animation.
     */
    play(): Promise<void>;
    /**
     * Pause the animation.
     */
    pause(): void;
    /**
     * Stop the animation.
     */
    stop(notification?: boolean): Promise<void>;
    /**
     * Set the number of times the animation will repeat. The default is 1, which means the animation
     * will play only once. 0 means the animation will play infinity times.
     */
    setRepeatCount(repeatCount: number): void;
    /**
     * Returns the current progress of play position, the value is from 0.0 to 1.0. It is applied only
     * when the composition is not null.
     */
    getProgress(): number;
    /**
     * Set the progress of play position, the value is from 0.0 to 1.0.
     */
    setProgress(progress: number): number;
    /**
     * Return the value of videoEnabled property.
     */
    videoEnabled(): boolean;
    /**
     * If set false, will skip video layer drawing.
     */
    setVideoEnabled(enable: boolean): void;
    /**
     * If set to true, PAG renderer caches an internal bitmap representation of the static content for
     * each layer. This caching can increase performance for layers that contain complex vector content.
     * The execution speed can be significantly faster depending on the complexity of the content, but
     * it requires extra graphics memory. The default value is true.
     */
    cacheEnabled(): boolean;
    /**
     * Set the value of cacheEnabled property.
     */
    setCacheEnabled(enable: boolean): void;
    /**
     * This value defines the scale factor for internal graphics caches, ranges from 0.0 to 1.0. The
     * scale factors less than 1.0 may result in blurred output, but it can reduce the usage of graphics
     * memory which leads to better performance. The default value is 1.0.
     */
    cacheScale(): number;
    /**
     * Set the value of cacheScale property.
     */
    setCacheScale(value: number): void;
    /**
     * The maximum frame rate for rendering. If set to a value less than the actual frame rate from
     * PAGFile, it drops frames but increases performance. Otherwise, it has no effect. The default
     * value is 60.
     */
    maxFrameRate(): number;
    /**
     * Set the maximum frame rate for rendering.
     */
    setMaxFrameRate(value: number): void;
    /**
     * Returns the current scale mode.
     */
    scaleMode(): PAGScaleMode;
    /**
     * Specifies the rule of how to scale the pag content to fit the surface size. The matrix
     * changes when this method is called.
     */
    setScaleMode(value: PAGScaleMode): void;
    /**
     * Call this method to render current position immediately. If the play() method is already
     * called, there is no need to call it. Returns true if the content has changed.
     */
    flush(): Promise<boolean>;
    /**
     * Free the cache created by the pag view immediately. Can be called to reduce memory pressure.
     */
    freeCache(): void;
    /**
     * Returns the current PAGComposition for PAGView to render as content.
     */
    getComposition(): PAGComposition;
    /**
     * Sets a new PAGComposition for PAGView to render as content.
     * Note: If the composition is already added to another PAGView, it will be removed from
     * the previous PAGView.
     */
    setComposition(pagComposition: PAGComposition): void;
    /**
     * Returns a copy of current matrix.
     */
    matrix(): Matrix;
    /**
     * Set the transformation which will be applied to the composition. The scaleMode property
     * will be set to PAGScaleMode::None when this method is called.
     */
    setMatrix(matrix: Matrix): void;
    getLayersUnderPoint(localX: number, localY: number): import("./types").Vector<import("./pag-image-layer").PAGImageLayer | import("./pag-layer").PAGLayer | import("./pag-solid-layer").PAGSolidLayer | import("./pag-text-layer").PAGTextLayer>;
    /**
     * Update size when changed canvas size.
     */
    updateSize(): void;
    /**
     * Prepares the player for the next flush() call. It collects all CPU tasks from the current
     * progress of the composition and runs them asynchronously in parallel. It is usually used for
     * speeding up the first frame rendering.
     */
    prepare(): Promise<void>;
    destroy(): void;
    getDebugData(): DebugData;
    setDebugData(data: DebugData): void;
    protected flushLoop(): Promise<void>;
    protected flushNextFrame(): Promise<boolean>;
    protected getNowTime(): number;
    protected clearTimer(): void;
    protected resetSize(useScale?: boolean): void;
    private updateFPS;
}
