UNPKG

@lightningtv/renderer

Version:
127 lines (126 loc) 3.58 kB
import { type RGBA } from '../../lib/utils.js'; import type { NormalizedFontMetrics } from '../font-face-types/TrFontFace.js'; import type { WebTrFontFace } from '../font-face-types/WebTrFontFace.js'; /** * Text Overflow Values */ export type TextOverflow = 'ellipsis' | 'clip' | (string & Record<never, never>); /*** * Text Horizontal Align Values */ export type TextAlign = 'left' | 'center' | 'right'; /*** * Text Baseline Values */ export type TextBaseline = 'alphabetic' | 'top' | 'hanging' | 'middle' | 'ideographic' | 'bottom'; /*** * Text Vertical Align Values */ export type TextVerticalAlign = 'top' | 'middle' | 'bottom'; /** * Text Texture Settings */ export interface Settings { w: number; h: number; text: string; fontStyle: string; fontSize: number; fontBaselineRatio: number; fontFamily: string | null; trFontFace: WebTrFontFace | null; wordWrap: boolean; wordWrapWidth: number; wordBreak: boolean; textOverflow: TextOverflow | null; lineHeight: number | null; textBaseline: TextBaseline; textAlign: TextAlign; verticalAlign: TextVerticalAlign; offsetY: number | null; maxLines: number; maxHeight: number | null; overflowSuffix: string; precision: number; textColor: RGBA; paddingLeft: number; paddingRight: number; shadow: boolean; shadowColor: RGBA; shadowOffsetX: number; shadowOffsetY: number; shadowBlur: number; highlight: boolean; highlightHeight: number; highlightColor: RGBA; highlightOffset: number; highlightPaddingLeft: number; highlightPaddingRight: number; letterSpacing: number; textIndent: number; cutSx: number; cutSy: number; cutEx: number; cutEy: number; advancedRenderer: boolean; textRenderIssueMargin: number; } export interface RenderInfo { w: number; h: number; lines: string[]; precision: number; remainingText: string; moreTextLines: boolean; width: number; innerWidth: number; height: number; fontSize: number; cutSx: number; cutSy: number; cutEx: number; cutEy: number; lineHeight: number; defLineHeight: number; lineWidths: number[]; offsetY: number; paddingLeft: number; paddingRight: number; letterSpacing: number; textIndent: number; metrics: NormalizedFontMetrics; } export interface LineType { text: string; x: number; y: number; w: number; } export declare class LightningTextTextureRenderer { private _canvas; private _context; private _settings; constructor(canvas: OffscreenCanvas | HTMLCanvasElement, context: OffscreenCanvasRenderingContext2D | CanvasRenderingContext2D); set settings(v: Partial<Settings>); get settings(): Settings; getPrecision(): number; setFontProperties(): void; _getFontSetting(): string; _load(): Promise<void> | undefined; calculateRenderInfo(): RenderInfo; draw(renderInfo: RenderInfo, linesOverride?: { lines: string[]; lineWidths: number[]; }): void; wrapWord(word: string, wordWrapWidth: number, suffix: string): string; /** * Applies newlines to a string to have it optimally fit into the horizontal * bounds set by the Text object's wordWrapWidth property. */ wrapText(text: string, wordWrapWidth: number, letterSpacing: number, indent?: number): { l: string[]; n: number[]; }; measureText(word: string, space?: number): number; mergeDefaults(settings: Partial<Settings>): Settings; }