Glfw: Entrada IME

Criado em 13 jun. 2013  ·  4Comentários  ·  Fonte: glfw/glfw

Wayland Windows X11 enhancement macOS

Comentários muito úteis

Para sua informação, implementei suporte para IME via IBUS no X11 / wayland em meu garfo glfw.

Todos 4 comentários

editado algumas vezes

Para sua informação, a partir do GLFW atual, usando o Microsoft IME para inserir, por exemplo, em japonês, a tecla pressionada durante as entradas do IME parece alcançar o aplicativo diretamente por meio de mensagens WM_KEYDOWN normais.

Eu nem sei o que está causando isso, em meu aplicativo de teste Win32 simples com um loop de mensagem trivial, o IME está interceptando essas chaves corretamente. Eu recebo WM_KEYDOWN com VK_PROCESSKEY (229) e WM_KEYUP não filtrado normal.

No GLFW, obtenho valores-chave não filtrados tanto para pressionados quanto para liberados.
Agora estou investigando o que está causando a diferença para ver se posso sugerir uma correção para o GLFW.

OK, então o que está acontecendo é que em meu aplicativo estou usando wParam, que contém o código-chave virtual e pode ser filtrado por IME. GLFW em translateKey () usa HIWORD (lParam) & 0x1FF que é scancode e nunca é filtrado.

Então, quando você pressiona e solta uma tecla de letra interceptada pelo IME, a sequência é algo como:

WM_KEYDOWN 229
13.36 Key 49 pressed
WM_KEYUP 78
13.43 Key 49 released

Portanto, para emular algo semelhante do ponto de vista do usuário GLFW, pode ser suficiente adicionar isto a translateKey ():

if (wParam == VK_PROCESSKEY)
    return _GLFW_KEY_INVALID;

O que irá gerar eventos nem pressionados nem liberados.

Agora, o problema é que existem tantas maneiras possíveis de interpretar os dados de baixo nível, mas eu acredito, e apesar do fato de que há muito mais no IME e este não é o quadro completo, esse comportamento seria o padrão desejável e muito benéfico. A grande maioria dos aplicativos não quer reagir ao pressionamento de teclas quando a janela IME é exibida, o que pelo menos permitiria entradas de texto baseadas em IME no aplicativo.

Aplicativo que se esforça para ser 100% ciente de IME (até implementar sua própria exibição de IME), o que é extremamente raro, teria que lidar com muito mais mensagens em grandes detalhes, o que provavelmente nunca será o escopo do GLFW (mas pode-se imaginar que O GLFW pode, no futuro, fornecer ganchos WM_ * para permitir que os usuários interessados ​​os manuseiem sozinhos e, novamente, não há sentido em fazer esse trabalho a menos que haja um bom motivo para isso).

Para sua informação, implementei suporte para IME via IBUS no X11 / wayland em meu garfo glfw.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

GraemeWilde picture GraemeWilde  ·  3Comentários

audioXD picture audioXD  ·  5Comentários

opengl-tutorial picture opengl-tutorial  ·  3Comentários

malytomas picture malytomas  ·  3Comentários

Itanq picture Itanq  ·  5Comentários