Cairo是一个2D图形库,支持多种输出设备。
支持的输出目标包括X Window,Quartz,Win32,image.buffers,PostScript,PDF和SVG文件输出。
后续支持OpenGL,XCB,BeOS,OS/2操作系统和DirectFB。
Cairo的目的是同一输出在不同的输出媒体上,同时能利用硬件加速器。
主要优点:在X、Win32、Quartz的基础上统一了图形库的操作方式,同时支持PS、PDF、SVG、PNG/JPEG等图像格式的输出,方便页面的再次利用,在glitz的支持下支持部分3D效果。
gtk使用cairo在窗口或者控件上绘图,需要注意以下几点:
- 绘图目标是GdkDrawable,Drawable,顾名思义,是支持在其上绘图的东西,是GdkWindow或GdkPixmap 对象。对于gtk控件,它们是结构体,一般是它的window属性
- 使用gtk_widget_set_app_paintable()方法将控件设置为可绘图
- 绘图过程写在"expose-event"事件的回调函数中
- 如果窗口里有其它控件,回调函数必须返回FALSE,否则窗口里的控件会被绘图覆盖
- 控件必须得到显示才能被绘制,否则会在运行时报错IA__gdk_cairo_create:gdk_cairo_create: assertion `GDK_IS_DRAWABLE (drawable)’ failed
源代码: