GDK是gtk的下面一层的东西,平常都用GTK的函数,很少直接调用GDK的函数。但是GTK里面的事件、信号、回调、绘制等都和GDK有直接的关系,所以需要把GDK的绘图与事件相关的内容再理一理。
我原本打算自己去分析的,baidu了几下后,我放弃了,有分析的很好的文章有助于理解GDK的事件和绘图,下面几个是不错的分析,你们可以点击链接去看。后面我也放了几个汇总,方便些。第5部分的网友分析的非常不错。
1. GDK基础:
http://hi.baidu.com/phoenix20080808/blog/item/d2515519ec73f64043a9ada6.html
2. 图形上下文
http://blog.csdn.net/hahapro/archive/2007/07/25/1708132.aspx
3. GDK 事件类型
http://www.huihoo.org/gnu/gtk2-tut/a2711.html
4. GTK的消息流说明(X Window做后端的情况)
http://blog.csdn.net/absurd/archive/2006/03/08/619170.aspx
5. Gtk事件与信号关系
http://blog.csdn.net/c_spark/archive/2009/05/06/4155958.aspx
1. GDK基础
1 颜色表和颜色 1.1 颜色表 在X窗口系统中,像素值代表在一个颜色查找表中的入口,这是为了使系统能够具有多种显示模式(8位,16位)。例如:考虑一种八位的显示模式:八位不足以做为显示中的颜色编码,只能为很少部分的RGB值编码,显示时,系统将像素值用作索引,从颜色表中找出其对应的RGB值来显示像素。这个颜色表称为colormap。有时,我们可以修改颜色表以包含要使用的颜色(一些colormap是只读的,不能被修改)。在Gdk中,用GdkColormap来表示一个颜色表
- Gdk_widget_get_colormap:获取指定构件的颜色表
- Gdk_colormap_get_system:获取系统的缺省颜色表
1.2 颜色值 GDK使用GdkColor存储RGB值和像素值。红、绿、蓝值是以 1 6位无符号整数给出的,取值范围为0到65535GdkColor的定义如下: struct GdkColor {
gulong pixel; 像素值 gushort red; gushort green; gushort blue; }; 在用一种颜色绘画时,必须保证:
- 保证像素值包含合适的值
- 保证颜色值在要使用的可绘区的颜色表中存在
例题:使用指定的颜色绘画的步骤 GdkColor color;
color.red = 65535; color.green = 0; color.blue = 0;
if (gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE)) //填充GdkColor的pixel分量 {
/* 成功!*/ } 其中,colormap为要绘画的可绘区的颜色表,此后,就可以使用该GtkColor颜色来绘画了
- gdk_colormap_alloc_color:根据GdkColor结构中的红、绿、蓝分量的值来查找颜色表,从中找出该红、绿、蓝分量对应的像素值并填充GdkColor的pixel成员。
- 使用完一种颜色后,应该用 gdk_colormap_free_colors()函数将它从颜色表中删除
- gdk_color_parse:从颜色的名字来获取颜色对应的RGB值并填充指定的GdkColor变量
2 可绘区和pixmap 2.1 定义
- pixmap指的是内存中的一块图片缓冲区,可以在里面绘图,然后将该pixmap中的数据复制到显存中,这样做可以快速更新屏幕。因此,pixmap一般用来存储从磁盘加载的图像数据。在Gdk中,使用GdkPixmap来表示一个pixmap
- 位图指的是深度为1的pixmap,在Gdk中,使用GdkBitmap来表示一个位图
- 可绘区指的是可以用来绘图的区域,在Gdk中,使用GdkDrawable来表示一个可绘区。可绘区包括GdkWindow、Gdkpixmap以及GdkBitmap(深度为1的pixmap)
2.2 操作
- gdk_pixmap_new(GdkDrawable*drawable,gint width,gint height,gint depth):创建一个pixmap
创建pixmap时,应该使pixmap的色深与它要绘制到的目标窗口的色深相同。 如果在其drawable参数中指定一个窗口,则色深将与指定窗口的色深相同,此时应该将depth参数设置为-1。 如果drawable参数为NULL,则必须在其depth参数中指定色深
============
|