Gostei bastante e resolvi fazer algumas coisas também no meu.
Copiei seu array das cores que achei uma boa paleta de cores. Adicionei ao meu 3 ferramentas, uma para pintar o fundo da tela, outro para apagar a tela, e uma borracha.
<meta charset="UTF-8">
<canvas width="600" height="400"></canvas>
<script>
function desenhaQuadrado(x, y, tamanho, cor) {
pincel.fillStyle = cor;
pincel.fillRect(x+2, y+2, tamanho, tamanho);
pincel.strokeRect(x+2, y+2, tamanho, tamanho);
pincel.fill();
}
function desenhaCirculo(x, y, raio, cor) {
pincel.fillStyle = cor; // o padrão é blue
pincel.beginPath();
pincel.arc(x, y, raio, 0, 2 * 3.14);
pincel.fill();
}
function pintaFundo(cor){
var xNaoPodeLimpar = 11*tamanhoQuadrados;
var yNaoPodeLimpar = 4*tamanhoQuadrados;
pincel.fillStyle = cor;
pincel.fillRect(0, tamanhoQuadrados+3, 600-tamanhoQuadrados+1, 400);
pincel.fillRect(xNaoPodeLimpar, yNaoPodeLimpar+3, 600, 400);
pincel.fillStyle = "black";
pincel.strokeRect(0, 0, 600, 400);
}
function desenhaPaletaDeCores() {
var x = 0
for(i = 0; i < cor.length; i++) {
desenhaQuadrado(x, yQuadrados, tamanhoQuadrados, cor[i]);
x = x + 50;
}
}
function desenhaFerramentas() {
pincel.fillStyle = "DimGrey";
pincel.fillRect(550+2, 50+2, tamanhoQuadrados, tamanhoQuadrados);
pincel.strokeRect(550+2, 50+2, tamanhoQuadrados, tamanhoQuadrados);
pincel.fillRect(550+2, 100+2, tamanhoQuadrados, tamanhoQuadrados);
pincel.strokeRect(550+2, 100+2, tamanhoQuadrados, tamanhoQuadrados);
pincel.fillRect(550+2, 150+2, tamanhoQuadrados, tamanhoQuadrados);
pincel.strokeRect(550+2, 150+2, tamanhoQuadrados, tamanhoQuadrados);
pincel.fillStyle = corAtual;
pincel.fillRect(556, 157, 40, 40);
pincel.strokeRect(556, 157, 40, 40);
pincel.fillStyle = "black";
pincel.font='60px calibri';
pincel.fillText('x',562.5,90);
pincel.font='35px calibri';
pincel.fillText('⌫', 555,140);
}
function lidaComMovimentoDoMouse(evento) {
var x = evento.pageX - tela.offsetLeft;
var y = evento.pageY - tela.offsetTop;
// usando a nova função
if(desenha && podeDesenharNaArea(x,y)) {
desenhaCirculo(x, y, 5, corAtual);
}
}
function habilitaDesenhar() {
desenha = true;
}
function desabilitaDesenhar() {
desenha = false;
}
function podeDesenharNaArea(x, y) {
if(x >= 0 && y >= 0 && y < tamanhoQuadrados+8) {
return false;
} else if(x >= 11*tamanhoQuadrados-3 && y >= 0 && y < tamanhoQuadrados*4+8) {
return false;
} else {
return true;
}
}
function quadradoSelecionado(evento) {
var x = evento.pageX - tela.offsetLeft;
var y = evento.pageY - tela.offsetTop;
selecionaCor(x, y);
selecionaFerramenta(x, y);
}
function selecionaCor(x, y) {
if (y > yQuadrados && y < yQuadrados + tamanhoQuadrados) {
var corClicada = Math.trunc(x / tamanhoQuadrados);
corAtual = cor[corClicada];
desenhaFerramentas()
}
}
function selecionaFerramenta(x, y) {
if (x > 11*tamanhoQuadrados && x < 12*tamanhoQuadrados) {
var ferramentaClicada = Math.trunc(y / tamanhoQuadrados);
if (ferramentaClicada == 1) {
pintaFundo("lightgray");
corDoFundo = "lightgray";
} else if (ferramentaClicada == 2) {
corAtual = corDoFundo;
} else if (ferramentaClicada == 3) {
pintaFundo(corAtual);
corDoFundo = corAtual;
}
}
}
var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');
var cor = ["white", "gold", "orange", "red", "darkred", "purple", "navy", "blue", "lightblue", "forestgreen", "darkgrey", "black"];
var desenha = false;
var corAtual = 'black';
var yQuadrados = 0;
var tamanhoQuadrados = 50;
var corDoFundo = "lightgray";
desenhaPaletaDeCores();
desenhaFerramentas();
pintaFundo("lightgray");
tela.onmousemove = lidaComMovimentoDoMouse;
tela.onmousedown = habilitaDesenhar;
tela.onmouseup = desabilitaDesenhar;
tela.onclick = quadradoSelecionado;
</script>