static void transition_completed_cb (OptTransition *trans, gpointer data) { OptShow *show = (OptShow *)data; OptSlide *from; OptShowPrivate *priv; ClutterActor *stage; priv = show->priv; from = opt_transition_get_from (trans); stage = clutter_stage_get_default(); /* Remove as to free up resources. */ clutter_actor_hide_all (CLUTTER_ACTOR(from)); clutter_container_remove_actor (CLUTTER_CONTAINER(stage), CLUTTER_ACTOR(from)); /* Reset any tranforms to be safe */ clutter_actor_set_rotation (CLUTTER_ACTOR(from), CLUTTER_X_AXIS, 0, 0, 0, 0); clutter_actor_set_rotation (CLUTTER_ACTOR(from), CLUTTER_Y_AXIS, 0, 0, 0, 0); clutter_actor_set_rotation (CLUTTER_ACTOR(from), CLUTTER_Z_AXIS, 0, 0, 0, 0); /* If needed, update the position */ if (priv->position_label_visible) opt_show_update_position_label (show); /* Disconnect the handler */ g_signal_handler_disconnect (trans, priv->trans_signal_id); priv->trans_signal_id = 0; }
static void st_table_hide_all (ClutterActor *table) { GList *l, *children; clutter_actor_hide (table); children = st_container_get_children_list (ST_CONTAINER (table)); for (l = children; l; l = l->next) clutter_actor_hide_all (CLUTTER_ACTOR (l->data)); }
int main (int argc, char *argv[]) { ClutterActor *stage; ClutterColor stage_color = { 0x0, 0x0, 0x0, 0xff }; App *app; clutter_init (&argc, &argv); ALPHA_SINE = clutter_alpha_register_func (alpha_sine_func, NULL); clutter_interval_register_progress_func (G_TYPE_BOOLEAN, boolean_progress); app = g_new0(App, 1); stage = clutter_stage_get_default (); clutter_stage_set_color (CLUTTER_STAGE (stage), &stage_color); clutter_actor_set_size (stage, CSW, CSH); make_ui (app); clutter_group_add (CLUTTER_GROUP(stage), app->screen_dial); clutter_group_add (CLUTTER_GROUP(stage), app->screen_dialpad); clutter_actor_hide_all (app->screen_dial); clutter_actor_show_all (stage); g_signal_connect (stage, "event", G_CALLBACK (on_input), app); printf("\n..Press '*' to dial..\n\n"); clutter_main (); return 0; }
IO_METHOD(IoClutterActor, hideAll) { clutter_actor_hide_all(IOCACTOR(self)); return self; }
gboolean opt_show_export (OptShow *self, const char *path, GError **error) { #define HTML "<html><head><title>Slide %i</title></head>\n" \ "<body><p><center><img src=\"%s\"></center></p>\n" \ "<p><center><strong>%s%s</strong></center></p>\n" \ "</body></html>" GList *slide; OptShowPrivate *priv; ClutterActor *stage; gint i = 0; priv = self->priv; stage = clutter_stage_get_default(); g_object_set (stage, "offscreen", TRUE, NULL); clutter_actor_show_all (stage); slide = priv->slides; while (slide) { ClutterActor *e; guchar *data; GdkPixbuf *pixb = NULL; gchar name[32]; gchar *filename = NULL; gchar html[2048], html_next[512], html_prev[512]; e = CLUTTER_ACTOR(slide->data); clutter_container_add_actor (CLUTTER_CONTAINER(stage), e); clutter_actor_show_all (stage); clutter_actor_show_all (e); // clutter_redraw (CLUTTER_STAGE (stage)); data = clutter_stage_read_pixels (CLUTTER_STAGE(stage), 0, 0, clutter_actor_get_width (stage), clutter_actor_get_height (stage)); if (!data) { g_warning("Failed to grab pixels from stage"); return FALSE; } pixb = gdk_pixbuf_new_from_data (data, GDK_COLORSPACE_RGB, TRUE, 8, clutter_actor_get_width (stage), clutter_actor_get_height (stage), clutter_actor_get_width (stage) * 4, free_data, NULL); g_snprintf (name, 32, "slide-%02i.png", i); filename = g_build_filename(path, name, NULL); if (!gdk_pixbuf_save (pixb, filename, "png", error, "compression", "9", /* Really compress */ NULL)) { if (filename) g_free (filename); g_object_unref (pixb); return FALSE; } html_next[0] = html_prev[0] = '\0'; if (i > 0) snprintf(html_prev, 512, "<a href=\"slide-%02i.html\">Prev</a> |", i-1); if (slide->next) snprintf(html_next, 512, " <a href=\"slide-%02i.html\">Next</a>", i+1); g_snprintf(html, 2048, HTML, i, name, html_prev, html_next); g_snprintf(name, 32, "slide-%02i.html", i); g_free (filename); filename = g_build_filename(path, name, NULL); g_file_set_contents (filename, html, -1, NULL); g_print ("wrote '%s'\n", filename); clutter_actor_hide_all (e); clutter_group_remove (CLUTTER_GROUP(stage), e); if (filename) g_free (filename); slide = slide->next; i++; g_object_unref (pixb); } return TRUE; }
void opt_show_step (OptShow *self, gint step) { OptSlide *from, *to; OptShowPrivate *priv; OptTransition *trans; ClutterActor *stage; priv = self->priv; /* transition already running */ if (priv->trans_signal_id != 0) return; stage = clutter_stage_get_default(); from = g_list_nth_data (priv->slides, priv->current_slide_num); to = g_list_nth_data (priv->slides, priv->current_slide_num + step); if (from == NULL) from = priv->slides->data; /* Nowhere to go */ if (to == NULL) return; /* Add next slide to stage */ clutter_group_add (CLUTTER_GROUP(stage), CLUTTER_ACTOR(to)); trans = opt_slide_get_transition ( step < 0 ? to : from); /* * Make sure any textures are loaded before the transitions is started . */ clutter_container_foreach (CLUTTER_CONTAINER (to), (ClutterCallback)clutter_actor_realize, NULL); if (trans != NULL) { if (step < 0) opt_transition_set_direction (trans, OPT_TRANSITION_BACKWARD); else opt_transition_set_direction (trans, OPT_TRANSITION_FORWARD); /* Set up transition and start it */ opt_transition_set_to (trans, to); opt_transition_set_from (trans, from); priv->trans_signal_id = g_signal_connect (trans, "completed", G_CALLBACK (transition_completed_cb), self); /* lower it out of view */ clutter_actor_lower_bottom (CLUTTER_ACTOR(to)); clutter_timeline_start (CLUTTER_TIMELINE(trans)); } else { /* No transition just hide current slide*/ clutter_group_remove (CLUTTER_GROUP(stage), CLUTTER_ACTOR(from)); clutter_actor_hide_all (CLUTTER_ACTOR(from)); } /* Advance */ priv->current_slide_num += step; priv->current_slide_num = CLAMP(priv->current_slide_num, 0, priv->num_slides-1); if (CLUTTER_ACTOR_IS_VISIBLE (CLUTTER_ACTOR (priv->menu))) opt_menu_popdown (priv->menu); opt_menu_set_current_slide (priv->menu, priv->current_slide_num); }