0.15.0 • Published 3 months ago

@daeinc/canvas v0.15.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 months ago

@daeinc/canvas

npm version badge npm bundle size badge

Install

npm i @daeinc/canvas

then,

import { createCanvas, ... } from "@daeinc/canvas"

Functions

Documentation is updated for 0.10.0.

Note: drawing functions up to 0.7.1 has now moved to @daeinc/draw.

createCanvas

const createCanvas: ({
  parent,
  context,
  width,
  height,
  pixelRatio,
  scaleContext,
  attributes,
  offscreen,
}: {
  parent?: string | Element | undefined;
  context?: "2d" | "webgl" | "webgl2" | undefined;
  width: number;
  height: number;
  pixelRatio?: number | undefined;
  scaleContext?: boolean | undefined;
  attributes?:
    | CanvasRenderingContext2DSettings
    | WebGLContextAttributes
    | undefined;
  offscreen?: boolean | undefined;
}) => {
  canvas: HTMLCanvasElement | OffscreenCanvas;
  context:
    | CanvasRenderingContext2D
    | WebGLRenderingContext
    | WebGL2RenderingContext
    | OffscreenCanvasRenderingContext2D;
  gl?: WebGLRenderingContext | WebGL2RenderingContext | undefined;
  width: number;
  height: number;
};

Create a new canvas and return { canvas, context, gl?, width, height }.

It takes an optional parent parameter. The parent can be either string (will be used for querySelector()) or Element. Returned width and height may not be the same as canvas.width and canvas.height due to pixelRatio scaling.

context supports 2d, webgl or webgl2 and creates a proper context. When webgl context is created, gl object will also be returned. Internally, gl.viewport() is called to scale context according to pixelRatio parameter.

When offscreen is true, the canvas will not be attached to document. It still creates a regular HTMLCanvasElement. For a real offscreen canvas, use createOffscreenCanvas().

Returned context may ber 2d or webgl, return type assertions are needed when calling createCanvas(). See demos for how to use.

createOffscreenCanvas

const createOffscreenCanvas: ({
  context,
  width,
  height,
  pixelRatio,
  scaleContext,
  attributes,
}: {
  context: "2d" | "webgl" | "webgl2";
  width: number;
  height: number;
  pixelRatio?: number | undefined;
  scaleContext?: boolean | undefined;
  attributes?:
    | CanvasRenderingContext2DSettings
    | WebGLContextAttributes
    | undefined;
}) => {
  canvas: HTMLCanvasElement | OffscreenCanvas;
  context:
    | CanvasRenderingContext2D
    | WebGLRenderingContext
    | WebGL2RenderingContext
    | OffscreenCanvasRenderingContext2D;
  gl?: WebGLRenderingContext | WebGL2RenderingContext | undefined;
  width: number;
  height: number;
};

Creates an OffscreenCanvas.

resizeCanvas

const resizeCanvas: ({
  canvas,
  context,
  width,
  height,
  pixelRatio,
  scaleContext,
  attributes,
}: {
  canvas: HTMLCanvasElement | OffscreenCanvas;
  context: "2d" | "webgl" | "webgl2";
  width: number;
  height: number;
  pixelRatio?: number | undefined;
  scaleContext?: boolean | undefined;
  attributes?:
    | CanvasRenderingContext2DSettings
    | WebGLContextAttributes
    | undefined;
}) => {
  canvas: HTMLCanvasElement | OffscreenCanvas;
  context:
    | CanvasRenderingContext2D
    | WebGLRenderingContext
    | WebGL2RenderingContext
    | OffscreenCanvasRenderingContext2D;
  gl?: WebGLRenderingContext | WebGL2RenderingContext | undefined;
  width: number;
  height: number;
};

Resize canvas and return data { canvas, context, gl?, width, height }. When scaleContext=true, it also scale the context to pixelRatio.

setupCanvas

const setupCanvas: ({
  parent,
  canvas,
  width,
  height,
  pixelRatio,
}: {
  parent?: string | Element | undefined;
  canvas: HTMLCanvasElement;
  width: number;
  height: number;
  pixelRatio?: number | undefined;
}) => {
  canvas: HTMLCanvasElement;
  width: number;
  height: number;
  pixelRatio: number;
};

Example

See the demo in demo/demo.ts.

License

MIT

0.15.0

3 months ago

0.14.5

1 year ago

0.14.0

1 year ago

0.14.1

1 year ago

0.14.2

1 year ago

0.14.3

1 year ago

0.14.4

1 year ago

0.11.0

1 year ago

0.10.1

1 year ago

0.12.0

1 year ago

0.11.1

1 year ago

0.13.0

1 year ago

0.12.1

1 year ago

0.10.0

1 year ago

0.3.0

1 year ago

0.9.0

1 year ago

0.8.1

1 year ago

0.8.0

1 year ago

0.7.1

1 year ago

0.9.1

1 year ago

0.5.0

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.3.1

1 year ago

0.7.0

1 year ago

0.6.1

1 year ago

0.6.0

1 year ago

0.5.1

1 year ago

0.2.0

2 years ago

0.1.1

2 years ago

0.1.0

2 years ago