分类: C/C++
2010-04-10 15:56:28
该文源于英文手册《Xlib Programming Manual》,为方便学习Xlib而将其翻译为中文。希望给和我一样学习Xlib的同仁提供方便,如果错误请原谅,同时提供该文英文的网页链接如下:
第一章 引言
引言
本章为读者描绘了X编程的大体框架:阐述了X的全部定义以及相关工作原理。已经熟悉X的读者可以略过本章,其他读者应仔细阅读。
1987年9月,麻省理工学院诞生了90年代颇具影响力的软件——X视窗系统的第11个版本,即X11。X11的出现也许没有改变整个人类世界,但确实改变了服务器世界的面貌。它成为一种标准为每一个工作站的厂商所认可,并在这些厂商的产品中获得支持。因此,X系统对于个人电脑与超级计算机同样适用。于是,编写出来的应用程序可以在一类机器而不是一个厂家的机器上运行,程序员可以使用一种简单的图形语言完成代码,并确信这些应用可以在广泛的机器上使用而不需要较大的改动。
更重要的是,由于X是基于网络的视窗系统,应用可以依靠网络连接运行于不同厂家的设备上。程序可以运行在远方的计算机上,而操作结果显示在当地工作站上。
X系统版本
X基于麻省理工学院的研究项目,并与其他软件公司合作完成。主要负责人为麻省理工学院的Robert Scheifler及其同事。X10.4版诞生于1986年,并成为许多商业产品的基础组成部分。X11.1于1987年9月诞生,第二个版本于1988年3月诞生,1989年第3版诞生,1990年第4版诞生,1991年第5版诞生。X11是一个完整的视窗软件包,在支持显示特性、窗口管理方面提供了很大的方便,支持多屏。更重要的是X11的Xlib被公认为非常可靠,成为一种实际的工业标准。这就意味着,以该库编写的程序不需要大的改动就可以适应X11软件的升级。
随着X11第二版的成功,X系统的拥有权从麻省理工学院转移到X委员会——一个由主要支持X标准的计算机厂商组成的团体。该委员会于1988年一月成立,基本上所有的计算机大型厂商都加入了该组织,许多软件屋与大学成为其非正式会员。
X视窗系统概念
视窗系统非常复杂,不过它是基于一些非常容易理解的约定而建立的。该章节就描述了这些概念。
Display与Screens(这里display实在不知所云,难道是指多媒体??)
关于X首先值得注意的就是:X是基于位图图形显示的视窗系统。它支持颜色、黑白和灰度显示。一个稍微有点特别的地方在于Display的定义:一个由键盘、指示设备(比如鼠标)、一块或多个显示器组成的工作站。多块屏幕可以在一起工作,鼠标移动可以跨越屏幕边界。由于多块屏幕由一个用户使用,所有设备共同组成了一个display。如下图所示,
服务端与客户端模式
接下来值得注意的就是X系统是基于网络的视窗系统。应用不需要运行在一台机器之上。当许多应用程序在工作站本地运行时,部分应用可以在其他机器上运行,这些应用通过网络向特定的display发送请求和接受键盘与鼠标事件的反馈。注意,X只支持TCP/IP和DEC网络,不过相信这种情况会在很短的时间内改变。
控制显示界面的程序称之为服务端。刚开始,这种定义服务器端的说法会让你觉得很奇怪——当你坐在一台工作站前,你会很自然的认为服务端是网络对面的某个东西,而不是控制你本地显示的本地应用。请注意的是,你面前显示界面上的数据是通过网络由外部系统提供的,对于外部系统来说,执行在你本地的代码才是真正的服务端。服务端是介于用户程序(客户端程序)和本地资源之间的桥梁,它负责下面的工作:
l 允许多个客户端程序同时连接display;
l 解释客户端程序的消息;
l 通过网络消息将用户输入传递给客户端;
l 进行二维图形绘画;
l 维护复杂的数据结构,包括:视窗、鼠标、字体和图形上下文。服务器维护这些资源,减少了让每个客户端程序自己维护这些资源的代价。
由于X系统使得网络对于客户端透明化,客户端程序可以在网络上与任意允许连接的display连接。在网络环境下,用户将程序运行于几个不同的主机是一个非常普遍的做法。如下图:
实际上,每个用户都坐在一个服务端前,你可以通过本地服务端启动本地应用,也可以通过本地服务端启动远程主机上的应用。这种网络布局称之为分布式系统。分布式系统有利于解决系统负荷不平均的问题。当一台主机负荷趋于饱和,则用户可以转移部分程序到其他主机上去。
一个比较典型的例子就是PC服务端及X终端。因为单任务系统只能运行X服务端,用户坐在其中一个服务器上必须能够通过网络运行所有客户端上的程序,并将运行结果显示在PC或者X终端上,这要求单任务PC或X终端必须提供与工作站相同的操作界面。
视窗管理
同样值得注意的是应用并不真正控制诸如窗口显示的一些细节。对于某个特定的主机来说,当多个客户端同时连接时,所有的客户端没有按照某个特定的窗口配置来绘制窗口,而是每个客户端自己决定如何显示。屏幕上分层、显示、风格都被一个单独的程序管理,称之为视窗管理(Window Management)。
视窗管理也是用Xlib编写的程序,与普通的Xlib程序不同的是,该应用被赋予了某些特别的权限来控制窗口的分层。视窗管理允许用户移动、缩放窗口、启动新的应用和控制屏幕上窗口的层叠。公民有权利也有责任,而视窗管理则有权利却没有任何责任。视窗管理没有强制使用任何一种窗口层叠规则,由客户端确保程序使用了一个具体的规则。
窗口风格包含下面几种:The Siemens RTL tiled window manager(西门子平铺窗口管理??)除了弹出窗口外的任何窗口不允许层叠;而The twm window manager允许窗口层叠,其键盘输入消息自动传递到当前窗口之中。X特别之处在于它并未制定一个特定的视窗管理风格。它的开发者试图将其打造成自由的视窗管理风格。除了X11版本中包含的twm,独立的制造商可以编写他们自己风格的视窗管理,比如olwm(AT&T and Sun)、mwm(Open Software Foundation)。
事件
作为一个鼠标驱动的视窗系统,X客户端必须响应许多不同的事件。这些事件包括用户输入及其他程序输入。各类事件会随时产生并以各种顺序组合。它们会以发生的先后顺序依次存放在队列中。
视窗程序与传统unix和pc程序最大的不同就在于事件处理。X程序包含许多接收事件、区分事件类型、进行特定响应的函数。但与传统程序不同,X程序必须随时准备处理各种事件。
X的可扩展性
最后是X的可扩展性,扩展包含客户端和服务端两个方面。一个程序设计者并不需要对所有的扩展都提供支持。因此在使用一个扩展的特性前,必须确认程序是否支持特定的扩展。
X视窗系统软件结构
下面是视窗系统的结构图:
服务端程序运行于一个支持图形显示、键盘、鼠标的系统上。X系统包含简单的黑白和颜色处理,支持Sun, DEC, Hewlett Packard, IBM, Apple Macintosh及其他许多系统,因此,开发出来的应用应当支持所有主流的工作站系统。应用与服务端依靠Xlib进行交互。Xlib提供与display服务端连接、创建窗口、绘制图片、消息响应等功能的函数。X正式版提供xterm,xcalc,xmh,xclock等工具。
在X11中提供了很多工具包,最著名的莫过于Xt 工具包(由麻省理工学院等开发),会话工具包(由斯坦福大学开发)。工具包简化开发过程,可以帮助程序员更快捷的完成开发工作。但是,目前存在的工具包仍然需要使用Xlib代码,因此,理解Xlib可以帮助你更好的理解工具包的功能。不过请注意:使用工具包的应用比使用Xlib开发的应用要大;工具包使用了许多抽象概念,由于他们使用面向对象的方式设计,需要严格的编程约定,因此需要很长时间来学习。
下面提供了Xlib所包含的内容,
Function Group |
Description |
Chapter |
Color |
Routines to change the way colors drawn by an application are interpreted on the screen. |
Chapter 7 |
Cursors |
Routines to change the shape and colors of the image that tracks the pointer around the screen. |
Chapter 6 |
Data Management |
Several mechanisms to associate data with windows or numbers. |
Chapter 15 |
Display Connection |
Routines to connect and disconnect an application with a display, possibly across the network. |
Chapter 3 |
Display and Server Specifications |
Macros and equivalent functions are provided that provide information about a particular server implementation and the connected display hardware. |
Volume One, throughout;Volume Two, Appendix C |
Drawing |
Routines to draw dots, lines, rectangles, polygons, and arcs, and an analogous set to fill the last three. |
Chapter 6 |
Errors |
Routines to set the functions called when errors occur. |
Chapter 2 |
Events |
Routines to get input from the user, from other applications, and from the server. In X, these are collectively called events. |
Chapter 8 |
Extensions |
Routines to find out what extensions are available on a particular server and get information about how to use one. |
Chapter 15 |
Fonts |
Routines to list available fonts, load fonts, and find out their characteristics. |
Chapter 6 |
Geometry |
Routines to manipulate and translate geometry specifications. |
Chapter 13 |
Graphics Context |
Routines to set the way drawing requests are interpreted. |
Chapter 5 |
Host Access |
Routines to control access to a server from other machines connected in a network. |
Chapter 15 |
Images |
Routines to get, display, or manipulate screen images. |
Chapter 6 |
Interclient Communication |
Routines enabling any client to make available information for any other client to read. |
Chapter 12 |
Internationalization |
Functions to handle user input and draw text independent of language. |
Chapters 6, 10, and 11 |
Keyboard |
Functions to modify the way keyboard input is handled, including the keyboard mapping. |
Chapter 9 |
Pointer |
Functions to modify the way pointer input is handled. |
Chapter 9 |
Regions |
Routines to perform mathematical operations on polygonal regions. |
Chapter 6 |
Resource Management |
Routines to make managing user preferences and command line arguments easier. |
Chapter 13, Chapter 14 |
Screen Saver |
Routines to set the operating characteristics of the daemon that blanks the screen when the keyboard and pointer have been idle for a time. |
Chapter 15 |
Text |
Routines for drawing text and for determining the size of a string to be drawn. |
Chapter 6 |
User Preferences |
Routines for setting and getting the keyboard click and auto-repeat settings. |
Chapter 9 |
Window Attributes |
Routines for setting and getting the current characteristics of a window. |
Chapter 4 |
Window Life |
Routines to create or destroy a window. |
Chapter 3 |
Window Management |
Routines to allow the manipulation of windows around the screen, changing their size, their visibility on the screen, and their apparent position above or below other windows. |
Chapter 16 |
|