學習資料來源於: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相關部落格