UNPKG

dropflow

Version:

A small CSS2 document renderer built from specifications

58 lines (57 loc) 2.43 kB
import type { Color } from './style.js'; import type { PaintBackend } from './paint.js'; import type { ShapedItem } from './layout-text.js'; import type { LoadedFontFace } from './text-font.js'; import type { Image } from './layout-image.js'; export interface CanvasRenderingContext2D { moveTo(x: number, y: number): void; lineTo(x: number, y: number): void; quadraticCurveTo(cpx: number, cpy: number, x: number, y: number): void; bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): void; fillRect(x: number, y: number, w: number, h: number): void; fillText(text: string, x: number, y: number, maxWidth?: number): void; translate(x: number, y: number): void; scale(x: number, y: number): void; stroke(): void; fill(): void; beginPath(): void; closePath(): void; save(): void; restore(): void; set strokeStyle(value: string); get strokeStyle(): unknown; set fillStyle(value: string); get fillStyle(): unknown; lineWidth: number; font: string; set direction(value: 'ltr' | 'rtl'); get direction(): unknown; set textAlign(value: 'left'); get textAlign(): unknown; rect(x: number, y: number, w: number, h: number): void; clip(): void; drawImage(image: unknown, x: number, y: number, w?: number, h?: number): void; } export interface Canvas { getContext(ctx: '2d'): CanvasRenderingContext2D; width: number; height: number; } export default class CanvasPaintBackend implements PaintBackend { fillColor: Color; strokeColor: Color; lineWidth: number; direction: 'ltr' | 'rtl'; font: LoadedFontFace | undefined; fontSize: number; ctx: CanvasRenderingContext2D; constructor(ctx: CanvasRenderingContext2D); edge(x: number, y: number, length: number, side: 'top' | 'right' | 'bottom' | 'left'): void; fastText(x: number, y: number, item: ShapedItem, textStart: number, textEnd: number): void; correctText(x: number, y: number, item: ShapedItem, glyphStart: number, glyphEnd: number): void; text(x: number, y: number, item: ShapedItem, totalTextStart: number, totalTextEnd: number, isColorBoundary: boolean): void; rect(x: number, y: number, w: number, h: number): void; pushClip(x: number, y: number, w: number, h: number): void; popClip(): void; image(x: number, y: number, w: number, h: number, image: Image): void; }