Dotting is a Pixel art drawing component for React developers who want to implement a pixel canvas editor in their websites.
1. Dotting works for both PC 💻 and mobile 📱 environments.
2. You can freely pan & zoom around the using your mouse🖱 or your fingers👌.
3. You can extend your canvas grid to any size⬆️⬅️⬇️➡️.
Step1. Install the package
$ yarn add dotting
Step2. Place Dotting
component in your project
import { Dotting } from "dotting";
const Clear = () => {
return (
<div>
<Dotting width={300} height={300} />
</div>
);
};
When creating a Dotting
component there are multiple props prepared for easily customizing the canvas. Especially, you can set the brush you would like to use through the brushTool
prop. The width
and height
props should be initialized with your own values.
If you would like to use the hooks for further customizing the component, you must use the ref
prop and assign a refObject
created with useRef<DottingRef>
. An example of how to use hooks by setting a refObject
is shown below.
Name | Description | type |
---|---|---|
width* | The width of the canvas. When you assign a string to width, it should be a valid CSS length value such as 100%. | string or number |
height* | The height of the canvas. When you assign a string to height, it should be a valid CSS length value such as 100%. | string or number |
style | The style object for the canvas | React.CSSProperties |
gridStrokeColor | The stroke color of the grid | string |
gridStrokeWidth | The stroke width of the grid | number |
isGridVisible | If set to true the grid lines will be visible | boolean |
backgroundColor | The background color of the canvas. | string |
initLayers | The initial layers that you want to draw on the canvas. If nothing is passed, there will be 1 default layer, and its id will be 'layer1' | LayerProps[] |
isPanZoomable | If set to true the canvas will be pan and zoomable | boolean |
isGridFixed | If set to true the grid will not be extendable | boolean |
brushTool | The brush tool is for changing the brush tool | BrushTool |
brushColor | The brush color for drawing the grid. You can make a useState for tracking brushColor You can also use useBrush hook to change the brush color with changeBrushColor . |
string |
indicatorData | The indicator data that you want to draw on the canvas | PixelModifyItem[] |
isInteractionApplicable | If set to true the interaction will be applicable. If set to false the interaction will be disabled | boolean |
isDrawingEnabled | If set to true the drawing will be enabled. If set to false the drawing will be disabled | boolean |
gridSquareLength | The length of the grid square. The default is 20. | number |
defaultPixelColor | The default pixel color. | string |
minScale | The minimum scale of the canvas.color. | number |
maxScale | The maximum scale of the canvas.color. | number |
initAutoScale | Wheter to initially auto scale the canvas to fit the grids inside the canvas | boolean |
resizeUnit | The unit of reszie amount during extension | number |
maxColumnCount | The max column count of the canvas. It is undefined by default. The value should be at least 3 | number |
minColumnCount | The max column count of the canvas. It is 2 by default. The value should be at least 2 | number |
maxRowCount | The max row count of the canvas. It is undefined by default. The value should be at least 3 | number |
minRowCount | The min column count of the canvas. It is 2 by default. The value should be at least 2 | number |
ref | This is a ref object that must be used if you plan to use hooks for manipulating the canvas through code | Ref<DottingRef> |
There are some types that you should take notice of when using hooks or setting props for Dotting. In this section, I only cover the types that are related to Dotting
props. For further details on specific types used in hooks, please check the documentation
Name | Description | type |
---|---|---|
LayerProps |
This contains the necessary props for creating a layer | { id: string; data: Array<Array<PixelModifyItem>>;} |
PixelModifyItem |
This is an item that contains the information for one pixel square. In a default canvas, the top left pixel square's rowIndex and columnIndex are both 0. The pixel square just below it has a rowIndex of 1 and a columnIndex of 0, white the pixel square just next to it has a rowIndex of 0 and a columnIndex of 1 | { rowIndex: number; columnIndex: number; color: string;} |
BrushTool |
This is an enum containing all the tools usable in the canvas. Currently we support NONE , Pen (Dot) Tool , Eraser Tool ,Paint Tool , Select Tool . The NONE allows users to only pan the canvas. Pen (Dot) Tool allows users to draw pixels. Eraser Tool allows users to erase pixels. Paint Tool allows users to paint a region. Select Tool allows users to select a certain area and move the selected region or resize the region. Tools other than NONE and Select Tool basically allows for resizing the grid |
BrushTool.NONE , BrushTool.DOT , BrushTool.ERASER , BrushTool.PAINT_BUCKET ,BrushTool.SELECT |
DottingRef |
This is a ref object which you contains all the callbacks for manipulating the canvas through programming. You are free to use the callbacks directly from the ref ojbect or you can use hooks for convenience | Check the file |
To use the canvas component, you should first use the <Dotting/>
component. You must set the width
and height
to use it.
<Dotting width={300} height={300} />
To manipulate the pixel grids programatically, you can use hooks. The provided hooks are useBrush
, useData
, useDotting
, useGrids
, useHandlers
. For using the hooks, you must create a ref object with React's useRef
and input the resulting ref object as a prop in the Dotting
component and also pass it as a parameter to the hooks. Below is an example using the useDotting
hook for clearing the pixels when button is clicked
import { Dotting, DottingRef, useDotting } from "dotting";
export const Component = () => {
const ref = useRef<DottingRef>(null);
const { clear } = useDotting(ref);
return (
<div>
<Dotting ref={ref} width={300} height={300} />
<button onClick={clear}>Clear Canvas</button>
</div>
);
};
For more details on how to use hooks, please check the documentation
Dotting welcomes contributors! If you are interested, contact me through twitter!
Thanks goes to these incredible people!!