GDK事件与GTK signal的前世今生

博客探讨了GDK在GTK之下的角色,强调了GDK事件与GTK信号的关联。内容包括GDK基础、图形上下文理解、GDK事件类型、GTK消息流以及Gtk事件与信号的关系。通过X Window系统作为后端的例子,阐述了事件从底层到用户界面的传递过程,最终在回调函数中完成对事件的响应。
摘要由CSDN通过智能技术生成

 

 

GDKgtk的下面一层的东西,平常都用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来表示一个颜色表

  1. Gdk_widget_get_colormap:获取指定构件的颜色表
  2. Gdk_colormap_get_system:获取系统的缺省颜色表

1.2 颜色值

   GDK使用GdkColor存储RGB值和像素值。红、绿、蓝值是以 1 6位无符号整数给出的,取值范围为065535GdkColor的定义如下:


struct GdkColor
{
   gulong pixel;
像素值
   gushort red;
   gushort green;
   gushort blue;
};

在用一种颜色绘画时,必须保证:

  1. 保证像素值包含合适的值
  2. 保证颜色值在要使用的可绘区的颜色表中存在

例题:使用指定的颜色绘画的步骤


GdkColor color;

color.red = 65535;
color.green = 0;
color.blue = 0;

if (gdk_colormap_alloc_color(colormap, &color, FALSE, TRUE)) //
填充GdkColorpixel分量
{
/*
成功!
*/
}
其中,colormap为要绘画的可绘区的颜色表,此后,就可以使用该GtkColor颜色来绘画了

  1. gdk_colormap_alloc_color:根据GdkColor结构中的红、绿、蓝分量的值来查找颜色表,从中找出该红、绿、蓝分量对应的像素值并填充GdkColorpixel成员。
  2. 使用完一种颜色后,应该用 gdk_colormap_free_colors()函数将它从颜色表中删除
  3. gdk_color_parse:从颜色的名字来获取颜色对应的RGB值并填充指定的GdkColor变量

2 可绘区和pixmap

2.1 定义

  1. pixmap指的是内存中的一块图片缓冲区,可以在里面绘图,然后将该pixmap中的数据复制到显存中,这样做可以快速更新屏幕。因此,pixmap一般用来存储从磁盘加载的图像数据。在Gdk中,使用GdkPixmap来表示一个pixmap
  2. 位图指的是深度为1pixmap,在Gdk中,使用GdkBitmap来表示一个位图
  3. 可绘区指的是可以用来绘图的区域,在Gdk中,使用GdkDrawable来表示一个可绘区。可绘区包括GdkWindowGdkpixmap以及GdkBitmap(深度为1pixmap

2.2 操作

  1. gdk_pixmap_new(GdkDrawable*drawable,gint width,gint height,gint depth):创建一个pixmap
    创建pixmap时,应该使pixmap的色深与它要绘制到的目标窗口的色深相同。

    如果在其drawable参数中指定一个窗口,则色深将与指定窗口的色深相同,此时应该将depth参数设置为-1
    如果drawable参数为NULL,则必须在其depth参数中指定色深

    ============
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值