UNPKG

js-draw

Version:

Draw pictures using a pen, touchscreen, or mouse! JS-draw is a drawing library for JavaScript and TypeScript.

88 lines (87 loc) 3.74 kB
import { Color4, Mat33, Point2, Vec2, Rect2 } from '@js-draw/math'; import { LoadSaveDataTable } from '../../components/AbstractComponent'; import Viewport from '../../Viewport'; import RenderingStyle from '../RenderingStyle'; import TextRenderingStyle from '../TextRenderingStyle'; import RenderablePathSpec from '../RenderablePathSpec'; export interface RenderableImage { transform: Mat33; image: HTMLImageElement | HTMLCanvasElement; base64Url: string; label?: string; } /** * Abstract base class for renderers. * * @see {@link EditorImage.render} */ export default abstract class AbstractRenderer { private viewport; private selfTransform; private transformStack; protected constructor(viewport: Viewport); /** * this.canvasToScreen, etc. should be used instead of the corresponding * methods on `Viewport`, because the viewport may not accurately reflect * what is rendered. */ protected getViewport(): Viewport; abstract displaySize(): Vec2; abstract clear(): void; protected abstract beginPath(startPoint: Point2): void; protected abstract endPath(style: RenderingStyle): void; protected abstract lineTo(point: Point2): void; protected abstract moveTo(point: Point2): void; protected abstract traceCubicBezierCurve(p1: Point2, p2: Point2, p3: Point2): void; protected abstract traceQuadraticBezierCurve(controlPoint: Point2, endPoint: Point2): void; abstract drawText(text: string, transform: Mat33, style: TextRenderingStyle): void; abstract drawImage(image: RenderableImage): void; abstract isTooSmallToRender(rect: Rect2): boolean; setDraftMode(_draftMode: boolean): void; protected objectLevel: number; private currentPaths; private flushPath; /** * Draws a styled path. If within an object started by {@link startObject}, * the resultant path may not be visible until {@link endObject} is called. */ drawPath(path: RenderablePathSpec): void; drawRect(rect: Rect2, lineWidth: number, lineFill: RenderingStyle): void; /** Draws a filled rectangle. */ fillRect(rect: Rect2, fill: Color4): void; /** * This should be called whenever a new object is being drawn. * * @param _boundingBox The bounding box of the object to be drawn. * @param _clip Whether content outside `_boundingBox` should be drawn. Renderers * that override this method are not required to support `_clip`. */ startObject(_boundingBox: Rect2, _clip?: boolean): void; /** * Notes the end of an object. * @param _loaderData - a map from strings to JSON-ifyable objects * and contains properties attached to the object by whatever loader loaded the image. This * is used to preserve attributes not supported by js-draw when loading/saving an image. * Renderers may ignore this. * * @param _objectTags - a list of labels (e.g. `className`s) to be attached to the object. * Renderers may ignore this. */ endObject(_loaderData?: LoadSaveDataTable, _objectTags?: string[]): void; protected getNestingLevel(): number; abstract drawPoints(...points: Point2[]): void; canRenderFromWithoutDataLoss(_other: AbstractRenderer): boolean; renderFromOtherOfSameType(_renderTo: Mat33, other: AbstractRenderer): void; setTransform(transform: Mat33 | null): void; pushTransform(transform: Mat33): void; popTransform(): void; getCanvasToScreenTransform(): Mat33; canvasToScreen(vec: Vec2): Vec2; getSizeOfCanvasPixelOnScreen(): number; private visibleRectOverride; /** * @internal */ overrideVisibleRect(rect: Rect2 | null): void; getVisibleRect(): Rect2; }