/* input handler */ static gboolean input_cb (ClutterActor *stage, ClutterEvent *event, gpointer data) { SuperOH *oh = data; if (event->type == CLUTTER_BUTTON_PRESS) { ClutterButtonEvent *button_event; ClutterActor *e; gint x, y; clutter_event_get_coords (event, &x, &y); button_event = (ClutterButtonEvent *) event; g_print ("*** button press event (button:%d) ***\n", button_event->button); e = clutter_stage_get_actor_at_pos (CLUTTER_STAGE (stage), x, y); if (e && (CLUTTER_IS_TEXTURE (e) || CLUTTER_IS_CLONE_TEXTURE (e))) { clutter_actor_hide (e); return TRUE; } } else if (event->type == CLUTTER_KEY_RELEASE) { ClutterKeyEvent *kev = (ClutterKeyEvent *) event; g_print ("*** key press event (key:%c) ***\n", clutter_key_event_symbol (kev)); if (clutter_key_event_symbol (kev) == CLUTTER_q) { clutter_main_quit (); return TRUE; } else if (clutter_key_event_symbol (kev) == CLUTTER_r) { gint i; for (i = 0; i < n_hands; i++) clutter_actor_show (oh->hand[i]); return TRUE; } } return FALSE; }
static void on_key_press_event (ClutterStage *stage, ClutterKeyEvent *event, gpointer user_data) { TestThreadData *data; switch (clutter_key_event_symbol (event)) { case CLUTTER_s: clutter_label_set_text (CLUTTER_LABEL (help_label), "Press 'q' to quit"); clutter_timeline_start (timeline); data = test_thread_data_new (); data->stage = g_object_ref (stage); data->label = g_object_ref (count_label); data->progress = g_object_ref (progress_rect); data->timeline = g_object_ref (timeline); g_thread_create (test_thread_func, data, FALSE, NULL); break; case CLUTTER_q: clutter_main_quit (); break; } }
static void on_key_release_event (ClutterStage *stage, ClutterEvent *event, gpointer null) { static gint i = 0; switch (clutter_key_event_symbol ((ClutterKeyEvent*)event)) { case CLUTTER_Escape: clutter_main_quit (); break; case CLUTTER_Left: i--; if (i == 0) i = 359; clutter_actor_set_rotation (CLUTTER_ACTOR (stage), CLUTTER_Y_AXIS, i, CLUTTER_STAGE_WIDTH ()/2, 0, CLUTTER_STAGE_HEIGHT ()); break; case CLUTTER_Right: i++; if (i == 360) i = 0; clutter_actor_set_rotation (CLUTTER_ACTOR (stage), CLUTTER_Y_AXIS, i, CLUTTER_STAGE_WIDTH ()/2, 0, CLUTTER_STAGE_HEIGHT ()); break; case CLUTTER_Up: if (!clutter_timeline_is_playing (timeline)) clutter_timeline_start (timeline); break; default: break; } }