plug-ins: Port warp.c to GimpProcedureDialog widgets

Also make widgets translatable and added mnemonics.
Note that the UI could still be improved -
the GimpDrawableChoosers are larger than the old ones.
This commit is contained in:
Alx Sa 2024-02-19 20:51:06 +00:00
parent 38fbf19b50
commit e97f8693d0

View file

@ -146,6 +146,7 @@ static void warp (GimpDrawable *drawable,
GimpProcedureConfig *config);
static gboolean warp_dialog (GimpDrawable *drawable,
GimpProcedure *procedure,
GimpProcedureConfig *config);
static void warp_pixel (GeglBuffer *buffer,
const Babl *format,
@ -160,9 +161,6 @@ static void warp_pixel (GeglBuffer *buffer,
guchar *pixel,
GimpProcedureConfig *config);
static gboolean warp_map_constrain (GimpImage *image,
GimpItem *item,
gpointer data);
static gdouble warp_map_mag_give_value (guchar *pt,
gint alpha,
gint bytes);
@ -222,11 +220,11 @@ warp_create_procedure (GimpPlugIn *plug_in,
gimp_procedure_set_documentation (procedure,
_("Twist or smear image in many "
"different ways"),
"Smears an image along vector paths "
"calculated as the gradient of a "
"separate control matrix. The effect "
"can look like brushstrokes of acrylic "
"or watercolor paint, in some cases.",
_("Smears an image along vector paths "
"calculated as the gradient of a "
"separate control matrix. The effect "
"can look like brushstrokes of acrylic "
"or watercolor paint, in some cases."),
name);
gimp_procedure_set_attribution (procedure,
"John P. Beale",
@ -234,87 +232,91 @@ warp_create_procedure (GimpPlugIn *plug_in,
"1997");
GIMP_PROC_ARG_DOUBLE (procedure, "amount",
"Amount",
"Pixel displacement multiplier",
_("Step si_ze"),
_("Pixel displacement multiplier"),
-G_MAXDOUBLE, G_MAXDOUBLE, 10.0,
G_PARAM_READWRITE);
GIMP_PROC_ARG_DRAWABLE (procedure, "warp-map",
"Warp map",
"Displacement control map",
_("Dis_placement Map"),
_("Displacement control map"),
TRUE,
G_PARAM_READWRITE);
GIMP_PROC_ARG_INT (procedure, "iter",
"Iter",
"Iteration count",
_("I_terations"),
_("Iteration count"),
1, 100, 5,
G_PARAM_READWRITE);
GIMP_PROC_ARG_DOUBLE (procedure, "dither",
"Dither",
"Random dither amount",
_("_Dither size"),
_("Random dither amount"),
0, 100, 0.0,
G_PARAM_READWRITE);
GIMP_PROC_ARG_DOUBLE (procedure, "angle",
"Angle",
"Angle of gradient vector rotation",
_("Rotatio_n angle"),
_("Angle of gradient vector rotation"),
0, 360, 90.0,
G_PARAM_READWRITE);
GIMP_PROC_ARG_INT (procedure, "wrap-type",
"Wrap type",
"Edge behavior: { WRAP (0), SMEAR (1), BLACK (2), "
"COLOR (3) }",
0, 3, WRAP,
G_PARAM_READWRITE);
GIMP_PROC_ARG_CHOICE (procedure, "wrap-type",
_("On ed_ges"),
_("Wrap type"),
gimp_choice_new_with_values ("wrap", WRAP, _("Wrap"), NULL,
"smear", SMEAR, _("Smear"), NULL,
"black", BLACK, _("Black"), NULL,
"color", COLOR, _("Foreground Color"), NULL,
NULL),
"wrap",
G_PARAM_READWRITE);
GIMP_PROC_ARG_DRAWABLE (procedure, "mag-map",
"Mag map",
"Magnitude control map",
_("_Magnitude Map"),
_("Magnitude control map"),
TRUE,
G_PARAM_READWRITE);
GIMP_PROC_ARG_BOOLEAN (procedure, "mag-use",
"Mag use",
"Use magnitude map",
_("_Use magnitude map"),
_("Use magnitude map"),
FALSE,
G_PARAM_READWRITE);
GIMP_PROC_ARG_INT (procedure, "substeps",
"Substeps",
"Substeps between image updates",
_("Su_bsteps"),
_("Substeps between image updates"),
1, 100, 1,
G_PARAM_READWRITE);
GIMP_PROC_ARG_DRAWABLE (procedure, "grad-map",
"Grad map",
"Gradient control map",
_("Gradient Ma_p"),
_("Gradient control map"),
TRUE,
G_PARAM_READWRITE);
GIMP_PROC_ARG_DOUBLE (procedure, "grad-scale",
"Grad scale",
"Scaling factor for gradient map (0=don't use)",
_("Gradient s_cale"),
_("Scaling factor for gradient map (0=don't use)"),
-G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
G_PARAM_READWRITE);
GIMP_PROC_ARG_DRAWABLE (procedure, "vector-map",
"Vector map",
"Fixed vector control map",
_("_Vector Map"),
_("Fixed vector control map"),
TRUE,
G_PARAM_READWRITE);
GIMP_PROC_ARG_DOUBLE (procedure, "vector-scale",
"Vector scale",
"Scaling factor for fixed vector map (0=don't use)",
_("Vector magn_itude"),
_("Scaling factor for fixed vector map (0=don't use)"),
-G_MAXDOUBLE, G_MAXDOUBLE, 0.0,
G_PARAM_READWRITE);
GIMP_PROC_ARG_DOUBLE (procedure, "vector-angle",
"Vector angle",
"Angle for fixed vector map",
_("Ang_le"),
_("Angle for fixed vector map"),
0, 360, 0.0,
G_PARAM_READWRITE);
}
@ -360,7 +362,17 @@ warp_run (GimpProcedure *procedure,
run_mode = _run_mode;
if (run_mode == GIMP_RUN_INTERACTIVE && ! warp_dialog (drawable, config))
/* Initialize maps for GUI */
if (run_mode == GIMP_RUN_INTERACTIVE)
g_object_set (config,
"warp-map", drawable,
"mag-map", drawable,
"grad-map", drawable,
"vector-map", drawable,
NULL);
if (run_mode == GIMP_RUN_INTERACTIVE &&
! warp_dialog (drawable, procedure, config))
return gimp_procedure_new_return_values (procedure,
GIMP_PDB_CANCEL,
NULL);
@ -373,466 +385,113 @@ warp_run (GimpProcedure *procedure,
return gimp_procedure_new_return_values (procedure, GIMP_PDB_SUCCESS, NULL);
}
static GtkWidget *
spin_button_new (GtkAdjustment **adjustment, /* return value */
gdouble value,
gdouble lower,
gdouble upper,
gdouble step_increment,
gdouble page_increment,
gdouble page_size,
gdouble climb_rate,
guint digits)
{
GtkWidget *spinbutton;
*adjustment = gtk_adjustment_new (value, lower, upper,
step_increment, page_increment, 0);
spinbutton = gimp_spin_button_new (*adjustment,
climb_rate, digits);
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton), TRUE);
return spinbutton;
}
static gboolean
warp_dialog (GimpDrawable *drawable,
GimpProcedure *procedure,
GimpProcedureConfig *config)
{
GtkWidget *dlg;
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *toggle;
GtkWidget *toggle_hbox;
GtkWidget *frame;
GtkWidget *grid;
GtkWidget *spinbutton;
GtkAdjustment *adj;
GtkWidget *combo;
GtkSizeGroup *label_group;
GtkSizeGroup *spin_group;
GSList *group = NULL;
gboolean run;
GimpDrawable *warp_map;
GimpDrawable *mag_map;
GimpDrawable *grad_map;
GimpDrawable *vector_map;
gdouble amount;
gdouble dither;
gdouble angle;
gdouble grad_scale;
gdouble vector_scale;
gdouble vector_angle;
gboolean use_mag;
gint substeps;
gint iter_count;
gint wrap_type;
gint32 warp_map_id;
gint32 mag_map_id;
gint32 grad_map_id;
gint32 vector_map_id;
GtkWidget *dialog;
GtkWidget *hbox;
gboolean run;
gimp_ui_init (PLUG_IN_BINARY);
g_object_get (config,
"amount", &amount,
"warp-map", &warp_map,
"iter", &iter_count,
"dither", &dither,
"angle", &angle,
"wrap-type", &wrap_type,
"mag-map", &mag_map,
"mag-use", &use_mag,
"substeps", &substeps,
"grad-map", &grad_map,
"grad-scale", &grad_scale,
"vector-map", &vector_map,
"vector-scale", &vector_scale,
"vector-angle", &vector_angle,
NULL);
warp_map_id = gimp_item_get_id (GIMP_ITEM (warp_map));
mag_map_id = gimp_item_get_id (GIMP_ITEM (mag_map));
grad_map_id = gimp_item_get_id (GIMP_ITEM (grad_map));
vector_map_id = gimp_item_get_id (GIMP_ITEM (vector_map));
g_clear_object (&warp_map);
g_clear_object (&mag_map);
g_clear_object (&grad_map);
g_clear_object (&vector_map);
dlg = gimp_dialog_new (_("Warp"), PLUG_IN_ROLE,
NULL, 0,
gimp_standard_help_func, PLUG_IN_PROC,
_("_Cancel"), GTK_RESPONSE_CANCEL,
_("_OK"), GTK_RESPONSE_OK,
NULL);
gimp_dialog_set_alternative_button_order (GTK_DIALOG (dlg),
GTK_RESPONSE_OK,
GTK_RESPONSE_CANCEL,
-1);
gimp_window_set_transient (GTK_WINDOW (dlg));
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dlg))),
vbox, TRUE, TRUE, 0);
gtk_widget_show (vbox);
frame = gimp_frame_new (_("Basic Options"));
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
grid = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
gtk_container_add (GTK_CONTAINER (frame), grid);
gtk_widget_show (grid);
spin_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
label_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
/* amount, iter */
spinbutton = spin_button_new (&adj, amount,
-1000, 1000, /* ??? */
1, 10, 0, 1, 2);
gtk_size_group_add_widget (spin_group, spinbutton);
g_object_unref (spin_group);
label = gimp_grid_attach_aligned (GTK_GRID (grid), 0, 0,
_("Step size:"), 0.0, 0.5,
spinbutton, 1);
gtk_size_group_add_widget (label_group, label);
g_object_unref (label_group);
g_signal_connect (adj, "value-changed",
G_CALLBACK (gimp_double_adjustment_update),
&amount);
spinbutton = spin_button_new (&adj, iter_count,
1, 100, 1, 5, 0, 1, 0);
gtk_size_group_add_widget (spin_group, spinbutton);
label = gimp_grid_attach_aligned (GTK_GRID (grid), 0, 1,
_("Iterations:"), 0.0, 0.5,
spinbutton, 1);
gtk_size_group_add_widget (label_group, label);
g_signal_connect (adj, "value-changed",
G_CALLBACK (gimp_int_adjustment_update),
&iter_count);
/* Displacement map menu */
label = gtk_label_new (_("Displacement map:"));
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_label_set_yalign (GTK_LABEL (label), 1.0);
gtk_widget_set_margin_start (label, 12);
gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1);
// GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
combo = gimp_drawable_combo_box_new (warp_map_constrain,
drawable,
NULL);
gtk_widget_set_margin_start (combo, 12);
gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo),
warp_map_id,
G_CALLBACK (gimp_int_combo_box_get_active),
&warp_map_id, NULL);
gtk_grid_attach (GTK_GRID (grid), combo, 2, 1, 1, 1);
// GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_show (combo);
/* ======================================================================= */
/* Displacement Type */
label = gtk_label_new (_("On edges:"));
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_grid_attach (GTK_GRID (grid), label, 0, 2, 1, 1);
// GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
toggle_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
gtk_grid_attach (GTK_GRID (grid), toggle_hbox, 1, 2, 2, 1);
// GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (toggle_hbox);
toggle = gtk_radio_button_new_with_label (group, _("Wrap"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0);
gtk_widget_show (toggle);
g_object_set_data (G_OBJECT (toggle), "gimp-item-data",
GINT_TO_POINTER (WRAP));
g_signal_connect (toggle, "toggled",
G_CALLBACK (gimp_radio_button_update),
&wrap_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
wrap_type == WRAP);
toggle = gtk_radio_button_new_with_label (group, _("Smear"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0);
gtk_widget_show (toggle);
g_object_set_data (G_OBJECT (toggle), "gimp-item-data",
GINT_TO_POINTER (SMEAR));
g_signal_connect (toggle, "toggled",
G_CALLBACK (gimp_radio_button_update),
&wrap_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
wrap_type == SMEAR);
toggle = gtk_radio_button_new_with_label (group, _("Black"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0);
gtk_widget_show (toggle);
g_object_set_data (G_OBJECT (toggle), "gimp-item-data",
GINT_TO_POINTER (BLACK));
g_signal_connect (toggle, "toggled",
G_CALLBACK (gimp_radio_button_update),
&wrap_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
wrap_type == BLACK);
toggle = gtk_radio_button_new_with_label (group, _("Foreground color"));
group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (toggle));
gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0);
gtk_widget_show (toggle);
g_object_set_data (G_OBJECT (toggle), "gimp-item-data",
GINT_TO_POINTER (COLOR));
g_signal_connect (toggle, "toggled",
G_CALLBACK (gimp_radio_button_update),
&wrap_type);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
wrap_type == COLOR);
/* -------------------------------------------------------------------- */
/* --------- The secondary grid -------------------------- */
frame = gimp_frame_new (_("Advanced Options"));
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
grid = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
gtk_container_add (GTK_CONTAINER (frame), grid);
gtk_widget_show (grid);
spinbutton = spin_button_new (&adj, dither,
0, 100, 1, 10, 0, 1, 2);
gtk_size_group_add_widget (spin_group, spinbutton);
label = gimp_grid_attach_aligned (GTK_GRID (grid), 0, 0,
_("Dither size:"), 0.0, 0.5,
spinbutton, 1);
gtk_size_group_add_widget (label_group, label);
g_signal_connect (adj, "value-changed",
G_CALLBACK (gimp_double_adjustment_update),
&dither);
spinbutton = spin_button_new (&adj, angle,
0, 360, 1, 15, 0, 1, 1);
gtk_size_group_add_widget (spin_group, spinbutton);
label = gimp_grid_attach_aligned (GTK_GRID (grid), 0, 1,
_("Rotation angle:"), 0.0, 0.5,
spinbutton, 1);
gtk_size_group_add_widget (label_group, label);
g_signal_connect (adj, "value-changed",
G_CALLBACK (gimp_double_adjustment_update),
&angle);
spinbutton = spin_button_new (&adj, substeps,
1, 100, 1, 5, 0, 1, 0);
gtk_size_group_add_widget (spin_group, spinbutton);
label = gimp_grid_attach_aligned (GTK_GRID (grid), 0, 2,
_("Substeps:"), 0.0, 0.5,
spinbutton, 1);
gtk_size_group_add_widget (label_group, label);
g_signal_connect (adj, "value-changed",
G_CALLBACK (gimp_int_adjustment_update),
&substeps);
/* Magnitude map menu */
label = gtk_label_new (_("Magnitude map:"));
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_label_set_yalign (GTK_LABEL (label), 1.0);
gtk_widget_set_margin_start (label, 12);
gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1);
// GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (label);
combo = gimp_drawable_combo_box_new (warp_map_constrain,
drawable,
NULL);
gtk_widget_set_margin_start (combo, 12);
gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo),
mag_map_id,
G_CALLBACK (gimp_int_combo_box_get_active),
&mag_map_id, NULL);
gtk_grid_attach (GTK_GRID (grid), combo, 2, 1, 1, 1);
// GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_show (combo);
/* Magnitude Usage */
toggle_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 4);
gtk_container_set_border_width (GTK_CONTAINER (toggle_hbox), 1);
gtk_grid_attach (GTK_GRID (grid), toggle_hbox, 2, 2, 1, 1);
// GTK_FILL, GTK_FILL, 0, 0);
gtk_widget_show (toggle_hbox);
toggle = gtk_check_button_new_with_label (_("Use magnitude map"));
gtk_widget_set_margin_start (toggle, 12);
gtk_box_pack_start (GTK_BOX (toggle_hbox), toggle, FALSE, FALSE, 0);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle), use_mag);
gtk_widget_show (toggle);
g_signal_connect (toggle, "toggled",
G_CALLBACK (gimp_toggle_button_update),
&use_mag);
/* -------------------------------------------------------------------- */
/* --------- The "other" grid -------------------------- */
frame = gimp_frame_new (_("More Advanced Options"));
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
grid = gtk_grid_new ();
gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
gtk_grid_set_column_spacing (GTK_GRID (grid), 6);
gtk_container_add (GTK_CONTAINER (frame), grid);
gtk_widget_show (grid);
spinbutton = spin_button_new (&adj, grad_scale,
-1000, 1000, /* ??? */
0.01, 0.1, 0, 1, 3);
gtk_size_group_add_widget (spin_group, spinbutton);
label = gimp_grid_attach_aligned (GTK_GRID (grid), 0, 0,
_("Gradient scale:"), 0.0, 0.5,
spinbutton, 1);
gtk_size_group_add_widget (label_group, label);
g_signal_connect (adj, "value-changed",
G_CALLBACK (gimp_double_adjustment_update),
&grad_scale);
/* --------- Gradient map menu ---------------- */
combo = gimp_drawable_combo_box_new (warp_map_constrain,
drawable,
NULL);
gtk_widget_set_margin_start (combo, 12);
gtk_grid_attach (GTK_GRID (grid), combo, 2, 0, 1, 1);
// GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_show (combo);
gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo),
grad_map_id,
G_CALLBACK (gimp_int_combo_box_get_active),
&grad_map_id, NULL);
gimp_help_set_help_data (combo, _("Gradient map selection menu"), NULL);
/* ---------------------------------------------- */
spinbutton = spin_button_new (&adj, vector_scale,
-1000, 1000, /* ??? */
0.01, 0.1, 0, 1, 3);
gtk_size_group_add_widget (spin_group, spinbutton);
label = gimp_grid_attach_aligned (GTK_GRID (grid), 0, 1,
_("Vector mag:"), 0.0, 0.5,
spinbutton, 1);
gtk_size_group_add_widget (label_group, label);
g_signal_connect (adj, "value-changed",
G_CALLBACK (gimp_double_adjustment_update),
&vector_scale);
/* -------------------------------------------------------- */
spinbutton = spin_button_new (&adj, vector_angle,
0, 360, 1, 15, 0, 1, 1);
gtk_size_group_add_widget (spin_group, spinbutton);
label = gimp_grid_attach_aligned (GTK_GRID (grid), 0, 2,
_("Angle:"), 0.0, 0.5,
spinbutton, 1);
gtk_size_group_add_widget (label_group, label);
g_signal_connect (adj, "value-changed",
G_CALLBACK (gimp_double_adjustment_update),
&vector_angle);
/* --------- Vector map menu ---------------- */
combo = gimp_drawable_combo_box_new (warp_map_constrain,
drawable,
NULL);
gtk_widget_set_margin_start (combo, 12);
gtk_grid_attach (GTK_GRID (grid), combo, 2, 1, 1, 1);
// GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0);
gtk_widget_show (combo);
gimp_int_combo_box_connect (GIMP_INT_COMBO_BOX (combo),
vector_map_id,
G_CALLBACK (gimp_int_combo_box_get_active),
&vector_map_id, NULL);
gimp_help_set_help_data (combo,
_("Fixed-direction-vector map selection menu"),
NULL);
gtk_widget_show (dlg);
run = (gimp_dialog_run (GIMP_DIALOG (dlg)) == GTK_RESPONSE_OK);
gtk_widget_destroy (dlg);
g_object_set (config,
"amount", amount,
"warp-map", gimp_drawable_get_by_id (warp_map_id),
"iter", iter_count,
"dither", dither,
"angle", angle,
"wrap-type", wrap_type,
"mag-map", gimp_drawable_get_by_id (mag_map_id),
"mag-use", use_mag,
"substeps", substeps,
"grad-map", gimp_drawable_get_by_id (grad_map_id),
"grad-scale", grad_scale,
"vector-map", gimp_drawable_get_by_id (vector_map_id),
"vector-scale", vector_scale,
"vector-angle", vector_angle,
NULL);
dialog = gimp_procedure_dialog_new (procedure,
GIMP_PROCEDURE_CONFIG (config),
_("Warp"));
/* Basic Options */
gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog),
"basic-options-left",
"amount", "iter", "wrap-type",
NULL);
hbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog),
"basic-options-hbox",
"basic-options-left",
"warp-map",
NULL);
gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox),
GTK_ORIENTATION_HORIZONTAL);
gtk_box_set_spacing (GTK_BOX (hbox), 12);
gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
gimp_procedure_dialog_get_label (GIMP_PROCEDURE_DIALOG (dialog),
"basic-options-label", _("Basic Options"),
FALSE, FALSE);
gimp_procedure_dialog_fill_frame (GIMP_PROCEDURE_DIALOG (dialog),
"basic-options-frame",
"basic-options-label", FALSE,
"basic-options-hbox");
/* Advanced Options */
gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog),
"advanced-options-left",
"dither", "angle", "substeps",
NULL);
gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog),
"advanced-options-right",
"mag-map", "mag-use",
NULL);
hbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog),
"advanced-options-hbox",
"advanced-options-left",
"advanced-options-right",
NULL);
gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox),
GTK_ORIENTATION_HORIZONTAL);
gtk_box_set_spacing (GTK_BOX (hbox), 12);
gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
gimp_procedure_dialog_get_label (GIMP_PROCEDURE_DIALOG (dialog),
"advanced-options-label",
_("Advanced Options"),
FALSE, FALSE);
gimp_procedure_dialog_fill_frame (GIMP_PROCEDURE_DIALOG (dialog),
"advanced-options-frame",
"advanced-options-label", FALSE,
"advanced-options-hbox");
/* More Advanced Options */
gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog),
"more-advanced-options-left",
"grad-scale", "vector-scale",
"vector-angle",
NULL);
hbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog),
"more-advanced-options-hbox",
"more-advanced-options-left",
"grad-map", "vector-map",
NULL);
gtk_orientable_set_orientation (GTK_ORIENTABLE (hbox),
GTK_ORIENTATION_HORIZONTAL);
gtk_box_set_spacing (GTK_BOX (hbox), 12);
gtk_box_set_homogeneous (GTK_BOX (hbox), TRUE);
gimp_procedure_dialog_get_label (GIMP_PROCEDURE_DIALOG (dialog),
"more-advanced-options-label",
_("More Advanced Options"),
FALSE, FALSE);
gimp_procedure_dialog_fill_frame (GIMP_PROCEDURE_DIALOG (dialog),
"more-advanced-options-frame",
"more-advanced-options-label", FALSE,
"more-advanced-options-hbox");
/* Show dialog */
gimp_procedure_dialog_fill (GIMP_PROCEDURE_DIALOG (dialog),
"basic-options-frame",
"advanced-options-frame",
"more-advanced-options-frame",
NULL);
gtk_widget_set_visible (dialog, TRUE);
run = gimp_procedure_dialog_run (GIMP_PROCEDURE_DIALOG (dialog));
gtk_widget_destroy (dialog);
return run;
}
@ -1907,9 +1566,7 @@ warp_pixel (GeglBuffer *buffer,
guchar *data;
gint wrap_type;
g_object_get (config,
"wrap-type", &wrap_type,
NULL);
wrap_type = gimp_procedure_config_get_choice_id (config, "wrap-type");
/* Tile the image. */
if (wrap_type == WRAP)
@ -1957,16 +1614,3 @@ warp_pixel (GeglBuffer *buffer,
pixel[b] = data[b];
}
}
/* Warp interface functions */
static gboolean
warp_map_constrain (GimpImage *image,
GimpItem *item,
gpointer data)
{
GimpDrawable *d = data;
return (gimp_drawable_get_width (GIMP_DRAWABLE (item)) == gimp_drawable_get_width (d) &&
gimp_drawable_get_height (GIMP_DRAWABLE (item)) == gimp_drawable_get_height (d));
}