/** * Border Image Renderer * * Renders CSS border-image using 9-slice scaling. * The source image is divided into 9 regions (4 corners, 4 edges, 1 center) * based on border-image-slice values, then each region is drawn to the * corresponding area of the element's border box. */ import { BorderImageSlice } from '../../css/property-descriptors/border-image-slice'; import { BorderImageRepeat } from '../../css/property-descriptors/border-image-repeat'; import { Bounds } from '../../css/layout/bounds'; export interface BorderImageSides { top: number; right: number; bottom: number; left: number; } /** * Resolve border-image-width to per-side pixel widths. `auto` uses the * corresponding border width, numbers multiply it, lengths are absolute and * percentages refer to the border image area (width for left/right, height * for top/bottom). */ export declare const resolveBorderImageWidths: (width: { top: { kind: string; value?: number; }; right: { kind: string; value?: number; }; bottom: { kind: string; value?: number; }; left: { kind: string; value?: number; }; } | null, borderWidths: [number, number, number, number], area: Bounds) => [number, number, number, number]; /** Resolve border-image-outset to per-side pixel offsets (numbers multiply the border width). */ export declare const resolveBorderImageOutset: (outset: { top: { kind: string; value?: number; }; right: { kind: string; value?: number; }; bottom: { kind: string; value?: number; }; left: { kind: string; value?: number; }; } | null, borderWidths: [number, number, number, number]) => BorderImageSides; export declare class BorderImageRenderer { private readonly ctx; constructor(ctx: CanvasRenderingContext2D); renderBorderImage(bounds: Bounds, image: HTMLImageElement, slice: BorderImageSlice, repeat: BorderImageRepeat, borderTopWidth: number, borderRightWidth: number, borderBottomWidth: number, borderLeftWidth: number, outset?: BorderImageSides): void; private drawRegion; private drawRepeatedEdge; /** * Draw the center region of the border image, tiling each axis per its * border-image-repeat keyword (stretch spans the whole axis, repeat * tiles at source size with the overflow cropped, round scales the tile * to divide the axis evenly). */ private drawCenterRegion; }