DirectFB窗口管理器(unique)研究笔记

DirectFB-1.7.7 DirectFB-1.7.7源码,官网源码下载,无任何修改。可惜现在Directfb官网已关闭,故给大家分享关闭前下载的最新源码,谢谢。 立即下载

DirectFB窗口管理器(unique)研究笔记

 

DirectFB自带有两个窗口管理器:default和unique,可以在配置文件中用wm=xxx来选择用哪一个作为当前的窗口管理器。

 

两个窗口管理器的功能都很简单,与桌面环境流行的窗口管理器几乎没有可比性。尤其是前者,提供的功能更是简陋,仅仅是管理一下窗口栈而已。后者虽然简陋,但其架构设计还算不错,很容易在上面扩展自己需要的功能。

 

什么是窗口管理器呢?根据EWMH的要求,窗口管理器的基本功能有以下这些:

模态窗口(Modality)。一般用来实现模态对话框,所谓模态对话框,就是具有这样特性的对话框,除非你把它关掉,否则无法切换回到它的父窗口上。

 

大桌面(Large Desktop)。显示器的大小是有限的,比如显示器的分辨率为1024x768,那么传统的桌面就只能这么大一点。窗口管理器可以实现一个逻辑上的大桌面,较显示器的物理分辨率,拥有更大的显示范围。当然你在某个时刻只能看到桌面的一部分,这部分也称为viewport,通过变换viewport可以看到桌面的其它区域。

 

固定窗口(Sticky windows)。固定窗口要求窗口的位置被固定到显示器的物理位置, viewport的变换对它的位置都没有影响。

 

虚拟桌面(Virtual Desktops)。同时打开的窗口太多时,可以把这些窗口分成不同的组,同一时刻只显示其中一组的窗口,每一组窗口就是一个虚拟桌面。

 

任务条(Taskbars)、分页器(Pagers) 。显示当前所有的打开的窗口,并且可以在这些窗口之间切换。

 

窗口栈序(Z-Order) 。就是窗口之间的上下关系。

 

保留区域(reserve space)。让某个窗口独占某块靠边的区域,比如任务条,一般都独占桌面最下面的一长条区域。

 

窗口状态(Window State) 。窗口有最大化、最小化、全屏等的状态,这些由窗口管理器负责管理。当然,上层应用也可以调用窗口管理器提供的函数,来改变窗口的状态。

 

窗口装饰。在unix下,GUI的惯例是,窗口的标题和四周的边框,都称为装饰,这些装饰的显示是由窗口管理器负责的。这样的好处时,应用程序无须做任何修改,仅通过配置窗口管理器,就可以得到风格各异的显示效果。

 

窗口协议。这主要用于实现窗口僵死状态检测,窗口之间的同步处理等功能。

 

对于嵌入式系统来说,并不要求实现桌面环境上的一些花梢的功能。unique的实现虽然简单,也可以满足基本需求,更重要的是它提供了较好的扩展机制。

 

DirectFB采用模块化设计,它并不依赖于某种具体的窗口管理器,只要具体的窗口管理器实现接口CoreWMFuncs中定义的函数,就可以挂到DirectFB中运行。

 

Reactor在DirectFB中无处不在,要理解DirectFB的架构一定要理解reactor模式才行。不过,这里的reactor与POSA中讲解的reactor类似,但并不完全相同,它更类似于signal机制,如果你理解glib中的signal或者boost中的signal机制,理解reactor并不难。DirectFB中reactor最大的优点在于它是跨进程的,通过fusion内核模块中转,在一个进程中触发的事件可以方便的中转到另外一个进程。

 

Unqiue的源代码在wm/unique目录下,下面我们以输入事件流把它们贯穿起来分析一下:

 

在DirectFB中,每一种输入设备,都有一个线程挂在上面,只要输入设备有事件上报,该线程就通过reactor把事件转发给相应的reactor处理函数。窗口管理在初始时(unique_wm_module_init),调用dfb_input_add_global把_unique_device_listener设置为事件处理函数。

 

在_unique_device_listener中,并没有对事件直接处理,而又把它转给相应的UniqueDeviceClass对象,实现UniqueDeviceClass接口的有keyboard、pointer、wheel三种,每一种都有一个实例。

 

在这里,UniqueDeviceClass作为一个中间层,是否是多此一举呢?开始我也这样认为,过好长一段时间后,我才明白这样做是有道理的。原因是从不同设备读到的事件格式并不统一,比如有的绝对坐标,有的是相对坐标,键值映射关系也不一致。这个中间层可以把这些事件转换成统一的格式,上层无需要再关系这些底层细节。

 

把事件转换之后,然后通过reactor分发出去,就到_unique_input_switch_device_listener函数里。_unique_input_switch_device_listener里面通过当前的上下文以及事件的内容,决定谁是该事件的目标。

 

这里有两点比较有趣。

 

第一是StretRegion。StretRegion就是一块区域,StretRegion与窗口的关系又是什么样的呢?这种关系很很简单,一般的窗口(带装饰的窗口)有十个StretRegion组成,它们分别是四边、四角、窗口客户区以及这九个StretRegion的父StretRegion(也称为frame)。

 

对于键盘事件,一般是焦点窗口的客户区收到事件,如果是笔点事件,则由笔点的位置决定是哪个StretRegion收到事件。

 

第二是决定了目标StretRegion之后,并不是直接把事件投递给这个StretRegion,而是调用StretRegion的GetInput函数,获取一个input_channel的对象。这似乎也是多此一举,实则不然,窗口的四边、四角、窗口客户区九个区域是完全独立的,它不知道也不应该知道其它八的存在,另外这个九个区域的地位也不是等同的,有的要自己处理事件,有的不用,只有每个StretRegion自己才知道,所以由GetInput去决定把事件给谁。

 

事件经过input_channel之后,就轮到_unique_window_input_channel_listener函数处理了。这时,事件才真正被投递到相应的窗口,之后事情与窗口管理器就无关了。

 

对Z-Order的管理,实际上比较简单,无非就是调整窗口在栈的位置,所谓栈其实并不是真正的栈,只是一个双向链表,大家都习惯的称为栈罢了。

 

Unique实现了简单的装饰功能,相关代码在foo_update里(并没有用到decoration.c/.h)。它的图片数据在data目录中。Unique的装饰功能最大的缺陷是,没有根据不同类型的窗口实现不同的装饰。

 

 

 

DirectFB-1_7_4 代码 DirectFB是一个轻量级的提供硬件图形加速,输入设备处理特性和抽象的图形库 立即下载

相关推荐

DirectFB-DIRECTFB_1_7_7.tar.gz_DirectFB-1.7.7_directfb

DirectFB-DIRECTFB_1_7_7代码

今日编译mipsel-linux的DirectFb碰壁及解决

今日无事,尝试编译DirectFb,使用的工具是君正的交叉编译工具,http://www.ingenic.cn/product.aspx?ID=62 使用库有: jpeg-6b freetype-2.5.0.1 DirectFB-1.7.0 步骤如下: export PREFIX=/opt/mipsel export LD_LIBRARY_PATH=$PREFIX/lib ex

robitmind的专栏 1449

概率整形 Peobabilistic Shaping PS 第一节

概率整形概述 概率整形(Peobabilistic Shaping, PS)是一种针对于调制格式的优化技术,它为光通信通信提供了非常高的灵活性,但不会增加系统复杂性。尤其是光通信中的非线性问题会限制功率,使得PS就像为光通信量身定做的一样。 PS技术能够在不增加发送功率的前提下,获得高频谱效率和传输容量。2016年在使用PS技术的实验中实现了6600km单模光纤的65Tbit/s数据的传输。 到目前位置PS技术的研究主要集中在具有相干检测的单载波光纤传输。 概率整形的基本原理 概率整形技术就是通过在编码前

Explore_OuO的博客 8126

DirectFB的接口详解

1. 概述    ================      本文主要研究DirectFB及其向上向下的接口,顺带讲一下QT搭配DirectFB使用的一些笔记。    其他,如DirectFB的内部结构、Qt的内部结构、及其他GUI系统如android不在本文讨论范围内。    本文会设计一些DirectFB的2D加速函数介绍,3D加速不再本文讨论范围内。    =========

2万+

C# WinForms实战:5分钟用ScottPlot打造专业级示波器界面(附完整代码)

本文详细介绍了如何在C# WinForms应用中,利用ScottPlot.WinForms库快速构建一个专业级的软件示波器界面。通过从环境配置、静态波形绘制到动态数据实时更新的完整实战演示,帮助开发者高效实现高性能的波形显示功能,适用于工业监控、信号分析等多种场景。

weixin_29198045的博客 831

从零开始:在Windows WSL中搭建Openfoam7+blastfoam2.0.0开发环境(避坑大全)

本文详细指导在Windows WSL中搭建OpenFOAM 7与BlastFOAM 2.0.0开发环境,重点解析了安装过程中的常见“坑点”,如编译模式不匹配导致的符号错误,并提供了从系统准备、软件部署到环境验证的完整解决方案,帮助开发者高效构建CFD与爆炸模拟开发平台。

stem5的博客 527

DirectFB窗口管理器 unique 研究笔记

DirectFB窗口管理器 unique 研究笔记

jggyff的博客 338

基于PSO-BP神经网络的风电功率预测研究论文复现

风电功率预测。基于PSO-BP神经网络的风电功率预测论文复现。matlab程序,注释清晰。

weixin_825487230的博客 2295

/LGC窗口管理/DirectFB窗口管理器(unique)研究笔记

DirectFB窗口管理器(unique)研究笔记manager<br />DirectFB窗口管理 器(unique)研究笔记<br /><br /> 转载时请注明出处和作者联系方式<br /> 作者联系方式:李先静 <xianjimli at hotmail dot com><br /><br /> DirectFB自带有两个窗口管理器:default和unique,可以在配置文件 中用wm=xxx来选择用哪一个作为当前的窗口管理器。<br /><br /> 两个窗口管理器的功能 都很简单

uunubt的专栏 644

复旦微FMSH_Procise安装流程

双击FMSH_Procise_2021.1_full_win64_202103151947.exe 选择好安装目录后点击“Next” 一路next 点install 找技术支持代为申请 License,将电脑MAC地址发过去,将获得的 license 拷贝到 procise 安装目录“data”文件夹,即可使用 procise。点license manager和copy license 将licence,.lic文件放到这个目录 要是报下面错误要...

wangjie36的博客 1万+

【AUTOSAR实战】:CAN发送邮箱忙导致报文发送丢帧的问题调试

本文档主要讨论了CAN总线通信中可能出现的TC377传输错误的分析和解决方案。文章提供了如何通过检查CAN传输和接收过程、识别传输缓冲区的类型和状态以及选择适当的内存保护功能来检测和解决此类错误的见解。经过多次尝试和分析,得出的结论是,修改CANIF缓冲的尺寸并重新分配报文给各个buffer并不能解决问题。此外,发送中断被抢占可能导致报文无法发送,最终也将此因素排除。本文档还提到了一些可能导致发送流程调度出现问题的因素,例如CANIF中报文引用Buffer不合理。

weixin_46481662的博客 3138

directfb与窗口管理器

DirectFB自带有两个窗口管理器:default和unique,可以在配置文件中用wm=xxx来选择用哪一个作为当前的窗口管理器。 两个窗口管理器的功能都很简单,与桌面环境流行的窗口管理器几乎没有可比性。尤其是前者,提供的功能更是简陋,仅仅是管理一下窗口栈而已。后者虽然简陋,但其架构设计还算不错,很容易在上面扩展自己需要的功能。 什么是窗口管理器呢?根据EWMH的要求,窗口管理器的

shuyong1999的专栏 1242

EtherCAT主站SOEM -- 1 -- SOEM之ethercattype.h文件分析

“ethercattype.h” 文件用于支持 EtherCAT 网络通信,提供了各种类型定义和宏,以便开发者更轻松地开发 EtherCAT 相关应用程序。这些定义包括数据类型、命令类型、状态类型和错误类型,以支持 EtherCAT 通信。根据具体应用需求,还可以调整一些超时和帧长度设置。这些定义用于处理函数调用的结果,如 EC_NOFRAME(没有帧返回)、EC_ERROR(一般错误)、EC_TIMEOUT(请求超时)等。这些定义用于处理 EtherCAT 命令,例如 EC_CMD_APRD(自动递增读取

常驻客栈的博客--嵌入式EtherCAT 2714

对DirectFB窗口管理器(unique)的研究

DirectFB自带有两个窗口管理器:default和unique,可以在配置文件中用wm=xxx来选择用哪一个作为当前的窗口管理器。   两个窗口管理器的功能都很简单,与桌面环境流行的窗口管理器几乎没有可比性。尤其是前者,提供的功能更是简陋,仅仅是管理一下窗口栈而已。后者虽然简陋,但其架构设计还算不错,很容易在上面扩展自己需要的功能。   什么是窗口管理器呢?根据EWMH

liuysheng的专栏 1187

【yolo】如何在 YOLOv8 中添加负样本以减少误检

在YOLOv8目标检测中,误检(False Positive)是一个常见问题,即模型将非目标区域错误识别为目标。通过引入负样本(Negative Samples),即不包含任何目标框的图像,可以有效减少误检。在YOLOv8中添加负样本的方法是为这些图像提供空的标注文件(.txt),确保每张图像都有对应的标注文件,即使内容为空。可以使用Python脚本自动生成这些空标注文件。使用负样本时需注意数量比例、标注一致性、验证集同步和图像质量。适当加入负样本能显著提升模型鲁棒性,降低误判风险。

songhuangong123的博客 2879

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

directfb 窗口管理器调试

directfb窗口管理器一共有3种:default,unique,sawmandefault是默认的窗口管理器,功能很简单,只实现了简单的一个窗口栈unique则还增加了一些窗口修饰的功能,比如:标题,边框等sawman则是新的窗口管理器,除了实现上面的功能外,还提供了接口,用户就可以自己控制窗口 主要是实现SaWManCallbacks,可以参考sawman samples下的testman  tools下的在pc上调试后面2种的时候需要注意:make install后,需要sudo cp /usr/l

晴天游游的专栏 3384

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

窗口管理器

使用不同的窗口管理器。        DirectFB的窗口管理器做得比较弱,它毕竟是针对嵌入式设备的,我们没有必要苛求。它自带两种不同的窗口管理器,可以根据自己的需要选择。一个称为default,顾名思义,它是默认的窗口管理器,另外一个称为unique,功能更强一点。 Default只提供了最基本的窗口管理功能,如: 窗口栈管理,提供诸如向栈中插入窗口、删除栈中的窗口、调整窗口在栈

liuysheng的专栏 1126

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

DirectFB两则技巧

DirectFB两则技巧 DirectFB的运行行为可以通过配置文件进行控制,可以从多个配置文件中读出配置信息,然后合并到一起,甚至可以对不同名称的应用程序指定不同的配置文件。其主配置文件为/etc/direcfbrc,它的内容影响所有用户的应用程序。 建立PC模拟环境。 DirectFB和X Window都是独占显示设备的,在通常的情况下,DirectFB运行时,X Wi

国产开源 GUI 引擎 AWTK 5292

DirectFB简介以及移植[一]

DirectFB是一个轻量级的提供硬件图形加速,输入设备处理和抽象的图形库,它集成了支持半透明的视窗系统以及在LinuxFramebuffer驱动之上的多层显示。它是一个用软件封装当前硬件无法支持的图形算法来完成硬件加速的层。DirectFB是为嵌入式系统而设计。它是以最小的资源开销来实现最高的硬件加速性能。

嵌入式与人工智能天地 9669
上一篇: Introduction To Alpha Blending
下一篇: 《企业应用架构模式》读书笔记(一)
李先静
博客等级 码龄23年 2万+粉丝 846原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值