Cairo 定义
本章我们将介绍Cairo 图形库中一些比较有用的定义。这将帮助我们更好的理解Cairo绘图模型。
Context
要用Cairo画图,首先得创建一个Cairo 上下文(context)。Cairo 上下文(context)中定义了所有的图形状态变量,它们描述了绘图是怎样完成的。其中包括信息如:线宽(line width),颜色(color)以及要绘制的图面(surface)和其他很多相关的信息。
函数gdk_cairo_create()可以为绘图区创建一个Cairo上下文(context)。
cairo_t *cr;
cr = gdk_cairo_create(widget->window);
这两行代码创建了一个Cairo 上下文(context)。在这个例子中,Cairo上下文(context)绑定到GdkDrawable。cairo_t结构包括了渲染设备的当前状态以及还未画出图形的坐标。从技术上说,cairo_t对象被称为cairo 上下文(context)。
所有与Cario有关的绘图都是由Cario_t对象来完成。Cairo上下文(context)可以被绑定到一个特别的图面(surface)上,如pdf,svg,png,GdkDrawable等等。
GDK没有包装Cairo API。它允许Cairo上下文(context)可以被用来在GDK 绘图区(drawables)上绘图。附加的函数被用来将GDK的矩形和区域转换成Cairo 路径(path),并用pixbufs作为资源进行绘图操作。
Path
路径(Path)由一条或者多条线组成。这些线由两个或者多个锚点(anchor point)连接而成。路径可以由直线和曲线组成。开放路径(Open path)和闭合路径(Closed path)是两种不同的路径(Path)。在开放路径中,起点和终点不相遇。在闭合路径中,起点和终点相遇。
在Cairo中,我们首先定义一个路径(Path),接着通过填充(filling)和描边(storking)使其可见。当调用cairo_stroke()或者cairo_fill()函数的时候,如果路径(Path)是空的,必须重新定义一个新的路径(Path)。
路径(Path)可以由子路径(Subpaths)组成。
Source
图源(Source)是我们绘图过程中的画笔。我们可以将图源(Source)比作画笔或者油墨,这样就可以绘制轮廓和填充图形。有四种基本的图源(Sourse)包括颜色(Colors),渐变(gradients),模板(patterns)和图像(images)。
Surface
图面(Surface)是绘图的最终目标。我们可以用PDF或者PostScript图面(surface)来渲染文档。
文档中提及了以下几种图面(Surfaces)
typedef enum _cairo_surface_type {
CAIRO_SURFACE_TYPE_IMAGE,
CAIRO_SURFACE_TYPE_PDF,
CAIRO_SURFACE_TYPE_PS,
CAIRO_SURFACE_TYPE_XLIB,
CAIRO_SURFACE_TYPE_XCB,
CAIRO_SURFACE_TYPE_GLITZ,
CAIRO_SURFACE_TYPE_QUARTZ,
CAIRO_SURFACE_TYPE_WIN32,
CAIRO_SURFACE_TYPE_BEOS,
CAIRO_SURFACE_TYPE_DIRECTFB,
CAIRO_SURFACE_TYPE_SVG,
CAIRO_SURFACE_TYPE_OS2
} cairo_surface_type_t;
Mask
在图源(Source)应用到图面(surface)之前,要进行一次过滤。遮罩(Mask)作为一个过滤器,决定一个图源(Source)哪部分被应用到图面(Surface),哪部分没有。遮罩(Mask)不透明的部分允许将图源(Source)拷贝到图面(surface),透明的部分不允许复制图源(Source)到图面(Surface)。
Pattern
Cairo pattern(模板)代表要绘画到图面(surface)上的source(图源)。在cairo中,你可以读取一个pattern,可以将它作为绘画操作的图源或者遮罩来使用。pattern可以是纯色,一个图面,甚至是渐变。