去年对intel收购o-hand的关注,让我了解到o-hand除了matchbox,poky之外一个新的项目:clutter,但是没有screenshot,同时又是黑色略显单调的主页,怎么也无法与其可以打造绚丽2D/3D效果的能力联系起来,所以也没有引起太多的注意。后来,openmoko的UI Improvements中再次提到,才让我重新对它有了兴趣。概况的说,clutter之于OpenGL/GLX,就像GTK之于Xlib/X。
对clutter的学习还不是很深入,写写个人的体会吧。clutter感觉有点像flash,通过ClutterTimeline 和ClutterBehaviour 控制对象的行为。clutter虽然有c编写,采用与GTK类似的面向对象编程。ClutterActor是所有对象的基类,在一个应用中必不可少的是ClutterStage,继承自ClutterActor,它是所用acter的舞台。莎士比亚说“全世界是一座舞台,所有的男人女人不过是演员”,这句话很好的表现了这点。与动画相关的有:ClutterTimeline设定fps和持续时间;ClutterAlpha不是透明度的处理,是和时间相关的函数,具体的含义不是很能表达清楚;ClutterBehaviour设定acter的动作。
下面是用clutter的python绑定改写的clutter-tutorial一个例子。首先glob遍历目录下的图像文件,然后建立用于显示的list(暂定9个,旋转等比较容易计算),为每个可显示的图像添加动画效果(就是加入一个椭圆的动作),添加按键等事件响应,至此tutorial的例子基本用python实现。添加控制栏(屏幕下方),用动画效果实现鼠标划入,控制栏从底层动态划出等。最后添加了背景,用cario实现。一个图片浏览器就基本完成了,当然还有很多需要完善的地方,比如右键切换背景,改变椭圆的现实模式的等。截图如下:
用python主要是简单,懒得的写c了。有兴趣的朋友可以试试clutter,蛮好玩的,而且个人认为还是比较有前景的。