import { WlPointerButtonState } from 'westfield-runtime-server'; import { Pointer } from '../Pointer'; import Session from '../Session'; declare enum ThemeFrame { THEME_FRAME_ACTIVE = 1, THEME_FRAME_MAXIMIZED = 2, THEME_FRAME_NO_TITLE = 4 } export declare enum FrameStatus { FRAME_STATUS_NONE = 0, FRAME_STATUS_REPAINT = 1, FRAME_STATUS_MINIMIZE = 2, FRAME_STATUS_MAXIMIZE = 4, FRAME_STATUS_CLOSE = 8, FRAME_STATUS_MENU = 16, FRAME_STATUS_RESIZE = 32, FRAME_STATUS_MOVE = 64, FRAME_STATUS_ALL = 127 } export declare enum ThemeLocation { THEME_LOCATION_INTERIOR = 0, THEME_LOCATION_RESIZING_TOP = 1, THEME_LOCATION_RESIZING_BOTTOM = 2, THEME_LOCATION_RESIZING_LEFT = 4, THEME_LOCATION_RESIZING_TOP_LEFT = 5, THEME_LOCATION_RESIZING_BOTTOM_LEFT = 6, THEME_LOCATION_RESIZING_RIGHT = 8, THEME_LOCATION_RESIZING_TOP_RIGHT = 9, THEME_LOCATION_RESIZING_BOTTOM_RIGHT = 10, THEME_LOCATION_RESIZING_MASK = 15, THEME_LOCATION_EXTERIOR = 16, THEME_LOCATION_TITLEBAR = 17, THEME_LOCATION_CLIENT_AREA = 18 } export declare enum FrameButton { FRAME_BUTTON_NONE = 0, FRAME_BUTTON_CLOSE = 1, FRAME_BUTTON_MAXIMIZE = 2, FRAME_BUTTON_MINIMIZE = 4, FRAME_BUTTON_ALL = 7 } declare enum FrameButtonFlags { FRAME_BUTTON_ALIGN_RIGHT = 1, FRAME_BUTTON_DECORATED = 2, FRAME_BUTTON_CLICK_DOWN = 4 } export declare enum FrameFlag { FRAME_FLAG_ACTIVE = 1, FRAME_FLAG_MAXIMIZED = 2 } declare class XWindowFramePointer { pointer?: Pointer | undefined; x: number; y: number; hoverButton?: XWindowFrameButton | undefined; downButtons: XWindowFramePointerButton[]; private destroyResolve; private destroyPromise; constructor(pointer?: Pointer | undefined, x?: number, y?: number, hoverButton?: XWindowFrameButton | undefined, downButtons?: XWindowFramePointerButton[]); enter(frame: XWindowFrame, pointer: Pointer | undefined, x: number, y: number): void; motion(frame: XWindowFrame, pointer: Pointer | undefined, x: number, y: number): ThemeLocation; destroy(): void; onDestroy(): Promise; } declare class XWindowFramePointerButton { button: number; pressLocation: ThemeLocation; private frameButton?; private destroyResolve; private destroyPromise; constructor(button: number, pressLocation: ThemeLocation, frameButton?: XWindowFrameButton | undefined); press(frame: XWindowFrame, pointer: XWindowFramePointer): void; release(pointer: XWindowFramePointer): void; cancel(): void; destroy(): void; onDestroy(): Promise; } declare class XWindowFrameButton { private frame; icon: CanvasRenderingContext2D; private statusEffect; flags: FrameButtonFlags; allocation: { x: number; y: number; context?: CanvasRenderingContext2D; }; private destroyResolve; private destroyPromise; private hoverCount; private pressCount; constructor(frame: XWindowFrame, icon: CanvasRenderingContext2D, statusEffect: FrameStatus, flags: FrameButtonFlags); enter(): void; leave(): void; press(): void; release(): void; cancel(): void; repaint(): void; destroy(): void; onDestroy(): Promise; } export declare type FrameInterior = { readonly x: number; readonly y: number; readonly width: number; readonly height: number; }; export declare class XWindowFrame { private readonly session; theme: XWindowTheme; width: number; height: number; private title; renderContext: CanvasRenderingContext2D; private closeButtonIcon; private maximizeButtonIcon; private minimzeButtonIcon; private icon?; status: FrameStatus; pointers: XWindowFramePointer[]; buttons: XWindowFrameButton[]; flags: FrameFlag; private geometryDirty; private opaqueMargin; private titleRect; constructor(session: Session, theme: XWindowTheme, width: number, height: number, buttons: number, title: string, renderContext: CanvasRenderingContext2D, closeButtonIcon: CanvasRenderingContext2D, maximizeButtonIcon: CanvasRenderingContext2D, minimzeButtonIcon: CanvasRenderingContext2D, icon?: CanvasRenderingContext2D | undefined); private _interior; get interior(): { x: number; y: number; width: number; height: number; }; private _shadowMargin; get shadowMargin(): number; pointerMotion(pointer: Pointer | undefined, x: number, y: number): ThemeLocation; doubleClick(pointer: Pointer | undefined, btn: number, state: WlPointerButtonState): ThemeLocation; pointerButton(pointer: Pointer | undefined, btn: number, state: WlPointerButtonState): ThemeLocation; statusClear(frameStatus: FrameStatus): void; resizeInside(width: number, height: number): void; destroy(): void; refreshGeometry(): void; setTitle(title: string): void; repaint(frameWidth: number, frameHeight: number): FrameInterior; inputRect(): { x: number; y: number; width: number; height: number; }; opaqueRect(): { x: number; y: number; width: number; height: number; }; pointerEnter(pointer: Pointer | undefined, x: number, y: number): ThemeLocation; pointerLeave(pointer: Pointer | undefined): void; setFlag(flag: FrameFlag): void; unsetFlag(flag: FrameFlag): void; resize(width: number, height: number): void; getPointer(pointer?: Pointer): XWindowFramePointer; findButton(x: number, y: number): XWindowFrameButton | undefined; private calculateMaximizedInterior; private calculateInterior; private calculateTitleRect; } export declare class XWindowTheme { readonly activeFrame: CanvasRenderingContext2D; readonly frameRadius: number; readonly inactiveFrame: CanvasRenderingContext2D; readonly margin: number; readonly titlebarHeight: number; readonly borderWidth: number; constructor(); getLocation(x: number, y: number, width: number, height: number, flags: ThemeFrame): ThemeLocation; renderFrame(frameRenderContext: CanvasRenderingContext2D, width: number, height: number, title: string, titleRect: { x: number; y: number; width: number; height: number; }, buttons: XWindowFrameButton[], flags: number): void; tileSource(renderContext: CanvasRenderingContext2D, surface: CanvasRenderingContext2D, x: number, y: number, width: number, height: number, margin: number, topMargin: number, shadowBlur: number): void; } export declare function themeCreate(): XWindowTheme; export declare function frameCreate(session: Session, theme: XWindowTheme, width: number, height: number, buttons: number, title: string, icon?: CanvasRenderingContext2D): Promise; export {};