Clutter学习(二):一个Stage小程序

  学习资料来源于: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相关博客

 

你可能感兴趣的:(callback,actor,button,makefile,Signal,gtk)