XClient和XServer
XWindow为一Client-Server架构之GUI。Client指的是在XWindow下执行的应用程式,需要XServer为其服务;Server指的是整个管理你的桌面的XWindow系统,称为XServer。XServer除了负责GUI介面之管理和提供Client端的服务之外,并且还管理系统资源(Resource)和事件(Event)之发生和传递。
Display和Screen
在一个XWintowSystem可以包含多个Screen,而Screen则是一个实际的Monitor或是Device。每个Display则可以包含多个Screen。Display指的是一群Screen和一个pointer(一般是滑鼠)加上一个键盘的集合。
Event和Request
当Client需要在显示幕上开一个window或是显示一段文字或图形时,则Client(即X下的应用程式)向Server提出一个Request;Server收到Request之後,则依据Request的内容,提供相对应的服务。当使用者在属於某一Client的window内,按了一下滑鼠的右键,或是敲了键盘上的一个Key,则Server会发送一个Event给该Client。而Client只要依据Server送回来的Event,即可判断有何事件发生,然後依据所发生的Event发生相对应的动作。
XWindow的网路特性
Client和Server不一定要在同一部电脑上执行;Client和Server可以是接在网路上的两台电脑。当Client要向Server发出Request时,可以透过网路向执行Server的机器发出Request,然後送达给Server处理。同样的,当Server要向Client通知Event的发生时,也可以透过网路向Client传送。因此你可以在A地的电脑上执行某一XWindow应用程式,而在B地透过XServer观察程式执行的结果。
一个XWindow的程式,也就是Client,在同一时间可以和一个以上的Server沟通。也可以同时和多个Server建立连接,在多个Server上显示,并接受多个Server的讯息。而XServer也可以在同时间内,接受多个Client送来的讯息,并做对应的处理。
Window的阶层性
XWindow内的window是有阶层关的,这阶层关可以画成一树状图。在树状的最上层是rootwindow,这个window是Server所特有的。除了rootwindow之外,每个window都有一个parentwindow,即是在树状图上的上一层window。在树状图的下一层window称为childwindow。每个window可以有多个child,但不一定每个window都有child。而childwindow下面还可以有child。Win1和Win2皆为root的child,root则为Win1和Win2的parent。Win2-1和Win2-2和Win2-3则为Win2的child,Win2则为Win2-1和Win2-2和Win2-3的parent。而root和Win1和Win2则皆为Win2-1和Win2-2和Win2-3的ancestor。而root则为Win1和Win2的ancestor。
在显示幕上,child永远在parent上面(即parent被child盖住)。而childwindow可以比parentwindow大,但超过parent的部份,会被截掉而不显示在显示幕上。
蓝色部分为parentwindow,而草绿色部分则为childwindow和parentwindow重叠的部分。在parentwindow外面灰色部分也为childwindow的一部分,但其为超过parentwindow视窗围之外的部分,所以不会被显示出来。草绿色部分则是显示childwindow的内容。
当显示幕上有多个window存在时,可能会发生window重叠的现象。而在下面的window会被在上面的window盖掉;当上面的window移离目前位子,而使原本被盖的部分重新暴露出来,这时就必需重画露出来的部分。但X并不保证会保存你原本显示在window上的资料。因此这时Client就必需负起重画的责任了。当XServer没保存重新被暴露出来的部份的资料时,XServer会送出ExposeEvent给Client,通知Client那些部分需要重画。然後Client就必需决定是否要重画,或是采取其它的处理方式。
XWindow的外观
在很多的GUI中,如OS/2等,都会提供Button,ScrollBar,Menu等等的基本元件,以方便建构程式的外观。但在X中并不提供这样的元件;相反的,XWindow提供的是一套建立外观风格的机制。利用这套机制,我们可以建立各种不同风格的元件。这样我们即不必限制在系统内定的风格中,而无法做改变。这套机制是用大小不同的window,组合建立如Button,ScrollBar等等的元件,充满了弹性。
WindowManager
在X中有一种极为特殊的程式,称为WindowManager。其作用是管理Desktop上的各应用程式的window,并提供特殊风格的window外观。不同的WindowManager有不同的外观风格。因此,我们可以更换不同的WindowManager,以得到不同风格的window外观。而一般的Client则必需和WindowManager合作,以得到良好而一致风格的window。WindowManager也是一Client程式,和一般的Client相同。只是WindowManager负有特别的任务;管理Desktop和window外观。
为了得到良好而风格一致的window,Client和WindowManager必需合作。其合作方式是透过由Client传送Hint给WindowManager,而WindowManager以後,则会参考Hint的内容,给予应用程式所开出的window适当的外观。但WindowManager不一定会依据Hint指示处理,纯为参考。
阅读(1407) | 评论(0) | 转发(1) |