import Game from '../../game';
import TextureBase from '../../texture/textureBase';
import BaseRenderer from '../baseRenderer';
import { BlendModes } from './const/blendModes';
import RendererPipeline from './pipeline/rendererPipeline';
/**
 * @class CanvasRenderer
 * @classdesc Creates a DuckEngine CanvasRenderer
 * @description The CanvasRenderer Class. Renders everything using the RendererPipeline to pool what to draw
 * @since 2.1.0
 */
export default class CanvasRenderer extends BaseRenderer {
    /**
     * @memberof CanvasRenderer
     * @description The Canvas rendering context
     * @type CanvasRenderingContext2D
     * @since 2.1.0
     */
    ctx: CanvasRenderingContext2D;
    /**
     * @memberof CanvasRenderer
     * @description The RenderingPipeline, handles and manages what needs to be drawn and updated
     * @type RendererPipeline
     * @since 2.1.0
     */
    pipeline: RendererPipeline;
    /**
     * @constructor CanvasRenderer
     * @description Creates a CanvasRenderer instance
     * @param {Game} game Game instance
     * @param {number} [poolingInterval= 1000 / game.fps] How often the does the RendererPipeline pool visible scenes and renderables
     * @since 2.1.0
     */
    constructor(game: Game, poolingInterval?: number);
    /**
     * @memberof CanvasRenderer
     * @description Gets the poolStack from the pipeline and ticks, updates, and renders the scene and renderables
     * @param {number} deltaTime Time passed since last frame
     * @since 2.1.0
     */
    render(deltaTime: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Calls this.ctx.save
     * @since 2.1.0
     */
    save(): void;
    /**
     * @memberof CanvasRenderer
     * @description Calls this.ctx.restore
     * @since 2.1.0
     */
    restore(): void;
    /**
     * @memberof CanvasRenderer
     * @description Calls this.ctx.translate
     * @param {number} x X position
     * @param {number} y Y position
     * @since 2.1.0
     */
    translate(x: number, y: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Transforms the canvas using this.ctx.transform
     * @param {number} a
     * @param {number} b
     * @param {number} c
     * @param {number} d
     * @param {number} e
     * @param {number} f
     * @since 2.1.0
     */
    transform(a: number, b: number, c: number, d: number, e: number, f: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Scales the canvas using this.ctx.scale
     * @param {number} x X scale
     * @param {number} y Y scale
     * @since 2.1.0
     */
    scale(x: number, y: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Sets the font using this.ctx.font =
     * @param {string} font Font to set to
     * @since 2.1.0
     */
    setFont(font: string): void;
    /**
     * @memberof CanvasRenderer
     * @description Measures the text using the font
     * @param {string} font Font to set to
     * @param {string} text Text measure
     * @returns {TextMetrics}
     * @since 2.1.0
     */
    measureText(font: string, text: string): TextMetrics;
    /**
     * @memberof CanvasRenderer
     * @description Sets the fillStyle using this.ctx.fillStyle =
     * @param {string} color Color to set to
     * @since 2.1.0
     */
    setFillColor(color: string): void;
    /**
     * @memberof CanvasRenderer
     * @description Sets the strokeStyle using this.ctx.fillStyle =
     * @param {string} color Color to set to
     * @since 2.1.0
     */
    setStrokeColor(color: string): void;
    /**
     * @memberof CanvasRenderer
     * @description Sets the lineWidth using this.ctx.lineWidth =
     * @param {number} width Width to set as
     * @since 2.1.0
     */
    setLineWidth(width: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Draws text to the screen, must set font with this.setFont first and color with this.setFillColor
     * @param {string} text Text to draw
     * @param {number} x X Position
     * @param {number} y Y Position
     * @param {number} [maxWidth] Max width of text, optional
     * @since 2.1.0
     */
    drawText(text: string, x: number, y: number, maxWidth?: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Strokes text to the screen, must set font with this.setFont first and color with this.setStrokeColor
     * @param {string} text Text to draw
     * @param {number} x X Position
     * @param {number} y Y Position
     * @param {number} [maxWidth] Max width of text, optional
     * @since 2.1.0
     */
    strokeText(text: string, x: number, y: number, maxWidth?: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Clears the screen
     * @since 2.1.0
     */
    clearFrame(): void;
    /**
     * @memberof CanvasRenderer
     * @description Clears an area
     * @param {number} x X position
     * @param {number} y Y position
     * @param {number} w Width of area to clear
     * @param {number} h Height of area to clear
     * @since 2.1.0
     */
    clearRect(x: number, y: number, w: number, h: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Fills a rectangle
     * @param {number} x X position
     * @param {number} y Y position
     * @param {number} w Width of rect
     * @param {number} h Height of rect
     * @param {string} color Color to fill rect with
     * @since 2.1.0
     */
    drawRect(x: number, y: number, w: number, h: number, color: string): void;
    /**
     * @memberof CanvasRenderer
     * @description Fills a circle
     * @param {number} x X position
     * @param {number} y Y position
     * @param {number} r Radius of circle
     * @param {string} color Color to fill circle with
     * @since 2.1.0
     */
    drawCircle(x: number, y: number, r: number, color: string): void;
    /**
     * @memberof CanvasRenderer
     * @description Fills a roundRect
     * @param {number} x X position
     * @param {number} y Y position
     * @param {number} w Width of roundRect
     * @param {number} h Height of roundRect
     * @param {number} r Radius of roundRect
     * @param {string} color Color to fill roundRect with
     * @since 2.1.0
     */
    drawRoundRect(x: number, y: number, w: number, h: number, r: number, color: string): void;
    /**
     * @memberof CanvasRenderer
     * @description Draws a sprite
     * @param {number} x X position
     * @param {number} y Y position
     * @param {number} w Width of roundRect
     * @param {number} h Height of roundRect
     * @param {TextureBase<'image'>} texture Texture to use for the Sprite
     * @param {number} [currentRow] The default row to use for the texture, for spritesheets
     * @param {number} [currentCol] The default column to use for the texture, for spritesheets
     * @since 2.1.0
     */
    drawSprite(x: number, y: number, w: number, h: number, texture: TextureBase<'image'>, currentRow?: number, currentCol?: number): void;
    /**
     * @memberof CanvasRenderer
     * @description Sets the blend mode / globalCompositionOperation
     * @param {keyof typeof BlendModes} blendMode Blend Mode
     * @since 2.1.0
     */
    setBlendMode(blendMode: keyof typeof BlendModes): void;
}
