1997-11-24 22:05:25 +00:00
/****************************************************************************
1998-07-02 18:06:30 +00:00
* This is a plugin for the GIMP v 1.0 or later . Documentation is
1997-12-08 21:37:39 +00:00
* available at http : //www.rru.com/~meo/gimp/ .
1997-11-24 22:05:25 +00:00
*
1998-07-02 18:06:30 +00:00
* Copyright ( C ) 1997 - 8 Miles O ' Neal < meo @ rru . com > http : //www.rru.com/~meo/
1997-11-24 22:05:25 +00:00
* GUI based on GTK code from :
1997-12-08 21:37:39 +00:00
* alienmap ( Copyright ( C ) 1996 , 1997 Daniel Cotting )
* plasma ( Copyright ( C ) 1996 Stephen Norris ) ,
* oilify ( Copyright ( C ) 1996 Torsten Martinsen ) ,
* ripple ( Copyright ( C ) 1997 Brian Degenhardt ) and
* whirl ( Copyright ( C ) 1997 Federico Mena Quintero ) .
1997-11-24 22:05:25 +00:00
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
1998-04-13 05:44:11 +00:00
* Foundation , Inc . , 59 Temple Place - Suite 330 , Boston , MA 02111 - 1307 , USA .
1997-11-24 22:05:25 +00:00
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/****************************************************************************
* Randomize :
*
1998-07-02 18:06:30 +00:00
* randomize version 1.7 ( 1 May 1998 , MEO )
1997-11-24 22:05:25 +00:00
*
* Please send any patches or suggestions to the author : meo @ rru . com .
*
* This plug - in adds a user - defined amount of randomization to an
* image . Variations include :
*
* - hurling ( spewing random colors )
* - picking a nearby pixel at random
* - slurring ( a crude form of melting )
*
* In any case , for each pixel in the selection or image ,
* whether to change the pixel is decided by picking a
* random number , weighted by the user ' s " randomization " percentage .
1998-04-30 23:42:31 +00:00
* If the random number is in range , the pixel is modified . Picking
1997-11-24 22:05:25 +00:00
* one selects the new pixel value at random from the current and
* adjacent pixels . Hurling assigns a random value to the pixel .
* Slurring sort of melts downwards ; if a pixel is to be slurred ,
* there is an 80 % chance the pixel above be used ; otherwise , one
* of the pixels adjacent to the one above is used ( even odds as
* to which it will be ) .
*
1998-04-30 23:42:31 +00:00
* Picking , hurling and slurring work with any image type .
1997-11-24 22:05:25 +00:00
*
* This plug - in ' s effectiveness varies a lot with the type
* and clarity of the image being " randomized " .
*
* Hurling more than 75 % or so onto an existing image will
* make the image nearly unrecognizable . By 90 % hurl , most
* images are indistinguishable from random noise .
*
* The repeat count is especially useful with slurring .
*
* TODO List
*
1997-12-08 21:37:39 +00:00
* - add a real melt function
1997-11-24 22:05:25 +00:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2000-01-08 15:23:28 +00:00
# ifdef HAVE_CONFIG_H
# include "config.h"
# endif
1998-06-12 06:34:22 +00:00
# include <stdio.h>
1997-11-24 22:05:25 +00:00
# include <stdlib.h>
1999-05-29 01:28:24 +00:00
# include <string.h>
1997-11-24 22:05:25 +00:00
# include <time.h>
2000-01-08 15:23:28 +00:00
# include <gtk/gtk.h>
# include <libgimp/gimp.h>
# include <libgimp/gimpui.h>
1998-07-02 18:06:30 +00:00
2000-01-03 13:01:51 +00:00
# include "libgimp/stdplugins-intl.h"
2000-05-01 20:22:55 +00:00
1997-12-08 21:37:39 +00:00
/*********************************
*
* PLUGIN - SPECIFIC CONSTANTS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1997-11-24 22:05:25 +00:00
/*
* progress meter update frequency
*/
# define PROG_UPDATE_TIME ((row % 10) == 0)
2000-01-11 17:41:07 +00:00
gchar * PLUG_IN_NAME [ ] =
{
" plug_in_randomize_hurl " ,
" plug_in_randomize_pick " ,
" plug_in_randomize_slur " ,
1998-07-02 18:06:30 +00:00
} ;
2000-01-11 17:41:07 +00:00
gchar * RNDM_VERSION [ ] =
{
2000-01-03 13:01:51 +00:00
N_ ( " Random Hurl 1.7 " ) ,
N_ ( " Random Pick 1.7 " ) ,
N_ ( " Random Slur 1.7 " ) ,
1998-07-02 18:06:30 +00:00
} ;
1997-11-24 22:05:25 +00:00
1998-04-30 23:42:31 +00:00
# define RNDM_HURL 1
# define RNDM_PICK 2
# define RNDM_SLUR 3
1997-11-24 22:05:25 +00:00
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
# define SEED_DEFAULT 10
1997-11-24 22:05:25 +00:00
# define SEED_USER 11
# define SCALE_WIDTH 100
1998-07-02 18:06:30 +00:00
gint rndm_type = RNDM_HURL ; /* hurl, pick, etc. */
1997-12-08 21:37:39 +00:00
/*********************************
*
* PLUGIN - SPECIFIC STRUCTURES AND DATA
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2000-01-11 17:41:07 +00:00
typedef struct
{
gdouble rndm_pct ; /* likelihood of randomization (as %age) */
gdouble rndm_rcount ; /* repeat count */
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
gint rndm_seed ; /* seed value for g_rand_set_seed() function */
1997-11-24 22:05:25 +00:00
} RandomizeVals ;
2000-01-11 17:41:07 +00:00
static RandomizeVals pivals =
{
50.0 ,
1.0 ,
2002-12-01 14:53:17 +00:00
SEED_DEFAULT
1997-11-24 22:05:25 +00:00
} ;
2000-01-11 17:41:07 +00:00
typedef struct
{
2003-07-02 13:00:16 +00:00
gboolean run ;
1997-11-24 22:05:25 +00:00
} RandomizeInterface ;
2000-01-11 17:41:07 +00:00
static RandomizeInterface rndm_int =
{
FALSE /* have we run? */
1997-11-24 22:05:25 +00:00
} ;
/*********************************
*
* LOCAL FUNCTIONS
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2000-01-08 15:23:28 +00:00
static void query ( void ) ;
2003-07-02 13:00:16 +00:00
static void run ( const gchar * name ,
gint nparams ,
const GimpParam * param ,
gint * nreturn_vals ,
GimpParam * * return_vals ) ;
1997-11-24 22:05:25 +00:00
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
static void randomize ( GimpDrawable * drawable ,
GRand * gr ) ;
2000-05-01 20:22:55 +00:00
2000-08-22 01:26:57 +00:00
static inline void randomize_prepare_row ( GimpPixelRgn * pixel_rgn ,
2001-12-31 00:21:10 +00:00
guchar * data ,
gint x ,
gint y ,
gint w ) ;
2000-05-01 20:22:55 +00:00
static gint randomize_dialog ( void ) ;
2001-12-31 00:21:10 +00:00
static void randomize_ok_callback ( GtkWidget * widget ,
gpointer data ) ;
2000-05-01 20:22:55 +00:00
/************************************ Guts ***********************************/
2000-08-22 01:26:57 +00:00
GimpPlugInInfo PLUG_IN_INFO =
2000-01-11 17:41:07 +00:00
{
2000-01-25 17:46:56 +00:00
NULL , /* init_proc */
NULL , /* quit_proc */
query , /* query_proc */
run , /* run_proc */
1997-11-24 22:05:25 +00:00
} ;
2000-01-16 15:38:38 +00:00
MAIN ( )
1997-11-24 22:05:25 +00:00
/*********************************
*
* query ( ) - query_proc
*
* called by the GIMP to learn about this plug - in
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void
2000-01-08 15:23:28 +00:00
query ( void )
1997-11-24 22:05:25 +00:00
{
2000-08-22 01:26:57 +00:00
static GimpParamDef args [ ] =
2000-01-08 15:23:28 +00:00
{
2000-08-22 01:26:57 +00:00
{ GIMP_PDB_INT32 , " run_mode " , " Interactive, non-interactive " } ,
{ GIMP_PDB_IMAGE , " image " , " Input image (unused) " } ,
{ GIMP_PDB_DRAWABLE , " drawable " , " Input drawable " } ,
{ GIMP_PDB_FLOAT , " rndm_pct " , " Randomization percentage (1.0 - 100.0) " } ,
{ GIMP_PDB_FLOAT , " rndm_rcount " , " Repeat count (1.0 - 100.0) " } ,
{ GIMP_PDB_INT32 , " rndm_seed " , " Seed value (used only if seed type is 11) " }
2000-01-08 15:23:28 +00:00
} ;
2000-01-11 17:41:07 +00:00
const gchar * hurl_blurb =
2000-01-31 02:32:30 +00:00
" Add a random factor to the image by hurling random data at it. " ;
2000-01-11 17:41:07 +00:00
const gchar * pick_blurb =
2000-01-31 02:32:30 +00:00
" Add a random factor to the image by picking a random adjacent pixel. " ;
2000-01-11 17:41:07 +00:00
const gchar * slur_blurb =
2000-01-31 02:32:30 +00:00
" Add a random factor to the image by slurring (similar to melting). " ;
2000-01-08 15:23:28 +00:00
2000-01-11 17:41:07 +00:00
const gchar * hurl_help =
2000-01-31 02:32:30 +00:00
" This plug-in ``hurls'' randomly-valued pixels onto the selection or image. You may select the percentage of pixels to modify and the number of times to repeat the process. " ;
2000-01-11 17:41:07 +00:00
const gchar * pick_help =
2000-01-31 02:32:30 +00:00
" This plug-in replaces a pixel with a random adjacent pixel. You may select the percentage of pixels to modify and the number of times to repeat the process. " ;
2000-01-11 17:41:07 +00:00
const gchar * slur_help =
2000-01-31 02:32:30 +00:00
" This plug-in slurs (melts like a bunch of icicles) an image. You may select the percentage of pixels to modify and the number of times to repeat the process. " ;
2000-01-08 15:23:28 +00:00
2000-01-11 17:41:07 +00:00
const gchar * author = " Miles O'Neal <meo@rru.com> http://www.rru.com/~meo/ " ;
const gchar * copyrights = " Miles O'Neal, Spencer Kimball, Peter Mattis, Torsten Martinsen, Brian Degenhardt, Federico Mena Quintero, Stephen Norris, Daniel Cotting " ;
const gchar * copyright_date = " 1995-1998 " ;
2000-01-08 15:23:28 +00:00
gimp_install_procedure ( PLUG_IN_NAME [ 0 ] ,
2000-01-11 17:41:07 +00:00
( gchar * ) hurl_blurb ,
( gchar * ) hurl_help ,
( gchar * ) author ,
( gchar * ) copyrights ,
( gchar * ) copyright_date ,
2000-01-08 15:23:28 +00:00
N_ ( " <Image>/Filters/Noise/Hurl... " ) ,
" RGB*, GRAY*, INDEXED* " ,
2000-08-22 01:26:57 +00:00
GIMP_PLUGIN ,
2001-12-06 02:28:58 +00:00
G_N_ELEMENTS ( args ) , 0 ,
2000-02-04 15:12:17 +00:00
args , NULL ) ;
2000-01-08 15:23:28 +00:00
gimp_install_procedure ( PLUG_IN_NAME [ 1 ] ,
2000-01-11 17:41:07 +00:00
( gchar * ) pick_blurb ,
( gchar * ) pick_help ,
( gchar * ) author ,
( gchar * ) copyrights ,
( gchar * ) copyright_date ,
2000-01-08 15:23:28 +00:00
N_ ( " <Image>/Filters/Noise/Pick... " ) ,
" RGB*, GRAY*, INDEXED* " ,
2000-08-22 01:26:57 +00:00
GIMP_PLUGIN ,
2001-12-06 02:28:58 +00:00
G_N_ELEMENTS ( args ) , 0 ,
2000-02-04 15:12:17 +00:00
args , NULL ) ;
2000-01-08 15:23:28 +00:00
gimp_install_procedure ( PLUG_IN_NAME [ 2 ] ,
2000-01-11 17:41:07 +00:00
( gchar * ) slur_blurb ,
( gchar * ) slur_help ,
( gchar * ) author ,
( gchar * ) copyrights ,
( gchar * ) copyright_date ,
2000-01-08 15:23:28 +00:00
N_ ( " <Image>/Filters/Noise/Slur... " ) ,
" RGB*, GRAY*, INDEXED* " ,
2000-08-22 01:26:57 +00:00
GIMP_PLUGIN ,
2001-12-06 02:28:58 +00:00
G_N_ELEMENTS ( args ) , 0 ,
2000-02-04 15:12:17 +00:00
args , NULL ) ;
1997-11-24 22:05:25 +00:00
}
/*********************************
*
* run ( ) - main routine
*
* This handles the main interaction with the GIMP itself ,
* and invokes the routine that actually does the work .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void
2003-07-02 13:00:16 +00:00
run ( const gchar * name ,
gint nparams ,
const GimpParam * param ,
gint * nreturn_vals ,
GimpParam * * return_vals )
1997-11-24 22:05:25 +00:00
{
2001-12-31 00:21:10 +00:00
GimpDrawable * drawable ;
GimpRunMode run_mode ;
GimpPDBStatusType status = GIMP_PDB_SUCCESS ; /* assume the best! */
gchar * rndm_type_str = ' \0 ' ;
gchar prog_label [ 32 ] ;
static GimpParam values [ 1 ] ;
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
GRand * gr ; /* The GRand object which generates the
* random numbers */
2001-12-31 00:21:10 +00:00
2003-03-25 16:38:19 +00:00
INIT_I18N ( ) ;
2000-01-08 15:23:28 +00:00
/*
* Get the specified drawable , do standard initialization .
*/
2001-12-31 00:21:10 +00:00
if ( strcmp ( name , PLUG_IN_NAME [ 0 ] ) = = 0 )
2000-01-08 15:23:28 +00:00
rndm_type = RNDM_HURL ;
2001-12-31 00:21:10 +00:00
else if ( strcmp ( name , PLUG_IN_NAME [ 1 ] ) = = 0 )
2000-01-08 15:23:28 +00:00
rndm_type = RNDM_PICK ;
2001-12-31 00:21:10 +00:00
else if ( strcmp ( name , PLUG_IN_NAME [ 2 ] ) = = 0 )
2000-01-08 15:23:28 +00:00
rndm_type = RNDM_SLUR ;
run_mode = param [ 0 ] . data . d_int32 ;
drawable = gimp_drawable_get ( param [ 2 ] . data . d_drawable ) ;
* nreturn_vals = 1 ;
2001-12-31 00:21:10 +00:00
* return_vals = values ;
values [ 0 ] . type = GIMP_PDB_STATUS ;
values [ 0 ] . data . d_status = status ;
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
gr = g_rand_new ( ) ;
2000-01-08 15:23:28 +00:00
/*
* Make sure the drawable type is appropriate .
*/
2001-06-14 20:07:38 +00:00
if ( gimp_drawable_is_rgb ( drawable - > drawable_id ) | |
gimp_drawable_is_gray ( drawable - > drawable_id ) | |
gimp_drawable_is_indexed ( drawable - > drawable_id ) )
2000-01-08 15:23:28 +00:00
{
switch ( run_mode )
{
/*
* If we ' re running interactively , pop up the dialog box .
*/
2000-08-22 01:26:57 +00:00
case GIMP_RUN_INTERACTIVE :
2000-01-08 15:23:28 +00:00
gimp_get_data ( PLUG_IN_NAME [ rndm_type - 1 ] , & pivals ) ;
if ( ! randomize_dialog ( ) ) /* return on Cancel */
return ;
break ;
/*
* If we ' re not interactive ( probably scripting ) , we
* get the parameters from the param [ ] array , since
* we don ' t use the dialog box . Make sure they all
* parameters have legitimate values .
*/
2000-08-22 01:26:57 +00:00
case GIMP_RUN_NONINTERACTIVE :
2000-01-08 15:23:28 +00:00
if ( nparams ! = 7 )
{
2000-08-22 01:26:57 +00:00
status = GIMP_PDB_CALLING_ERROR ;
2000-01-08 15:23:28 +00:00
}
2000-02-04 22:18:50 +00:00
else
2000-01-08 15:23:28 +00:00
{
pivals . rndm_pct = ( gdouble ) param [ 3 ] . data . d_float ;
pivals . rndm_rcount = ( gdouble ) param [ 4 ] . data . d_float ;
pivals . rndm_seed = ( gint ) param [ 6 ] . data . d_int32 ;
2000-02-04 22:18:50 +00:00
if ( ( rndm_type ! = RNDM_PICK & &
rndm_type ! = RNDM_SLUR & &
rndm_type ! = RNDM_HURL ) | |
( pivals . rndm_pct < 1.0 | | pivals . rndm_pct > 100.0 ) | |
( pivals . rndm_rcount < 1.0 | | pivals . rndm_rcount > 100.0 ) )
{
2000-08-22 01:26:57 +00:00
status = GIMP_PDB_CALLING_ERROR ;
2000-02-04 22:18:50 +00:00
}
2000-01-08 15:23:28 +00:00
}
break ;
/*
* If we ' re running with the last set of values , get those values .
*/
2000-08-22 01:26:57 +00:00
case GIMP_RUN_WITH_LAST_VALS :
2000-02-04 22:18:50 +00:00
gimp_get_data ( PLUG_IN_NAME [ rndm_type - 1 ] , & pivals ) ;
2000-01-08 15:23:28 +00:00
break ;
/*
* Hopefully we never get here !
*/
default :
break ;
1998-04-30 23:42:31 +00:00
}
2000-08-22 01:26:57 +00:00
if ( status = = GIMP_PDB_SUCCESS )
2000-01-08 15:23:28 +00:00
{
/*
* JUST DO IT !
*/
switch ( rndm_type )
{
case RNDM_HURL : rndm_type_str = " hurl " ; break ;
case RNDM_PICK : rndm_type_str = " pick " ; break ;
case RNDM_SLUR : rndm_type_str = " slur " ; break ;
1998-02-20 10:41:20 +00:00
}
2003-06-13 14:37:00 +00:00
sprintf ( prog_label , " %s (%s)... " ,
gettext ( RNDM_VERSION [ rndm_type - 1 ] ) ,
2000-02-13 00:11:26 +00:00
gettext ( rndm_type_str ) ) ;
2000-01-08 15:23:28 +00:00
gimp_progress_init ( prog_label ) ;
gimp_tile_cache_ntiles ( 2 * ( drawable - > width / gimp_tile_width ( ) + 1 ) ) ;
/*
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
* Initialize the g_rand ( ) function seed
2000-01-08 15:23:28 +00:00
*/
2002-11-24 19:26:58 +00:00
g_rand_set_seed ( gr , pivals . rndm_seed ) ;
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
randomize ( drawable , gr ) ;
2000-01-08 15:23:28 +00:00
/*
* If we ran interactively ( even repeating ) update the display .
*/
2000-08-22 01:26:57 +00:00
if ( run_mode ! = GIMP_RUN_NONINTERACTIVE )
2000-01-08 15:23:28 +00:00
{
gimp_displays_flush ( ) ;
1998-04-30 23:42:31 +00:00
}
2000-01-08 15:23:28 +00:00
/*
* If we use the dialog popup , set the data for future use .
*/
2000-08-22 01:26:57 +00:00
if ( run_mode = = GIMP_RUN_INTERACTIVE )
2000-01-08 15:23:28 +00:00
{
gimp_set_data ( PLUG_IN_NAME [ rndm_type - 1 ] , & pivals ,
sizeof ( RandomizeVals ) ) ;
1998-04-30 23:42:31 +00:00
}
1998-02-20 10:41:20 +00:00
}
1997-11-24 22:05:25 +00:00
}
2000-01-08 15:23:28 +00:00
else
{
/*
* If we got the wrong drawable type , we need to complain .
*/
2000-08-22 01:26:57 +00:00
status = GIMP_PDB_EXECUTION_ERROR ;
2000-01-08 15:23:28 +00:00
}
/*
* DONE !
* Set the status where the GIMP can see it , and let go
* of the drawable .
*/
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
g_rand_free ( gr ) ;
2000-01-08 15:23:28 +00:00
values [ 0 ] . data . d_status = status ;
gimp_drawable_detach ( drawable ) ;
1997-11-24 22:05:25 +00:00
}
/*********************************
*
* randomize_prepare_row ( )
*
* Get a row of pixels . If the requested row
* is off the edge , clone the edge row .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
1998-02-20 10:41:20 +00:00
static inline void
2000-08-22 01:26:57 +00:00
randomize_prepare_row ( GimpPixelRgn * pixel_rgn ,
2000-01-08 15:23:28 +00:00
guchar * data ,
int x ,
int y ,
int w )
1997-11-24 22:05:25 +00:00
{
2000-01-08 15:23:28 +00:00
gint b ;
1997-11-24 22:05:25 +00:00
2003-02-05 22:29:40 +00:00
if ( y < = 0 )
2000-01-08 15:23:28 +00:00
{
1997-11-24 22:05:25 +00:00
gimp_pixel_rgn_get_row ( pixel_rgn , data , x , ( y + 1 ) , w ) ;
2000-01-08 15:23:28 +00:00
}
2003-02-05 22:29:40 +00:00
else if ( y > = pixel_rgn - > h )
2000-01-08 15:23:28 +00:00
{
1997-11-24 22:05:25 +00:00
gimp_pixel_rgn_get_row ( pixel_rgn , data , x , ( y - 1 ) , w ) ;
2000-01-08 15:23:28 +00:00
}
else
{
1997-11-24 22:05:25 +00:00
gimp_pixel_rgn_get_row ( pixel_rgn , data , x , y , w ) ;
}
2000-01-08 15:23:28 +00:00
/*
* Fill in edge pixels
*/
for ( b = 0 ; b < pixel_rgn - > bpp ; b + + )
{
data [ - ( gint ) pixel_rgn - > bpp + b ] = data [ b ] ;
data [ w * pixel_rgn - > bpp + b ] = data [ ( w - 1 ) * pixel_rgn - > bpp + b ] ;
1997-11-24 22:05:25 +00:00
}
}
/*********************************
*
* randomize ( )
*
* Actually mess with the image .
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static void
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
randomize ( GimpDrawable * drawable ,
GRand * gr )
1997-11-24 22:05:25 +00:00
{
2000-08-22 01:26:57 +00:00
GimpPixelRgn srcPR , destPR , destPR2 , * sp , * dp , * tp ;
2000-01-08 15:23:28 +00:00
gint width , height ;
gint bytes ;
guchar * dest , * d ;
guchar * prev_row , * pr ;
guchar * cur_row , * cr ;
guchar * next_row , * nr ;
guchar * tmp ;
gint row , col ;
gint x1 , y1 , x2 , y2 ;
gint cnt ;
gint has_alpha , ind ;
/*
* 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
* operating on the input area is simply an optimization . It doesn ' t
* need to be done for correct operation . ( It simply makes it go
* faster , since fewer pixels need to be operated on ) .
*/
2001-06-14 20:07:38 +00:00
gimp_drawable_mask_bounds ( drawable - > drawable_id , & x1 , & y1 , & x2 , & y2 ) ;
2000-01-08 15:23:28 +00:00
/*
* Get the size of the input image . ( This will / must be the same
* as the size of the output image . Also get alpha info .
*/
width = drawable - > width ;
height = drawable - > height ;
bytes = drawable - > bpp ;
2001-06-14 20:07:38 +00:00
has_alpha = gimp_drawable_has_alpha ( drawable - > drawable_id ) ;
2000-01-08 15:23:28 +00:00
/*
* allocate row buffers
*/
2000-01-11 17:41:07 +00:00
prev_row = g_new ( guchar , ( x2 - x1 + 2 ) * bytes ) ;
cur_row = g_new ( guchar , ( x2 - x1 + 2 ) * bytes ) ;
next_row = g_new ( guchar , ( x2 - x1 + 2 ) * bytes ) ;
dest = g_new ( guchar , ( x2 - x1 ) * bytes ) ;
2000-01-08 15:23:28 +00:00
/*
* initialize the pixel regions
*/
gimp_pixel_rgn_init ( & srcPR , drawable , 0 , 0 , width , height , FALSE , FALSE ) ;
gimp_pixel_rgn_init ( & destPR , drawable , 0 , 0 , width , height , TRUE , TRUE ) ;
gimp_pixel_rgn_init ( & destPR2 , drawable , 0 , 0 , width , height , TRUE , TRUE ) ;
sp = & srcPR ;
dp = & destPR ;
tp = NULL ;
pr = prev_row + bytes ;
cr = cur_row + bytes ;
nr = next_row + bytes ;
for ( cnt = 1 ; cnt < = pivals . rndm_rcount ; cnt + + )
{
/*
* prepare the first row and previous row
*/
randomize_prepare_row ( sp , pr , x1 , y1 - 1 , ( x2 - x1 ) ) ;
randomize_prepare_row ( dp , cr , x1 , y1 , ( x2 - x1 ) ) ;
/*
* loop through the rows , applying the selected convolution
*/
for ( row = y1 ; row < y2 ; row + + )
{
/* prepare the next row */
randomize_prepare_row ( sp , nr , x1 , row + 1 , ( x2 - x1 ) ) ;
d = dest ;
ind = 0 ;
for ( col = 0 ; col < ( x2 - x1 ) * bytes ; col + + )
{
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
if ( g_rand_int_range ( gr , 0 , 100 ) < = ( gint ) pivals . rndm_pct )
2000-01-08 15:23:28 +00:00
{
switch ( rndm_type )
{
/*
* HURL
* Just assign a random value .
*/
case RNDM_HURL :
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
* d + + = g_rand_int_range ( gr , 0 , 256 ) ;
1998-04-30 23:42:31 +00:00
break ;
2000-01-08 15:23:28 +00:00
/*
* PICK
* pick at random from a neighboring pixel .
*/
case RNDM_PICK :
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
switch ( g_rand_int_range ( gr , 0 , 9 ) )
2000-01-08 15:23:28 +00:00
{
case 0 :
* d + + = ( gint ) pr [ col - bytes ] ;
break ;
case 1 :
* d + + = ( gint ) pr [ col ] ;
break ;
case 2 :
* d + + = ( gint ) pr [ col + bytes ] ;
break ;
case 3 :
* d + + = ( gint ) cr [ col - bytes ] ;
break ;
case 4 :
* d + + = ( gint ) cr [ col ] ;
break ;
case 5 :
* d + + = ( gint ) cr [ col + bytes ] ;
break ;
case 6 :
* d + + = ( gint ) nr [ col - bytes ] ;
break ;
case 7 :
* d + + = ( gint ) nr [ col ] ;
break ;
case 8 :
* d + + = ( gint ) nr [ col + bytes ] ;
break ;
1998-04-30 23:42:31 +00:00
}
break ;
2000-01-08 15:23:28 +00:00
/*
* SLUR
* 80 % chance it ' s from directly above ,
* 10 % from above left ,
* 10 % from above right .
*/
case RNDM_SLUR :
configure.in app/core/gimpbrushpipe.c app/gui/about-dialog.c
2002-11-20 Dave Neary <bolsh@gimp.org>
* configure.in
* app/core/gimpbrushpipe.c
* app/gui/about-dialog.c
* app/paint-funcs/paint-funcs-generic.h
* app/paint-funcs/paint-funcs.c
* libgimpmath/gimpmath.h
* libgimpwidgets/gimpwidgets.c
* plug-ins/common/CML_explorer.c
* plug-ins/common/blur.c
* plug-ins/common/cubism.c
* plug-ins/common/gee.c
* plug-ins/common/gee_zoom.c
* plug-ins/common/gqbist.c
* plug-ins/common/jigsaw.c
* plug-ins/common/lic.c
* plug-ins/common/noisify.c
* plug-ins/common/nova.c
* plug-ins/common/papertile.c
* plug-ins/common/plasma.c
* plug-ins/common/randomize.c
* plug-ins/common/sample_colorize.c
* plug-ins/common/scatter_hsv.c
* plug-ins/common/shift.c
* plug-ins/common/sinus.c
* plug-ins/common/smooth_palette.c
* plug-ins/common/snoise.c
* plug-ins/common/sparkle.c
* plug-ins/common/spheredesigner.c
* plug-ins/common/spread.c
* plug-ins/common/warp.c
* plug-ins/common/wind.c
* plug-ins/flame/cmap.c
* plug-ins/flame/flame.c
* plug-ins/flame/libifs.c
* plug-ins/gflare/gflare.c
* plug-ins/gimpressionist/gimpressionist.c
* plug-ins/gimpressionist/gimpressionist.h
* plug-ins/gimpressionist/plasma.c
* plug-ins/gimpressionist/repaint.c
* plug-ins/ifscompose/ifscompose_utils.c
* plug-ins/maze/algorithms.c
* plug-ins/maze/maze.c
* plug-ins/maze/maze.h
* plug-ins/mosaic/mosaic.c: Change all occurrences of RAND_MAX,
G_MAXRAND, rand(), srand(), lrand48(), srand48(), random(),
srandom(), RAND_FUNC and SRAND_FUNC to the appropriate g_rand*
equivalent. Programs which require seed setting for reproducible
results, and anything in the core, gets a dedicated GRand * for
the lifetime required. Programs which only ever used random
numbers for tossing a coin, rolling a dice, etc use g_random
functions. For the rest, judgement was used. Where it was easy, a
GRand * object was used and g_rand_* functions were
preferred. This fixes bug #67386 in HEAD.
2002-11-20 09:27:48 +00:00
switch ( g_rand_int_range ( gr , 0 , 10 ) )
2000-01-08 15:23:28 +00:00
{
case 0 :
* d + + = ( gint ) pr [ col - bytes ] ;
break ;
case 9 :
* d + + = ( gint ) pr [ col + bytes ] ;
break ;
default :
* d + + = ( gint ) pr [ col ] ;
break ;
1998-04-30 23:42:31 +00:00
}
break ;
}
2000-01-08 15:23:28 +00:00
/*
* Otherwise , this pixel was not selected for randomization ,
* so use the current value .
*/
}
else
{
* d + + = ( gint ) cr [ col ] ;
1998-04-30 23:42:31 +00:00
}
}
2000-01-08 15:23:28 +00:00
/*
* Save the modified row , shuffle the row pointers , and every
* so often , update the progress meter .
*/
gimp_pixel_rgn_set_row ( dp , dest , x1 , row , ( x2 - x1 ) ) ;
tmp = pr ;
pr = cr ;
cr = nr ;
nr = tmp ;
if ( PROG_UPDATE_TIME )
gimp_progress_update ( ( double ) row / ( double ) ( y2 - y1 ) ) ;
1998-04-30 23:42:31 +00:00
}
2000-01-08 15:23:28 +00:00
/*
* if we have more cycles to perform , swap the src and dest Pixel Regions
*/
if ( cnt < pivals . rndm_rcount )
{
if ( tp ! = NULL )
{
tp = dp ;
dp = sp ;
sp = tp ;
}
else
{
tp = & srcPR ;
sp = & destPR ;
dp = & destPR2 ;
1998-04-30 23:42:31 +00:00
}
1997-12-08 21:37:39 +00:00
}
1997-11-24 22:05:25 +00:00
}
2000-01-08 15:23:28 +00:00
gimp_progress_update ( ( double ) 100 ) ;
/*
* update the randomized region
*/
gimp_drawable_flush ( drawable ) ;
2001-06-14 20:07:38 +00:00
gimp_drawable_merge_shadow ( drawable - > drawable_id , TRUE ) ;
gimp_drawable_update ( drawable - > drawable_id , x1 , y1 , ( x2 - x1 ) , ( y2 - y1 ) ) ;
2000-01-08 15:23:28 +00:00
/*
* clean up after ourselves .
*/
2000-01-11 17:41:07 +00:00
g_free ( prev_row ) ;
g_free ( cur_row ) ;
g_free ( next_row ) ;
g_free ( dest ) ;
1997-11-24 22:05:25 +00:00
}
/*********************************
*
* GUI ROUTINES
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/*********************************
*
* randomize_dialog ( ) - set up the plug - in ' s dialog box
*
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
static gint
2000-01-08 15:23:28 +00:00
randomize_dialog ( void )
1997-11-24 22:05:25 +00:00
{
2000-01-08 15:23:28 +00:00
GtkWidget * dlg ;
GtkWidget * frame ;
GtkWidget * table ;
2002-05-27 17:25:30 +00:00
GtkWidget * label ;
2000-01-25 17:46:56 +00:00
GtkWidget * seed_hbox ;
2000-01-16 15:38:38 +00:00
GtkObject * adj ;
2000-01-08 15:23:28 +00:00
2000-05-01 20:22:55 +00:00
gimp_ui_init ( " randomize " , FALSE ) ;
2000-01-08 15:23:28 +00:00
dlg = gimp_dialog_new ( gettext ( RNDM_VERSION [ rndm_type - 1 ] ) , " randomize " ,
2000-05-22 17:10:28 +00:00
gimp_standard_help_func , " filters/randomize.html " ,
2000-01-08 15:23:28 +00:00
GTK_WIN_POS_MOUSE ,
FALSE , TRUE , FALSE ,
2001-08-03 19:52:08 +00:00
GTK_STOCK_CANCEL , gtk_widget_destroy ,
2000-01-08 15:23:28 +00:00
NULL , 1 , NULL , FALSE , TRUE ,
2001-11-29 13:23:44 +00:00
GTK_STOCK_OK , randomize_ok_callback ,
NULL , NULL , NULL , TRUE , FALSE ,
2000-01-08 15:23:28 +00:00
NULL ) ;
2003-01-07 06:16:02 +00:00
g_signal_connect ( dlg , " destroy " ,
2001-12-31 00:21:10 +00:00
G_CALLBACK ( gtk_main_quit ) ,
NULL ) ;
2000-01-08 15:23:28 +00:00
/*
* Parameter settings
*
* First set up the basic containers , label them , etc .
*/
frame = gtk_frame_new ( _ ( " Parameter Settings " ) ) ;
gtk_frame_set_shadow_type ( GTK_FRAME ( frame ) , GTK_SHADOW_ETCHED_IN ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( frame ) , 6 ) ;
gtk_box_pack_start ( GTK_BOX ( GTK_DIALOG ( dlg ) - > vbox ) , frame , TRUE , TRUE , 0 ) ;
2000-01-25 17:46:56 +00:00
table = gtk_table_new ( 3 , 3 , FALSE ) ;
2000-01-08 15:23:28 +00:00
gtk_table_set_col_spacings ( GTK_TABLE ( table ) , 4 ) ;
gtk_table_set_row_spacings ( GTK_TABLE ( table ) , 2 ) ;
gtk_container_set_border_width ( GTK_CONTAINER ( table ) , 4 ) ;
gtk_container_add ( GTK_CONTAINER ( frame ) , table ) ;
gtk_widget_show ( table ) ;
2000-01-11 17:41:07 +00:00
2000-01-25 17:46:56 +00:00
/* Random Seed */
2002-11-24 19:26:58 +00:00
seed_hbox = gimp_random_seed_new ( & pivals . rndm_seed ) ;
2002-05-27 17:25:30 +00:00
label = gimp_table_attach_aligned ( GTK_TABLE ( table ) , 0 , 0 ,
_ ( " _Random Seed: " ) , 1.0 , 0.5 ,
seed_hbox , 1 , TRUE ) ;
gtk_label_set_mnemonic_widget ( GTK_LABEL ( label ) ,
GIMP_RANDOM_SEED_SPINBUTTON ( seed_hbox ) ) ;
2000-01-16 15:38:38 +00:00
2000-01-08 15:23:28 +00:00
/*
* Randomization percentage label & scale ( 1 to 100 )
*/
2000-01-25 17:46:56 +00:00
adj = gimp_scale_entry_new ( GTK_TABLE ( table ) , 0 , 1 ,
2002-05-27 17:25:30 +00:00
_ ( " R_andomization (%): " ) , SCALE_WIDTH , 0 ,
2000-01-16 15:38:38 +00:00
pivals . rndm_pct , 1.0 , 100.0 , 1.0 , 10.0 , 0 ,
2000-02-04 15:12:17 +00:00
TRUE , 0 , 0 ,
2000-01-16 15:38:38 +00:00
_ ( " Percentage of pixels to be filtered " ) , NULL ) ;
2003-01-07 06:16:02 +00:00
g_signal_connect ( adj , " value_changed " ,
2003-02-05 22:29:40 +00:00
G_CALLBACK ( gimp_double_adjustment_update ) ,
2001-12-31 00:21:10 +00:00
& pivals . rndm_pct ) ;
2000-01-16 15:38:38 +00:00
2000-01-08 15:23:28 +00:00
/*
* Repeat count label & scale ( 1 to 100 )
*/
2000-01-25 17:46:56 +00:00
adj = gimp_scale_entry_new ( GTK_TABLE ( table ) , 0 , 2 ,
2002-05-27 17:25:30 +00:00
_ ( " R_epeat: " ) , SCALE_WIDTH , 0 ,
2000-01-16 15:38:38 +00:00
pivals . rndm_rcount , 1.0 , 100.0 , 1.0 , 10.0 , 0 ,
2000-02-04 15:12:17 +00:00
TRUE , 0 , 0 ,
2000-01-16 15:38:38 +00:00
_ ( " Number of times to apply filter " ) , NULL ) ;
2003-01-07 06:16:02 +00:00
g_signal_connect ( adj , " value_changed " ,
2001-12-31 00:21:10 +00:00
G_CALLBACK ( gimp_double_adjustment_update ) ,
& pivals . rndm_rcount ) ;
2000-01-16 15:38:38 +00:00
2000-01-08 15:23:28 +00:00
gtk_widget_show ( frame ) ;
2000-01-16 15:38:38 +00:00
2000-01-08 15:23:28 +00:00
gtk_widget_show ( dlg ) ;
gtk_main ( ) ;
gdk_flush ( ) ;
2000-01-16 15:38:38 +00:00
2000-01-08 15:23:28 +00:00
return rndm_int . run ;
1997-11-24 22:05:25 +00:00
}
static void
2000-01-08 15:23:28 +00:00
randomize_ok_callback ( GtkWidget * widget ,
gpointer data )
{
rndm_int . run = TRUE ;
gtk_widget_destroy ( GTK_WIDGET ( data ) ) ;
1997-11-24 22:05:25 +00:00
}