Clutter 布局管理
Clutter Actor 的位置与尺寸约束

Clutter 的脚本

Garfileo posted @ 2011年7月21日 19:33 in Clutter 笔记 with tags clutter , 3208 阅读

Clutter 提供了 JSON 格式的脚本机制,以便程序员或用户能够灵活定制场景图。本文通过对 [1] 中的的单一布局的示例基于 Clutter 脚本的形式进行改写,聊表 Clutter 脚本功能的基本用法。

分析 [1] 中单一布局示例所构建的场景图,可得到以下结构:

stage
     ----> box
             ----> rectangle
             ----> text

即场景包含着一个盒子,盒子又包含了矩形和文本。

这个场景图使用 JSON 文本可描述为:

[
  {
    "id" : "stage",
    "type" : "ClutterStage",
    "title" : "Hello Text Frame!",
    "width" : 400,
    "height" : 200,
    "color" : "#21435eff",
    "children" : [ "box" ]
  },
  {
    "id" : "box",
    "type" : "ClutterBox",
    "width" : 400,
    "height" : 200,
    "layout-manager" : {
      "type" : "ClutterBinLayout",
      "x-align" : "center",
      "y-align" : "center"
    },
    "children" : [
      {
        "id" : "rectangle",
        "type" : "ClutterRectangle",
        "width" : 200,
        "height" : 100,
    	"color" : "#21435eff",
        "border-width" : 4,
        "border-color" : "#a00000ff"
      },
      {
        "id" : "text",
        "type" : "ClutterText",
        "text" : "中国人指望政府\n美国人指望 X 战警",
        "line-alignment" : "center",
        "color" : "#ffe6e6ff"
      }
    ]
  }
]

假设上述 JSON 文件为 bin.json,那么可使用下面的程序载入该文件,并实现其中所记载的场景图。

#include <clutter/clutter.h>

int
main(int argc, char *argv[])
{
        if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
                return 1;

        gchar *filename = "bin.json";
        ClutterScript *ui = clutter_script_new ();
        clutter_script_load_from_file (ui, filename, NULL);

        ClutterActor *stage;
        clutter_script_get_objects (ui, "stage", &stage, NULL);
        clutter_actor_show_all (stage);        

        clutter_main ();
        
        return 0;
}

程序运行结果与 [1] 中的单一布局示例相同。

Clutter 的 JSON 文件中各个 Actor 的属性字段都可以在 Clutter 参考手册中找到。剩下的事情,你懂的……

参考文献

[1] Clutter 布局管理

转载时,希望不要链接文中图片,另外请保留本文原始出处:http://garfileo.is-programmer.com

  • 无匹配
pingf 说:
2011年7月22日 12:30

原先玩clutter时一直有个疑惑就是,用json配置文件创建的元素是怎么分配内存的,
如果分配到堆上,其会自动free么?如果不会,怎么去free掉....

Avatar_small
Garfileo 说:
2011年7月22日 12:55

@pingf: clutter 用的是 json-glib 来处理 json 文件。json 文件中定义的 actor 都会被序列化为 gobject 对象,然后使用 gobject 那套内存管理方案。

Avatar_small
pingf 说:
2011年7月22日 23:23

@Garfileo:
刚又看了下script_new出来的应该还是在堆上分配的,不用的时候还是要用g-object-unref一下才能完成析构....


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter