-
Notifications
You must be signed in to change notification settings - Fork 29
code outline
Stone Kang edited this page Dec 9, 2013
·
1 revision
#代码结构概要#
##模块列表##
- window_manager: 窗口管理器,是服务器端主要的控制部分。服务器端可执行程序在此。
- server_lib: 服务器库,支持窗口管理器的运行,负责处理客户端发送给服务器的消息(将它们对应到某个底层的函数调用),以及向客户端发送用户事件的消息(比如某些鼠标点击、控件移动等事件)等。
- comm: 消息传递系统。这部分是服务器和客户端公有的,用于在两者之间传递消息。它同时还记录了所有的消息类型(参见message.h, request.h, respond.h)。server_lib和client_lib都使用这里面的功能和数据类型。同时comm模块也包含底层的消息接收函数,在检测到消息到来(检测方法)之后,通过函数指针调用使用者指定的处理函数(调用位置)。
- event: 输入事件模块。这个模块处理键盘和鼠标的输入,用了一些相当原始的底层方法,对键盘输入的处理甚至跳过了stdin,而是直接打开键盘设备文件,读取内核提供的消息。用这种方法,即便是判断大小写都需要手工判断shift键是否处于按下状态。这里面的函数会被window_manager作为函数指针插入到comm模块的检测列表中,由comm统一控制。
- graph: 图形模块。这是绘图部分的核心,分成两部分:
-
util: 这个模块比较杂,包含若干不相关的子模块,但它们都是在整个系统里常用的功能或数据。
- base_type: 这里面定义了一些常用的数据类型,例如与平台无关的整数类型,布尔类型和指针类型等。(但是这些其实系统都提供了,不需要自己写的。我想过要把这个去掉,但是项目里几乎到处都用到了这些,只能保留。)
- color: 颜色支持。最开始就只有一个表示颜色的结构体,后来增加了对透明的支持,所以有了一个透明混合的函数。
- config_parser: 配置文件解析。很多控件支持从用户配置文件读取默认的样式信息,它们的格式是统一的,用这个config_parser可以很容易地获取。
- data_structures: 常用数据结构,如链表、队列、栈、树等,还有鼠标指针。
- geometry: 跟几何相关的算法,比如判断点是否在区域内等等。
- log: 将信息记录到屏幕上的常用宏。一般用在出错的时候,这些宏可以自动显示出系统的错误信息。
- application: 客户端的用户程序库。这里面的功能是用户程序经常用到的,比如初始化、退出、添加窗口等等。
- client_lib: 跟server_lib对应,是客户端用于通信的库。这里的函数几乎跟服务器支持的功能一一对应,比如绘制图形、注册窗口等。当调用这里的某个函数时,它会向服务器发送一条消息,请求对应的行为。
- widget: 控件库,包含用户程序可以使用的所有控件。这可以理解为系统中相当高层的部分了。目前还比较少,正在不断增加。但由于控件越来越复杂,开发进度也会逐渐变慢。开发过程中很可能发现底层存在的问题,这时就需要对其他部分进行修改。另外,开发某个控件可能需要目前没有的底层支持,这是也会需要先完善其他部分。
##模块关系##