MicroWindows体系结构及应用程序接口
dvdraw.c——核心图形程序,关于绘制线段、圆、多边形及其填充,文本和位图文件的绘制和颜色转换;
devclip.c——核心裁剪程序;
devrgn.c——动态分配程序;
devmouse.c——鼠标控制程序;
devkbd.c——核心键盘控制程序;
devpalX.c——连接到系统调色板。
1.4 应用程序接口
MicroWindows提供两个应用程序接口:MicroWindows API(源代码在win*.c中)和Nano_XAPI(源代码在nanox*.c中)
在MicroWidows上的API函数的基本模型都是用来初始化屏幕、键盘和鼠标的驱动程序,然后一直等待select()消息循环。当事件发生时,这条信息将送到用户程序。如果是用户请求图形操作,那参数将被编码后送到适当的GdXXX核心程序上。与原始图形操作相对的窗口概念是被该层所控制的,也就是说该层的API函数定义了窗口及其对应系统的概念。这样,系统坐标就能被转成屏幕上显示的坐标,并且可将数据传给GdXXX核心程序,由其作实际操作。该层亦定义图形/显示文件,并且会将此信息包括裁减信息送到核心程序上。
MicroWindows API支持大多数图形绘制、裁减、窗口工具条绘制以及拖拉窗口等这些程序。Nano_x API以mini-X服务器基础,类似于X的一个API,沿用X Window中的Xlib API,命名都是GrXXX()而不是X Windows中的X)。Nano-x API加入了基于网络的客户机/服务器功能,但是没有实现窗口管理,所以对窗口的处理需要使用系统提供的一个插件(widget)集,或者完全由应用程序员自已开发。
2 图形引擎特性与实现
图形引擎层的功能是完成图形在实虚屏之间的转换,以Gd...为开头,并将指针传给PSD作为它的首个参数。PSD参数将指定底层的显示模式,例如设备的垂直和水平尺寸、硬件使用的颜色模式。另外,真正执行画图的程序在这一层中作为功能指针使用。所有屏幕坐标都是COORD类型。
颜色在图形引擎中被指定RGB CILORVAL模式,然后被转换成颜色指针,以PIXELVAL模式传给显示硬件,在32bpp(bit per pixel)真彩显示器环境下不必转换。
(1)区域
区域用来描述屏幕上像素点的分布。在MicroWindows中,区域是用一些无交迭的矩形组成的数组来描述的。目前实现区域有两种方法,最初是用一个静态数组CLIPRECTs来描述复杂区域。在这个数组中任一矩形中的点都被认为是存在这个区域中的,另一个全局变量clipcount用来给这个数组中的矩形计数。这个方法没有给区域管理提供入口点,所以整个数组的数据直接被送到负责裁剪功能的函数数口。新方法则可以创建任何数目的区域。用来描述区域的数组CLIPREGION被定义成动态数据组,可动态分配它所包含矩形的数量,这样那些无交迭的矩形被存放在“y-x”类型的队列中。在同一队列中,所有矩形的垂直高度y是一样的,这意味着在每个队列中只有矩形的宽度可变。实际程序是利用Intersection、Union、Subtraction、Exclusive OR等方法来实现创建、删除一个区域或者是将几个区域或矩形合并。以下是这种方法设计的几个函数。
GdAllocRegion 创建一个区域
GdDestroyRegion 删除一个区域
GdCopyRegion 复制区域
GdUnionRectWithRegion 将一个矩形和一个区域合并
GdIntersectRegion 在两个区域的交集处创建一个新区域
GdSubtractRegion 在两个区域的差集处创建一个新区域
《MicroWindows体系结构及应用程序接口(第2页)》