Glfw: masukan IME

Dibuat pada 13 Jun 2013  ·  4Komentar  ·  Sumber: glfw/glfw

Wayland Windows X11 enhancement macOS

Komentar yang paling membantu

FYI Saya menerapkan dukungan untuk IME melalui IBUS di X11/wayland di garpu glfw saya.

Semua 4 komentar

diedit beberapa kali

FYI pada GLFW saat ini, menggunakan Microsoft IME untuk memasukkan misalnya bahasa Jepang, tombol yang ditekan selama input IME tampaknya mencapai aplikasi secara langsung melalui pesan WM_KEYDOWN biasa.

Saya bahkan tidak tahu apa yang menyebabkan ini, dalam aplikasi pengujian Win32 sederhana saya dengan loop pesan sepele, IME mencegat kunci-kunci itu dengan benar. Saya menerima WM_KEYDOWN dengan VK_PROCESSKEY (229) dan WM_KEYUP unfiletred normal.

Di GLFW saya mendapatkan nilai kunci tanpa filter untuk ditekan dan dilepaskan.
Saya sekarang sedang menyelidiki apa yang menyebabkan perbedaan untuk melihat apakah saya dapat menyarankan perbaikan untuk GLFW.

OK jadi yang terjadi adalah, di aplikasi saya, saya menggunakan wParam yang berisi kode kunci virtual dan dapat difilter oleh IME. GLFW di translateKey() menggunakan HIWORD(lParam)&0x1FF yang merupakan scancode dan tidak pernah difilter.

Jadi ketika Anda menekan dan melepaskan tombol huruf yang dicegat oleh IME, urutannya seperti:

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

Jadi untuk meniru sesuatu yang serupa dari sudut pandang pengguna GLFW, mungkin cukup menambahkan ini ke translateKey():

if (wParam == VK_PROCESSKEY)
    return _GLFW_KEY_INVALID;

Yang tidak akan menghasilkan acara yang tidak ditekan dan tidak dirilis.

Sekarang masalahnya adalah ada begitu banyak cara yang mungkin untuk menafsirkan data tingkat rendah tetapi saya percaya, dan terlepas dari kenyataan bahwa ada lebih banyak lagi IME dan ini bukan gambaran keseluruhannya, bahwa perilaku ini akan menjadi default yang diinginkan dan sangat menguntungkan. Sebagian besar aplikasi tidak ingin bereaksi terhadap penekanan tombol saat jendela IME ditampilkan, yang setidaknya akan memungkinkan input teks berbasis IME ke dalam aplikasi.

Aplikasi yang berusaha untuk menjadi 100% sadar IME (hingga menerapkan tampilan IME mereka sendiri), yang sangat sangat jarang harus menangani lebih banyak pesan dengan sangat detail, yang mungkin tidak akan pernah menjadi cakupan GLFW (tetapi orang dapat membayangkan bahwa GLFW mungkin di masa depan menyediakan kait WM_* untuk memungkinkan pengguna yang tertarik menanganinya sendiri, dan sekali lagi tidak ada gunanya melakukan pekerjaan itu kecuali ada alasan yang sangat bagus untuk itu).

FYI Saya menerapkan dukungan untuk IME melalui IBUS di X11/wayland di garpu glfw saya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat