import Camera from "parsegraph-camera";
import Carousel from "./Carousel";
import Input from "./Input";
import BurgerMenu from "./BurgerMenu";
import CameraFilter from "./CameraFilter";
import World from "./World";
import WindowNode from "./WindowNode";
import { BasicWindow, Component } from "parsegraph-window";
import DefaultNodeType from "./DefaultNodeType";
import Node from "./Node";
export declare const FOCUS_SCALE = 1;
export interface ViewportDisplayMode {
    render(viewport: Viewport): boolean;
    allowSplit(viewport: Viewport): boolean;
    showMenu(viewport: Viewport): boolean;
}
declare abstract class SplittingViewportDisplayMode implements ViewportDisplayMode {
    abstract render(viewport: Viewport): boolean;
    allowSplit(viewport: Viewport): boolean;
    showMenu(viewport: Viewport): boolean;
}
export declare class FullscreenViewportDisplayMode extends SplittingViewportDisplayMode {
    render(viewport: Viewport): boolean;
}
declare abstract class MenulessViewportDisplayMode implements ViewportDisplayMode {
    allowSplit(): boolean;
    showMenu(): boolean;
    abstract render(viewport: Viewport): boolean;
}
export declare class SingleScreenViewportDisplayMode extends MenulessViewportDisplayMode {
    render(viewport: Viewport): boolean;
}
export declare class FixedWidthViewportDisplayMode extends SplittingViewportDisplayMode {
    _w: number;
    _h: number;
    constructor(w: number, h: number);
    render(viewport: Viewport): boolean;
}
export declare class FitInWindowViewportDisplayMode extends SplittingViewportDisplayMode {
    render(viewport: Viewport): boolean;
}
export default class Viewport extends Component {
    _world: World;
    _camera: Camera;
    _cameraFilter: CameraFilter;
    _carousel: Carousel;
    _input: Input;
    _menu: BurgerMenu;
    _renderedMouse: number;
    _needsRender: boolean;
    _focusScale: number;
    _nodeShown: WindowNode;
    _needsRepaint: boolean;
    _displayMode: ViewportDisplayMode;
    _window: BasicWindow;
    constructor(world: World);
    setDisplayMode(displayMode: ViewportDisplayMode): void;
    setSingleScreen(single: boolean): void;
    setFixedWidth(w: number, h: number): void;
    fitInWindow(): void;
    displayMode(): ViewportDisplayMode;
    peer(): any;
    handleEvent(eventType: string, eventData: any): any;
    tick(startDate: number): boolean;
    _unmount: () => void;
    mount(window: BasicWindow): void;
    unmount(): void;
    setCursor(cursor: string): void;
    serialize(): {
        componentType: string;
        camera: any;
    };
    component(): this;
    width(): number;
    x(): number;
    y(): number;
    height(): number;
    shaders(): {
        [shaderName: string]: WebGLProgram;
    };
    window(): BasicWindow;
    gl(): WebGLRenderingContext;
    contextChanged(isLost: boolean): void;
    world(): World;
    carousel(): Carousel;
    menu(): BurgerMenu;
    camera(): Camera;
    input(): Input;
    dispose(): void;
    scheduleRepaint(): void;
    scheduleRender(): void;
    needsRepaint(): boolean;
    needsRender(): boolean;
    plot(node: WindowNode): void;
    paint(timeout?: number): boolean;
    mouseVersion(): number;
    showInCamera(node: Node<DefaultNodeType>): void;
    setFocusScale(scale: number): void;
    getFocusScale(): number;
    getRequiredScale(): number;
    cameraFilter(): CameraFilter;
    render(width: number, height: number, avoidIfPossible: boolean): boolean;
}
export {};
//# sourceMappingURL=Viewport.d.ts.map