Wayland入门教程08.11:鼠标操作
系列索引地址:Wayland入门教程索引
之前文章中我们创建了一个空白窗口,接下来我们处理一下窗口上的鼠标操作。
先把新建窗口的代码复制过来。然后把seat的部分代码复制过来,在注册函数中添加seat处理部分。
Wayland只提供了wl_pointer_listener,要想获取鼠标相关的消息需要首先设置监听器。
wl_pointer的消息有:
- enter 进入窗口范围
- leave 离开窗口范围
- motion 鼠标移动
- button 鼠标点击,鼠标按键id定义位于文件<linux/input.h>中,例如BTN_LEFT表示鼠标左键。
1 |
|
添加一个seat_listener结构体
1 |
|
添加seat_listener的回调函数
1 |
|
分两种情况,第一种是输入设备是鼠标并且指针不为空那么就表示当前状态有效,第二种是输入设备为鼠标但是指针为空表示鼠标已经离开窗口了。
添加pointer_listener函数。
1 |
|
有四种情况:进入、离开、移动、点击、坐标系。四种情况对应的函数为:
1 |
|
效果为:
可以看到坐标点的数据不对劲,坐标数据类型为int32_t wl_fixed_t
,根据wayland-util.h
描述其为带一个有符号位的24.8有符号定点数、带8位十进制的23位整型数。wayland提供了函数用于转换。
效果为:
这样看起来就正常了。
EGL版本只是替换了窗口显示部分,其他的代码一样。
完整代码在Wayland_Freshman中的08.11.pointer
下。
下一篇:- Wayland入门教程08.12:个性化鼠标
Wayland入门教程08.11:鼠标操作
https://blog.jackeylea.com/wayland/wayland-input-seat-pointer/