weston 窗口管理 (1)

article/2025/10/11 0:58:13

窗口管理 (1)

一、概述

在传统嵌入式场景下,通常只会运行一个UI程序,故相当于单窗口程序,无需桌面服务器的介入;在桌面系统下,对于每一个UI程序而言,它们的行为相比于嵌入式场景仍然没有发生改变,其对接的仍然是窗口,只不过在同一个时刻允许多个UI程序同时运行.

无论如何对于UI程序,它们需要的仅仅是一个窗口,亦或者说是一块用于渲染的画布;UI程序并不关心渲染的程序最终是否呈现在了屏幕上,对于它们而言,将UI程序正确地渲染到画布上,即完成了它们的使命.

请添加图片描述

在传统嵌入场景下, window 可能直接对接到真正意义上的物理屏幕,在 linux 上可能就是 KMS 架构中的 drm,而在桌面系统场景下,window大多先是对接到display server,然后由display server对接至KMS;从这里可以知道UI程序对接的是window,进一步说是一块内存或者显存而非真正的物理设备;但是从UI程序设计者而言,window对其而言又像是一块完整屏幕.

实际上 weston 并非只能对接 drm, 比如对接 rdp 实现远程桌面登录,对接 EGL 接入 OpenGL 的体系等等.

在桌面系统环境下,同一时间可能存在多个UI程序,意味着显示服务器需要同时管理多个窗口,而大多数情况下是只有一个输出设备的;那么对于显示服务器而言,就需要把多个窗口进行合成,将其按照一定的规则排列组合,组合成一张跟屏幕尺寸相等的画布.

二、适读人群

本文结构大体上分为两个部分,第一部分从用户的角度描述 weston 有关于此的实现,第二部分而从开发者的角度,描述 weston 有关于此部分的具体主体实现,帮助读者理解 weston 有关于窗口管理部分的业务逻辑.

本文基于 weston 分支 10.0.2 进行描述, ubuntu 或 deepin 下可以通过 sudo apt install weston 安装 weston, 并通过终端启动 weston.

三、分层设计

weston 里,窗口是通过分层进行管理的,并且 window 在这里可以简单的理解为 view 视图的概念.

请添加图片描述

不同的 layer 具有不同的优先级,而同一 layer 的不同 view 则根据前后顺序确认优先级.

weston 中, layer 大致上分为 (优先级自上而下):

  • WESTON_LAYER_POSITION_FADE : 渐变层,实现窗口切换过渡特效
  • WESTON_LAYER_POSITION_CURSOR : 鼠标层
  • WESTON_LAYER_POSITION_LOCK : 锁屏层
  • WESTON_LAYER_POSITION_TOP_UI : 输入法层 (比如说中文输入法)
  • WESTON_LAYER_POSITION_FULLSCREEN : 全屏层
  • WESTON_LAYER_POSITION_UI : 系统桌面层
  • WESTON_LAYER_POSITION_NORMAL : 应用层
  • WESTON_LAYER_POSITION_BOTTOM_UI : 未使用
  • WESTON_LAYER_POSITION_BACKGROUND : 背景层

(1) 实例描述

在讲解上面这些抽象的概念之前,先用一些实例来描述一下这些层级的使用.

在刚刚启动 weston 点击左上角的终端符号,应该可以看到:

请添加图片描述

而在长时间未操作后,应该会进入锁屏状态:

请添加图片描述

(2) 分层设计的原因

weston 的分层设计其实更多的是从业务的角度去进行考虑的,实际上 compositor 最后时并没有 view 这个概念, layerview 本质上就是一个二维链表的概念,最后面会将这个二维链表转化为只包含 view 的一维链表,按照 layer 的优先级顺序.

请添加图片描述

对于正常的UI程序,实际上只能接触到三个不同的 layer:

  • WESTON_LAYER_POSITION_FULLSCREEN
  • WESTON_LAYER_POSITION_NORMAL
  • WESTON_LAYER_POSITION_MINIMIZE (虚拟图层)

而对于操作系统而言,则可以操作到诸如 WESTON_LAYER_POSITION_UIWESTON_LAYER_POSITION_CURSORWESTON_LAYER_POSITION_BACKGROUND; 相对于UI程序而言,系统所控制的图层所包含的 view 是相当稳定的,例如 WESTON_LAYER_POSITION_NORMAL 图层通常情况下就只有一个任务栏的 view.

所以总体来说,不同图层的所有者大致可以分为应用系统两者;如果在未考虑当前 weston 分层设计的情况下,可能有人会将这个layer的设计修改为系统图层和应用图层两个图层进行管理,实际上添加部分逻辑处理之后这样做确实也是可以的.

layer 这种设计方案一种可能性是在于虽然可以分为系统图层以及应用图层,但是系统图层并不一定全部都在应用图层之下.

请添加图片描述

可以看到系统所控制的 layer 部分在应用之上,部分在应用之下,以及 (DESKTOP) UI 在夹在 NORMAL 图层以及 FULLSCREEN 图层之间;甚至于 TOP_UI 还能同时被系统以及应用同时控制 (系统可能是提供软键盘,而应用则是特殊程序如输入法).

另外一个用layer进行设计的好处就是在于容易控制权限,例如 NORMAL 下图层可以旋转、移动、缩放,但是 FULLSCREEN 下这些行为则是禁止的.

四、分层案例描述

(1) 工作空间

weston 提供工作空间的概念,类似于 window 下的多桌面概念, 默认下 deepin 安装的 weston 是无配置启动的,默认工作空间为 1,要想测试多工作空间,则需要创建 weston.ini,并运行 weston -c weston.ini, weston.ini 的配置如下:

# file : weston.ini
[shell]
num-workspaces=6

然后实际运行效果如下:

请添加图片描述

快捷键为 WIN(SUPER) + Fx,默认情况下.

这个实际上的实现就是不断地切换 WESTON_LAYER_POSITION_NORMAL layer 实现的,具体视图如下:

请添加图片描述

(2) 权限差异

不同图层带来了不同的权限,以 NORMAL 图层进行最大化和取消最大化, FULLSCREEN 图层全屏和取消全屏进行演示:

请添加图片描述

最大化快捷键为 WIN + SHIFT + M,全屏快捷键为 WIN + SHIFT + F.

它们反映的一方面是 FULLSCREEN 图层的优先级高于 (DESKTOP) UI,所以可以遮挡住任务栏;另一个方面则是可活动范围,NORMAL图层的活动范围是整个屏幕去除(DESKTOP) UI的部分.

以上即是面向用户的所有描述,之后的章节将结合weston的实际代码逻辑讲解部分实例.


http://chatgpt.dhexx.cn/article/U2x4VCJP.shtml

相关文章

weston 简介

参考???weston wiki Weston - Gentoo Wiki weston (1): Linux man pages – code.tools Weston-1.12.0 非常详尽,多图慎入:Wayland与Weston简介 - 云社区 - 腾讯云 什么是weston? Wayland是一套display server(Wayland compositor)与…

waylandweston

简单地说,Wayland是一套display server(Wayland compositor)与client间的通信协议,而Weston是Wayland compositor的参考实现。其官网为http://wayland.freedesktop.org/。它们定位于在Linux上替换X图形系统。X图形系统经历了30年左右的发展,其…

weston 1: 编译与运行傻瓜教程

本人Kubuntu版本是22.04 sudo apt-get update sudo apt-get upgrade 进入主目录 cd $HOME/ mkdir install mkdir works vim ~/.bashrc export WLD$HOME/install source ~/.bashrc cd works wayland git clone https://gitlab.freedesktop.org/wayland/wayland.git cd …

weston input 概述

weston input 概述 零、前言 本文描述了有关于 weston (基于 wayland 协议一种显示服务器的实现) 中有关于输入设备管理的部分;为了聚焦于此,本文不会对 weston 整体或 wayland 协议进行过多的阐述. 考虑到读者可能存在不同的需求,采用分层次的描述方式,主要面向以下两类人群…

weston 2: 登录后直接启动weston配置

本人Kubuntu版本是22.04 名词:SDDM(SDDM - Arch Linux 中文维基)显示管理器 配置流程如下: 1.修改配置文件 a.配置.bashrc vim ~/.bashrc //以下内容删除 #export WLD$HOME/install #export LD_LIBRARY_PATH$WLD/lib/x86_64-…

Weston介绍

Weston结构说明 Weston源码结构 clients:wayland显示客户端应用 compositor:合成器进程(服务端),窗体风 格样式处理 libweston:合成器以及客户端渲染处理以及驱动实现方式,以及wayland服务与客户…

Wayland/Weston 启动方式简介

前言 本文简单介绍 Weston 常用的几种 backend 启动方式。目前最新的 Weston 8.0.0 支持如下几种 backend: drm-backendfbdev-backendheadless-backendrdp-backendwayland-backendx11-backend 其中 headless-backend 不带任何 UI 界面,主要用于 westo…

weston设置

weston设置 屏幕旋转180度方法修改标题栏位置启动配置文件 屏幕旋转180度方法 编辑 /etc/xdg/weston/weston.ini文件,增加如下语句 [output] nameDSI-1 transform180其中name为你的显示屏名称,可以通过如下命令来查看显示屏名称: card0-DS…

Weston 窗口管理(2)

窗口管理(2) 本文基于 weston 分支 10.0.2 进行描述. 五、概述 本文为窗口管理(1)的续章,更多站在开发者角度,以 weston 的代码实现讲解窗口管理(1)中所实现的部分业务场景. 六、数据结构 在窗口管理(1)中曾经描述过 weston 具体的分层逻辑,如下: 再进一步可以把 WESTON_LAY…

01-weston 简介

参考​​​​​​weston wiki Weston - Gentoo Wiki weston (1): Linux man pages – code.tools Weston-1.12.0 非常详尽,多图慎入:Wayland与Weston简介 - 云社区 - 腾讯云 什么是weston? Wayland是一套display server(Wayland compos…

disunity的使用

1. 下载并安装好jdk: 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 安装教程:http://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 2.下载disunity: https://…

T-digest

目录 算法算法原理空间消耗及错误界限 示例T-digest的建立T-digest的查询 相关链接 上一篇博客中讲述了使用 R a n d o m Random Random算法进行 q u a n t i l e quantile quantile估算,详情可见Random,本博客将讲诉另外一个 q u a n t i l e quantile …

[反编译U3D]Decompile Unity Resources 修正

反编译unity project的资源文件,包括ios,android,pc等,仅供学习使用! 1.disunity Examples 1.1disunityGUI 1.1.2DiunityGUI 使用方法 2.unity3d decompiler 3.UnityAssetsExplorer 反编译unity project的资源文件&…

edit distance 理解

一直没有理解到inert i delete j 的意思。看看图就可以明白了。 对于那道面试题:http://www.careercup.com/question?id6287528252407808 k-palindrome. 最精妙的地方在于只考虑 k 长度以内的改变,这样就可以判断出来了。速度是O(k*n) 1. Definition o…

Tiny-DSOD: Lightweight Object Detection for Resource-Restricted Usages

Y uxi Li1 lyxok1sjtu.edu.cn Jiuwei Li2 jiuwei.liintel.com Weiyao Lin1 wylinsjtu.edu.cn Jianguo Li2 jianguo.liintel.com 1Shanghai Jiao Tong University , China 2Intel Lab China Abstract 近年来,随着深度学习的发展,目标检测技术取得了长足…

android density

为什么要引入dip —The reason for dip to exist is simple enough. Take for instance the T-Mobile G1. It has a pixel resolution of 320x480 pixels. Now image another device, with the same physical screen size, but more pixels, for instance 640x480. This devic…

手游游戏资源提取 (破解、AssetStudio、VGMToolbox、disunity、Il2CppDumper、 .NET Reflector)...

参考: 公主连结 游戏资源提取(解包)简明教程 Unity3D研究院之mac上从.ipa中提取unity3D游戏资源 吾爱破解:记一次unity3d data修改 GitHub:Il2CppDumper 想拿点知名IP的手游素材做点demo,然后搜了下如何能拿到app的素材资源 一 下…

DISN:Deep Implicit Surface Network for High-quality Single-view 3D Reconstruction

时间:2019年 作者:Weiyue Wang ,University of Southern California etc. Abstract: 1.DISN 通过预测基本符号距离场来从二维图像中生成高质量的细节丰富的三维网格; 2.DISN 在二维图像上预测每一个三维点的投影位置&#xff…

Dist

这道题只要找到我们距离的规律就行了&#xff0c;我们可以发现&#xff0c;当行数小于列数时,列数(列数-1)/k,否则&#xff0c;行数(行数-1)/k&#xff0c;没记算一次我们的距离就会增加1&#xff0c;应为行数一减你就往下了一个&#xff0c;所以这个要加1. #include<bits/…