学习资料来源于:http://www.openismus.com/documents/clutter_tutorial/0.9/docs/tutorial/html/sec-stage.html
安装Clutter开发包后,在Makefile中使用相关资源:
[wei@wei clutter]$ pkg-config clutter-1.0 --cflags
-pthread -I/usr/include/clutter-1.0 -I/usr/include/cairo -I/usr/include/pango-1.0 -I/usr/include/gtk-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
[wei@wei clutter]$ pkg-config clutter-1.0 --libs
-pthread -lclutter-glx-1.0 -lpangocairo-1.0 -lgthread-2.0 -lrt -lgdk_pixbuf-2.0 -lGL -lX11 -lXext -lXdamage -lXcomposite -lpango-1.0 -lcairo -lgobject-2.0 -lgmodule-2.0 -lglib-2.0 -lXfixes
我们可以之用 pkg-config clutter-1.0 --cflags 和 pkg-config clutter-1.0 --libs。例如:gcc -Wall -g example.c -o example `pkg-config clutter-0.9 --cflags --libs`
下面是我们的Makefile程序,这也将用于以后的学习中
TARGET = stage
stage:
gcc -Wall -g stage.c -o stage `pkg-config clutter-1.0 --cflags --libs`
all:
stage
clean:
rm $(TARGET)
不在罗嗦,下面是例子程序stage.c,他打开一个200*200的小窗口,并对鼠标点击进行callback,返回点击坐标。Clutter的命名有些特别,它使用了stage(舞台)和actor(演员)的关系。这里我们先学习舞台。莎士比亚说:全世界是一座舞台,所有的男人女人不过是演员。这个用于clutter非常合适。
#include <clutter/clutter.h>
#include <stdlib.h>
/* 这是Callback函数 */
static gboolean
on_stage_button_press (ClutterStage *stage, ClutterEvent *event, gpointer data)
{
float x = 0;
float y = 0;
clutter_event_get_coords (event, &x, &y);
g_print ("Event: %d(%s) , Stage clicked at (%f, %f)/n", event->type,
event->type==CLUTTER_BUTTON_PRESS ? "CLUTTER_BUTTON_PRESS" : "", x, y);
return TRUE; /* Stop further handling of this event. */
}
int main(int argc, char * argv[])
{
/*最后一个参数表示alpha参数,前面三个一次是红绿蓝。 */
ClutterColor stage_color ={0x00,0x00,0x00,0x0f};
/* 这是Clutter的初始化,在使用Clutter之前,必须调用此函数*/
clutter_init(&argc, &argv);
/* 所有的Clutter应用都至少包含一个ClutterStage。Stage含有的Actors例如rectangles,images,text。*/
/* Get the stage and set its size and color*/
ClutterActor * stage = clutter_stage_get_default ();
clutter_actor_set_size (stage, 200, 200);
clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color);
/* 下面函数用于显示stage,Show the stage: */
clutter_actor_show (stage);
/* 下面函数不是Clutter的函数,是gtk的函数 。可以在GTK+2.0教程中找到相关的GtkWidget定义 */
/* Connect a signal handler to handle mouse clicks an key presses on the stage: */
g_signal_connect (stage, "button-press-event",G_CALLBACK (on_stage_button_press), NULL);
/* 主循环,不会结束main。Start the main loop, so we can respond to events: */
clutter_main();
return EXIT_SUCCESS;
}
相关链接:
我的Clutter相关博客