added previews for hurl, pick, and slur.
2008-01-03 Bill Skaggs <weskaggs@primate.ucdavis.edu> * plug-ins/common/randomize.c: added previews for hurl, pick, and slur. svn path=/trunk/; revision=24511
This commit is contained in:

committed by
William Skaggs

parent
88b021c024
commit
6ca147e61b
@ -1,3 +1,8 @@
|
|||||||
|
2008-01-03 Bill Skaggs <weskaggs@primate.ucdavis.edu>
|
||||||
|
|
||||||
|
* plug-ins/common/randomize.c: added previews for hurl,
|
||||||
|
pick, and slur.
|
||||||
|
|
||||||
2008-01-02 Michael Natterer <mitch@gimp.org>
|
2008-01-02 Michael Natterer <mitch@gimp.org>
|
||||||
|
|
||||||
* app/core/Makefile.am
|
* app/core/Makefile.am
|
||||||
|
@ -136,6 +136,8 @@ static RandomizeVals pivals =
|
|||||||
SEED_DEFAULT
|
SEED_DEFAULT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static GRand *gr; /* The GRand object which generates the
|
||||||
|
* random numbers */
|
||||||
|
|
||||||
/*********************************
|
/*********************************
|
||||||
*
|
*
|
||||||
@ -151,7 +153,7 @@ static void run (const gchar *name,
|
|||||||
GimpParam **return_vals);
|
GimpParam **return_vals);
|
||||||
|
|
||||||
static void randomize (GimpDrawable *drawable,
|
static void randomize (GimpDrawable *drawable,
|
||||||
GRand *gr);
|
GimpPreview *preview);
|
||||||
|
|
||||||
static inline void randomize_prepare_row (GimpPixelRgn *pixel_rgn,
|
static inline void randomize_prepare_row (GimpPixelRgn *pixel_rgn,
|
||||||
guchar *data,
|
guchar *data,
|
||||||
@ -159,7 +161,7 @@ static inline void randomize_prepare_row (GimpPixelRgn *pixel_rgn,
|
|||||||
gint y,
|
gint y,
|
||||||
gint w);
|
gint w);
|
||||||
|
|
||||||
static gboolean randomize_dialog (void);
|
static gboolean randomize_dialog (GimpDrawable *drawable);
|
||||||
|
|
||||||
|
|
||||||
/************************************ Guts ***********************************/
|
/************************************ Guts ***********************************/
|
||||||
@ -283,8 +285,6 @@ run (const gchar *name,
|
|||||||
GimpRunMode run_mode;
|
GimpRunMode run_mode;
|
||||||
GimpPDBStatusType status = GIMP_PDB_SUCCESS; /* assume the best! */
|
GimpPDBStatusType status = GIMP_PDB_SUCCESS; /* assume the best! */
|
||||||
static GimpParam values[1];
|
static GimpParam values[1];
|
||||||
GRand *gr; /* The GRand object which generates the
|
|
||||||
* random numbers */
|
|
||||||
|
|
||||||
INIT_I18N ();
|
INIT_I18N ();
|
||||||
|
|
||||||
@ -315,6 +315,8 @@ run (const gchar *name,
|
|||||||
gimp_drawable_is_gray (drawable->drawable_id) ||
|
gimp_drawable_is_gray (drawable->drawable_id) ||
|
||||||
gimp_drawable_is_indexed (drawable->drawable_id))
|
gimp_drawable_is_indexed (drawable->drawable_id))
|
||||||
{
|
{
|
||||||
|
gimp_tile_cache_ntiles (2 * drawable->ntile_cols);
|
||||||
|
|
||||||
switch (run_mode)
|
switch (run_mode)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
@ -323,7 +325,7 @@ run (const gchar *name,
|
|||||||
case GIMP_RUN_INTERACTIVE:
|
case GIMP_RUN_INTERACTIVE:
|
||||||
gimp_get_data (PLUG_IN_PROC[rndm_type - 1], &pivals);
|
gimp_get_data (PLUG_IN_PROC[rndm_type - 1], &pivals);
|
||||||
|
|
||||||
if (! randomize_dialog ()) /* return on Cancel */
|
if (! randomize_dialog (drawable)) /* return on Cancel */
|
||||||
return;
|
return;
|
||||||
break;
|
break;
|
||||||
/*
|
/*
|
||||||
@ -375,9 +377,6 @@ run (const gchar *name,
|
|||||||
|
|
||||||
if (status == GIMP_PDB_SUCCESS)
|
if (status == GIMP_PDB_SUCCESS)
|
||||||
{
|
{
|
||||||
gimp_tile_cache_ntiles (2 *
|
|
||||||
(drawable->width / gimp_tile_width () + 1));
|
|
||||||
|
|
||||||
gimp_progress_init_printf ("%s", gettext (RNDM_NAME[rndm_type - 1]));
|
gimp_progress_init_printf ("%s", gettext (RNDM_NAME[rndm_type - 1]));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -385,7 +384,7 @@ run (const gchar *name,
|
|||||||
*/
|
*/
|
||||||
g_rand_set_seed (gr, pivals.seed);
|
g_rand_set_seed (gr, pivals.seed);
|
||||||
|
|
||||||
randomize (drawable, gr);
|
randomize (drawable, NULL);
|
||||||
/*
|
/*
|
||||||
* If we ran interactively (even repeating) update the display.
|
* If we ran interactively (even repeating) update the display.
|
||||||
*/
|
*/
|
||||||
@ -470,7 +469,7 @@ randomize_prepare_row (GimpPixelRgn *pixel_rgn,
|
|||||||
|
|
||||||
static void
|
static void
|
||||||
randomize (GimpDrawable *drawable,
|
randomize (GimpDrawable *drawable,
|
||||||
GRand *gr)
|
GimpPreview *preview)
|
||||||
{
|
{
|
||||||
GimpPixelRgn srcPR, destPR, destPR2, *sp, *dp, *tp;
|
GimpPixelRgn srcPR, destPR, destPR2, *sp, *dp, *tp;
|
||||||
gint width, height;
|
gint width, height;
|
||||||
@ -486,22 +485,23 @@ randomize (GimpDrawable *drawable,
|
|||||||
gint has_alpha, ind;
|
gint has_alpha, ind;
|
||||||
gint i, j, k;
|
gint i, j, k;
|
||||||
|
|
||||||
/*
|
if (preview)
|
||||||
* Get the input area. This is the bounding box of the selection in
|
{
|
||||||
* the image (or the entire image if there is no selection). Only
|
gimp_preview_get_position (preview, &x1, &y1);
|
||||||
* operating on the input area is simply an optimization. It doesn't
|
gimp_preview_get_size (preview, &width, &height);
|
||||||
* need to be done for correct operation. (It simply makes it go
|
x2 = x1 + width;
|
||||||
* faster, since fewer pixels need to be operated on).
|
y2 = y1 + height;
|
||||||
*/
|
}
|
||||||
gimp_drawable_mask_bounds(drawable->drawable_id, &x1, &y1, &x2, &y2);
|
else
|
||||||
/*
|
{
|
||||||
* Get the size of the input image. (This will/must be the same
|
gimp_drawable_mask_bounds (drawable->drawable_id, &x1, &y1, &x2, &y2);
|
||||||
* as the size of the output image. Also get alpha info.
|
width = (x2 - x1);
|
||||||
*/
|
height = (y2 - y1);
|
||||||
width = drawable->width;
|
}
|
||||||
height = drawable->height;
|
|
||||||
bytes = drawable->bpp;
|
bytes = drawable->bpp;
|
||||||
has_alpha = gimp_drawable_has_alpha(drawable->drawable_id);
|
has_alpha = gimp_drawable_has_alpha(drawable->drawable_id);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* allocate row buffers
|
* allocate row buffers
|
||||||
*/
|
*/
|
||||||
@ -513,9 +513,9 @@ randomize (GimpDrawable *drawable,
|
|||||||
/*
|
/*
|
||||||
* initialize the pixel regions
|
* initialize the pixel regions
|
||||||
*/
|
*/
|
||||||
gimp_pixel_rgn_init(&srcPR, drawable, 0, 0, width, height, FALSE, FALSE);
|
gimp_pixel_rgn_init (&srcPR, drawable, x1, y1, width, height, FALSE, FALSE);
|
||||||
gimp_pixel_rgn_init(&destPR, drawable, 0, 0, width, height, TRUE, TRUE);
|
gimp_pixel_rgn_init (&destPR, drawable, x1, y1, width, height, TRUE, TRUE);
|
||||||
gimp_pixel_rgn_init(&destPR2, drawable, 0, 0, width, height, TRUE, TRUE);
|
gimp_pixel_rgn_init (&destPR2, drawable, x1, y1, width, height, TRUE, TRUE);
|
||||||
sp = &srcPR;
|
sp = &srcPR;
|
||||||
dp = &destPR;
|
dp = &destPR;
|
||||||
tp = NULL;
|
tp = NULL;
|
||||||
@ -646,10 +646,13 @@ randomize (GimpDrawable *drawable,
|
|||||||
cr = nr;
|
cr = nr;
|
||||||
nr = tmp;
|
nr = tmp;
|
||||||
|
|
||||||
if (PROG_UPDATE_TIME)
|
if (! preview && PROG_UPDATE_TIME)
|
||||||
gimp_progress_update ((cnt - 1 +
|
{
|
||||||
(double) row / (double) (y2 - y1)) /
|
gdouble base = (gdouble) cnt / pivals.rndm_rcount;
|
||||||
pivals.rndm_rcount);
|
gdouble inc = (gdouble) row / ((y2 - y1) * pivals.rndm_rcount);
|
||||||
|
|
||||||
|
gimp_progress_update (base + inc);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -672,14 +675,23 @@ randomize (GimpDrawable *drawable,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
gimp_progress_update (1.0);
|
if (! preview)
|
||||||
|
gimp_progress_update (1.0);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* update the randomized region
|
* update the randomized region
|
||||||
*/
|
*/
|
||||||
gimp_drawable_flush (drawable);
|
if (preview)
|
||||||
gimp_drawable_merge_shadow (drawable->drawable_id, TRUE);
|
{
|
||||||
gimp_drawable_update (drawable->drawable_id, x1, y1, (x2 - x1), (y2 - y1));
|
gimp_drawable_preview_draw_region (GIMP_DRAWABLE_PREVIEW (preview),
|
||||||
|
dp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gimp_drawable_flush (drawable);
|
||||||
|
gimp_drawable_merge_shadow (drawable->drawable_id, TRUE);
|
||||||
|
gimp_drawable_update (drawable->drawable_id, x1, y1, (x2 - x1), (y2 - y1));
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* clean up after ourselves.
|
* clean up after ourselves.
|
||||||
@ -704,12 +716,14 @@ randomize (GimpDrawable *drawable,
|
|||||||
********************************/
|
********************************/
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
randomize_dialog (void)
|
randomize_dialog (GimpDrawable *drawable)
|
||||||
{
|
{
|
||||||
GtkWidget *dlg;
|
GtkWidget *dlg;
|
||||||
GtkWidget *table;
|
GtkWidget *table;
|
||||||
GtkWidget *label;
|
GtkWidget *label;
|
||||||
GtkWidget *seed_hbox;
|
GtkWidget *seed_hbox;
|
||||||
|
GtkWidget *main_vbox;
|
||||||
|
GtkWidget *preview;
|
||||||
GtkObject *adj;
|
GtkObject *adj;
|
||||||
gboolean run;
|
gboolean run;
|
||||||
|
|
||||||
@ -731,11 +745,24 @@ randomize_dialog (void)
|
|||||||
|
|
||||||
gimp_window_set_transient (GTK_WINDOW (dlg));
|
gimp_window_set_transient (GTK_WINDOW (dlg));
|
||||||
|
|
||||||
|
main_vbox = gtk_vbox_new (FALSE, 12);
|
||||||
|
gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 12);
|
||||||
|
gtk_container_add (GTK_CONTAINER (GTK_DIALOG (dlg)->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 (randomize),
|
||||||
|
drawable);
|
||||||
|
|
||||||
table = gtk_table_new (3, 3, FALSE);
|
table = gtk_table_new (3, 3, FALSE);
|
||||||
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
|
gtk_table_set_col_spacings (GTK_TABLE (table), 6);
|
||||||
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
|
gtk_table_set_row_spacings (GTK_TABLE (table), 6);
|
||||||
gtk_container_set_border_width (GTK_CONTAINER (table), 12);
|
gtk_container_set_border_width (GTK_CONTAINER (table), 12);
|
||||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dlg)->vbox), table, TRUE, TRUE, 0);
|
gtk_box_pack_start (GTK_BOX (main_vbox), table, TRUE, TRUE, 0);
|
||||||
gtk_widget_show(table);
|
gtk_widget_show(table);
|
||||||
|
|
||||||
/* Random Seed */
|
/* Random Seed */
|
||||||
@ -757,6 +784,9 @@ randomize_dialog (void)
|
|||||||
g_signal_connect (adj, "value-changed",
|
g_signal_connect (adj, "value-changed",
|
||||||
G_CALLBACK (gimp_double_adjustment_update),
|
G_CALLBACK (gimp_double_adjustment_update),
|
||||||
&pivals.rndm_pct);
|
&pivals.rndm_pct);
|
||||||
|
g_signal_connect_swapped (adj, "value-changed",
|
||||||
|
G_CALLBACK (gimp_preview_invalidate),
|
||||||
|
preview);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Repeat count label & scale (1 to 100)
|
* Repeat count label & scale (1 to 100)
|
||||||
@ -769,6 +799,9 @@ randomize_dialog (void)
|
|||||||
g_signal_connect (adj, "value-changed",
|
g_signal_connect (adj, "value-changed",
|
||||||
G_CALLBACK (gimp_double_adjustment_update),
|
G_CALLBACK (gimp_double_adjustment_update),
|
||||||
&pivals.rndm_rcount);
|
&pivals.rndm_rcount);
|
||||||
|
g_signal_connect_swapped (adj, "value-changed",
|
||||||
|
G_CALLBACK (gimp_preview_invalidate),
|
||||||
|
preview);
|
||||||
|
|
||||||
gtk_widget_show (dlg);
|
gtk_widget_show (dlg);
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user