static void run (char *name, int nparams, GParam *param, int *nreturn_vals, GParam **return_vals) { static GParam values[2]; GStatusType status = STATUS_SUCCESS; GRunModeType run_mode; gint32 image_ID; run_mode = param[0].data.d_int32; *nreturn_vals = 1; *return_vals = values; values[0].type = PARAM_STATUS; values[0].data.d_status = STATUS_CALLING_ERROR; if (strcmp (name, "file_rgba_load") == 0) { image_ID = load_image (param[1].data.d_string); if (image_ID != -1) { *nreturn_vals = 2; values[0].data.d_status = STATUS_SUCCESS; values[1].type = PARAM_IMAGE; values[1].data.d_image = image_ID; } else { values[0].data.d_status = STATUS_EXECUTION_ERROR; } } if (strcmp (name, "file_rgba_save") == 0) { { gchar **argv; gint argc; argc = 1; argv = g_new (gchar *, 1); argv[0] = g_strdup ("bs"); gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); }
/** Rowe moved this from png.c so other plug-ins can use: * gimp_ui_init: * @prog_name: The name of the plug-in which will be passed as argv[0] to * gtk_init(). It's a convention to use the name of the * executable and _not_ the PDB procedure name or something. * @preview: #TRUE if the plug-in has some kind of preview in it's UI. * Note that passing #TRUE is recommended also if one of the * used GIMP Library widgets contains a preview (like the image * menu returned by gimp_image_menu_new()). * * This function initializes GTK+ with gtk_init(), instructs GDK not to * use X shared memory if The GIMP was invoked with the --no-xshm command * line option and initializes GDK's image rendering subsystem (GdkRGB) to * follow the GIMP main program's colormap allocation/installation policy. * * The GIMP's colormap policy can be determinded by the user with the * gimprc variables @min_colors and @install_cmap. **/ void gimp_ui_init (const gchar *prog_name, gboolean preview) { gint argc; gchar **argv; static gboolean initialized = FALSE; g_return_if_fail (prog_name != NULL); if (initialized) return; argc = 1; argv = g_new (gchar *, 1); argv[0] = g_strdup (prog_name); gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); /* It's only safe to switch Gdk SHM usage off */ #ifdef BUILD_SHM if (! gimp_use_xshm ()) gdk_set_use_xshm (FALSE); #endif /* gdk_rgb_set_min_colors (gimp_min_colors ()); gdk_rgb_set_install (gimp_install_cmap ()); gtk_widget_set_default_visual (gdk_rgb_get_visual ()); gtk_widget_set_default_colormap (gdk_rgb_get_cmap ());*/ //FIXME Not sure what this is for /* Set the gamma after installing the colormap because * gtk_preview_set_gamma() initializes GdkRGB if not already done */ if (preview) gtk_preview_set_gamma (gimp_gamma ()); initialized = TRUE; }
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; }
gint load_dialog(struct raw_data* img_data, gchar* check_button_label) { int i; GtkWidget* dlg; GtkWidget* wgt; gchar** argv = g_new(gchar*, 1); gint argc = 1; struct load_dlg_data dlg_data; static char *labs[] = {"Width", "Height"}; if (!img_data) return ERROR; dlg_data.img_data = img_data; argv[0] = g_strdup("load"); gtk_init (&argc, &argv); gtk_rc_parse(gimp_gtkrc()); gdk_set_use_xshm(TRUE); dlg_data.id = gtk_dialog_new(); dlg = dlg_data.id; gtk_window_set_title(GTK_WINDOW (dlg), "Load raw image"); gtk_window_position(GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT (dlg), "destroy", (GtkSignalFunc) load_on_close, NULL); /* OK button */ wgt = gtk_button_new_with_label("OK"); GTK_WIDGET_SET_FLAGS(wgt, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT (wgt), "clicked", (GtkSignalFunc) load_on_ok, &dlg_data); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), wgt, TRUE, TRUE, 0); gtk_widget_grab_default(wgt); gtk_widget_show(wgt); /* Cancel button */ wgt = gtk_button_new_with_label("Cancel"); GTK_WIDGET_SET_FLAGS(wgt, GTK_CAN_DEFAULT); gtk_signal_connect(GTK_OBJECT (wgt), "clicked", (GtkSignalFunc) load_on_cancel, &dlg_data); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->action_area), wgt, TRUE, TRUE, 0); gtk_widget_grab_default(wgt); gtk_widget_show(wgt); /* Width and Height */ wgt = gtk_table_new(3, SIZE_DIM, FALSE); gtk_table_set_row_spacings(GTK_TABLE(wgt), 3); gtk_table_set_col_spacings(GTK_TABLE(wgt), 3); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg)->vbox), wgt, TRUE, TRUE, 0); gtk_widget_show(wgt); for (i = 0; i < SIZE_DIM; i++) { char init_size[16]; GtkWidget *label = gtk_label_new(labs[i]); gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5); gtk_table_attach(GTK_TABLE(wgt), label, 0, 1, i, i+1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show(label); dlg_data.size[i] = gtk_entry_new(); gtk_widget_set_usize(dlg_data.size[i], 35, 0); sprintf(init_size, "%d", (int) dlg_data.img_data->size[i]); gtk_entry_set_text(GTK_ENTRY(dlg_data.size[i]), init_size); gtk_table_attach(GTK_TABLE(wgt), dlg_data.size[i], 1, 2, i, i+1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show(dlg_data.size[i]); } if (check_button_label) { dlg_data.checked = gtk_check_button_new_with_mnemonic( check_button_label); gtk_table_attach(GTK_TABLE(wgt), dlg_data.checked, 0, 1, i, i+1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show(dlg_data.checked); } else { dlg_data.checked = NULL; } gtk_widget_show(dlg); gtk_main(); gdk_flush(); return dlg_data.result_ok; }
static gint sobel_dialog () { GtkWidget *dlg; GtkWidget *button; GtkWidget *toggle; GtkWidget *frame; GtkWidget *vbox; GtkWidget *hbox; gchar **argv; gint argc; argc = 1; argv = g_new (gchar *, 1); argv[0] = g_strdup ("sobel"); gtk_init (&argc, &argv); gtk_rc_parse (gimp_gtkrc ()); dlg = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (dlg), _("Sobel Edge Detection")); gtk_window_position (GTK_WINDOW (dlg), GTK_WIN_POS_MOUSE); gtk_signal_connect (GTK_OBJECT (dlg), "destroy", (GtkSignalFunc) sobel_close_callback, NULL); /* Action area */ button = gtk_button_new_with_label (_("OK")); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) sobel_ok_callback, dlg); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_grab_default (button); gtk_widget_show (button); button = gtk_button_new_with_label (_("Cancel")); GTK_WIDGET_SET_FLAGS (button, GTK_CAN_DEFAULT); gtk_signal_connect_object (GTK_OBJECT (button), "clicked", (GtkSignalFunc) gtk_widget_destroy, GTK_OBJECT (dlg)); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->action_area), button, TRUE, TRUE, 0); gtk_widget_show (button); /* parameter settings */ frame = gtk_frame_new (_("Parameter Settings")); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_ETCHED_IN); gtk_container_border_width (GTK_CONTAINER (frame), 10); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), frame, TRUE, TRUE, 0); vbox = gtk_vbox_new (FALSE, 5); gtk_container_border_width (GTK_CONTAINER (vbox), 10); gtk_container_add (GTK_CONTAINER (frame), vbox); toggle = gtk_check_button_new_with_label (_("Sobel Horizontally")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", (GtkSignalFunc) sobel_toggle_update, &bvals.horizontal); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), bvals.horizontal); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label (_("Sobel Vertically")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", (GtkSignalFunc) sobel_toggle_update, &bvals.vertical); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), bvals.vertical); gtk_widget_show (toggle); toggle = gtk_check_button_new_with_label (_("Keep sign of result (one direction only)")); gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (toggle), "toggled", (GtkSignalFunc) sobel_toggle_update, &bvals.keep_sign); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (toggle), bvals.vertical); gtk_widget_show (toggle); hbox = gtk_hbox_new (FALSE, 5); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); gtk_widget_show (hbox); gtk_widget_show (vbox); gtk_widget_show (frame); gtk_widget_show (dlg); gtk_main (); gdk_flush (); return bint.run; }