The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/app/bin/perl

eval 'exec /usr/app/bin/perl  -S $0 ${1+"$@"}'
    if 0; # not running under some shell
# <sjburges@gimp.org>
# This is adrian's idea - take random blends and difference them.  You're
# bound to come up w/ something cool eventually.

use Gimp qw(:auto __ N_);
use Gimp::Fu;
use Gimp::Util;

# Gimp::set_trace(TRACE_ALL);

sub randint {
    my ($int) = @_;
    return int(rand()*$int +0.5);
    }    

register "random_blends", 
         "Random Blends - take a guess.", 
         "A random approach to art.  Just try it. It might be good.",
         "Seth Burgess", 
         "Seth Burgess <sjburges\@gimp.org>", 
         "1999-03-18",
         N_"<Image>/Filters/Render/Random Blends...", 
         "RGB*, GRAY*", 
         [ 
           [PF_SPINNER, "number", "How many gradients to apply", 7, [1,255,1]], 
            ],
         [],
         ['gimp-1.1'],
         sub {
    my($img,$layer,$numgradients) =@_;
    eval { $img->undo_push_group_start };  # undo is broked for this one.
# add this to the get_state (after its working?)
	$oldgradient = gimp_gradients_get_active();
    ($sel,$x1,$y1,$x2,$y2) = $img->gimp_selection_bounds;
    srand();

    @gradientlist = gimp_gradients_get_list();  
    for ($i=0; $i<=$numgradients; $i++) {
        gimp_gradients_set_active(@gradientlist[randint($#gradientlist)]);
        $layer->gimp_blend(CUSTOM,  
                           6,              # DIFFERENCE
# I'd really like to alternate how many arguments in gradient type depending
# on what version of gimp is being run.. Hints anyone? -sjb
                           randint(10),      # gradient type
                           randint(100),     # opacity
                           0,                # offset
                           randint(2),       # repeat
                           0,3,0.2,          # disabled supersampling
                           randint($x2-$x1)+$x1, # x1
                           randint($y2-$y1)+$y1, # y1
                           randint($x2-$x1)+$x1, # x2
                           randint($y2-$y1)+$y1, # y2
                           );
        }
    eval { $img->undo_push_group_end };
	gimp_gradients_set_active($oldgradient);
    return();
};
exit main;