mutter/examples/test.c
Emmanuele Bassi f6fe9e7412 2006-06-05 Emmanuele Bassi <ebassi@openedhand.com>
* clutter-color.h:
	* clutter-color.c: Reimplement ClutterColor as a boxed type;
	add convenience API for color handling, like: add, subtract,
	shade, HSL color-space conversion, packing and unpacking.

	* clutter-private.h: Update ClutterMainContext, and export the
	main context pointer here.

	* clutter-rectangle.h:
	* clutter-rectangle.c: Update the color-related code; make
	clutter_rectangle_new() and empty constructor and provide
	clutter_rectangle_new_with_color(); provide color setter
	and getter API.

	* clutter-label.h:
	* clutter-label.c: Rename the "font" property to "font-name";
	update the color-related code to the new ClutterColor object;
	rename clutter_label_new() to clutter_label_new_with_text(),
	and add setters and getters for the properties.

	* clutter-marshal.list: Add VOID:OBJECT and VOID:BOXED marshallers
	generators.

	* clutter-stage.h:
	* clutter-stage.c: Rework the API: provide a default constructor
	for a singleton object, named clutter_stage_get_default(), which
	supercedes the clutter_stage() function in clutter-main; provide
	new events: button-press-event, button-release-event,
	key-press-event and key-release-event; update the color-related
	code;

	(clutter_stage_snapshot): Allow negative width and height when
	taking a snapshot (meaning: use full width/height).

	(clutter_stage_get_element_at_pos): Rename clutter_stage_pick().

	* clutter-element.c (clutter_element_paint): Clean up the
	stage and color related code.

	* clutter-event.h:
	* clutter-event.c: Add generic ClutterAnyEvent type; add
	clutter_event_new(), clutter_event_copy() and clutter_event_free();
	make ClutterEvent a boxed type.

	* clutter-main.h:
	* clutter-main.c: Remove clutter_stage(); add clutter_main_quit(),
	for cleanly quitting from clutter_main(); add multiple mainloops
	support; allocate the ClutterCntx instead of adding it to the
	stack; re-work the ClutterEvent dispatching.

	* clutter-group.c (clutter_group_add), (clutter_group_remove): Keep
	a reference on the element when added to a ClutterGroup.

	* examples/rects.py
	* examples/test.c:
	* examples/test-text.c:
	* examples/video-cube.c:
	* examples/super-oh.c:
	* examples/test-video.c: Update.
2006-06-05 13:38:31 +00:00

114 lines
2.4 KiB
C

#include <clutter/clutter.h>
guint8 opacity = 255;
gboolean
timeout_cb (gpointer data)
{
ClutterElement *element;
element = CLUTTER_ELEMENT(data);
if (opacity > 0)
{
clutter_element_set_opacity (element, opacity);
opacity -= 2;
}
else opacity = 0xff;
return TRUE;
}
gboolean
timeout_text_cb (gpointer data)
{
ClutterLabel *label;
gchar buf[32];
label = CLUTTER_LABEL(data);
g_snprintf(buf, 32, "--> %i <--", opacity);
if (opacity > 0)
{
clutter_label_set_text(label, buf);
clutter_element_set_opacity (CLUTTER_ELEMENT(label), opacity);
opacity -= 2;
}
else opacity = 0xff;
return TRUE;
}
void
frame_cb (ClutterTimeline *timeline,
gint frame_num,
gpointer data)
{
ClutterLabel *label;
gchar buf[32];
label = CLUTTER_LABEL(data);
opacity = frame_num/2;
g_snprintf(buf, 32, "--> %i <--", frame_num);
clutter_label_set_text (label, buf);
clutter_element_set_opacity (CLUTTER_ELEMENT(label), opacity);
clutter_element_rotate_z (CLUTTER_ELEMENT(label),
frame_num,
clutter_element_get_width (CLUTTER_ELEMENT(label))/2,
clutter_element_get_height (CLUTTER_ELEMENT(label))/2);
}
int
main (int argc, char *argv[])
{
ClutterElement *texture, *label;
ClutterElement *stage;
ClutterTimeline *timeline;
GdkPixbuf *pixbuf;
clutter_init (&argc, &argv);
stage = clutter_stage_get_default ();
pixbuf = gdk_pixbuf_new_from_file ("clutter-logo-800x600.png", NULL);
if (!pixbuf)
g_error("pixbuf load failed");
texture = clutter_texture_new_from_pixbuf (pixbuf);
printf("***********foo***********\n");
label = clutter_label_new_with_text("Sans Bold 72", "Clutter\nOpened\nHand");
printf("***********foo***********\n");
clutter_element_set_opacity (CLUTTER_ELEMENT(label), 0x99);
clutter_element_set_position (CLUTTER_ELEMENT(label), 100, 200);
clutter_group_add (CLUTTER_GROUP (stage), texture);
clutter_group_add (CLUTTER_GROUP (stage), label);
clutter_element_set_size (CLUTTER_ELEMENT (stage), 800, 600);
clutter_group_show_all (CLUTTER_GROUP (stage));
timeline = clutter_timeline_new (360, 200);
g_object_set (timeline, "loop", TRUE, 0);
g_signal_connect (timeline, "new-frame", G_CALLBACK (frame_cb), label);
clutter_timeline_start (timeline);
clutter_main();
g_object_unref (stage);
return 0;
}