哈哈,一口气输入知识,只是国内关于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();
阅读(1757) | 评论(0) | 转发(0) |