GimpPDBStatusType script_fu_interface (SFScript *script, gint start_arg) { GtkWidget *dialog; GtkWidget *menu; GtkWidget *vbox; GtkWidget *vbox2; GtkSizeGroup *group; GSList *list; gchar *title; gint i; static gboolean gtk_initted = FALSE; /* Simply return if there is already an interface. This is an * ugly workaround for the fact that we can not process two * scripts at a time. */ if (sf_interface != NULL) { gchar *message = g_strdup_printf ("%s\n\n%s", _("Script-Fu cannot process two scripts " "at the same time."), _("You are already running the \"%s\" script.")); g_message (message, sf_interface->title); g_free (message); return GIMP_PDB_CANCEL; } g_return_val_if_fail (script != NULL, FALSE); if (!gtk_initted) { INIT_I18N(); gimp_ui_init ("script-fu", TRUE); gtk_initted = TRUE; } sf_status = GIMP_PDB_SUCCESS; sf_interface = g_slice_new0 (SFInterface); sf_interface->widgets = g_new0 (GtkWidget *, script->n_args); sf_interface->title = script_fu_script_get_title (script); title = g_strdup_printf (_("Script-Fu: %s"), sf_interface->title); sf_interface->dialog = dialog = gimp_dialog_new (title, "script-fu", NULL, 0, gimp_standard_help_func, script->name, GIMP_STOCK_RESET, RESPONSE_RESET, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); g_free (title); gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), RESPONSE_RESET, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); gimp_window_set_transient (GTK_WINDOW (dialog)); g_signal_connect (dialog, "response", G_CALLBACK (script_fu_response), script); g_signal_connect_swapped (dialog, "destroy", G_CALLBACK (script_fu_interface_quit), script); gtk_window_set_resizable (GTK_WINDOW (dialog), TRUE); vbox = gtk_vbox_new (FALSE, 12); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox, TRUE, TRUE, 0); gtk_widget_show (vbox); /* The argument table */ sf_interface->table = gtk_table_new (script->n_args - start_arg, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (sf_interface->table), 6); gtk_table_set_row_spacings (GTK_TABLE (sf_interface->table), 6); gtk_box_pack_start (GTK_BOX (vbox), sf_interface->table, FALSE, FALSE, 0); gtk_widget_show (sf_interface->table); group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); for (i = start_arg; i < script->n_args; i++) { GtkWidget *widget = NULL; GtkObject *adj; gchar *label_text; gfloat label_yalign = 0.5; gint *ID_ptr = NULL; gint row = i; gboolean left_align = FALSE; SFArg *arg = &script->args[i]; row -= start_arg; /* we add a colon after the label; * some languages want an extra space here */ label_text = g_strdup_printf (_("%s:"), gettext (arg->label)); switch (arg->type) { case SF_IMAGE: case SF_DRAWABLE: case SF_LAYER: case SF_CHANNEL: case SF_VECTORS: switch (arg->type) { case SF_IMAGE: widget = gimp_image_combo_box_new (NULL, NULL); ID_ptr = &arg->value.sfa_image; break; case SF_DRAWABLE: widget = gimp_drawable_combo_box_new (NULL, NULL); ID_ptr = &arg->value.sfa_drawable; break; case SF_LAYER: widget = gimp_layer_combo_box_new (NULL, NULL); ID_ptr = &arg->value.sfa_layer; break; case SF_CHANNEL: widget = gimp_channel_combo_box_new (NULL, NULL); ID_ptr = &arg->value.sfa_channel; break; case SF_VECTORS: widget = gimp_vectors_combo_box_new (NULL, NULL); ID_ptr = &arg->value.sfa_vectors; break; default: menu = NULL; break; } gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (widget), *ID_ptr, G_CALLBACK (gimp_int_combo_box_get_active), ID_ptr); break; case SF_COLOR: left_align = TRUE; widget = gimp_color_button_new (_("Script-Fu Color Selection"), COLOR_SAMPLE_WIDTH, COLOR_SAMPLE_HEIGHT, &arg->value.sfa_color, GIMP_COLOR_AREA_FLAT); gimp_color_button_set_update (GIMP_COLOR_BUTTON (widget), TRUE); g_signal_connect (widget, "color-changed", G_CALLBACK (gimp_color_button_get_color), &arg->value.sfa_color); break; case SF_TOGGLE: g_free (label_text); label_text = NULL; widget = gtk_check_button_new_with_mnemonic (gettext (arg->label)); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), arg->value.sfa_toggle); g_signal_connect (widget, "toggled", G_CALLBACK (gimp_toggle_button_update), &arg->value.sfa_toggle); break; case SF_VALUE: case SF_STRING: widget = gtk_entry_new (); gtk_widget_set_size_request (widget, TEXT_WIDTH, -1); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); gtk_entry_set_text (GTK_ENTRY (widget), arg->value.sfa_value); break; case SF_TEXT: { GtkWidget *view; GtkTextBuffer *buffer; widget = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (widget), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (widget), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_widget_set_size_request (widget, TEXT_WIDTH, -1); view = gtk_text_view_new (); gtk_container_add (GTK_CONTAINER (widget), view); gtk_widget_show (view); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); gtk_text_view_set_editable (GTK_TEXT_VIEW (view), TRUE); gtk_text_buffer_set_text (buffer, arg->value.sfa_value, -1); label_yalign = 0.0; } break; case SF_ADJUSTMENT: switch (arg->default_value.sfa_adjustment.type) { case SF_SLIDER: arg->value.sfa_adjustment.adj = (GtkAdjustment *) gimp_scale_entry_new (GTK_TABLE (sf_interface->table), 0, row, label_text, SLIDER_WIDTH, -1, arg->value.sfa_adjustment.value, arg->default_value.sfa_adjustment.lower, arg->default_value.sfa_adjustment.upper, arg->default_value.sfa_adjustment.step, arg->default_value.sfa_adjustment.page, arg->default_value.sfa_adjustment.digits, TRUE, 0.0, 0.0, NULL, NULL); gtk_entry_set_activates_default (GIMP_SCALE_ENTRY_SPINBUTTON (arg->value.sfa_adjustment.adj), TRUE); break; default: g_warning ("unexpected adjustment type: %d", arg->default_value.sfa_adjustment.type); /* fallthrough */ case SF_SPINNER: left_align = TRUE; widget = gimp_spin_button_new (&adj, arg->value.sfa_adjustment.value, arg->default_value.sfa_adjustment.lower, arg->default_value.sfa_adjustment.upper, arg->default_value.sfa_adjustment.step, arg->default_value.sfa_adjustment.page, 0, 0, arg->default_value.sfa_adjustment.digits); gtk_entry_set_activates_default (GTK_ENTRY (widget), TRUE); arg->value.sfa_adjustment.adj = GTK_ADJUSTMENT (adj); break; } g_signal_connect (arg->value.sfa_adjustment.adj, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &arg->value.sfa_adjustment.value); break; case SF_FILENAME: case SF_DIRNAME: if (arg->type == SF_FILENAME) widget = gtk_file_chooser_button_new (_("Script-Fu File Selection"), GTK_FILE_CHOOSER_ACTION_OPEN); else widget = gtk_file_chooser_button_new (_("Script-Fu Folder Selection"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER); if (arg->value.sfa_file.filename) gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (widget), arg->value.sfa_file.filename); g_signal_connect (widget, "selection-changed", G_CALLBACK (script_fu_file_callback), &arg->value.sfa_file); break; case SF_FONT: widget = gimp_font_select_button_new (_("Script-Fu Font Selection"), arg->value.sfa_font); g_signal_connect_swapped (widget, "font-set", G_CALLBACK (script_fu_font_callback), &arg->value.sfa_font); break; case SF_PALETTE: widget = gimp_palette_select_button_new (_("Script-Fu Palette Selection"), arg->value.sfa_palette); g_signal_connect_swapped (widget, "palette-set", G_CALLBACK (script_fu_palette_callback), &arg->value.sfa_palette); break; case SF_PATTERN: left_align = TRUE; widget = gimp_pattern_select_button_new (_("Script-Fu Pattern Selection"), arg->value.sfa_pattern); g_signal_connect_swapped (widget, "pattern-set", G_CALLBACK (script_fu_pattern_callback), &arg->value.sfa_pattern); break; case SF_GRADIENT: left_align = TRUE; widget = gimp_gradient_select_button_new (_("Script-Fu Gradient Selection"), arg->value.sfa_gradient); g_signal_connect_swapped (widget, "gradient-set", G_CALLBACK (script_fu_gradient_callback), &arg->value.sfa_gradient); break; case SF_BRUSH: left_align = TRUE; widget = gimp_brush_select_button_new (_("Script-Fu Brush Selection"), arg->value.sfa_brush.name, arg->value.sfa_brush.opacity, arg->value.sfa_brush.spacing, arg->value.sfa_brush.paint_mode); g_signal_connect_swapped (widget, "brush-set", G_CALLBACK (script_fu_brush_callback), &arg->value.sfa_brush); break; case SF_OPTION: #if GTK_CHECK_VERSION (2, 24, 0) widget = gtk_combo_box_text_new (); #else widget = gtk_combo_box_new_text (); #endif for (list = arg->default_value.sfa_option.list; list; list = g_slist_next (list)) { #if GTK_CHECK_VERSION (2, 24, 0) gtk_combo_box_text_append_text (GTK_COMBO_BOX_TEXT (widget), gettext (list->data)); #else gtk_combo_box_append_text (GTK_COMBO_BOX (widget), gettext (list->data)); #endif } gtk_combo_box_set_active (GTK_COMBO_BOX (widget), arg->value.sfa_option.history); g_signal_connect (widget, "changed", G_CALLBACK (script_fu_combo_callback), &arg->value.sfa_option); break; case SF_ENUM: widget = gimp_enum_combo_box_new (g_type_from_name (arg->default_value.sfa_enum.type_name)); gimp_int_combo_box_set_active (GIMP_INT_COMBO_BOX (widget), arg->value.sfa_enum.history); g_signal_connect (widget, "changed", G_CALLBACK (gimp_int_combo_box_get_active), &arg->value.sfa_enum.history); break; case SF_DISPLAY: break; } if (widget) { if (label_text) { gimp_table_attach_aligned (GTK_TABLE (sf_interface->table), 0, row, label_text, 0.0, label_yalign, widget, 2, left_align); g_free (label_text); } else { gtk_table_attach (GTK_TABLE (sf_interface->table), widget, 0, 3, row, row + 1, GTK_EXPAND | GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show (widget); } if (left_align) gtk_size_group_add_widget (group, widget); } sf_interface->widgets[i] = widget; } g_object_unref (group); /* the script progress bar */ vbox2 = gtk_vbox_new (FALSE, 6); gtk_box_pack_end (GTK_BOX (vbox), vbox2, FALSE, FALSE, 0); gtk_widget_show (vbox2); sf_interface->progress_bar = gimp_progress_bar_new (); gtk_box_pack_start (GTK_BOX (vbox2), sf_interface->progress_bar, FALSE, FALSE, 0); gtk_widget_show (sf_interface->progress_bar); sf_interface->progress_label = gtk_label_new (NULL); gtk_misc_set_alignment (GTK_MISC (sf_interface->progress_label), 0.0, 0.5); gtk_label_set_ellipsize (GTK_LABEL (sf_interface->progress_label), PANGO_ELLIPSIZE_MIDDLE); gimp_label_set_attributes (GTK_LABEL (sf_interface->progress_label), PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC, -1); gtk_box_pack_start (GTK_BOX (vbox2), sf_interface->progress_label, FALSE, FALSE, 0); gtk_widget_show (sf_interface->progress_label); gtk_widget_show (dialog); gtk_main (); return sf_status; }
static gint oilify_dialog (GimpDrawable *drawable) { GtkWidget *dialog; GtkWidget *main_vbox; GtkWidget *preview; GtkWidget *table; GtkWidget *toggle; GtkWidget *combo; GtkObject *adj; gboolean can_use_mode_inten; gboolean ret; can_use_mode_inten = gimp_drawable_is_rgb (drawable->drawable_id); if (! can_use_mode_inten && ovals.mode == MODE_INTEN) ovals.mode = MODE_RGB; gimp_ui_init (OILIFY_BINARY, FALSE); dialog = gimp_dialog_new (_("Oilify"), OILIFY_BINARY, NULL, 0, gimp_standard_help_func, OILIFY_PROC, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); gimp_window_set_transient (GTK_WINDOW (dialog)); main_vbox = gtk_vbox_new (FALSE, 12); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dialog)->vbox), main_vbox); gtk_widget_show (main_vbox); preview = gimp_drawable_preview_new (drawable, NULL); gtk_box_pack_start (GTK_BOX (main_vbox), preview, TRUE, TRUE, 0); gtk_widget_show (preview); g_signal_connect_swapped (preview, "invalidated", G_CALLBACK (oilify), drawable); table = gtk_table_new (7, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_box_pack_start (GTK_BOX (main_vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); /* * Mask-size scale */ adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 0, _("_Mask size:"), SCALE_WIDTH, 0, ovals.mask_size, 3.0, 50.0, 1.0, 5.0, 0, TRUE, 0.0, 0.0, NULL, NULL); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &ovals.mask_size); g_signal_connect_swapped (adj, "value-changed", G_CALLBACK (gimp_preview_invalidate), preview); /* * Mask-size map check button */ toggle = gtk_check_button_new_with_mnemonic (_("Use m_ask-size map:")); gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 1, 2, GTK_FILL, 0, 0, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), ovals.use_mask_size_map); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &ovals.use_mask_size_map); g_signal_connect_swapped (toggle, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); /* * Mask-size map combo */ combo = gimp_drawable_combo_box_new (oilify_map_constrain, drawable); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), ovals.mask_size_map, G_CALLBACK (gimp_int_combo_box_get_active), &ovals.mask_size_map); g_signal_connect_swapped (combo, "changed", G_CALLBACK (gimp_preview_invalidate), preview); gtk_table_attach (GTK_TABLE (table), combo, 0, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show (combo); gtk_widget_set_sensitive (combo, ovals.use_mask_size_map); g_object_set_data (G_OBJECT (toggle), "set_sensitive", combo); /* * Exponent scale */ adj = gimp_scale_entry_new (GTK_TABLE (table), 0, 3, _("_Exponent:"), SCALE_WIDTH, 0, ovals.exponent, 1.0, 20.0, 1.0, 4.0, 0, TRUE, 0.0, 0.0, NULL, NULL); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &ovals.exponent); g_signal_connect_swapped (adj, "value-changed", G_CALLBACK (gimp_preview_invalidate), preview); /* * Exponent map check button */ toggle = gtk_check_button_new_with_mnemonic (_("Use e_xponent map:")); gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 4, 5, GTK_FILL, 0, 0, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), ovals.use_exponent_map); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &ovals.use_exponent_map); g_signal_connect_swapped (toggle, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); /* * Exponent map combo */ combo = gimp_drawable_combo_box_new (oilify_map_constrain, drawable); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), ovals.exponent_map, G_CALLBACK (gimp_int_combo_box_get_active), &ovals.exponent_map); g_signal_connect_swapped (combo, "changed", G_CALLBACK (gimp_preview_invalidate), preview); gtk_table_attach (GTK_TABLE (table), combo, 0, 3, 5, 6, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show (combo); gtk_widget_set_sensitive (combo, ovals.use_exponent_map); g_object_set_data (G_OBJECT (toggle), "set_sensitive", combo); /* * Intensity algorithm check button */ toggle = gtk_check_button_new_with_mnemonic (_("_Use intensity algorithm")); gtk_table_attach (GTK_TABLE (table), toggle, 0, 3, 6, 7, GTK_FILL, 0, 0, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), ovals.mode); gtk_widget_set_sensitive (toggle, can_use_mode_inten); gtk_widget_show (toggle); g_signal_connect (toggle, "toggled", G_CALLBACK (gimp_toggle_button_update), &ovals.mode); g_signal_connect_swapped (toggle, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); gtk_widget_show (dialog); ret = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK); gtk_widget_destroy (dialog); return ret; }
static gboolean displace_dialog (GimpDrawable *drawable) { GtkWidget *dialog; GtkWidget *main_vbox; GtkWidget *table; GtkWidget *spinbutton; GtkObject *adj; GtkWidget *combo; GtkWidget *hbox; GtkWidget *frame; GtkWidget *wrap; GtkWidget *smear; GtkWidget *black; gboolean run; gimp_ui_init (PLUG_IN_BINARY, FALSE); dialog = gimp_dialog_new (_("Displace"), PLUG_IN_BINARY, NULL, 0, gimp_standard_help_func, PLUG_IN_PROC, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); gimp_window_set_transient (GTK_WINDOW (dialog)); main_vbox = gtk_vbox_new (FALSE, 12); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), main_vbox, TRUE, TRUE, 0); gtk_widget_show (main_vbox); preview = gimp_drawable_preview_new (drawable, NULL); gtk_box_pack_start (GTK_BOX (main_vbox), preview, TRUE, TRUE, 0); gtk_widget_show (preview); g_signal_connect_swapped (preview, "invalidated", G_CALLBACK (displace), drawable); /* The main table */ table = gtk_table_new (3, 2, FALSE); gtk_table_set_row_spacings (GTK_TABLE (table), 12); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_box_pack_start (GTK_BOX (main_vbox), table, FALSE, FALSE, 0); /* X options */ toggle_x = gtk_check_button_new_with_mnemonic (_("_X displacement:")); gtk_table_attach (GTK_TABLE (table), toggle_x, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle_x), dvals.do_x); gtk_widget_show (toggle_x); g_signal_connect (toggle_x, "toggled", G_CALLBACK (gimp_toggle_button_update), &dvals.do_x); g_signal_connect_swapped (toggle_x, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); spinbutton = gimp_spin_button_new (&adj, dvals.amount_x, (gint) drawable->width * -2, drawable->width * 2, 1, 10, 0, 1, 2); gtk_table_attach (GTK_TABLE (table), spinbutton, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &dvals.amount_x); g_signal_connect_swapped (adj, "value-changed", G_CALLBACK (gimp_preview_invalidate), preview); gtk_widget_set_sensitive (spinbutton, dvals.do_x); g_object_set_data (G_OBJECT (toggle_x), "set_sensitive", spinbutton); gtk_widget_show (spinbutton); combo = gimp_drawable_combo_box_new (displace_map_constrain, drawable); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), dvals.displace_map_x, G_CALLBACK (gimp_int_combo_box_get_active), &dvals.displace_map_x); g_signal_connect_swapped (combo, "changed", G_CALLBACK (gimp_preview_invalidate), preview); gtk_table_attach (GTK_TABLE (table), combo, 2, 3, 0, 1, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show (combo); gtk_widget_set_sensitive (combo, dvals.do_x); g_object_set_data (G_OBJECT (spinbutton), "set_sensitive", combo); /* Y Options */ toggle_y = gtk_check_button_new_with_mnemonic (_("_Y displacement:")); gtk_table_attach (GTK_TABLE (table), toggle_y, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle_y), dvals.do_y); gtk_widget_show (toggle_y); g_signal_connect (toggle_y, "toggled", G_CALLBACK (gimp_toggle_button_update), &dvals.do_y); g_signal_connect_swapped (toggle_y, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); spinbutton = gimp_spin_button_new (&adj, dvals.amount_y, (gint) drawable->height * -2, drawable->height * 2, 1, 10, 0, 1, 2); gtk_table_attach (GTK_TABLE (table), spinbutton, 1, 2, 1, 2, GTK_FILL, GTK_FILL, 0, 0); g_signal_connect (adj, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &dvals.amount_y); g_signal_connect_swapped (adj, "value-changed", G_CALLBACK (gimp_preview_invalidate), preview); gtk_widget_set_sensitive (spinbutton, dvals.do_y); g_object_set_data (G_OBJECT (toggle_y), "set_sensitive", spinbutton); gtk_widget_show (spinbutton); combo = gimp_drawable_combo_box_new (displace_map_constrain, drawable); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), dvals.displace_map_y, G_CALLBACK (gimp_int_combo_box_get_active), &dvals.displace_map_y); g_signal_connect_swapped (combo, "changed", G_CALLBACK (gimp_preview_invalidate), preview); gtk_table_attach (GTK_TABLE (table), combo, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); gtk_widget_show (combo); gtk_widget_set_sensitive (combo, dvals.do_y); g_object_set_data (G_OBJECT (spinbutton), "set_sensitive", combo); hbox = gtk_hbox_new (FALSE, 24); gtk_box_pack_start (GTK_BOX (main_vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); frame = gimp_int_radio_group_new (TRUE, _("Displacement Mode"), G_CALLBACK (displace_radio_update), &dvals.mode, dvals.mode, _("_Cartesian"), CARTESIAN_MODE, NULL, _("_Polar"), POLAR_MODE, NULL, NULL); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); frame = gimp_int_radio_group_new (TRUE, _("Edge Behavior"), G_CALLBACK (gimp_radio_button_update), &dvals.displace_type, dvals.displace_type, _("_Wrap"), GIMP_PIXEL_FETCHER_EDGE_WRAP, &wrap, _("_Smear"), GIMP_PIXEL_FETCHER_EDGE_SMEAR, &smear, _("_Black"), GIMP_PIXEL_FETCHER_EDGE_BLACK, &black, NULL); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); g_signal_connect_swapped (wrap, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); g_signal_connect_swapped (smear, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); g_signal_connect_swapped (black, "toggled", G_CALLBACK (gimp_preview_invalidate), preview); displace_set_labels (); gtk_widget_show (table); gtk_widget_show (dialog); run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK); gtk_widget_destroy (dialog); return run; }
static gboolean create_main_dialog (void) { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *frame; GtkWidget *table; GtkWidget *combo; GtkObject *scale_data; gint row; gboolean run; gimp_ui_init (PLUG_IN_BINARY, TRUE); dialog = gimp_dialog_new (_("Van Gogh (LIC)"), PLUG_IN_ROLE, NULL, 0, gimp_standard_help_func, PLUG_IN_PROC, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL); gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog), GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, -1); gimp_window_set_transient (GTK_WINDOW (dialog)); vbox = gtk_vbox_new (FALSE, 12); gtk_container_set_border_width (GTK_CONTAINER (vbox), 12); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), vbox, TRUE, TRUE, 0); gtk_widget_show (vbox); hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_widget_show (hbox); frame = gimp_int_radio_group_new (TRUE, _("Effect Channel"), G_CALLBACK (gimp_radio_button_update), &licvals.effect_channel, licvals.effect_channel, _("_Hue"), 0, NULL, _("_Saturation"), 1, NULL, _("_Brightness"), 2, NULL, NULL); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); frame = gimp_int_radio_group_new (TRUE, _("Effect Operator"), G_CALLBACK (gimp_radio_button_update), &licvals.effect_operator, licvals.effect_operator, _("_Derivative"), 0, NULL, _("_Gradient"), 1, NULL, NULL); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); frame = gimp_int_radio_group_new (TRUE, _("Convolve"), G_CALLBACK (gimp_radio_button_update), &licvals.effect_convolve, licvals.effect_convolve, _("_With white noise"), 0, NULL, _("W_ith source image"), 1, NULL, NULL); gtk_box_pack_start (GTK_BOX (hbox), frame, FALSE, FALSE, 0); gtk_widget_show (frame); /* Effect image menu */ table = gtk_table_new (1, 2, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); combo = gimp_drawable_combo_box_new (effect_image_constrain, NULL); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), licvals.effect_image_id, G_CALLBACK (gimp_int_combo_box_get_active), &licvals.effect_image_id); gimp_table_attach_aligned (GTK_TABLE (table), 0, 0, _("_Effect image:"), 0.0, 0.5, combo, 2, TRUE); table = gtk_table_new (5, 3, FALSE); gtk_table_set_col_spacings (GTK_TABLE (table), 6); gtk_table_set_row_spacings (GTK_TABLE (table), 6); gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0); gtk_widget_show (table); row = 0; scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, row++, _("_Filter length:"), 0, 6, licvals.filtlen, 0.1, 64, 1.0, 8.0, 1, TRUE, 0, 0, NULL, NULL); g_signal_connect (scale_data, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &licvals.filtlen); scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, row++, _("_Noise magnitude:"), 0, 6, licvals.noisemag, 1, 5, 0.1, 1.0, 1, TRUE, 0, 0, NULL, NULL); g_signal_connect (scale_data, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &licvals.noisemag); scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, row++, _("In_tegration steps:"), 0, 6, licvals.intsteps, 1, 40, 1.0, 5.0, 1, TRUE, 0, 0, NULL, NULL); g_signal_connect (scale_data, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &licvals.intsteps); scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, row++, _("_Minimum value:"), 0, 6, licvals.minv, -100, 0, 1, 10, 1, TRUE, 0, 0, NULL, NULL); g_signal_connect (scale_data, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &licvals.minv); scale_data = gimp_scale_entry_new (GTK_TABLE (table), 0, row++, _("M_aximum value:"), 0, 6, licvals.maxv, 0, 100, 1, 10, 1, TRUE, 0, 0, NULL, NULL); g_signal_connect (scale_data, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &licvals.maxv); gtk_widget_show (dialog); run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK); gtk_widget_destroy (dialog); return run; }
static gboolean colorize_dialog(GimpDrawable *default_drawable) { GtkWidget *dialog, *combo; GimpDrawable *marked; gint status; gimp_ui_init("colorize", TRUE); dialog = gimp_dialog_new( "Colorize", "colorize", NULL, 0, gimp_standard_help_func, "plug-in-colorize", GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL ); gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(dialog)), 12); gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(dialog)->vbox), 6); if (colorizevals.marked_id == -1) colorizevals.marked_id = default_drawable->drawable_id; marked = gimp_drawable_get(colorizevals.marked_id); if (!marked) return FALSE; /**/ combo = gimp_drawable_combo_box_new(dialog_marked_constrain, NULL); gimp_int_combo_box_connect( GIMP_INT_COMBO_BOX(combo), colorizevals.marked_id, G_CALLBACK(dialog_marked_cb), &marked ); gtk_box_pack_start_defaults(GTK_BOX(GTK_DIALOG(dialog)->vbox), combo); /**/ add_toggle_button( GTK_DIALOG(dialog)->vbox, "Marked image includes original image", &colorizevals.marked_includes_original ); /**/ add_toggle_button( GTK_DIALOG(dialog)->vbox, "Unselected areas are mask", &colorizevals.use_mask ); /**/ add_toggle_button( GTK_DIALOG(dialog)->vbox, "Pure white is mask", &colorizevals.white_mask ); /**/ add_toggle_button( GTK_DIALOG(dialog)->vbox, "Use chroma in addition to luminance (for color images)", &colorizevals.use_chroma ); /**/ add_toggle_button( GTK_DIALOG(dialog)->vbox, "Use the entire image, even when the selected area is smaller", &colorizevals.entire_image ); /**/ gtk_widget_show_all(dialog); status = (gimp_dialog_run(GIMP_DIALOG(dialog)) == GTK_RESPONSE_OK); gtk_widget_destroy(dialog); gimp_drawable_detach(marked); return status; }
void create_brushpage (GtkNotebook *notebook) { GtkWidget *box1, *box2, *box3, *thispage; GtkWidget *view; GtkWidget *tmpw, *grid; GtkWidget *frame; GtkWidget *combo; GtkWidget *label; GtkSizeGroup *group; GtkTreeSelection *selection; label = gtk_label_new_with_mnemonic (_("_Brush")); thispage = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_container_set_border_width (GTK_CONTAINER (thispage), 12); gtk_widget_show (thispage); box1 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12); gtk_box_pack_start (GTK_BOX (thispage), box1, TRUE,TRUE,0); gtk_widget_show (box1); view = create_one_column_list (box1, brush_select_file); brush_list = view; brush_list_store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view))); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view)); box2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12); gtk_box_pack_start (GTK_BOX (box1), box2, FALSE, FALSE, 0); gtk_widget_show (box2); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN); gtk_box_pack_start (GTK_BOX (box2), frame, FALSE, FALSE, 0); gtk_widget_show (frame); brush_preview = tmpw = gimp_preview_area_new (); gtk_widget_set_size_request (brush_preview, 100, 100); gtk_container_add (GTK_CONTAINER (frame), tmpw); gtk_widget_show (tmpw); g_signal_connect (brush_preview, "size-allocate", G_CALLBACK (brush_preview_size_allocate), NULL); box3 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); gtk_box_pack_end (GTK_BOX (box2), box3, FALSE, FALSE,0); gtk_widget_show (box3); tmpw = gtk_label_new (_("Gamma:")); gtk_label_set_xalign (GTK_LABEL (tmpw), 0.0); gtk_box_pack_start (GTK_BOX (box3), tmpw, FALSE, FALSE,0); gtk_widget_show (tmpw); brush_gamma_adjust = gtk_adjustment_new (pcvals.brushgamma, 0.5, 3.0, 0.1, 0.1, 1.0); tmpw = gtk_scale_new (GTK_ORIENTATION_HORIZONTAL, brush_gamma_adjust); gtk_widget_set_size_request (GTK_WIDGET (tmpw), 100, 30); gtk_scale_set_draw_value (GTK_SCALE (tmpw), FALSE); gtk_scale_set_digits (GTK_SCALE (tmpw), 2); gtk_box_pack_start (GTK_BOX (box3), tmpw, FALSE, FALSE, 0); gtk_widget_show (tmpw); g_signal_connect_swapped (brush_gamma_adjust, "value-changed", G_CALLBACK (update_brush_preview), pcvals.selected_brush); gimp_help_set_help_data (tmpw, _("Changes the gamma (brightness) of the selected brush"), NULL); box3 = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6); gtk_box_pack_start (GTK_BOX (thispage), box3, FALSE, FALSE,0); gtk_widget_show (box3); group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); tmpw = gtk_label_new (_("Select:")); gtk_label_set_xalign (GTK_LABEL (tmpw), 0.0); gtk_box_pack_start (GTK_BOX (box3), tmpw, FALSE, FALSE, 0); gtk_widget_show (tmpw); gtk_size_group_add_widget (group, tmpw); g_object_unref (group); combo = gimp_drawable_combo_box_new (validdrawable, NULL); gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo), -1, G_CALLBACK (brushdmenuselect), NULL); gtk_box_pack_start (GTK_BOX (box3), combo, TRUE, TRUE, 0); gtk_widget_show (combo); tmpw = gtk_button_new_with_mnemonic (_("Save _as")); gtk_box_pack_start (GTK_BOX (box3),tmpw, FALSE, FALSE, 0); g_signal_connect (tmpw, "clicked", G_CALLBACK (savebrush), NULL); gtk_widget_show (tmpw); grid = gtk_grid_new (); gtk_grid_set_row_spacing (GTK_GRID (grid), 6); gtk_grid_set_column_spacing (GTK_GRID (grid), 6); gtk_box_pack_start (GTK_BOX (thispage), grid, FALSE, FALSE, 0); gtk_widget_show (grid); brush_aspect_adjust = gimp_scale_entry_new (GTK_GRID (grid), 0, 0, _("Aspect ratio:"), 150, -1, pcvals.brush_aspect, -1.0, 1.0, 0.1, 0.1, 2, TRUE, 0, 0, _("Specifies the aspect ratio of the brush"), NULL); gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_LABEL (brush_aspect_adjust)); g_signal_connect (brush_aspect_adjust, "value-changed", G_CALLBACK (brush_asepct_adjust_cb), &pcvals.brush_aspect); brush_relief_adjust = gimp_scale_entry_new (GTK_GRID (grid), 0, 1, _("Relief:"), 150, -1, pcvals.brush_relief, 0.0, 100.0, 1.0, 10.0, 1, TRUE, 0, 0, _("Specifies the amount of embossing to apply to the image (in percent)"), NULL); gtk_size_group_add_widget (group, GIMP_SCALE_ENTRY_LABEL (brush_relief_adjust)); g_signal_connect (brush_relief_adjust, "value-changed", G_CALLBACK (gimp_double_adjustment_update), &pcvals.brush_relief); brush_select (selection, FALSE); readdirintolist ("Brushes", view, pcvals.selected_brush); /* * This is so the "changed signal won't get sent to the brushes' list * and reset the gamma and stuff. * */ gtk_widget_grab_focus (brush_list); gtk_notebook_append_page_menu (notebook, thispage, label, NULL); }