使用Moblin开发程序——Clutter之UI描述语言

作者: 方亮 (Intel) (24 篇文章) 日期: 六月 26, 2009 在 4:17 下午

在说ClutterUI描述语言之前,先说说一般情况下UI设计团队与开发团队的合作模式。通常,UI设计团队将UI设计图交给开发团队后,开发团队就开始埋头coding了。假如一切都是如此理想,那自然再好不过了。可是,光明的前途常常伴随着曲折的道路,项目中的变化是难免的。冷不防的就冒出个人来,讲客户对UI的要求不是这样这样滴,而是那样那样滴。改呗,UI团队改图,开发团队改代码,带来的工作量可不小。如果UI设计完后能自动产生UI的代码就好了。

有人就提出了UI描述语言。让UI设计人员学习这种十分简单的描述语言,将UI设计用这种语言来描述,然后通过工具就可以自动生成代码,假如UI设计发生了变化,重新生成代码也很方便。

Clutter就提供了一种UI描述语言。它的语法基于JSON——JavaScript Objective Notation。语言所描述的每一个UI元素我们都称之为”Object”——对象。每个对象至少拥有2个属性——IDTypeUI描述语言支持的对象类型十分广泛,不仅包括所有的ActorContainer,还支持Behaviour。开发人员在程序中如何使用呢?如果UI描述保存在文件里的话,先通过clutter_script_load_from_file()读取描述,然后使用clutter_script_get_object()函数通过对象的ID来获取对象。

看个简单的例子吧,定义一个100x100的红色矩形。

{
  "id"     : "red-button",
  "type"   : "ClutterRectangle",
  "width"  : 100,
  "height" : 100,
  "color"  : "#ff0000ff"
}

程序里可以这样来访问:

ClutterActor *red_button;
red_button = CLUTTER_ACTOR (clutter_script_get_object (script, "red-button"));

Behaviour也可以通过UI描述语言来定义。

{
  "id"          : "rotate-behaviour",
  "type"        : "ClutterBehaviourRotate",
  "angle-start" : 0.0,
  "angle-end"   : 360.0,
  "axis"        : "z-axis",
  "alpha"       : {
    "timeline" : { "duration" : 4000, "fps" : 60, "loop" : true },
    "function" : "sine"
  }
}

已定义的Behaviour可以在定义Actor时应用到Actor上。

{
  "id" : "my-rotating-actor",
  "type" : "ClutterTexture",
  ...
  "behaviours" : [ "rotate-behaviour" ]
}

ActorSignal同样可以被定义。

...
"signals" : [
  { "name" : "button-press-event", "handler" : "on_button_press" },
  {
    "name" : "foo-signal",
    "handler" : "after_foo",
    "after" : true
  },
],
...

最后声明一下,以上例子都是从ClutterReference Manual里抄来的,大家可以直接看http://www.clutter-project.org/docs/clutter/0.8/ClutterScript.html的描述部分,写的很详细。

分类: 移动技术

 评论 (13)

2009年06月30日 09:29


土人
对这个东西不是很懂
2009年06月30日 09:47


hzw
Intel还是好好搞你的硬件吧,你的软件没有系统的框架文档,没人会搞的
2009年06月30日 19:16

方亮 (Intel)
方亮 (Intel)总分:
2,695
状态分数:
0
棕带
我不太明白所谓的“系统的框架文档”的含义。就clutter来看,与传统的gtk相比,文档内容并不逊色,当然,和MSDN相比还是有不 小的差距。
2009年06月30日 19:16


redfly
首先,这个思想是好的,只是不知道如何把它应用到实际的代码中
问题是你事先可以确定窗口上的控件数量吗?如果是确定的,而且种类也是确定的,那这种定义当然是比较好应用,当然,我看像
ClutterActor *red_button;
red_button = CLUTTER_ACTOR (clutter_script_get_object (script, "red-button"));
这两行代码,也一样是要写到程序中的
另外,如果是窗口上的数量不定,而且种类也可能因为客户的需求的变更而改变,那还能用这样的代码吗?我看是没有那么容易的。如果是这样,程 序肯定是要修改的,既然程序要修改,那这样的定义,又有和一般的位置定义(用INI文件保存各个固定控件的位置等信息)有什么区别呢?
另外,“然后通过工具就可以自动生成代码”,我不知道要生成什么样的代码,是生成这种语言的描述代码?还是最终程序中的代码?好像是搞得更 复杂了一些
2009年06月30日 19:32


yayv
这个跟x的widget描述,或者windows的rs文件有多大的差别呢?
前两种也都是脚本,最后还不都是弄一个可视化的编辑才能用的更好吗?
2009年06月30日 19:46


wgain
说实话,这种简单的应用根本不能满足日益要求越来越高的UI需求,还有其做法谈不上什么高明之处,我们软件的UI是用VC开发的,差不多都 是这样写的。
正如楼上兄台所言,窃以为UI的开发还是要一个可视化编辑器来支撑的.
2009年06月30日 20:14

方亮 (Intel)
方亮 (Intel)总分:
2,695
状态分数:
0
棕带
首先,对于绝大多数的应用程序(不敢保证100%),大部分的UI是固定的,只有局部的UI是动态生成。这样使用UI描述语言至少可以解决 掉大部分Actor的属性设置,Behaviour设置和signal连接。如果在程序中不需要对Actor做改动的话,就用不着写诸如
ClutterActor *red_button;
red_button = CLUTTER_ACTOR (clutter_script_get_object (script, "red-button"));
的代码了。
最后,本质上说UI描述文件和INI没有区别,可能功能更丰富一些。:)
2009年06月30日 20:15

方亮 (Intel)
方亮 (Intel)总分:
2,695
状态分数:
0
棕带
同意,可视化UI编辑器十分必要。
2009年07月06日 06:26


杨一
这个早就有人用了。。。ooold
2009年07月07日 20:59


良少
这不就是javaScript的JSON吗? 和EXT如出一辙! 有兴趣!!!
2009年09月01日 08:00


阿king
没明白
2009年09月04日 03:59


pingf
clutter确实很好用
只是官方文档中囊括的不是很全面

关于json与clutter的结合,现在不知道如何用json来定义在两个轴上的翻转[官方有个例子,但使用了后发现只会在一个轴上翻转 ]
还有就是
如果json中要对某个属性进行复制,但该属性要求为一个结构体,怎样进行,
比如"rotate-center-x"
.....................
另外还发现些不是很尽如人意的地方,比如用clutter-gst时,如果用json的话,竟要求把uri属性放在前面......... .orz
2009年09月04日 04:00


pingf
clutter确实很好用
只是官方文档中囊括的不是很全面

关于json与clutter的结合,现在不知道如何用json来定义在两个轴上的翻转[官方有个例子,但使用了后发现只会在一个轴上翻转 ]
还有就是
如果json中要对某个属性进行复制,但该属性要求为一个结构体,怎样进行,
比如"rotate-center-x"
.....................
另外还发现些不是很尽如人意的地方,比如用clutter-gst时,如果用json的话,竟要求把uri属性放在前面......... .orz

 引用 (0)


 写评论  

欲获得技术支持,请访问软件支持页面.
姓名 (必填)*

电子邮件 (必填,不在本页面显示)*

您的 URL (可选)


评论*