English | 中文 | Русский | Français
共 497 篇文章
共 3,037 篇文章及评论
在说Clutter的UI描述语言之前,先说说一般情况下UI设计团队与开发团队的合作模式。通常,UI设计团队将UI设计图交给开发团队后,开发团队就开始埋头coding了。假如一切都是如此理想,那自然再好不过了。可是,光明的前途常常伴随着曲折的道路,项目中的变化是难免的。冷不防的就冒出个人来,讲客户对UI的要求不是这样这样滴,而是那样那样滴。改呗,UI团队改图,开发团队改代码,带来的工作量可不小。如果UI设计完后能自动产生UI的代码就好了。
有人就提出了UI描述语言。让UI设计人员学习这种十分简单的描述语言,将UI设计用这种语言来描述,然后通过工具就可以自动生成代码,假如UI设计发生了变化,重新生成代码也很方便。
Clutter就提供了一种UI描述语言。它的语法基于JSON——JavaScript Objective Notation。语言所描述的每一个UI元素我们都称之为”Object”——对象。每个对象至少拥有2个属性——ID和Type。UI描述语言支持的对象类型十分广泛,不仅包括所有的Actor和Container,还支持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" ]
}
Actor的Signal同样可以被定义。
...
"signals" : [
{ "name" : "button-press-event", "handler" : "on_button_press" },
{
"name" : "foo-signal",
"handler" : "after_foo",
"after" : true
},
],
...
最后声明一下,以上例子都是从Clutter的Reference Manual里抄来的,大家可以直接看http://www.clutter-project.org/docs/clutter/0.8/ClutterScript.html的描述部分,写的很详细。
| 2009年06月30日 09:47
hzw | Intel还是好好搞你的硬件吧,你的软件没有系统的框架文档,没人会搞的 |
| 2009年06月30日 19:16
方亮 (Intel)
| 我不太明白所谓的“系统的框架文档”的含义。就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)
|
首先,对于绝大多数的应用程序(不敢保证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)
| 同意,可视化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 |

土人