int main (int argc, char **argv) { GList *toplevels; GList *node; /* If there's no DISPLAY, we silently error out. We don't want to break * headless builds. */ if (! gtk_init_check (&argc, &argv)) return 0; toplevels = get_all_widgets (); for (node = toplevels; node; node = g_list_next (node)) { WidgetInfo *info; char *filename; cairo_surface_t *surface; info = node->data; gtk_widget_show (info->window); surface = snapshot_widget (info->window, info->include_decorations ? SNAPSHOT_WINDOW : SNAPSHOT_DRAW); filename = g_strdup_printf ("./%s.png", info->name); g_assert (cairo_surface_write_to_png (surface, filename) == CAIRO_STATUS_SUCCESS); g_free (filename); cairo_surface_destroy (surface); } return 0; }
void get_all_widgets(Camera *camera,GPContext *context,CameraWidget *widget, char *prefix,widgets_list_node *first) { int ret, n, i; char *newprefix; const char *label, *name, *uselabel; CameraWidgetType type; gp_widget_get_label (widget, &label); /* fprintf(stderr,"label is %s\n", label); */ ret = gp_widget_get_name (widget, &name); /* fprintf(stderr,"name is %s\n", name); */ gp_widget_get_type (widget, &type); if (strlen(name)) uselabel = name; else uselabel = label; n = gp_widget_count_children (widget); newprefix = malloc(strlen(prefix)+1+strlen(uselabel)+1); if (!newprefix) { abort(); } sprintf(newprefix,"%s/%s",prefix,uselabel); if ((type != GP_WIDGET_WINDOW) && (type != GP_WIDGET_SECTION)) { // int readonly; // gp_widget_get_readonly(widget,&readonly); // printf("name: %s readonly: %i \n",name,readonly); add_widget(&first,widget); } for (i=0; i<n; i++) { CameraWidget *child; ret = gp_widget_get_child (widget, i, &child); if (ret != GP_OK) continue; get_all_widgets(camera,context,child,newprefix,first); } free(newprefix); }
int main (int argc, char **argv) { GdkPixbuf *screenshot = NULL; GList *toplevels; GList *node; g_set_application_name ("GIMP documention shooter"); /* If there's no DISPLAY, we silently error out. * We don't want to break headless builds. */ if (! gtk_init_check (&argc, &argv)) return EXIT_SUCCESS; gtk_rc_add_default_file (gimp_gtkrc ()); units_init (); gimp_widgets_init (shooter_standard_help, shooter_get_foreground, shooter_get_background, shooter_ensure_modules); toplevels = get_all_widgets (); for (node = toplevels; node; node = g_list_next (node)) { GdkWindow *window; WidgetInfo *info; XID xid; gchar *filename; info = node->data; gtk_widget_show (info->window); window = gtk_widget_get_window (info->window); gtk_widget_show_now (info->window); gtk_widget_queue_draw (info->window); while (gtk_events_pending ()) { gtk_main_iteration (); } sleep (1); while (gtk_events_pending ()) { gtk_main_iteration (); } xid = gdk_x11_drawable_get_xid (GDK_DRAWABLE (window)); screenshot = take_window_shot (xid, info->include_decorations); filename = g_strdup_printf ("%s.png", info->name); gdk_pixbuf_save (screenshot, filename, "png", NULL, NULL); g_free(filename); gtk_widget_hide (info->window); } return EXIT_SUCCESS; }