import { Painter, Pane } from './core';
import { BoundsUnmodifiable, Size } from './bounds';
import { Color } from './color';
import { Program, UniformColor, Attribute, Uniform1f } from './shader';
import { DynamicBuffer } from './buffer';
import { Texture2D, TextureDrawOptions } from './texture';
import { Notification } from './util/notification';
export declare function newGroupPainter(...painters: Painter[]): Painter;
export declare function newBlendingBackgroundPainter(color: Color): Painter;
export declare class Highlight {
    private _color;
    private _dashPattern;
    private _dashLength;
    program: Program;
    u_Color: UniformColor;
    a_XyNdc: Attribute;
    u_yOffset: Uniform1f;
    u_DashPattern: Uniform1f;
    u_DashLength: Uniform1f;
    numVertices: number;
    xy_NDC: Float32Array;
    xyBuffer_NDC: DynamicBuffer;
    constructor(color?: Color);
    get color(): Color;
    set color(color: Color);
    get dashPattern(): number;
    set dashPattern(pattern: number);
    get dashLength(): number;
    set dashLength(length: number);
    newPainter(): (gl: WebGLRenderingContext, viewport: BoundsUnmodifiable) => void;
}
export declare class Background {
    private _color;
    constructor(color?: Color);
    get color(): Color;
    set color(color: Color);
    newPainter(): (gl: WebGLRenderingContext, viewport: BoundsUnmodifiable) => void;
}
export declare function newBackgroundPainter(color: Color): Painter;
export declare function newTexturePainter(texture: Texture2D, xFrac: number, yFrac: number, options: TextureDrawOptions): (gl: WebGLRenderingContext, viewport: BoundsUnmodifiable) => void;
export declare function newSolidPane(color: Color): Pane;
export declare function fitToTexture(texture: Texture2D): (parentPrefSize: Size) => void;
export declare function fixedSize(w: number, h: number): (parentPrefSize: Size) => void;
/**
 * Takes (x,y) in NDC (Normalized Device Coords), in attribute a_XyNdc
 */
export declare let xyNdc_VERTSHADER: string;
/**
 * Takes (x,y) as fractions of the viewport, in attribute a_XyFrac
 */
export declare let xyFrac_VERTSHADER: string;
export declare let solid_FRAGSHADER: string;
export declare let dash_FRAGSHADER: string;
export declare let dash2_FRAGSHADER: string;
export declare let varyingColor_FRAGSHADER: string;
export declare let modelview_VERTSHADER: string;
export declare let nearestPixelCenter_GLSLFUNC: string;
export declare enum Side {
    TOP = 0,
    BOTTOM = 1,
    RIGHT = 2,
    LEFT = 3
}
/**
 * Converts viewport-fraction to NDC (Normalized Device Coords)
 */
export declare function fracToNdc(frac: number): number;
export declare function nearestPixel(viewportFrac: number, viewportSize: number, imageAnchor: number, imageSize: number): number;
export declare function putQuadXys(xys: Float32Array, index: number, xLeft: number, xRight: number, yTop: number, yBottom: number): number;
export declare function putUpperLeftTriangleXys(xys: Float32Array, index: number, xLeft: number, xRight: number, yTop: number, yBottom: number): number;
export declare function putLowerRightTriangleXys(xys: Float32Array, index: number, xLeft: number, xRight: number, yTop: number, yBottom: number): number;
export declare function putUpperRightTriangleXys(xys: Float32Array, index: number, xLeft: number, xRight: number, yTop: number, yBottom: number): number;
export declare function putLowerLeftTriangleXys(xys: Float32Array, index: number, xLeft: number, xRight: number, yTop: number, yBottom: number): number;
export declare function putQuadRgbas(rgbas: Float32Array, index: number, color: Color): number;
export declare function putRgbas(rgbas: Float32Array, index: number, color: Color, count: number): number;
export declare function clearSelection(): void;
export declare class SimpleModel<V> {
    private _value;
    private _changed;
    constructor(value?: V);
    get value(): V;
    get changed(): Notification;
    set value(value: V);
}
export declare class XyModel {
    private _x;
    private _y;
    private _changed;
    constructor(x?: number, y?: number);
    get x(): number;
    get y(): number;
    get changed(): Notification;
    set x(x: number);
    set y(y: number);
    setXy(x: number, y: number): void;
}
