| 苹果开发人员技术文档连载之-系统架构(5) |
| 责任编辑:admin 更新日期:2005-8-6 |
|
|
Quartz的Quartz 2D部分是提供图形渲染服务的图形库之一。它是为展现二维文本和图形所设计的。图形和多媒体库包括
·渲染二维图像的QuickDraw
·既可以渲染二维图像也可以渲染三维图像的OpenGL
·表现数字视频流和其他多媒体的QuickTime
QuickTime是一种交互式多媒体环境,具有图形环境和应用程序环境上的功能和特性。尽管考虑到它在Mac OS X架构中所处的混合状态,但是在这一节中,作为简单的概括,我们仍将把它看作为是与Quartz 2D、QuickDraw和OpenGL地位同等的图形库。
所有的渲染库都直接依赖于Quartz的另外部分,即Quartz Compositor层。然而,QuickTime和OpenGL却几乎不依赖于Quartz Compositor层,因为它们有它们自己的某种特定视窗实现机制。
Quartz Compositor由Mac OS X视窗服务器和由它所实现的(当前私有的)系统编程接口(SPI)来组成。视窗服务器对显示和窗口全面负责,其中包括它们的合成、配置和基本管理。同时,它也执行低级别的指针管理和事件路由。
很大程度上Quartz是在核心图形框架(CoreGraphics.framework)中实现的。如图3-4所示,这一框架中的动态共享库,包含客户端API和服务器SPI,其中服务器SPI是由视窗服务器自身实现的。应用程序或应用程序环境与Quartz 2D库的客户方相链接,这些库用于渲染屏幕、生成PDF和其它服务。所有对服务器SPI的访问都是由客户端API来转交的。
在某种程度上,Cocoa环境和Java环境为访问Quartz 2D和其它渲染库提供了它们自己的编程接口。您既可以使用Cocoa和Java接口,也可以使用在应用服务层上的编程接口。
这一节的余下部分所讨论的是,在图形和视窗环境下的Quartz所扮演的角色。关于QuickDraw、QuickTime和OpenGL的概念内容请参考相关的Apple开发文档(developer.apple.com)。
Quartz Compositor
Mac OS X的Quartz Compositor层由视窗服务器和由视窗服务器所实现的(私有的)系统编程接口(SPI)所组成。这一层负责对初始屏幕显示、视窗合成与管理、事件路由和指针管理进行响应。
视窗服务器是一个单独的系统范围内的进程,用于协调低级别的视窗动作,并强制保持在屏幕上所显示视窗的基本一致性。它是一个轻量级的服务器,因为它自己不能进行渲染,但可以与位于其上层的客户图形库进行通讯。从绘画模型方面来说,它是“不会发表意见的”。
视窗服务器与其它系统服务和库几乎没有依赖关系。它依赖于内核环境中的I/O Kit(尤其是,用I/O Kit构建的设备驱动程序),为的是与框架缓冲器、输入设备的底层结构和输入输出设备进行通讯。它也与核心服务的某些框架相链接,以获取进程管理服务,如基本进程的激活。
视窗服务器的一个首要职责是视窗合成。当视窗在被绘制、被重画、覆盖和被覆盖时,由它来合成每一个应用程序的视窗像素。每个视窗都被描述成一幅位图,它包括了半透明(alpha通道)和抗锯齿信息。位图作为缓冲器允许视窗服务器去“记住” 一个应用程序的视窗内容,并在不干涉应用程序的情况下将它进行再合成。然而,视窗服务器(Quartz Compositor)没有记忆那些被图形库(例如Quartz 2D)用来创建视窗和其它图象的矢量信息。取而代之的是,位图被应用程序和视窗服务器所共享,应用程序直接对共享位图进行绘画操作,并相应地由视窗服务器来合成该位图。
在它的Quartz Compositor组件中,Quartz以一个分层式的合成引擎来作为视窗系统的模型。传统的视窗系统使用"交换"模型,在这个模型中屏幕上的每一个像素完全属于一个视窗(或桌面)。因为这种模型,转变就必然很突然;举个例子来说,当您关闭一个视窗时,它会立刻消失。在另一方面,一个分层式合成视窗系统基于“图像(视频)混合”模型。在这个模型上,屏幕中的每一个像素都能够被视窗和视窗间实时共享(尤其是在半透明和抗锯齿特性上)。这种模型允许平滑地在图形用户界面的状态间进行转换,这是Aqua体验所带来的与众不同的特性之一。
Quartz 2D
Quartz的Quartz 2D是一个具有矢量特性的图形库。它的API允许您通过指定一系列命令和数学程式来生成文本与图像。这些命令和程式用来在二维空间内绘制线段,几何形状,颜色,阴影,半透明效果和其它图形属性,而您无需为每一个特定像素指定属性。作为结果,一个几何形状可有效地以一系列路径和属性的方式来定义,而不是以位图的方式来定义。
通过使用矢量,Quartz 2D也能使用一种坐标系来作为绘画的参照,比方说这种坐标系是以英寸或厘米为单位的,而不是基于像素栅格。这种坐标体系很灵活,允许不同的度量标准,并且当它不与任何一个屏幕分辨率绑定时,它具有一定程度的显示独立性。它还使用了浮点坐标。优先于Quartz Compositor的合成,Quartz 2D把以坐标系来表现的矢量图像信息转化为像素值。
Quartz 2D API是设备独立的,这意味着,绘画操作的最终目的文件可以是窗口位图,也可以是可移植文档格式(PDF)文件、PostScript文件或其它输出格式。当使用QuickDraw或其它输入机制来显示PDF文件时,应用程序可以直接或间接地调用Quartz 2D API。
用于Quartz 2D的主要输入方式是由QuickDraw和本机C API所生成的绘画命令和程式。(将来,更多的前端API可能会被支持)使用QuickDraw的应用程序可以通过CGContextRef接口来调用Quartz 2D,从而获得它的功能。而QuickDraw使应用程序可以由GrafPort接口来得到CGContextRef。
来自QuickDraw或本机API的命令和程式被即刻转换为所需的输出格式,这些输出格式既可以是屏幕渲染的位图数据、PostScript(PostScript打印机的打印数据格式),也可以是其它类型打印机的光栅数据。打印预览时,还可以自动发布PDF。将来,更多的后端转换器可能会被支持,例如:绘图仪。
正如前一段所提出的,Quartz 2D是Mac OS X打印系统的底层引擎。打印工作常常被分成二个步骤。Quartz 2D用于解释那些由本机C或QuickDraw API所构建的文本和图形,并将它们保存为PDF格式(主要的脱机打印格式)。这时,PDF可再次通过Quartz 2D,将其转换为适当的输出格式。
打印系统
Mac OS X打印系统为Macintosh开发人员提供了一个灵活而强大的全新打印环境。这种体系结构有利于应用程序开发人员在他们的程序中更好地提供对打印功能的支持,同时也有利于打印机供应商编写驱动程序和扩展打印对话框。Mac OS X的打印系统有着许多优于Mac OS 8和9的优点,包括如下:
·打印系统使用Quartz 2D进行渲染和转换服务。Quartz 2D支持具有独立分辨率的PDF绘画模型,允许应用程序在所有级别的光栅和PostScript打印机上的进行高品质和经过颜色管理的打印件输出。
·漂浮对话框允许同时打开多个打印对话框,并向一个打印机队列中发送多个打印作业。
·打印对话框可以由打印对话框扩展来定制。页面设置对话框可以由应用程序开发人员来扩展,同时打印机供应商及应用程序开发人员都可以扩展打印对话框。
·打印机模块代替了打印机驱动程序。打印机模块要比打印机驱动程序更易于编写,因为驱动程序中的大量代码现在已经为您预先编写好了,它们被存放在苹果公司所提供的I/O模块和打印系统的一些其它部分中。
·打印应用程序编程接口(API)包含对Carbon应用程序的强健支持。Carbon开发人员可以编写一个能在Mac OS X中运行的应用程序,同时它也能在Mac OS 8和9中运行。Cocoa开发人员通过使用Cocoa对象和方法来支持打印功能。Cocoa方法调用了Carbon打印管理器API.
这个全新打印系统在设计上的一个关键之处在于它对Carbon应用程序的强健支持。由于Mac OS X中的Carbon打印管理器与Mac OS 8和9中的打印管理器一样被很好的支持,所以正如预期的那样,Carbon应用程序能够在两种环境中执行相同的打印任务。举个例子来说,当运行Mac OS 8或Mac OS 9时,应用程序使用传统的用户界面和驱动程序;而在Mac OS X中,应用程序将自动利用到新打印系统中更为一致、灵活的打印对话框和打印架构。
打印系统的用户界面
Mac OS X打印系统的用户界面为执行打印相关任务提供了一个一致和易于使用的环境。这些 打印相关任务包括:查找本地和网络打印机,配置新打印机,选择打印机和管理打印作业。新打印系统的人性化接口允许用户处理简单的日常打印任务,和复杂的、多文档的、多打印机的打印作业。
打印系统的用户界面由以下部分组成:
·打印中心 允许用户查找、选择和配置可用的打印机,并确定与各打印机相联系的打印作业状态。
·页面设置对话框 允许用户指定所要打印文档的格式。
·打印对话框 允许用户指定打印作业的参数,并在指定的打印机上进行文件打印。
·简化打印对话框 允许用户指定常用的打印作业参数,而无需逐个浏览打印对话框中的各个设置面板。
相对于Mac OS 8和9的打印模型来说,在易用性和稳定性方面,新打印系统的接口包含了许多重要的改进。在处置打印机时,以前的Chooser(选配器)容易让用户混淆了大部分的公共资源,现在Chooser被Print Center(打印中心)所替代。打印中心结合了许多Chooser和桌面打印的功能特性,组成为一个独立的集成化接口。与Chooser不同,打印中心是一个独立于Finder的单一应用程序,它不再需要用Finder来支持打印接口,并简化了代码,提高了系统稳定性。针对所有的打印机,页面设置和打印对话框被充分标准化。而且,新打印系统允许通过第三方定制来方便地进行打印功能扩展。
打印架构概要
Mac OS X打印架构由9个模块组成。从概念上来说,这些模块可以被分为客户端模块和服务器模块。应用服务框架和Carbon框架组成客户端模块,为应用程序提供绘画和打印API。打印中心和可选的打印机浏览器模块在打印循环中处理客户响应。余下的5个模块,打印模块服务器、打印作业管理器、转换器、打印模块和I/O模块,组成打印系统服务器的后端,它从本地客户端接受打印作业并把它们交给目标打印机。
·Carbon框架 实现了可供应用程序使用的Carbon打印管理器API。用于显示打印和页面设置对话框,从应用程序取得绘画信息,并把打印数据传递给打印服务器。
·应用服务框架 包含用于Carbon、Cocoa和BSD UNIX应用程序的通用打印功能。这一框架不实现任何打印对话框界面,但这些界面会在Carbon框架中得到实现。
·打印对话框扩展(PDE) 通过它对打印或页面设置进行扩展,并让第三方添加用户界面元素来支持特定的打印机。PDE与打印机模块或Carbon应用程序相对应,它对由PDE提供的用户设置进行解释和应用。
·打印中心 允许用户查找和选择打印机,也可以控制和获取打印作业的状态信息。
·打印机浏览模块(PBM) 通过添加对其它打印连接方式(例如SCSI和FireWire)的UI支持,扩充了打印中心的功能。PBM与I/O模块相对应,该模块实现了对传送类型的支持。
·打印服务器 处理从应用程序中发出的打印作业队列。对打印中心的请求进行响应,处理或返回队列中的打印作业的状态信息。
·打印作业管理器 管理着那些能把单个打印作业转换成最终打印输出的不同进程。打印作业管理器宿主于打印模块和I/O模块。
·转换器 一个可选模块,通过转换打印作业的数据格式,来协助打印作业管理器。举例来说,一个转换器可以把PDF转换成光栅格式。
·打印模块 用于格式化打印机数据(例如:PostScript或PCL),处理打印机状态和错误状况。打印机模块一般由打印机供应商提供,以支持一台或一系列特定的打印机。
·I/O模块 为一种传输类型实现一个标准接口。苹果公司为NetInfo、USB、TCP/IP和AppleTalk提供了I/O模块。第三方也可以创建支持其他传输类型的模块。
·作业券(Job ticket) 包含所有控制打印作业所必需要的参数。由应用服务框架中的打印功能来控制作业券的创建。在打印过程的每一个步骤中,特定组件会更新作业券的状态。
打印机搜索
在用户选择打印机之前,打印中心必须首先列出有效的打印机。通过打印中心查找可用打印机的过程被称为“打印机搜索”。
在打印机搜索过程中,打印中心列举出所有安装在/System/Library/Printers和/Library/Printers目录中的I/O模块和打印机浏览器模块。打印服务器把从打印浏览器模块中得到的对不同连接类型的字符串描述传递给打印中心,打印中心则把这些字符串显示在关于连接类型的弹出式菜单中。
当用户选择一个连接类型时,打印中心列出所有安装在/System/Library/Printers和/Library/Printers目录中的打印模块,并询问每个打印机模块是否支持用户所选择的连接类型。如果支持的话,打印中心会从中查找信息。在搜索被支持连接类型的打印机时,打印机浏览器模块使用此信息作为搜索标准,并且在屏幕上显示这些信息。
当用户点击某个打印机,以把它添加到打印机列表中时,打印中心从打印机浏览器模块中得到该打印机的地址、图标和打印机模块信息。接着,打印中心使用此信息来生成一个新的打印队列,并将该打印机添加到列表中。
打印过程
一个应用程序把关于一个打印作业的信息存储在一个或多个打印对象中。打印对象包含了关于打印作业的信息,例如纸张大小和纸张来源,并且用于给打印服务器传送信息。打印系统提供了对默认的打印对象进行访问的功能,并可由应用程序对该打印对象进行修改。页面设置和打印对话框使用打印对象来获取对当前打印作业的用户设置。
在用户需要打印时,应用程序会显示页面设置和打印对话框。应用程序使用了Carbon框架中的函数以显示这些对话框。Carbon应用程序能够利用打印对话框扩展(PDF)来扩展对话框。打印对话框扩展让Carbon应用程序可以定义一些可选项目,用于指定应用程序的绘画环境,例如自定义页面布局。
当用户关闭打印对话框时,应用程序 [1] [2] [3] 下一页 |
|
| 上一篇文章: 苹果开发人员技术文档连载之-系统架构(4) |
| 下一篇文章: Mac上使用AirCard 750GPRS无线网卡全攻略 |
|
|
|
|