wayland を使用するGUIアプリの開発では、ウインドウズやX11ベースのウインドウシステムが行っている処理をほとんど自分で実装する必要があります。
gui toolkitアプリを作ってみました。
開発の方針は、以下の通りです。
(1)描画は、全てopenglで実装
実装の例を探すと、ほとんどの場合cairoで描画していますが、glviewは、全てopenglで描画しています。
(2)アプリケーションからwaylandのAPIを隠蔽
(3)文字描画は、freetype2、日本語入力はibus-1.0を使用
(4)処理は、マルチスレッドで動作
描画処理や入力イベント処理をマルチスレッドで独立して記述及び動作させることができます。
(5)開発環境
OS :ubuntu 21.04,21.10、ビルドシステム:meson
ubuntu 21.04から、westonを起動する必要が無くなったので、とても楽になりました。
(6)Special Thanks
日本語入力は、Araki Kenさんのmltermのhttps://github.com/arakiken/mlterm/blob/master/inputmethod/ibus/im_ibus.c 及びhttps://github.com/arakiken/mlterm/blob/master/inputmethod/fcitx/im_fcitx.c
現状、fcitxは期待した動作とはなっていません。
を基に作成しました。
waylandの処理は、https://github.com/wayland-project/weston/blob/main/clients/window.c及びwindow.hの一部の処理を利用しています。
aznoteさんの「Wayland プログラミング」も参考にさせていただきました。
(7)ソースコード
ソースコードは「https://github.com/t-aikawa/glview」です。
(8)問い合わせ等は、以下のメールアドレスまで
aikawat@jcom.home.ne.jp
(9)ビルド手順
- sudo apt install gcc
- sudo apt install g++
- sudo apt-get install libglib2.0*
- sudo apt-get install libway*
- sudo apt-get install wayland-protocols
- sudo apt-get install libegl1-mesa libegl1-mesa-dev
- sudo apt-get install libgles2-mesa-dev
- sudo apt-get install libfreetype6-dev
- sudo apt-get install libxkbcommon-dev
- sudo apt-get install ibus-1.0
- sudo apt-get install fcitx-libs-dev
- sudo apt-get install libpng-dev
- sudo apt-get install fonts-ipa*
- ---------------------------------------------------------------------
- sudo apt install python3-pip
- sudo apt-get install ninja-build
- pip3 install --user meson
- export PATH=$PATH:$HOME/.local/bin
- ---------------------------------------------------------------------
- git clone https://github.com/t-aikawa/glview.git
- cd glview
- ./m
- ---------------------------------------------------------------------
- ./s001
- ./s002
- ./smoke
- ./simple-egl
- ./test
s001:文字描画
smoke:westonサンプルクライアントの移植
simple-egl:westonサンプルクライアントの移植
test:アプリケーション作成例
(1)マルチスレッドでアプリを実行
(2)プルダウンメニュー
(3)日本語入力