学习资料来源: http://www.openismus.com/documents/clutter_tutorial/0.9/docs/tutorial/html/sec-containers.html
在一个容器内,我们可以放入新的actor(clutter_container_add函数),他的位置是根据所在容器的相对位置中确定。因此如果我们的项目涉 及的内容很多,仅用stage作为一个container是不足够的,我们需要更多的容器来组织。ClutterStage是一个container,也是clutter或者clutter widget的主容器。另一个容器是ClutterGroup,我们这里学习ClutterGroup的用法。
#include <stdlib.h>
#include <clutter/clutter.h>ClutterActor * rect, * label;
static gboolean on_stage_button_press(ClutterStage *stage, ClutterEvent *event, gpointer data){
//… … 一些触发处理
return TRUE;
}
int main(int argc , char * argv[]){
ClutterColor stage_color ={0x00,0x00,0x00,0xff};
ClutterColor actor_color ={0xff,0xff,0xff,0xB0};clutter_init(&argc, & argv);
ClutterActor *stage = clutter_stage_get_default();
clutter_actor_set_size(stage,350,350);
clutter_stage_set_color(CLUTTER_STAGE(stage),&stage_color);/* Add one group in a stage */
ClutterActor * group = clutter_group_new ();
clutter_actor_set_position(group,40,40);
//clutter_actor_set_size(group,200,200); /* 用于试验*/
clutter_container_add_actor(CLUTTER_CONTAINER(stage),group);/*Using texture instead of rect, lable will display correctly with ati display driver and clutter 1.0 */
texture = clutter_texture_new_from_file("1_flowingflying.jpg",NULL);
clutter_container_add_actor(CLUTTER_CONTAINER(group),texture);
clutter_actor_set_position(texture,150,100);/*Insert a label */
label = clutter_text_new_full ("微软雅黑 14", "您好!", &actor_color);
clutter_actor_set_position(label,150,240);
clutter_container_add_actor (CLUTTER_CONTAINER(group),label);g_signal_connect(stage,"button-press-event",G_CALLBACK(on_stage_button_press),NULL);
clutter_actor_show_all(stage);
clutter_main();
return EXIT_SUCCESS;
}
将ClutterGroup作为container是很简单的。
试验:将group的容器限制大小,看看里面部件的动态效果能否操作容器大小的限制。只要在stage的可显示范围内,即使我们限制container的大小,在使用move,rotation,scaling,clip的时候,不受group大小的限制,因此我们也可以认为对于group而且没有size的限制。
相关链接:
我的Clutter相关博客