Hola, les comparto mi solución al ejercicio de canvas, espero sus comentarios y sugerencias para mejorar
<canvas width="800" height="600"></canvas>
<script>
var pantalla = document.querySelector('canvas');
var pincel = pantalla.getContext('2d');
var colores = ['blue','red','green',"yellow","purple","pink","orange"];
var selectColor = 'purple';
var increment = 50;
pincel.fillStyle = 'grey';
pincel.fillRect(0, 0, 800, 600);
var puedoDibujar = false;
function dibujarCirculo(evento) {
if(puedoDibujar) {
var x = evento.pageX - pantalla.offsetLeft;
var y = evento.pageY - pantalla.offsetTop;
var yTope = increment + 5
if ( y > yTope ){
pincel.fillStyle = selectColor;
pincel.beginPath();
pincel.arc(x, y, 10, 0, 1 * 3.14);
pincel.fill();
}
}
}
function dibujarCuadrado(x,y,color){
pincel.fillStyle = color;
pincel.fillRect(x, y, increment, increment);
}
function paletaColores(){
var x = increment;
for(var i = 0; i < colores.length; i++){
dibujarCuadrado(x,0,colores[i]);
x += increment;
}
}
function seleccionaColor(evento){
var x = evento.pageX - pantalla.offsetLeft;
var y = evento.pageY - pantalla.offsetTop;
var index = 0;
for(var i = 1; i <= ( colores.length + 1 ) ; i++){
if(x > 0 && x < increment * i && y > 0 && y < increment){
index = i;
break;
}
}
if(index == 1){
borrar();
}else{
selectColor = colores[index - 2]
}
}
function borrar(){
pincel.clearRect(0, increment, pantalla.width, pantalla.height);
pincel.fillStyle = 'grey';
pincel.fillRect(0, increment, 800, 600);
selectColor = "purple";
}
pantalla.onmousemove = dibujarCirculo;
function habilitarDibujar() {
puedoDibujar = true;
}
function deshabilitarDibujar() {
puedoDibujar = false;
}
pantalla.onmousedown = habilitarDibujar;
pantalla.onmouseup = deshabilitarDibujar;
pantalla.onclick = seleccionaColor;
paletaColores();
dibujarCuadrado(0,0,"white");
</script>