smithay で作って動かす Wayland compositor
smithay で作って動かす
Wayland compositor
Goal
Goal
自己紹介
Wayland and Wayland compositor
Wayland and Wayland compositor
POST /hoge
200 OK
Wayland and Wayland compositor
表示して
OK
Linux kernel
Linux kernel
KMS
DRM
mesa
Linux kernel
KMS
DRM
mesa
Linux kernel
evdev
KMS
DRM
mesa
libinput
Writing an Wayland compositor?
Using smithay
Linux kernel
evdev
KMS
DRM
mesa
libinput
Linux kernel
evdev
KMS
DRM
mesa
libinput
winit
今日は簡単のため winit を使う
Using winit
Wayland compositors in Rust
A course tatarajo
おおむね僕が最初に smallvil を弄っていたときのリプレイ.
Run tatarajo
$ git clone https://github.com/kenoss/tatarajo
$ cargo run --bin tatarajo-chocomint
Mod4-b Mod4-t でターミナルを開く
基本的な機能
まずはこれらの機能を見ていく.
tatarajo を終了
「まぁ quit か kill でひっかかるだろう」
TatarajoState: この Wayland compositor の神オブジェクト. 全ての根っこ.
DisplayHandle: ソケット WAYLAND_DISPLAY のハンドラ
calloop::EventLoop, calloop::LoopHandle: イベントループ
stop() するとこのループが止まる!
alacritty を起動
「std::process::Command::spawn() しとるはず」
このとき環境変数 WAYLAND_DISPLAY がセットされている.
これで各種イベントが入ってくる.
ウインドウを描画
「render か paint かな?」
小休止
なんとなく流れはわかった.
じゃあ機能を追加してみよう!!
機能追加
ウインドウをよしなに並べる (Tall layout)
あたりを見る.
ウインドウを抽象
Window が Output (ディスプレイ)のどこにいるかをマネジメント
smithay::desktop::Window
Window を抽象
smithay::desktop::space::Space<E: SpaceElement>:
Window が Output (ディスプレイ) のどこにいるかをマネジメント
ウインドウはどこから来るのか?
ここに panic!(); を入れて
RUST_BACKTRACE=1 で実行してみると
呼び出し元がわかるが省略
細かいハンドリングは smithay がやってくれるので,
この後の Window をよしなに弄ればよさそう
View::layout() で Space::map_element() を呼ぶ.
この前に位置とかを弄ればよさそう.
いいかんじに並べる + etc. (See commit.)
マージンを空ける
隙間がないと見にくくない?
あける! (See commit.)
focus されているウインドウにボーダーをつける
どうやって...?
focus されているウインドウにボーダーをつける
ところで Anvil ではウインドウに
装飾を付けられる.
なんかそれっぽい
これや!!
See commit.
できた!!
まとめ
話したこと
話さなかったこと
Additional resources
全て読破するのではなく, どこに何があるかを把握しておいて必要になったら読むのがオススメ
Smithay
で作って動かす
ayland compositor