Glfw: Entrada IME

Creado en 13 jun. 2013  ·  4Comentarios  ·  Fuente: glfw/glfw

Wayland Windows X11 enhancement macOS

Comentario más útil

Para su información, implementé el soporte para IME a través de IBUS en X11 / wayland en mi bifurcación glfw.

Todos 4 comentarios

editado algunas veces

Para su información, a partir de GLFW actual, utilizando Microsoft IME para ingresar, por ejemplo, japonés, la tecla presionada durante las entradas IME parece llegar a la aplicación directamente a través de los mensajes WM_KEYDOWN normales.

Ni siquiera sé qué está causando esto, en mi sencilla aplicación de prueba Win32 con un bucle de mensaje trivial, el IME está interceptando esas claves correctamente. Recibo WM_KEYDOWN con VK_PROCESSKEY (229) y WM_KEYUP normal sin experiencia.

En GLFW obtengo valores clave sin filtrar tanto para presionar como para soltar.
Ahora estoy investigando qué está causando la diferencia para ver si puedo sugerir una solución para GLFW.

De acuerdo, lo que está sucediendo es que en mi aplicación estoy usando wParam que contiene un código de clave virtual y puede ser filtrado por IME. GLFW en translateKey () usa HIWORD (lParam) y 0x1FF, que es un código de escaneo y nunca se filtra.

Entonces, cuando presiona y suelta una tecla de letra interceptada por IME, la secuencia es algo como:

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

Entonces, para emular algo similar desde el punto de vista de un usuario GLFW, puede ser suficiente agregar esto a translateKey ():

if (wParam == VK_PROCESSKEY)
    return _GLFW_KEY_INVALID;

Lo cual generará eventos ni presionados ni liberados.

Ahora, el problema es que hay tantas formas posibles de interpretar los datos de bajo nivel, pero creo, y a pesar del hecho de que hay mucho más en IME y esta no es la imagen completa, este comportamiento sería el deseable por defecto y muy beneficioso. La gran mayoría de las aplicaciones no quieren reaccionar a las pulsaciones de teclas cuando se muestra la ventana IME, lo que al menos permitiría entradas de texto basadas en IME en la aplicación.

La aplicación que se esfuerza por ser 100% consciente de IME (hasta implementar su propia pantalla de IME), lo cual es extremadamente raro, tendría que manejar muchos más mensajes con gran detalle, lo que probablemente nunca será el alcance de GLFW (pero uno puede imaginar que En el futuro, GLFW puede proporcionar enlaces WM_ * para permitir que los usuarios interesados ​​los manejen ellos mismos, y nuevamente no tiene sentido hacer ese trabajo a menos que haya una buena razón para hacerlo).

Para su información, implementé el soporte para IME a través de IBUS en X11 / wayland en mi bifurcación glfw.

¿Fue útil esta página
0 / 5 - 0 calificaciones