Chinaunix首页 | 论坛 | 博客
  • 博客访问: 290256
  • 博文数量: 34
  • 博客积分: 1400
  • 博客等级: 上尉
  • 技术积分: 433
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-23 13:16
文章分类

全部博文(34)

文章存档

2011年(3)

2010年(4)

2009年(6)

2008年(21)

我的朋友

分类: LINUX

2008-11-13 10:17:51

哈哈,一口气输入知识,只是国内关于GTK的资料太少了,需要Coder们自己走下去。
 
根据设计师的设计,需要实现一些非规则的窗口(更为友好的界面)。
 
方法一:
 
直接在背景上贴图...这方法也不是不好,很容易想到,很简单。只是几乎每个窗体都有自己的背景图,因为他们不会根据标题Size而改变. 其次,对内存也很浪费,比如在800*600 LCD上,我们就需要 800*600*(32/8) 约为2M的内存空间,而且是每一个窗口都需要2M额外的内存...开销不容小嘘。
 
 
方法二:
 
在configure-event时分配和窗口Size大小匹配的Pixmap,在expose时画好并Draw上窗体。好处是可以根据标题或其他的变化动态改变背景。坏处和方法一一样,浪费内存。
 
方法三:
 
这个也和上一篇文章有共同的地方,首先分配1pix*1pix的GdkPixmap作为bg_pixmap,并设置style. 然后我们根据设计,用Cairo把整个窗体的外表面路径描述(需要移除的部分),并保存为Path. 在Expose的时候,把该路径贴上,并清除该部分内容,这样窗体就变为非规则了,移除的部分为完全透明!
 
# 画路径
cairo_new_path(cr);
// Draw the path
// .....
cairo_close_path(cr);
path = cairo_copy_path(cr);
 
# 使窗体外的地方透明
cairo_save(cr)
cairo_append_path(cr, path);
cairo_clip(cr);
cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
cairo_paint(cr);
cairo_restore();
阅读(1727) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~