PALETTES
N30N Night
Game Boy
CODE
<!-- Code by M4TTBIT - m4ttbit.dev - 2021 -->
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/p5@1.11.1/lib/p5.min.js"></script>
</head>
<body>
<div style="width:90%; margin: auto; padding: 2em 0em 0em 0em;">
<!-- Script below is under 'JS' -->
<script src="sketch.js"></script>
<div id="draw-area">
<div id="drawing"></div>
<div id="grid-lines"></div>
</div>
<div id="button-container" style="margin: auto; display: flex; flex-wrap: wrap; justify-content: center; padding: 8px 0px 0px 0px;">
<div id="colorPicker" style="padding: 8px"></div>
<div id="showGrid" style="padding: 8px"></div>
<div id="clear" style="padding: 8px"></div>
<div id="gridSize" style="padding: 8px"></div>
<div id="download" style="padding: 8px"></div>
</div>
</div>
</body>
</html>
/* Code by M4TTBIT - m4ttbit.dev - 2021 */
canvas {
border-style: solid;
border-width: 0.25px;
margin: auto;
display: block;
}
#drawing, #grid-lines {
height: 100%;
width: 100%;
margin: auto;
}
#grid-lines {
position: absolute;
top: 2em;
left: 0px;
}
// Code by M4TTBIT - m4ttbit.dev - 2021
let show = false;
let grid;
let sketch = function(p){
p.setup = function(){
drawArea = document.getElementById('drawing');
drawWidth = drawArea.offsetWidth;
if (drawWidth > 512){
canvas = p.createCanvas(512, 512);
}else{
canvas = p.createCanvas(drawWidth, drawWidth);
}
canvas.parent('drawing');
canvas.background(240);
colorPicker = p.createColorPicker('#49DFFD');
colorPicker.id('colorPicker');
colorPicker.parent('colorPicker');
clearButton = p.createButton('CLEAR');
clearButton.parent('clear');
clearButton.id('clear');
clearButton.mousePressed(p.clean);
saveButton = p.createButton('DOWNLOAD PNG');
saveButton.parent('download');
saveButton.id('download');
saveButton.mousePressed(p.download);
grid = canvas.width / 16;
}
p.draw = function(){
if (p.mouseIsPressed){
let x = p.snap(p.mouseX);
let y = p.snap(p.mouseY);
p.noStroke();
p.fill(colorPicker.color());
p.square(x, y, grid);
}
}
p.snap = function(z){
// subtract offset (to center lines)
// divide by grid to get row/column
// round to snap to the closest one
let cell = Math.round((z - (grid / 2)) / grid);
// multiply back to grid scale
// add offset to center
return cell * grid;
}
p.clean = function(){
canvas.clear();
canvas.background(240);
}
p.download = function(){
saveCanvas('myPixelArt', 'png');
}
}
let gridLines = function(g){
g.setup = function(){
gridArea = document.getElementById('grid-lines');
gridWidth = gridArea.offsetWidth;
if (gridWidth > 512){
gCanvas = g.createCanvas(512, 512);
}else{
gCanvas = g.createCanvas(drawWidth, drawWidth);
}
gCanvas.parent('grid-lines');
gCanvas.style.backgroundColor = "transparent";
button = g.createButton('SHOW GRID');
button.parent('showGrid');
button.id('show-grid');
button.size(116, 'relative');
button.mousePressed(g.turnOnGrid);
gridSizeButton = g.createButton('8X8');
gridSizeButton.parent('gridSize');
gridSizeButton.id('grid-size');
gridSizeButton.size(72, 'relative');
gridSizeButton.mousePressed(g.gridControl);
}
g.createGrid = function(){
let l = 0;
g.strokeWeight(1);
g.stroke(150);
while (l < g.width || l < g.height) {
g.line(0, l, g.width, l);
g.line(l, 0, l, g.height);
l += grid;
}
}
g.removeGrid = function(){
gCanvas.clear();
gCanvas.style.backgroundColor = "transparent";
}
g.turnOnGrid = function(){
if (show == false){
g.createGrid();
document.getElementById('show-grid').innerHTML = 'HIDE GRID';
show = true;
}else{
g.removeGrid();
document.getElementById('show-grid').innerHTML = 'SHOW GRID';
show = false;
}
}
g.gridControl = function(){
if (grid == gCanvas.width / 8){
if (show == true){
g.removeGrid();
document.getElementById('show-grid').innerHTML = 'SHOW GRID';
show = false;
}
grid = gCanvas.width / 16;
document.getElementById('grid-size').innerHTML = '8X8';
}else{
if (show == true){
g.removeGrid();
document.getElementById('show-grid').innerHTML = 'SHOW GRID';
show = false;
}
grid = gCanvas.width / 8;
document.getElementById('grid-size').innerHTML = '16X16';
}
}
}
let drawingSpace = new p5(sketch);
let helperGrid = new p5(gridLines);