Termbox-go: Bagaimana cara menangani pengubahan ukuran terminal?

Dibuat pada 26 Apr 2013  ·  4Komentar  ·  Sumber: nsf/termbox-go

Saya belum pernah menulis UI berbasis teks sebelumnya, tetapi saya pikir saya akan mencoba termbox karena tampaknya cukup sederhana. Saya mulai memahaminya, tetapi satu hal yang membingungkan saya adalah bagaimana menangani peristiwa pengubahan ukuran jendela terminal. Apakah termbox mendukung kasus ini? Idealnya, saya ingin dapat mendefinisikan fungsi yang berjalan setiap kali pengguna mengubah ukuran terminal, dan fungsi tersebut akan menangani penentuan ukuran terminal baru dan menggambar ulang sel seperlunya. Saya tidak melihat dokumentasi tentang ini, dan saya tidak tahu betapa mudah atau sulitnya itu.

Semua 4 komentar

Ada dua cara untuk menanganinya.

  1. Termbox memiliki acara pengubahan ukuran khusus. Anda mendapatkannya ketika terminal sedang diubah ukurannya. http://godoc.org/github.com/nsf/termbox-go#Event - struktur ini akan memiliki Type disetel ke EventResize , ditambah Width yang valid dan Height bidang
  2. Anda bisa memeriksa ukurannya setiap kali Anda menggambar ulang sesuatu. Buffer internal sedang diubah ukurannya mungkin dalam dua kasus: ketika Anda memanggil fungsi Clear atau Flush . Sebelum membersihkan dan sebelum membilasnya akan mengubah ukuran buffer belakang internal. Jadi, memeriksa hasil fungsi Size setelah memanggil ini adalah cara untuk menangkap ukurannya.

Mana yang harus dipilih benar-benar tergantung pada logika. Dalam beberapa kasus Anda akan memiliki gambar ulang lengkap pada setiap acara yang Anda dapatkan, lalu periksa ukurannya setiap kali dan itu akan berhasil. Atau jika aplikasi Anda melakukan pemrosesan peristiwa dengan hati-hati dan tidak menggambar ulang dirinya sendiri setiap saat, Anda dapat menunggu peristiwa pengubahan ukuran.

Ya itu tidak didokumentasikan dengan baik, karena saya masih tidak yakin tentang semantik yang tepat dari perilaku ini. Mungkin saya harus mendokumentasikannya dengan lebih baik, atau mungkin membuat semacam tutorial yang menjelaskan berbagai aspek termbox. Akan membiarkan masalah itu terbuka sebagai pengingat.

Untuk menambahkan pengalaman pribadi saya: Saya menelepon termbox.Size() segera setelah menerima EventResize , jadi nilai yang dikembalikan salah. Cukup mudah untuk mengubah ini menjadi event.Width, event.Height , tetapi saya harus mencari-cari sedikit untuk menemukan masalahnya. Idealnya, resize() akan secara otomatis memperbarui nilai yang dikembalikan oleh termbox.Size() , tetapi sepertinya itu memerlukan beberapa pemfaktoran ulang. Paling tidak, bisakah Anda menambahkan komentar ke termbox.Size() yang memperingatkan pengguna tentang perilaku ini?

Memperbarui dokumen Size(), apakah sekarang lebih baik?

Ya, itu terlihat lebih jelas bagi saya. Terima kasih!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat