如何在 Wayland 中设置窗口的 x,y 坐标?
Posted
技术标签:
【中文标题】如何在 Wayland 中设置窗口的 x,y 坐标?【英文标题】:How do I set the x,y coordinates of a window in Wayland? 【发布时间】:2016-02-25 17:09:57 【问题描述】:显然这不是核心 Wayland 协议的一部分,但我使用的是 Weston,xdg-shell 扩展似乎有必要的方法:
xdg_surface_set_window_geometry
所以我运行wayland-scanner
来创建xdg 代码和头文件:
wayland-scanner code < ./weston-1.6.0/protocol/xdg-shell.xml > xdg_shell.c
wayland-scanner client-header < ./weston-1.6.0/protocol/xdg-shell.xml > xdg_shell.h
我使用的代码大致如下:
surface = wl_compositor_create_surface(compositor);
if(surface == NULL)
...
native_window = wl_egl_window_create(surface, some_width, some_height);
if(native_window == NULL)
...
_xdg_surface = xdg_shell_get_xdg_surface(_xdg_shell, surface);
xdg_surface_set_window_geometry(_xdg_surface, 0, 0, some_width, some_height);
代码运行没有错误,但什么也不做。我在 Debian Jessie 上运行了常用的 Wayland 和 Weston 软件包。
如果除了xdg_shell
之外还有其他方法可能有效,我会全力以赴。
【问题讨论】:
你找到答案了吗?我还希望在 weston 下为我的窗口设置默认位置 在 Wayland/Weston 论坛的帮助下,我做了一个解决方法,即将我的窗口设置为具有透明背景的全屏输出尺寸,然后在全屏内偏移我的内容。目前,Wayland API 并不适用于这种应用程序级别的控制。 @mpr 你能分享你的代码或任何链接到论坛讨论的这个解决方法吗,我有点卡住了,需要应用相同的黑客 对不起Khode_Erfan,它早就不见了。看到这个问题仍然悬而未决,有点难过!我从来没有完全理解 Wayland 打算解决什么问题,事实上最终还是回到了与 X 相关的解决方案。 【参考方案1】:不确定它是否符合您的需要,但在 weston_view_set_initial_position(...) 中的 weston/desktop-shell/shell.c 中有一个函数,名为 set_position。
我设置了默认的 xy 值,它可以工作。
【讨论】:
您是如何从您的客户端程序中获得weston_view
和desktop_shell
对象的?
可以在韦斯顿资源中访问。我不知道它是否可以从客户端程序端访问。此修改将应用于每个窗口。
我考虑过扩展 Weston,但目前我无法接受。我暂时不讨论这个问题,我认为 Wayland API 可能会在未来提供更多的应用程序级别控制。以上是关于如何在 Wayland 中设置窗口的 x,y 坐标?的主要内容,如果未能解决你的问题,请参考以下文章
我们可以获得winlogon屏幕的坐标(x,y),以便在系统中设置任何分辨率吗? (如附图所示)
如何在 ConstraintLayout 中设置视图的绝对位置