Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Mostrar a cor para o usuario

Olá, após ver o resultado proposto pelo professor neste exercício, me veio a mente mostrar para o usuário qual cor estaria atualmente sendo usada, antes da tela ser rabiscada. Então, após algumas tentativas fracassadas, comecei a ler os comentários do fórum pra ver se mais alguém tinha a mesma dúvida que eu, e me deparei com uma proposta de um colega muito interessante. Ele colocou um quadrado colorido auxiliar ao lado da tela, totalmente preenchido com a cor atual. Dei uma lida minuciosa no código dele e modifiquei pra deixar apenas uma caixa de texto. Minha intenção era que o nome da cor aparecesse toda vez que fosse trocado de cor com o botão direito do mouse, mas não consegui, deixei apenas a palavra "cor" estática lá, porém, modificando sua cor conforme os cliques do usuário. O código ficou um pouco extenso, mas funcional:

<canvas id="tela" width="600"  height="400"></canvas>
<canvas id="indicador_cor" width="50"  height="50"></canvas>

<script>
var tela = document.querySelector('canvas');
var pincel = tela.getContext('2d');

var indicadorCor = document.querySelector("#indicador_cor");
var pincelIndicadorCor = indicadorCor.getContext("2d");
    pincelIndicadorCor.font='20px Arial';
    pincelIndicadorCor.fontWeight='bold';
    pincelIndicadorCor.fillStyle='blue';
    pincelIndicadorCor.fillText("COR", 5, 30);

pincel.fillStyle = 'grey';
pincel.fillRect(0, 0, 600, 400);

    function desenhaCirculo(evento) {
        var x = evento.pageX - tela.offsetLeft;
        var y = evento.pageY - tela.offsetTop;
           pincel.fillStyle=cores[corAtual];
        pincel.beginPath();
        pincel.arc(x, y, 10, 0, 2*Math.PI);
        pincel.fill();
        console.log(x + ',' + y)
    }
    function mudaCor() {
        corAtual++
        if (corAtual>=cores.length) {
            corAtual=0
        }       
        mudaIndicadorCor();
        return false;
    }
    function mudaIndicadorCor() {
        pincelIndicadorCor.fillStyle = cores[corAtual];
        pincelIndicadorCor.font='20px Arial';
        pincelIndicadorCor.fontWeight='bold';
        pincelIndicadorCor.fillStyle='corAtual';
        pincelIndicadorCor.fillText("COR", 5, 30);
    }
var cores=['blue', 'red', 'green']
var corAtual=0
tela.onclick = desenhaCirculo;
tela.oncontextmenu = mudaCor;

</script>

O que poderia ser melhorado?

2 respostas
solução!

Olá Renan, tudo bem?

Entendi o que você queria fazer, você estava no caminho certo. Confere se seria esta sua ideia:

<canvas id="tela" width="600" height="400"></canvas>
<canvas id="indicador_cor" width="50" height="50"></canvas>

<script>
  var tela = document.querySelector("canvas");
  var indicadorCor = document.querySelector("#indicador_cor");

  var pincel = tela.getContext("2d");
  var pincelIndicadorCor = indicadorCor.getContext("2d");

  pincelIndicadorCor.font = "20px Arial";
  pincelIndicadorCor.fontWeight = "bold";
  pincelIndicadorCor.fillStyle = "blue";
  pincelIndicadorCor.fillText("blue", 0, 30);

  pincel.fillStyle = "grey";
  pincel.fillRect(0, 0, 600, 400);

  function desenhaCirculo(evento) {
    var x = evento.pageX - tela.offsetLeft;
    var y = evento.pageY - tela.offsetTop;
    pincel.fillStyle = cores[corAtual];
    pincel.beginPath();
    pincel.arc(x, y, 10, 0, 2 * Math.PI);
    pincel.fill();
    console.log(x + "," + y);
  }
  function mudaCor() {
    corAtual++;
    if (corAtual >= cores.length) {
      corAtual = 0;
    }
    mudaIndicadorCor();
    return false;
  }

  function mudaIndicadorCor() {
    pincelIndicadorCor.fillStyle = cores[corAtual];
    pincelIndicadorCor.font = "20px Arial";
    pincelIndicadorCor.fontWeight = "bold";
    pincelIndicadorCor.clearRect(0, 0, indicadorCor.width, indicadorCor.height);
    pincelIndicadorCor.fillText(cores[corAtual], 0, 30);
  }
  var cores = ["blue", "red", "green"];
  var corAtual = 0;
  tela.onclick = desenhaCirculo;
  tela.oncontextmenu = mudaCor;
</script>

O que eu fiz foi preencher o texto com a cor atual usando o fillText() e fora isto, apagar o texto toda vez que uma nova cor fosse escrita, usando o clearReat(). Segue abaixo as linhas das quais me refiro:

    pincelIndicadorCor.clearRect(0, 0, indicadorCor.width,indicadorCor.height);
    pincelIndicadorCor.fillText(cores[corAtual], 0, 30);

Qualquer dúvida estou a disposição. Espero ter ajudado. Bons estudos!!!

era exatamente isso, muito obrigado!