GUI - Event!, posição do mouse e uso de teclas
Toda a vez que um event! acontece em uma face, você pode obter informação sobre ele de event/<see list below>.
Mouse position:
Então, no exemplo simples abaixo, nós imprimimos o tipo de evento e as coordenadas do mouse quando um down (click) do mouse acontece:
Red [needs: view]
view [
base 100x100
on-down [
print event/type
print event/offset
]
]
down
39x57
down
86x43
Key pressed:
Curiosamente, no exemplo acima você só obtém none! se você tentar imprimir event/key, mas no exemplo abaixo, usando on-key como evento, você obtém não apenas a tecla apertada, mas também as coordenadas do mouse! Na verdade, você obtém as coordenadas do mouse onde quer que ele esteja na tela, referidas ao canto superior esquerdo da face.
Red [needs: view]
view [
area 100x100
on-key [
print event/type
print event/offset
print event/key
]
]
key
-59x84
r
key
-36x59
s
key
-116x79
o
Algumas faces parecem não gerar eventos de key. Por exemplo, se você substituir area por base no exemplo acima, não obterá nenhum resultado no console.
Segue uma lista de eventos da Documentação oficial do Red:
Campo |
Valor retornado |
type |
Tipo de evento (word!). |
face |
Objeto da face onde o evento ocorreu (object!). |
window |
Janela onde o evento ocorreu (object!). |
offset |
Offset do cursor do mouse relativa à face quando o evento ocorreu (pair!). Para eventos de gestos, retorna as coordenadas do ponto central. |
key |
Tecla pressionada (char! word!). |
picked |
Novo item selecionado em uma face (integer! percent!). Para um evento down do mouse em um text-list, ele retorna o index do item embaixo do mouse ou none. Para um evento wheel retorna o número de passos de rotação, um número positivo indica rotação para frente, e vice-versa. Para um evento menu, retonra o ID correspondente do menu (word!). Para um gesto de zoom, retonra o percentual representando o aumento/redução. Para outros gestos o valor depende do sistema (por enquanto). |
flags |
Retorna uma lista de uma ou mais (block!). |
away? |
Retorna true se o cursor sai dos limites da face(logic!). Só funciona se o evento over estiver ativo. |
down? |
Retonra true se o botão esquerdo do mouse foi pressionado (logic!). |
mid-down? |
Retonra true se o botão central do mouse foi pressionado (logic!). |
alt-down? |
Retonra true se o botão direito do mouse foi pressionado (logic!). |
ctrl? |
Retonra true se CTRL foi pressionado (logic!). |
shift? |
Retonra true se SHIFT foi pressionado (logic!). |