A fun canvas API 👾
Explore the docs
Get Started
·
Report Bug
·
Request Feature
- About the Project
- Getting Started
- Usage
- Documentation
- TODO
- Contributing
- License
- Contact
- Acknowledgements
Bitdraw is a simple and opinionated library that eases the use of the HTML5 Canvas API.
This library is focused on simplicity and intuition. As such, it tries to minimize the choice of how to render your content.
Also included are some convenient classes that will make some parts of your app easier to maintain (e.g. Vector manipulation, Hex/RGB color conversion, etc.).
Note: Although this library is published on npm, it is still in the pre-release stage. Expected bugs and unexpected behavior, as well as breaking changes.
This project was made and built with Typescript, and is made for use in a Typescript environment, although it is not required.
The bundled code published on NPM is built with Webpack, using the ts-loader
package.
- Node.js
- NPM
$ npm install npm@latest -g
- Clone the repo and cd into it
git clone https://github.com/mapokapo/bitdraw.git && cd bitdraw
- Install required packages and build the module
npm install && npm run tsc
- cd into the
example/misc/
folder, install required packaged and run Webpack
cd example/misc/ && npm install && npm start
- Done! You can now publish your files or double-click your index.html file.
- Create a new NPM project
$ npm init
- Install the bitdraw package
$ npm i bitdraw
- Create an index.html file with a
<canvas id="canvas"></canvas>
inside it, as well as a link to your bundled code. You can find a template here. - Install bundling software
$ npm i -D webpack webpack-cli typescript ts-loader
- Build your code with Webpack
npx webpack
- Done! You can now publish your files or double-click your index.html file.
This library can be imported through the ES6 import { ... } from ...
statement AKA ESM, which is natively supported by Typescript.
Using the import * as Package from ...
statement is not recommended, as the bundled files could potentially contain useless code.
You can also import the library using the CommonJS require()
function, although this is not recommended as CommonJS modules are not tree-shakable.
You can view more at the example project.
- [ ] Support transparency in the Color class.
- [ ] Implement additional layers over the Canvas API (text, transform, styles, shapes...)
See the open issues for a list of proposed features (and known issues).
- parameters:
- description:
- This method resizes the canvas to the specified size, and simply draws a rectangle covering the entire canvas with the specified fill color.
- parameters:
- description:
- This methods draws a line connecting the 2 supplied vertices.
- parameters:
- description:
- This method draws a circle that can be filled or transparent with a border.
- parameters:
-
loc
- <Vector2> The center of the arc. -
radius
- <number> The radius of the arc in pixels. -
color
- <Color> The color of the arc. -
startAngle
- <number> The starting angle of the arc in radians. -
endAngle
- <number> The ending angle of the arc in radians. -
fill
- <boolean> Whether the arc should be filled. -
width
- <?number> The width of the arc border in pixels.1
by default.
-
- description:
- This method draws a circle sector (a 'slice of pie' shape). The starting and ending angles are in a clockwise order.
- parameters:
- description:
- This method draws a rectangle that can be filled or transparent with a border.
- parameters:
-
loc1
- <Vector2> The first vertex of the triangle. -
loc2
- <Vector2>The second vertex of the triangle. -
loc2
- <Vector2> The third vertex of the triangle. -
color
- <Color> The color of the triangle. -
fill
- <boolean> Whether the triangle should be filled. -
width
- <?number> The width of the triangle border in pixels.1
by default.
-
- description:
- This function draws a triangle connecting the 3 provided vertices. It can be filled or transparent with a border. The order of the vertices does not matter.
- description:
- This function simply calls
background()
, except the arguments are always the current canvas width and height, and the color used in the lastbackground()
call. It is used to clear the canvas.
- This function simply calls
- parameters:
-
absolute
- <?boolean> Whether the element should be centered absolutely usingtransform: translate(-50%, -50%)
, or usemargin: auto;
(in a flex parent).true
by default.
-
- description:
- This function is purely a DOM manipulation function: it centers the canvas element.
- parameters:
-
callback
- <function> The callback that gets executed upon app startup.
-
- description:
- The callback passed to this method is called once, on app startup. This is initialization and DOM methods should be ideally called, for performance reasons.
- parameters:
- description:
- This function initialises the main app loop. The provided callback is called every frame with the number of miliseconds between the previous and last frame.
canvas - <HTMLCanvasElement>
The canvas element.
ctx - <CanvasRenderingContext2D>
The 2D canvas rendering context.
CANVAS_WIDTH - <number>
The current width of the canvas element.
CANVAS_HEIGHT - <number>
The current height of the canvas element.
A 2D vector class that contains useful methods for creating and manipulating vectors.
-
static Vector2.from(v)
-
getDirection()
- Returns the angle from the X-axis to the vector.
- returns <number> - Angle in radians.
-
setDirection(radians)
- Sets the direction of the vector.
-
param
radians
- <number> Angle in radians.
-
getMagnitude()
- Gets the length of a vector from the origin.
- returns <number> - Length of vector.
-
setMagnitude(magnitude)
- Sets the vector's length.
-
param
magnitude
- <number> The number to set the vectors magnitude to.
-
add(v)
-
addAndMutate(v)
- Adds the argument vector to this vector.
-
param
v
- <Vector2> Another vector.
-
subtract(v)
-
subtractAndMutate(v)
- Subtracts the argument vector from this vector.
-
param
v
- <Vector2> Another vector.
-
multiply(scalar)
-
multiplyAndMutate(scalar)
- Multiplies this vector by the provided number.
-
param
scalar
- <number> The number by which to multiply this vector.
-
divide(scalar)
-
divideAndMutate(scalar)
- Divides this vector by the provided number.
-
param
scalar
- <number> The number by which to divide this vector.
-
absolute()
- Returns an absolute value of this vector. This essentially puts the vector into the first quadrant of the coordinate plane.
- returns <Vector2> - An absolute vector.
-
absoluteAndMutate()
- Makes this vector absolute.
-
copy()
- Returns a vector identical to this one.
- returns <Vector2> - A new vector.
-
toString()
- Returns a string representation of this vector.
- returns <string> - A string representing this vector.
-
toArray()
-
toObject()
- Returns an object representation of this vector.
- returns <Object> - An object representing this vector.
-
set(v)
- Sets this vector's coordinates to that of another vector.
-
param
v
- <Vector2> Another vector.
-
setCoords(x, y)
-
normalise()
- Returns the result of normalising this vector.
- returns <Vector2> - A normalised vector.
-
normaliseAndMutate()
- Normalises this vector.
-
normal(clockwise?)
An RGB/hex color class that contains useful methods for translating color formats.
-
static Color.RGBtoHex(r, g, b)
-
static Color.HexToRGB(hex)
-
getHex()
- Returns a Hex string representation of this Color object.
- returns <string> - A Hex color value string.
-
getRGB()
- Returns an RGB string representation of this Color object.
- returns <string> - An RGB color value string.
-
getRGBA()
- Returns an RGBA string representation of this Color object.
- returns <string> - An RGBA color value string.
-
setRGB(r, g, b, a?)
-
setHex(hex)
- Sets the RGBA values of this Color object to the supplied hex string.
-
param
hex
- <number> A hex color value string.
Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated.
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Distributed under the MIT License. See LICENSE
for more information.
Bunny - leopetrovic11@gmail.com
Project Link: https://github.com/mapokapo/bitdraw