1.0.6 • Published 4 years ago

@georgedoescode/cx v1.0.6

Weekly downloads
14
License
ISC
Repository
github
Last release
4 years ago

CX 🎨

A 💀 simple library created to provide a better canvas development experience.

There are a couple of things I wish canvas did:

  • Scale to the DPR of the screen
  • Allow definition of custom drawing methods without having to extend prototypes

CX aims to provide both of these whilst staying out of the way and not disrupting your workflow.

Installation

1. Package Manager

npm i @georgedoescode/cx

2. CDN

<script src="https://unpkg.com/@georgedoescode/cx">

Usage

Browser

The (probably) easiest and quickest way of getting started with cx is to grab the library from unpkg, pop it in a script tag and start having a poke.

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>CX Example</title>
    </head>
    <body>
        <div class="wrapper"></div>
        <script src="https://unpkg.com/@georgedoescode/cx"></script>
        <script>
            // Create a new canvas, append to the DOM
            const { ctx } = cx.createCanvas();

            // Draw as you usually would!
            ctx.moveTo(0, 0);
            ctx.lineTo(200, 200);
        </script>
    </body>
</html>

Module bundlers

CX exports the function createCanvas, this can be used to build a new cx instance.

import { createCanvas } from '@georgedoescode/cx';

// Create a new canvas, append to the DOM
const { ctx } = createCanvas();

// Draw as you usually would!
ctx.moveTo(0, 0);
ctx.lineTo(200, 200);

Note: CX provides an es module (cx.es.js) build which should be used by Webpack 2+ / rollup etc, for everything else there is a UMD build (cx.min.js).

Documentation

createCanvas

Creates a new cx instance. A cx instance has 2 parts: element and context.

{
    ctx: {
        _base, //  CanvasRenderingContext2D (should never need to be accessed directly)
        registerCustomMethod // (fn) - register custom drawing method
    },
    element: {
        el, // <canvas> DOM element
        setPXDensity // (fn) - scale <canvas> element and context
    }
}

Example

import { createCanvas } from '@georgedoescode/cx';

const { ctx, element } = createCanvas({
    width: 640,
    height: 480,
});

// ctx can be used in exactly the same way as a CanvasRenderingContext2D instance
ctx.lineWidth = 2;

ctx.moveTo(0, 0);
ctx.lineTo(0, 0, 200, 200);

Options

NameTypeDefaultDescription
widthInteger400The width of the canvas
heightInteger400The height of the canvas
mountDOM Elementdocument.bodyWhere the canvas element is appended
dprIntegerwindow.devicePixelRatioPixel density.

ctx.registerCustomMethod

Register a custom drawing method to ctx.

Example

import { createCanvas } from '@georgedoescode/cx';

const { ctx } = createCanvas({
    width: 640,
    height: 480,
});

// ctx.base is always passed as the first argument
ctx.registerCustomMethod('line', (ctx, x0, y0, x1, y1) => {
    ctx.moveTo(0, 0);
    ctx.lineTo(x1, y1);
    ctx.stroke();
});

// tada! we can call our custom method on ctx
ctx.line(0, 0, 200, 200);

Options

NameTypeDefaultDescription
ctxCanvasRenderingContext2DnullThe native canvas context
argumentsanyundefinedArbitrary additional arguments for custom method
1.0.2

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago