1 #include <clutter/clutter.h>
2 
3 #include <stdlib.h>
4 #include <string.h>
5 
6 #define STAGE_WIDTH  640
7 #define STAGE_HEIGHT 480
8 
9 #define COLS 18
10 #define ROWS 20
11 
12 static void
on_paint(ClutterActor * actor,gconstpointer * data)13 on_paint (ClutterActor *actor, gconstpointer *data)
14 {
15   static GTimer *timer = NULL;
16   static int fps = 0;
17 
18   if (!timer)
19     {
20       timer = g_timer_new ();
21       g_timer_start (timer);
22     }
23 
24   if (g_timer_elapsed (timer, NULL) >= 1)
25     {
26       printf ("fps: %d\n", fps);
27       g_timer_start (timer);
28       fps = 0;
29     }
30 
31   ++fps;
32 }
33 
34 static gboolean
queue_redraw(gpointer stage)35 queue_redraw (gpointer stage)
36 {
37   clutter_actor_queue_redraw (CLUTTER_ACTOR (stage));
38 
39   return G_SOURCE_CONTINUE;
40 }
41 
42 int
main(int argc,char * argv[])43 main (int argc, char *argv[])
44 {
45   ClutterActor    *stage;
46   ClutterActor    *group;
47 
48   g_setenv ("CLUTTER_VBLANK", "none", FALSE);
49   g_setenv ("CLUTTER_DEFAULT_FPS", "1000", FALSE);
50 
51   if (clutter_init (&argc, &argv) != CLUTTER_INIT_SUCCESS)
52     return 1;
53 
54   stage = clutter_stage_new ();
55   clutter_actor_set_size (stage, STAGE_WIDTH, STAGE_HEIGHT);
56   clutter_stage_set_color (CLUTTER_STAGE (stage), CLUTTER_COLOR_Black);
57   clutter_stage_set_title (CLUTTER_STAGE (stage), "Text");
58 
59   group = clutter_group_new ();
60   clutter_actor_set_size (group, STAGE_WIDTH, STAGE_WIDTH);
61   clutter_container_add_actor (CLUTTER_CONTAINER (stage), group);
62 
63   clutter_threads_add_idle (queue_redraw, stage);
64 
65   g_signal_connect (group, "paint", G_CALLBACK (on_paint), NULL);
66 
67   {
68     gint row, col;
69 
70     for (row=0; row<ROWS; row++)
71       for (col=0; col<COLS; col++)
72         {
73           ClutterActor *label;
74           gchar font_name[64];
75           gchar text[64];
76           gint  font_size = row+10;
77           gdouble scale = 0.17 + (1.5 * col / COLS);
78 
79           sprintf (font_name, "Sans %ipx", font_size);
80           sprintf (text, "OH");
81 
82           if (row==0)
83             {
84               sprintf (font_name, "Sans 10px");
85               sprintf (text, "%1.2f", scale);
86               font_size = 10;
87               scale = 1.0;
88             }
89           if (col==0)
90             {
91               sprintf (font_name, "Sans 10px");
92               sprintf (text, "%ipx", font_size);
93               if (row == 0)
94                 strcpy (text, "");
95               font_size = 10;
96               scale = 1.0;
97             }
98 
99           label = clutter_text_new_with_text (font_name, text);
100           clutter_text_set_color (CLUTTER_TEXT (label), CLUTTER_COLOR_White);
101           clutter_actor_set_position (label, (1.0*STAGE_WIDTH/COLS)*col,
102                                              (1.0*STAGE_HEIGHT/ROWS)*row);
103           /*clutter_actor_set_clip (label, 0,0, (1.0*STAGE_WIDTH/COLS),
104                                               (1.0*STAGE_HEIGHT/ROWS));*/
105           clutter_actor_set_scale (label, scale, scale);
106           clutter_text_set_line_wrap (CLUTTER_TEXT (label), FALSE);
107           clutter_container_add_actor (CLUTTER_CONTAINER (group), label);
108         }
109   }
110   clutter_actor_show_all (stage);
111 
112   g_signal_connect (stage, "key-press-event",
113 		    G_CALLBACK (clutter_main_quit), NULL);
114 
115   clutter_main();
116 
117   clutter_actor_destroy (stage);
118 
119   return 0;
120 }
121