import { VectorCanvas2DGradient, VectorCanvas2DPattern, VectorCanvas2D } from "./VectorCanvas2D"; import { Rect2D } from "./TransferMatrix2D"; export interface SvgCanvas2DAsset { toDef(): string; } export interface SvgTextAttributes { /** * author's computation of the total sum of all of the advance values * that correspond to character data within this element, * including the advance value on the glyph */ textLength?: number; /** 'spacing' | 'spacingAndGlyphs' */ lengthAdjust?: "spacing" | "spacingAndGlyphs"; /** line break on newline(0x0a) */ multiline?: boolean; /** * length from baseline to next baseline. * if writingMode is horizontal then add y coodinate. * if writingMode is vertical then add x coodinate. */ lineHeight?: number; /** rotation about the current text position (degree) */ rotate?: number; /** 'lr-tb' | 'rl-tb' | 'tb-rl' | 'lr' | 'rl' | 'tb' */ writingMode?: "lr-tb" | "rl-tb" | "tb-rl" | "lr" | "rl" | "tb"; /** 'auto' | 0 | 90 | 180 | 270 */ glyphOrientationVertical?: "auto" | number; /** 0 | 90 | 180 | 270 */ glyphOrientationHorizontal?: number; /** 'ltr' | 'rtl' */ direction?: "ltr" | "rtl"; /** 'normal' | 'embed' | 'bidi-override' */ unicodeBidi?: "normal" | "embed" | "bidi-override"; /** 'none' | [ 'underline' || 'overline' || 'line-through' ] */ textDecoration?: string; /** use textPath */ textPath?: boolean; /** */ textPathOffset?: number; /** 'auto' | length */ kerning?: "auto" | number; /** 'normal' | length */ letterSpacing?: "normal" | number; /** 'normal' | length */ wordSpacing?: "normal" | number; } export declare class SvgCanvasImageData { url: string; x: number; y: number; width: number; height: number; constructor(url: string, x: number, y: number, width: number, height: number); } export declare abstract class SvgCanvas2DGradient { } export declare class SvgCanvas2DLinerGradient extends SvgCanvas2DGradient implements VectorCanvas2DGradient, SvgCanvas2DAsset { private id; private x0; private y0; private x1; private y1; private content; constructor(id: string, x0: number, y0: number, x1: number, y1: number); addColorStop(offset: number, color: string, opacity?: number): void; toDef(): string; toString(): string; } export declare class SvgCanvas2DRadialGradient extends SvgCanvas2DGradient implements VectorCanvas2DGradient, SvgCanvas2DAsset { private id; private cx; private cy; private r; private fx; private fy; private content; /** fr is ignored. fr is always 0. */ constructor(id: string, cx: number, cy: number, r: number, fx: number, fy: number); addColorStop(offset: number, color: string, opacity?: number): void; toDef(): string; toString(): string; } export declare class SvgCanvas2DPattern implements VectorCanvas2DPattern, SvgCanvas2DAsset { private id; private imageData; constructor(id: string, imageData: SvgCanvasImageData); toDef(): string; toString(): string; } /** * canvas: source-over|source-in|source-out|source-atop| * destination-over|destination-in|destination-out|destination-atop| * lighter|copy|xor * svg: over|in|out|atop|xor|arithmetic */ export declare type GlobalCompositeOperationValue = "source-over" | "source-in" | "source-out" | "source-atop" | "destination-over" | "destination-in" | "destination-out" | "destination-atop" | "lighter" | "copy" | "xor" | "over" | "in" | "out" | "atop" | "arithmetic"; /** * text-anchor * canvas:start|end|left|right|center * svg:start|middle|end */ export declare type TextAlignValue = "start" | "end" | "left" | "right" | "center" | "middle"; /** * dominant-baseline * canvas:top|hanging|middle|alphabetic|ideographic|bottom * svg:auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge * ('auto' is default. 'auto's effective value is depends on writing mode. if mode is horizontal then it is alphabetic. else then it is central) * * -------------------- text-before-edge (em square's edge) * -- -- hanging * -- X X -- mathematical * X * X X * -- XXXX X -- central (em square's central), nearby of x-height(alphabetic lower case height) * -- X X X -- middle (1/2 x-height) * -- X X X -- alphabetic * pp * -----------^^------- ideographic, text-after-edge (em square's edge) */ export declare type TextBaselineValue = "top" | "hanging" | "middle" | "alphabetic" | "ideographic" | "bottom" | "auto" | "use-script" | "no-change" | "reset-size" | "mathematical" | "central" | "text-after-edge" | "text-before-edge"; /** * stroke-linecap * butt|round|square */ export declare type LineCapValue = "butt" | "round" | "square"; /** * stroke-linejoin * miter|round|bevel */ export declare type LineJoinValue = "miter" | "round" | "bevel"; /** * subset of CanvasRenderingContext2D */ export declare class SvgCanvas implements VectorCanvas2D { get globalAlpha(): number; set globalAlpha(value: number); get globalCompositeOperation(): GlobalCompositeOperationValue; set globalCompositeOperation(value: GlobalCompositeOperationValue); get shadowBlur(): number; set shadowBlur(value: number); get shadowColor(): string; set shadowColor(value: string); get shadowOffsetX(): number; set shadowOffsetX(value: number); get shadowOffsetY(): number; set shadowOffsetY(value: number); private get filterIdUrl(); private set filterIdUrl(value); /** * canvas: "italic bold 26px 'Times New Roman'" * svg: font-family ="Times New Roman" * font-style =normal|italic|oblique * font-variant=normal|small-caps * font-weight =normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900 * font-stretch=normal|wider|narrower|ultra-condensed|extra-condensed|condensed| * semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded * font-size =||| * font-size-adjust=|none * font =[[<'font-style'>||<'font-variant'>||<'font-weight'>]?<'font-size'>[/<'line-height'>]?<'font-family'>] */ get font(): string; /** * canvas: "italic bold 26px 'Times New Roman'" * [<‘font-style’>||||<‘font-weight’>||<‘font-stretch’>]?<‘font-size’>[/<‘line-height’>]?<‘font-family’> * * svg: font-family ="Times New Roman" * font-style =normal|italic|oblique * font-variant=normal|small-caps * font-weight =normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900 * font-stretch=normal|wider|narrower|ultra-condensed|extra-condensed|condensed| * semi-condensed|semi-expanded|expanded|extra-expanded|ultra-expanded * font-size =||| * font-size-adjust=|none * font =[<'font-style'>||<'font-variant'>||<'font-weight'>]?<'font-size'>[/<'line-height'>]?<'font-family'> */ set font(value: string); /** * text-anchor * canvas:start|end|left|right|center * svg:start|middle|end */ get textAlign(): TextAlignValue; /** * text-anchor * canvas:start|end|left|right|center * svg:start|middle|end */ set textAlign(value: TextAlignValue); /** * dominant-baseline * canvas:top|hanging|middle|alphabetic|ideographic|bottom * svg:auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge */ get textBaseline(): TextBaselineValue; /** * dominant-baseline * canvas:top|hanging|middle|alphabetic|ideographic|bottom * svg:auto|use-script|no-change|reset-size|ideographic|alphabetic|hanging|mathematical|central|middle|text-after-edge|text-before-edge */ set textBaseline(value: TextBaselineValue); /** * stroke-linecap * butt|round|square */ get lineCap(): LineCapValue; /** * stroke-linecap * butt|round|square */ set lineCap(value: LineCapValue); get lineDashOffset(): number; set lineDashOffset(value: number); /** * stroke-linejoin * miter|round|bevel */ get lineJoin(): LineJoinValue; /** * stroke-linejoin * miter|round|bevel */ set lineJoin(value: LineJoinValue); get lineWidth(): number; set lineWidth(value: number); get miterLimit(): number; set miterLimit(value: number); get strokeStyle(): string | SvgCanvas2DLinerGradient | SvgCanvas2DRadialGradient | SvgCanvas2DPattern; set strokeStyle(value: string | SvgCanvas2DLinerGradient | SvgCanvas2DRadialGradient | SvgCanvas2DPattern); get fillStyle(): string | SvgCanvas2DLinerGradient | SvgCanvas2DRadialGradient | SvgCanvas2DPattern; set fillStyle(value: string | SvgCanvas2DLinerGradient | SvgCanvas2DRadialGradient | SvgCanvas2DPattern); private get ctm(); private set ctm(value); private get currentPoint(); private set currentPoint(value); private get currentPointOnCtm(); private set currentPointOnCtm(value); private get subpath(); private set subpath(value); private get lineDash(); private set lineDash(value); private get clipPath(); private set clipPath(value); private get subpathIsEmptyOrClosed(); private graphicsStack; private assets; private content; private contentSaved; private idCount; private template; constructor(); static fromTemplate(template: string): SvgCanvas; render(viewbox: Rect2D, unit?: string): string; toDataUrl(viewbox: Rect2D, unit?: string, lineLength?: number): string; /** postscript gsave */ save(): void; /** postscript grestore */ restore(restorePath?: boolean): void; /** postscript x y scale */ scale(x: number, y: number): void; /** postscript x y translate */ translate(x: number, y: number): void; /** postscript (angle*180/PI) rotate */ rotate(angle: number): void; /** postscript [m11 m12 m21 m22 dx dy] concat */ transform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void; /** postscript [m11 m12 m21 m22 dx dy] setmatrix */ setTransform(m11: number, m12: number, m21: number, m22: number, dx: number, dy: number): void; /** postscript newpath */ beginPath(): void; /** postscript closepath */ closePath(): void; /** postscript x y moveto */ moveTo(x: number, y: number): void; /** postscript x y lineto */ lineTo(x: number, y: number, ...extra: number[]): void; quadraticCurveTo(cpx: number, cpy: number, x: number, y: number, ...extra: number[]): void; /** postscript cp1x cp1y cp2x cp2y x y curveto */ bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number, ...extra: number[]): void; /** * postscript arc / arcn * anticlockwise= true: x y startAngle endAngle arc * anticlockwise=false: x y startAngle endAngle arcn * center: (x,y) */ arc(x: number, y: number, radius: number, startAngle: number, endAngle: number, anticlockwise?: boolean): void; /** postscript x1 y1 x2 y2 arcto */ arcTo(x1: number, y1: number, x2: number, y2: number, radius: number): void; circle(x: number, y: number, radius: number, anticlockwise?: boolean): void; rect(x: number, y: number, w: number, h: number, anticlockwise?: boolean): void; roundRect(x: number, y: number, w: number, h: number, radius: number, anticlockwise?: boolean): void; private getInheritedStyle; private getStrokeAttrs; private getFillAttrs; private getFilterAttrs; protected getMultilineTextHeight(c: SvgTextAttributes): SvgTextAttributes; /** * @returns CSS font properties styles for Text tag. */ protected getTextFontStyles(): string; protected getTextAttributes(maxWidthOrExtraAttrs: number | SvgTextAttributes | null | undefined): string; private getTextPath; private convertToMultiline; stroke(): void; strokeRect(x: number, y: number, w: number, h: number): void; strokeText(text: string, x: number, y: number, maxWidthOrExtraAttrs?: number | SvgTextAttributes): void; /** * fillRule: nonzero|evenodd */ fill(fillRule?: string): void; fillRect(x: number, y: number, w: number, h: number): void; fillText(text: string, x: number, y: number, maxWidthOrExtraAttrs?: number | SvgTextAttributes): void; /** * fillRule: nonzero|evenodd */ fillStroke(fillRule?: string): void; fillStrokeRect(x: number, y: number, w: number, h: number): void; fillStrokeText(text: string, x: number, y: number, maxWidthOrExtraAttrs?: number | SvgTextAttributes): void; getLineDash(): number[]; setLineDash(segments: number[]): void; /** * fillRule: nonzero|evenodd */ clip(fillRule?: string): void; registerImage(imageData: HTMLImageElement | HTMLCanvasElement | SvgCanvasImageData, id?: string): string; registerCustomFilter(id: string, markup: string): void; registerCustomAsset(markup: string | SvgCanvas2DAsset): void; appendCustomContent(markup: string): void; createLinearGradient(x0: number, y0: number, x1: number, y1: number): SvgCanvas2DLinerGradient; /** fr is ignored. fr is always 0. */ createRadialGradient(cx: number, cy: number, r: number, fx: number, fy: number, fr?: number): SvgCanvas2DRadialGradient; createPattern(imageData: HTMLImageElement | HTMLCanvasElement | SvgCanvasImageData, repetition?: string): SvgCanvas2DPattern; beginPattern(): void; endPattern(x: number, y: number, width: number, height: number): string; private convertImageToSvgImageData; drawImage(imageData: HTMLImageElement | HTMLCanvasElement | SvgCanvasImageData | string, canvasOffsetX: number, canvasOffsetY: number, canvasImageWidth: number, canvasImageHeight: number): void; beginGroup(): void; endGroup(): void; private _fontHeightRatio; get fontHeightRatio(): number; set fontHeightRatio(value: number); measureText(text: string): { width: number; }; clearRect(x: number, y: number, w: number, h: number): void; }