LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2263|回复: 2

Gtk的widget是如何画出来的

[复制链接]
发表于 2009-9-17 11:13:42 | 显示全部楼层 |阅读模式
我原来直观的以为(发文之时纠正过来),gtk的widget是通过调用gdk_draw_line之类的函数来完成的。其实,为了支持theme engine以及为了减少theme跟gdk层之间的耦合。Gtk的设计上所有的widget都是通过gtk_paint_box之类的函数画出来的。而这些函数其实只是GtkStyleClass的函数指针,其真正的实现处于每个theme engine之中。
通过这样一种架构,gdk和gtk之间的耦合也减少了,对gdk层的调用就只涉及到了跟窗口系统相关的功能,如窗口的大小,位置的改变,窗口的stack顺序的改变,最大化,最小化这些。而具体绘制widget的工作就交给了theme engine。这些个engine就可以由艺术家们精心打造,也可以让技术精英们施展各种各样强大的技术手段。比如cairo,opengl等等。
这是个相当好的设计,可惜的是,gtk本身却画蛇添足的增加了一些针对不同widget的style property例如gtkbutton的inner-border等等,这些东西的加入,束缚了艺术家们的思想,他们用theme画出的东西,往往因为这些个属性的变化而得到了不好的结果。
还有一个不够革命的地方是,widget里面的text仍然是gtk自己去画的。而theme则无权去干涉,似乎也准备让艺术家们继续戴脚镣跳舞。
就没有完美的东西,缺憾只能在人们包括我们自己不断的努力中再加以完善,历史上人类靠此而进步。
 楼主| 发表于 2009-9-19 21:58:57 | 显示全部楼层
在gtk devel mailing list问了gtk+的设计上的考虑之后,Thomas Wood给我一个回答,就是theme engine可以通过gtk_paint_layout来画text,所以我对text的看法是片面的。
回复 支持 反对

使用道具 举报

发表于 2009-12-7 16:30:57 | 显示全部楼层
不错。。。又了解到一些未知信息。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表