如何设置不规则窗口GTK

来源:互联网 发布:苹果app软件开发 编辑:程序博客网 时间:2024/05/23 00:47

为了体现高度的可制定性.

对于GTK来说,肯定可以实现不规则的窗口.

但是如何实现呢?

在网上找到了一些资料.主要是用透明的图片来实现的.

下面我们来分析一下实现的过程.

 

pixbuf = gdk_pixbuf_new_from_file("./1.png",NULL);

gdk_pixbuf_render_pixmap_and_mask(pixbuf,&pixmap,&bitmap,128);

image = gtk_image_new_from_pixbuf(pixbuf);

gtk_container_add(GTK_CONTAINER(window),image);

pixmap = gdk_pixmap_new(image->window,gdk_pixbuf_get_width(pixbuf),gdk_pixbuf_get_height(pixbuf),-1);

gdk_pixbuf_render_to_drawable(pixbuf,pixmap,image->style-fg_gc[GTK_STATE_NORMAL],0,0,0,0,gdk_pixbuf_get_width(pixbuf),gdk_pixbuf_get_height(pixbuf),GDK_RGB_DITHER_NORMAL,0,0);

g_object_unref(pixbuf);

 

上面这些语句基本完成了对透明图像处理,形成不规则窗口的过程。

下面我们逐步分析。

 

pixbuf = gdk_pixbuf_new_from_file("./1.png",NULL);

创建一个新的pixbuf通过从文件中读取图像。第二个参数是出错处理的,可以不管。第一个参数是图像文件的名字。一般来讲我们把这个文件做成想要的形状,不需要的地方设置成透明的,一般用PS或者GIMP来处理。

gdk_pixbuf_render_pixmap_and_mask(pixbuf,&pixmap,&bitmap,128);

创建一个pixmap和bitmap,通过第二第三个参数返回。并且设置与pixbuf相同的透明度。这个函数只是一个转换函数。

image = gtk_image_new_from_pixbuf(pixbuf);

通过pixbuf创建一个image。

gtk_container_add(GTK_CONTAINER(window),image);

要显示image。

pixmap = gdk_pixmap_new(image->window,gdk_pixbuf_get_width(pixbuf),gdk_pixbuf_get_height(pixbuf),-1);

创建一个pixmap用给出的大小和深度。

gdk_pixbuf_render_to_drawable(pixbuf,pixmap,image->style-fg_gc[GTK_STATE_NORMAL],0,0,0,0,gdk_pixbuf_get_width(pixbuf),gdk_pixbuf_get_height(pixbuf),GDK_RGB_DITHER_NORMAL,0,0);

这个函数应该用gdk_draw_pixbuf代替。

让pibuf变得可绘图。

g_object_unref(pixbuf);

减少一个pixbuf的引用计数。

gdk_window_set_back_pixmap(image->window,pixmap,FALSE);

设置窗口的背景图片。

原创粉丝点击