diff --git a/plug-ins/perl/Changes b/plug-ins/perl/Changes index 48a926727a..f6c91bd131 100644 --- a/plug-ins/perl/Changes +++ b/plug-ins/perl/Changes @@ -1,7 +1,15 @@ Revision history for Gimp-Perl extension. +1.08 Fri Apr 9 03:20:54 CEST 1999 - added guidegrid, git-text, roundrectsel, repdup, centerguide, - stampify, goldenmean, triangle. + stampify, goldenmean, triangle, billboard, mirrorsplit. + - improved error detection when some moron forgets to 'use strict' + and tries to use undefined symbols. + - added VALUE, RED, GREEN, BLUE constants for gimp_levels. + - added WRAP, SMEAR, BLACK constants for plug_in_displace. + - RUN_WITH_LAST_VALS is ignored if no LAST_VALS exist. + - fixed a bug in Gimp::Data, FETCH returned undef for valid keys. + - small compatibility fix in scm2scm. 1.072 Sat Mar 27 21:04:39 CET 1999 - scripts will now be correctly installed when IN_GIMP. diff --git a/plug-ins/perl/Gimp.pm b/plug-ins/perl/Gimp.pm index bf37c3110b..786c70dd09 100644 --- a/plug-ins/perl/Gimp.pm +++ b/plug-ins/perl/Gimp.pm @@ -13,7 +13,7 @@ use subs qw(init end lock unlock canonicalize_color); require DynaLoader; @ISA=qw(DynaLoader); -$VERSION = 1.072; +$VERSION = 1.08; @_param = qw( PARAM_BOUNDARY PARAM_CHANNEL PARAM_COLOR PARAM_DISPLAY PARAM_DRAWABLE @@ -56,6 +56,10 @@ $VERSION = 1.072; BLUE_HUES MAGENTA_HUES HORIZONTAL VERTICAL + + VALUE RED GREEN BLUE + + WRAP SMEAR BLACK )); @_procs = qw( @@ -66,81 +70,90 @@ bootstrap Gimp $VERSION; # defs missing from libgimp -sub BEHIND_MODE (){ 2 }; +sub BEHIND_MODE (){ 2 } -sub FG_BG_RGB (){ 0 }; -sub FG_BG_HSV (){ 1 }; -sub FG_TRANS (){ 2 }; -sub CUSTOM (){ 3 }; +sub FG_BG_RGB (){ 0 } +sub FG_BG_HSV (){ 1 } +sub FG_TRANS (){ 2 } +sub CUSTOM (){ 3 } -sub LINEAR (){ 0 }; -sub BILINEAR (){ 1 }; -sub RADIAL (){ 2 }; -sub SQUARE (){ 3 }; -sub CONICAL_SYMMETRIC (){ 4 }; -sub CONICAL_ASYMMETRIC (){ 5 }; -sub SHAPEBURST_ANGULAR (){ 6 }; -sub SHAPEBURST_SPHERICAL(){ 7 }; -sub SHAPEBURST_DIMPLED (){ 8 }; -sub SPIRAL_CLOCKWISE (){ 9 }; -sub SPIRAL_ANTICLOCKWISE(){10 }; +sub LINEAR (){ 0 } +sub BILINEAR (){ 1 } +sub RADIAL (){ 2 } +sub SQUARE (){ 3 } +sub CONICAL_SYMMETRIC (){ 4 } +sub CONICAL_ASYMMETRIC (){ 5 } +sub SHAPEBURST_ANGULAR (){ 6 } +sub SHAPEBURST_SPHERICAL(){ 7 } +sub SHAPEBURST_DIMPLED (){ 8 } +sub SPIRAL_CLOCKWISE (){ 9 } +sub SPIRAL_ANTICLOCKWISE(){10 } -sub REPEAT_NONE (){ 0 }; -sub REPEAT_SAWTOOTH (){ 1 }; -sub REPEAT_TRIANGULAR (){ 2 }; +sub REPEAT_NONE (){ 0 } +sub REPEAT_SAWTOOTH (){ 1 } +sub REPEAT_TRIANGULAR (){ 2 } -sub FG_BUCKET_FILL (){ 0 }; -sub BG_BUCKET_FILL (){ 1 }; -sub PATTERN_BUCKET_FILL (){ 2 }; +sub FG_BUCKET_FILL (){ 0 } +sub BG_BUCKET_FILL (){ 1 } +sub PATTERN_BUCKET_FILL (){ 2 } -sub RED_CHANNEL (){ 0 }; -sub GREEN_CHANNEL (){ 1 }; -sub BLUE_CHANNEL (){ 2 }; -sub GRAY_CHANNEL (){ 3 }; -sub INDEXED_CHANNEL (){ 4 }; +sub RED_CHANNEL (){ 0 } +sub GREEN_CHANNEL (){ 1 } +sub BLUE_CHANNEL (){ 2 } +sub GRAY_CHANNEL (){ 3 } +sub INDEXED_CHANNEL (){ 4 } -sub WHITE_MASK (){ 0 }; -sub BLACK_MASK (){ 1 }; -sub ALPHA_MASK (){ 2 }; +sub WHITE_MASK (){ 0 } +sub BLACK_MASK (){ 1 } +sub ALPHA_MASK (){ 2 } -sub APPLY (){ 0 }; -sub DISCARD (){ 1 }; +sub APPLY (){ 0 } +sub DISCARD (){ 1 } -sub EXPAND_AS_NECESSARY (){ 0 }; -sub CLIP_TO_IMAGE (){ 1 }; -sub CLIP_TO_BOTTOM_LAYER(){ 2 }; +sub EXPAND_AS_NECESSARY (){ 0 } +sub CLIP_TO_IMAGE (){ 1 } +sub CLIP_TO_BOTTOM_LAYER(){ 2 } -sub SELECTION_ADD (){ 0 }; -sub SELECTION_SUB (){ 1 }; -sub SELECTION_REPLACE (){ 2 }; -sub SELECTION_INTERSECT (){ 3 }; +sub SELECTION_ADD (){ 0 } +sub SELECTION_SUB (){ 1 } +sub SELECTION_REPLACE (){ 2 } +sub SELECTION_INTERSECT (){ 3 } -sub PIXELS (){ 0 }; -sub POINTS (){ 1 }; +sub PIXELS (){ 0 } +sub POINTS (){ 1 } -sub IMAGE_CLONE (){ 0 }; -sub PATTERN_CLONE (){ 1 }; +sub IMAGE_CLONE (){ 0 } +sub PATTERN_CLONE (){ 1 } -sub BLUR (){ 0 }; -sub SHARPEN (){ 1 }; +sub BLUR (){ 0 } +sub SHARPEN (){ 1 } -sub ALL_HUES (){ 0 }; -sub RED_HUES (){ 1 }; -sub YELLOW_HUES (){ 2 }; -sub GREEN_HUES (){ 3 }; -sub CYAN_HUES (){ 4 }; -sub BLUE_HUES (){ 5 }; -sub MAGENTA_HUES (){ 6 }; +sub ALL_HUES (){ 0 } +sub RED_HUES (){ 1 } +sub YELLOW_HUES (){ 2 } +sub GREEN_HUES (){ 3 } +sub CYAN_HUES (){ 4 } +sub BLUE_HUES (){ 5 } +sub MAGENTA_HUES (){ 6 } -sub MESSAGE_BOX (){ 0 }; -sub CONSOLE (){ 1 }; +sub MESSAGE_BOX (){ 0 } +sub CONSOLE (){ 1 } -sub SHADOWS (){ 0 }; -sub MIDTONES (){ 1 }; -sub HIGHLIGHTS (){ 2 }; +sub SHADOWS (){ 0 } +sub MIDTONES (){ 1 } +sub HIGHLIGHTS (){ 2 } -sub HORIZONTAL (){ 0 }; -sub VERTICAL (){ 1 }; +sub HORIZONTAL (){ 0 } +sub VERTICAL (){ 1 } + +sub VALUE (){ 0 } +sub RED (){ 1 } +sub GREEN (){ 2 } +sub BLUE (){ 3 } + +sub WRAP (){ 0 } +sub SMEAR (){ 1 } +sub BLACK (){ 2 } # internal constants shared with Perl-Server diff --git a/plug-ins/perl/Gimp/Data.pm b/plug-ins/perl/Gimp/Data.pm index eb773928cc..04f1345095 100644 --- a/plug-ins/perl/Gimp/Data.pm +++ b/plug-ins/perl/Gimp/Data.pm @@ -12,7 +12,7 @@ sub TIEHASH { sub FETCH { eval { Gimp->find_parasite ($_[1])->data } - || $@ ? Gimp->get_data ($_[1]) : (); + || ($@ ? Gimp->get_data ($_[1]) : ()); } sub STORE { diff --git a/plug-ins/perl/Gimp/Fu.pm b/plug-ins/perl/Gimp/Fu.pm index d23acb53d5..e21424d730 100644 --- a/plug-ins/perl/Gimp/Fu.pm +++ b/plug-ins/perl/Gimp/Fu.pm @@ -933,15 +933,23 @@ sub register($$$$$$$$$;@) { for (0..$#{$params}) { $_[$_]=$params->[$_]->[3] unless defined($_[$_]); } - - if ($run_mode == &Gimp::RUN_INTERACTIVE) { - if (@_) { - my $res; - local $^W=0; # perl -w is braindamaged - my $VAR1; # Data::Dumper is braindamaged - # gimp is braindamaged, is doesn't deliver useful values!! - ($res,@_)=interact($function,$blurb,$help,$params,@{eval $Gimp::Data{"$function/_fu_data"}}); - return unless $res; + + if ($run_mode == &Gimp::RUN_INTERACTIVE + || $run_mode == &Gimp::RUN_WITH_LAST_VALS) { + my $fudata = $Gimp::Data{"$function/_fu_data"}; + my $VAR1; # Data::Dumper is braindamaged + local $^W=0; # perl -w is braindamaged + + if ($run_mode == &Gimp::RUN_WITH_LAST_VALS && $fudata ne "") { + @_ = @{eval $fudata}; + } else { + if (@_) { + my $res; + local $^W=0; # perl -w is braindamaged + # gimp is braindamaged, is doesn't deliver useful values!! + ($res,@_)=interact($function,$blurb,$help,$params,@{eval $fudata}); + return unless $res; + } } } elsif ($run_mode == &Gimp::RUN_FULLINTERACTIVE) { my($res); @@ -949,9 +957,6 @@ sub register($$$$$$$$$;@) { undef @pre; return unless $res; } elsif ($run_mode == &Gimp::RUN_NONINTERACTIVE) { - } elsif ($run_mode == &Gimp::RUN_WITH_LAST_VALS) { - my $VAR1; # Data::Dumper is braindamaged - @_=@{eval $Gimp::Data{"$function/_fu_data"}}; } else { die "run_mode must be INTERACTIVE, NONINTERACTIVE or WITH_LAST_VALS\n"; } diff --git a/plug-ins/perl/Gimp/Lib.xs b/plug-ins/perl/Gimp/Lib.xs index 17760daa29..9682db1d0e 100644 --- a/plug-ins/perl/Gimp/Lib.xs +++ b/plug-ins/perl/Gimp/Lib.xs @@ -564,6 +564,50 @@ canonicalize_colour (char *err, SV *sv, GParamColor *c) LEAVE; } +/* check for common typoes. */ +static void check_for_typoe (char *croak_str, char *p) +{ + STRLEN dc; + char b[80]; + dTHR; + + g_snprintf (b, sizeof b, "%s_MODE", p); if (perl_get_cv (b, 0)) goto gotit; + g_snprintf (b, sizeof b, "%s_MASK", p); if (perl_get_cv (b, 0)) goto gotit; + g_snprintf (b, sizeof b, "SELECTION_%s", p); if (perl_get_cv (b, 0)) goto gotit; + g_snprintf (b, sizeof b, "%s_IMAGE", p); if (perl_get_cv (b, 0)) goto gotit; + + strcpy (b, "1"); if (strEQ (b, "TRUE" )) goto gotit; + strcpy (b, "0"); if (strEQ (b, "FALSE")) goto gotit; + + return; + +gotit: + sprintf (croak_str, "Expected an INT32 but got '%s'. Maybe you meant '%s' instead and forgot to 'use strict'", p, b); +} + +/* check for 'enumeration types', i.e. integer constants. do not allow + string constants here, and check for common typoes. */ +static int check_int (char *croak_str, SV *sv) +{ + dTHR; + + if (SvTYPE (sv) == SVt_PV && !SvIOKp(sv)) + { + STRLEN dc; + char *p = SvPV (sv, dc); + + if (*p + && *p != '0' && *p != '1' & *p != '2' && *p != '3' && *p != '4' + && *p != '5' && *p != '6' & *p != '7' && *p != '8' && *p != '9') + { + sprintf (croak_str, "Expected an INT32 but got '%s'. Add '*1' if you really intend to pass in a string", p); + check_for_typoe (croak_str, p); + return 0; + } + } + return 1; +} + /* replacement newSVpv with only one argument. */ #define neuSVpv(arg) newSVpv((arg),0) @@ -699,7 +743,8 @@ convert_sv2gimp (char *croak_str, GParam *arg, SV *sv) switch (arg->type) { - case PARAM_INT32: arg->data.d_int32 = sv2gimp_extract_noref (SvIV, "INT32"); + case PARAM_INT32: check_int (croak_str, sv); + arg->data.d_int32 = sv2gimp_extract_noref (SvIV, "INT32"); case PARAM_INT16: arg->data.d_int16 = sv2gimp_extract_noref (SvIV, "INT16"); case PARAM_INT8: arg->data.d_int8 = sv2gimp_extract_noref (SvIV, "INT8"); case PARAM_FLOAT: arg->data.d_float = sv2gimp_extract_noref (SvNV, "FLOAT");; diff --git a/plug-ins/perl/MANIFEST b/plug-ins/perl/MANIFEST index 43ebc56db0..aee4ad3b38 100644 --- a/plug-ins/perl/MANIFEST +++ b/plug-ins/perl/MANIFEST @@ -83,3 +83,6 @@ examples/centerguide examples/stampify examples/goldenmean examples/triangle +examples/billboard +examples/mirrorsplit + diff --git a/plug-ins/perl/Makefile.PL b/plug-ins/perl/Makefile.PL index 61ebfa563e..41cecf4a74 100644 --- a/plug-ins/perl/Makefile.PL +++ b/plug-ins/perl/Makefile.PL @@ -11,7 +11,7 @@ $|=1; scratches.pl blowinout.pl terral_text xachvision.pl gimpmagick perlcc sethspin.pl animate_cells image_tile yinyang stamps font_table perlotine randomblends innerbevel fit-text guidegrid roundrectsel - repdup centerguide stampify goldenmean triangle + repdup centerguide stampify goldenmean triangle billboard mirrorsplit ); @shebang = (map("examples/$_",@examples), qw(Perl-Server examples/example-net.pl examples/homepage-logo.pl diff --git a/plug-ins/perl/TODO b/plug-ins/perl/TODO index c441f007a1..2174861579 100644 --- a/plug-ins/perl/TODO +++ b/plug-ins/perl/TODO @@ -16,6 +16,8 @@ bugs [KILL] * perl_fu_webify in homepage-logo.pl * wait for working gimp_file_load (or do it myself?) * get rid of xs_exit. please please fuck me plenty. + * do not install scm2scm and scm2perl on 56.004 + * create gimpstyle.pod important issues diff --git a/plug-ins/perl/examples/billboard b/plug-ins/perl/examples/billboard new file mode 100755 index 0000000000..95e4bea743 --- /dev/null +++ b/plug-ins/perl/examples/billboard @@ -0,0 +1,171 @@ +#!/usr/bin/perl -w + +# This one's all mine. Well, its GPL/Artisitic but I"m the author and creator. # I think you need gimp 1.1 or better for this - if you don't, please let +# me know + +# I'm hacking this on top of my sethspin script, so this is doing even more +# stuff it wasn't really designed to do. Hence if you thought sethspin was +# a bit ugly, look at this one... + +# I think it was tigert that suggested this. It turned out to be less +# complex than I orginally thought so I figured I'd give it a spin. + +# Seth Burgess +# + +use Gimp; +use Gimp::Fu; +use Gimp::Util; + +# Gimp::set_trace(TRACE_ALL); + +sub saw { # a sawtooth function on PI + ($val) = @_; + if ($val < 3.14159/2.0) { + return ($val/3.14159) ; + } + elsif ($val < 3.14159) { + return (-1+$val/3.14159); + } + elsif ($val < 3.14159+3.14159/2.0) { + return ($val/3.14159) ; + } + else { + return (-1+$val/3.14159); + } + } + +sub spin_layer { # the function for actually spinning the layer + my ($img, $spin, $dest, $numframes, $prp, $blinds) = @_; + # Now lets spin it! + $stepsize = 3.14159/$numframes; # in radians + for ($i=0; $i<=3.14159; $i+=$stepsize) { + Gimp->progress_update ($i/3.14159); + # create a new layer for spinning + $framelay = ($i < 3.14159/2.0) ? $spin->copy(1) : $dest->copy(1); + $img->add_layer($framelay, 0); + # spin it a step + # Here I need to make the proper selection, repeatedly if necessary + $blindheight = $img->height/$blinds; + for ($j=0; $j<$blinds; $j++) { + # select a section + $img->rect_select(0, $j*$blindheight, $img->width, $blindheight, 2, 0, 0.13); + @x = $img->selection_bounds(); + # x[1],x[2] x[3],x[2] + # x[1],x[4] x[3],x[4] + $floater = $framelay->perspective(1, + $x[1]+saw($i)*$prp*$framelay->width,$x[2]+$blindheight *sin($i)/2, + $x[3]-saw($i)*$prp*$framelay->width,$x[2]+$blindheight *sin($i)/2, + $x[1]-saw($i)*$prp*$framelay->width,$x[4]-$blindheight *sin($i)/2, + $x[3]+saw($i)*$prp*$framelay->width,$x[4]-$blindheight *sin($i)/2); + $floater->floating_sel_anchor; + } # end for ($j=0;... + + # I need to create another layer beind this spun one now + $backlayer = $framelay->layer_copy(0); + $img->add_layer($backlayer, 1); + $backlayer->fill(1); # BG-IMAGE-FILL + } + for ($i=0; $i<$numframes; $i++) { + @all_layers = $img->get_layers(); + $img->set_visible($all_layers[$i],$all_layers[$i+1]); + $img->merge_visible_layers(0); + } + @all_layers = $img->get_layers(); + $destfram = $all_layers[$numframes]->copy(0); + $img->add_layer($destfram,0); + + # clean up my temporary layers + $img->remove_layer($all_layers[$numframes]); + $img->remove_layer($all_layers[$numframes+1]); +} + +register "billboard", + "Billboard", + "Take one image. Spin it about the multiple axes, and end up with another image. I made it for easy web buttons, mostly because somebody suggested to me.", + "Seth Burgess", + "Seth Burgess ", + "1.3", + "/Xtns/Animation/Billboard", + "*", + [ + [PF_DRAWABLE, "source", "What drawable to spin from?"], + [PF_DRAWABLE, "destination","What drawable to spin to?"], + [PF_INT8, "frames", "How many frames to use?", 16], + [PF_COLOR, "background", "What color to use for background if not transparent", [0,0,0]], + [PF_SLIDER, "perspective", "How much perspective effect to get", 40, [0,255,5]], + [PF_TOGGLE, "spin_back", "Also spin back?" , 0], + [PF_TOGGLE, "convert_indexed", "Convert to indexed?", 1], + [PF_SPINNER, "billboard_slats", "Number of shades", 3, [1,50,1]], + ], + [], + ['gimp-1.1'], + sub { + my($src,$dest,$frames,$color,$psp,$spinback,$indexed, $shadenum) =@_; + $maxwide = ($src->width > $dest->width) ? $src->width : $dest->width; + $maxhigh = ($src->height > $dest->height) ? $src->height: $dest->height; + $img = gimp_image_new($maxwide, $maxhigh, RGB); + + + $tmpimglayer = $img->add_new_layer(0,3,1); + $img->display_new; + Gimp->progress_init("Billboard...",-1); + $oldbackground = gimp_palette_get_background(); + Palette->set_background($color); + $src->edit_copy(); + $spinlayer = $tmpimglayer->edit_paste(1); + $spinlayer->floating_sel_to_layer(); + + $dest->edit_copy(); + $destlayer = $tmpimglayer->edit_paste(1); + $destlayer->floating_sel_to_layer(); + + $tmpimglayer->remove_layer; + + $spinlayer->resize($maxwide, $maxhigh, $spinlayer->offsets); + $destlayer->resize($maxwide, $maxhigh, $destlayer->offsets); + # work around for PF_SLIDER when < 1 + $psp = $psp/255.0; + + # need an even number of frames for spinback + if ($frames%2 && $spinback) { + $frames++; + gimp_message("An even number of frames is needed for spin back.\nAdjusted frames up to $frames"); + } + + spin_layer($img, $spinlayer, $destlayer, $spinback ? $frames/2 : $frames-1, $psp, $shadenum); + $img->set_visible($img->add_new_layer(1),($img->get_layers)[0]); + $img->merge_visible_layers(0); + + if ($spinback) { + @layerlist = $img->get_layers(); + $img->add_layer($layerlist[$frames/2]->copy(0),0); + @layerlist = $img->get_layers(); + spin_layer($img, $layerlist[1], $layerlist[0], $frames/2, $psp, $shadenum); + $img->remove_layer(($img->get_layers)[0]); + } + + # unhide and name layers + @all_layers = $img->get_layers; + $img->set_visible(@all_layers); + for ($i=1; $i<=$frames ; $i++) { + $all_layers[$i-1]->set_name("Spin Layer $i (50ms)"); + } + $all_layers[$frames-1]->set_name("Spin Layer SRC (250ms)"); + + if ($spinback) { + $all_layers[$frames/2-1]->set_name("Spin Layer DEST (250ms)"); + } + else { $all_layers[0]->set_name("Spin Layer DEST (250ms)")} + + + # indexed conversion wants a display for some reason + if ($indexed) { $img->convert_indexed(1,255); } + + Palette->set_background($oldbackground); + gimp_displays_flush(); + return(); +}; + +exit main; + diff --git a/plug-ins/perl/examples/example-fu.pl b/plug-ins/perl/examples/example-fu.pl index 809d451712..6e84b38407 100755 --- a/plug-ins/perl/examples/example-fu.pl +++ b/plug-ins/perl/examples/example-fu.pl @@ -8,7 +8,7 @@ register "gimp_fu_example_script", # fill in a function name "Just a starting point to derive new ". # a (possibly multiline) help text "scripts. Always remember to put a long". "help message here!", - "Marc Lehmann", # don't forget your name (author) + "Marc Lehmann ", # don't forget your name (author) "(c) 1998, 1999 Marc Lehmann", # and your copyright! "19990316", # the date this script was written "/Xtns/Gimp::Fu Example", # the menu path diff --git a/plug-ins/perl/examples/font_table b/plug-ins/perl/examples/font_table index be5807dfbd..31536155a0 100755 --- a/plug-ins/perl/examples/font_table +++ b/plug-ins/perl/examples/font_table @@ -104,10 +104,7 @@ sub font_table { } - return undef; # This may generate a warning, but it's better than - # getting a duplicate image, which is what I get if I - # return $lastimg - # return $lastimg; + return (); } sub display_fonts { diff --git a/plug-ins/perl/examples/goldenmean b/plug-ins/perl/examples/goldenmean index 0d930714cb..38f218e408 100755 --- a/plug-ins/perl/examples/goldenmean +++ b/plug-ins/perl/examples/goldenmean @@ -17,7 +17,7 @@ sub goldenmean { } $img = gimp_image_new($width, $height, RGB); - $layer = gimp_layer_new($img, $width, $height, RGB, "Layer 1", 100, NORMAL_MODE); + $layer = gimp_layer_new($img, $width, $height, RGB_IMAGE, "Layer 1", 100, NORMAL_MODE); gimp_image_add_layer($layer, -1); gimp_palette_set_background([255, 255, 255]); diff --git a/plug-ins/perl/examples/mirrorsplit b/plug-ins/perl/examples/mirrorsplit new file mode 100755 index 0000000000..ca2a7bb1e3 --- /dev/null +++ b/plug-ins/perl/examples/mirrorsplit @@ -0,0 +1,55 @@ +#!/usr/bin/perl + +use Gimp qw( :auto ); +use Gimp::Fu; + +register "MirrorSplit", + "Splits and mirrors half of the image, according to settings.", + "Just tick appropriate radio button.", + "Claes G Lindblad ", + "Claes G Lindblad ", + "990405", + "/Filters/Distorts/MirrorSplit", + "*", + [ + [PF_RADIO, "mirror", "Which half to mirror?", 0, + [Upper => 0, Lower => 1, Left => 2, Right => 3] + ] + ], + sub { + my ($img, $layer, $mirror) = @_; + + $w = $layer->width(); + $h = $layer->height(); + $wspan = int ($w / 2 + 0.5); + $hspan = int ($h / 2 + 0.5); + eval { $img->undo_push_group_start }; + + my $oldname = gimp_layer_get_name($layer); + my $temp1 = gimp_layer_copy($layer, 1); + gimp_image_add_layer($img, $temp1, 0); + + if ($mirror == 0) { # upper half + $temp2 = gimp_flip($temp1, VERTICAL); + gimp_rect_select($img, 0, 0, $w, $hspan, SELECTION_REPLACE, 0, 0); + }; + if ($mirror == 1) { # lower half + $temp2 = gimp_flip($temp1, VERTICAL); + gimp_rect_select($img, 0, $hspan, $w, $h - $hspan, SELECTION_REPLACE, 0, 0); + }; + if ($mirror == 2) { # left half + $temp2 = gimp_flip($temp1, HORIZONTAL); + gimp_rect_select($img, 0, 0, $wspan, $h, SELECTION_REPLACE, 0, 0); + }; + if ($mirror == 3) { # right half + $temp2 = gimp_flip($temp1, HORIZONTAL); + gimp_rect_select($img, $wspan, 0, $w - $wspan, $h, SELECTION_REPLACE, 0, 0); + }; + + gimp_edit_cut($temp2); + my $temp3 = gimp_image_merge_down($img, $temp2, 2); + gimp_layer_set_name($temp3, $oldname); + eval { $img->undo_push_group_end }; + return $img; + }; +exit main; diff --git a/plug-ins/perl/examples/prep4gif.pl b/plug-ins/perl/examples/prep4gif.pl index 87ed979de0..008b9bf80a 100755 --- a/plug-ins/perl/examples/prep4gif.pl +++ b/plug-ins/perl/examples/prep4gif.pl @@ -35,7 +35,7 @@ sub prep { if ($#layers <= 0) { gimp_message("You need at least 2 layers to perform prep4gif"); print "Only ", scalar(@layers), " layers found!(", $layers[0],")\n"; - return 0; + return; } # Show the image early - this makes debugging a breeze @@ -85,7 +85,7 @@ sub prep { # Show all the changes. gimp_displays_flush(); - undef; + (); } register diff --git a/plug-ins/perl/examples/repdup b/plug-ins/perl/examples/repdup index 778c946ac0..3275240fe6 100755 --- a/plug-ins/perl/examples/repdup +++ b/plug-ins/perl/examples/repdup @@ -14,7 +14,7 @@ register "RepDup", "/Edit/Repeat & Duplicate", "*", [ - [PF_SPINNER, "repeats", "Number of repetitions", + [PF_SPINNER, "repeats", "Number of repeats", 3, [1, 1000, 1] ], [PF_SPINNER, "xoffset", "X-offset", 50, [-1000, 1000, 1] ], @@ -33,7 +33,7 @@ register "RepDup", for ($i = 0; $i < $repeats; $i++) { $b[1] = $b[1] + $xoffset; $b[2] = $b[2] + $yoffset; - gimp_rect_select($img, $b[1], $b[2], $w, $h, REPLACE, 0, 0); + gimp_rect_select($img, $b[1], $b[2], $w, $h, SELECTION_REPLACE, 0, 0); $bit_bucket = gimp_edit_paste($layer, 0); gimp_floating_sel_anchor($bit_bucket); gimp_selection_none($img); diff --git a/plug-ins/perl/examples/scratches.pl b/plug-ins/perl/examples/scratches.pl index 4d1711333d..362ab5a221 100755 --- a/plug-ins/perl/examples/scratches.pl +++ b/plug-ins/perl/examples/scratches.pl @@ -34,6 +34,8 @@ register "scratches", [PF_SPINNER , "length" , "The scratch length" , 10, [ 0, 400]], #[PF_BOOL, , "bump_map" , "Use bump map instead of displace", 0], ], + [], + ['gimp-1.1'], sub { my($image,$drawable,$anglex,$angley,$gamma,$length,$width)=@_; diff --git a/plug-ins/perl/examples/sethspin.pl b/plug-ins/perl/examples/sethspin.pl index 2229825b49..a3d3b1c99d 100755 --- a/plug-ins/perl/examples/sethspin.pl +++ b/plug-ins/perl/examples/sethspin.pl @@ -44,7 +44,7 @@ sub spin_layer { # the function for actually spinning the layer # Now lets spin it! $stepsize = 3.14159/$numframes; # in radians for ($i=0; $i<=3.14159; $i+=$stepsize) { - Gimp->progress_update ($i/0.0314159); + Gimp->progress_update ($i/3.14159); # create a new layer for spinning $framelay = ($i < 3.14159/2.0) ? $spin->copy(1) : $dest->copy(1); $img->add_layer($framelay, 0); diff --git a/plug-ins/perl/examples/stampify b/plug-ins/perl/examples/stampify index c1a1e8c19b..01ba9d3002 100755 --- a/plug-ins/perl/examples/stampify +++ b/plug-ins/perl/examples/stampify @@ -11,7 +11,7 @@ register "Stampify", "Claes G Lindblad ", "Claes G Lindblad ", "990328", - "/Filters/Decor/Stampify", + "/Script-Fu/Decor/Stampify", "*", [ [PF_COLOR, "paper", "Paper colour", [242, 242, 242]], diff --git a/plug-ins/perl/examples/stamps b/plug-ins/perl/examples/stamps index 7988df0584..62e2f16581 100755 --- a/plug-ins/perl/examples/stamps +++ b/plug-ins/perl/examples/stamps @@ -4,50 +4,52 @@ use Gimp qw( :auto ); use Gimp::Fu; sub stamps { - my ($size, $bgcolor, $fgcolor, $diameter, $gap) = @_; + my ($size, $hole, $paper, $diameter, $gap) = @_; - gimp_palette_set_background($fgcolor); + gimp_palette_set_background($paper); $img = gimp_image_new($size, $size, RGB); - $layer = gimp_layer_new($img, $size, $size, RGB, "Layer 1", 100, NORMAL_MODE); + $layer = gimp_layer_new($img, $size, $size, RGB_IMAGE, "Layer 1", 100, NORMAL_MODE); gimp_image_add_layer($layer, -1); - gimp_palette_set_background($bgcolor); + gimp_palette_set_background($hole); $layer->gimp_edit_fill; + gimp_selection_none($img); - gimp_palette_set_background($fgcolor); my $ncircles = int(($size + $gap) / ($diameter + $gap)); $x = 0; for ($i=0; $i<$ncircles; $i++) { gimp_ellipse_select($img, $x, 0, $diameter, $diameter, - REPLACE, 1, 0, 0); + SELECTION_ADD, 1, 0, 0); gimp_ellipse_select($img, 0, $x, $diameter, $diameter, - REPLACE, 1, 0, 0); + SELECTION_ADD, 1, 0, 0); $x = $x + $diameter + $gap; - gimp_palette_set_foreground($fgcolor); - gimp_edit_fill($layer); - gimp_selection_none($img); } + gimp_palette_set_background($paper); + gimp_edit_fill($layer); + gimp_selection_none($img); + +# here, at last, comes the clever part! :-) $layer->channel_ops_offset(1, 0, -($diameter / 2), -($diameter / 2)); return $img; } register "stamps", - "Makes stamp-like perforations", + "Creates a rectangular image with stamp-like perforations.", "Default values are not bad!", - "claesg\@algonet.se", - "Claes G Lindblad", + "Claes G Lindblad ", + "Claes G Lindblad ", "990314", "/Xtns/Render/Stamps", "*", [ - [PF_INT32, "size", "Img size", 90], - [PF_COLOR, "fgcolor", "fg color", [255, 255, 255]], - [PF_COLOR, "bgcolor", "bg color", [0, 0, 0]], - [PF_INT32, "diameter", "Diameter", 10], - [PF_INT32, "gap", "Gap", 5] + [PF_INT32, "size", "img size", 90], + [PF_COLOR, "paper", "paper color", [255, 255, 255]], + [PF_COLOR, "hole", "hole color", [0, 0, 0]], + [PF_INT32, "diameter", "diameter", 10], + [PF_INT32, "gap", "gap", 5] ], \&stamps; diff --git a/plug-ins/perl/examples/tex-to-float b/plug-ins/perl/examples/tex-to-float index 031d604f55..59dab7341e 100755 --- a/plug-ins/perl/examples/tex-to-float +++ b/plug-ins/perl/examples/tex-to-float @@ -101,7 +101,7 @@ sub grey_file_to_float { gimp_undo_push_group_start($img1); # Load the new img - my $grey_img = gimp_file_load(RUN_NON_INTERACTIVE, $fn, $fn); + my $grey_img = gimp_file_load(RUN_NONINTERACTIVE, $fn, $fn); # Get name of new layer my $grey_layer = gimp_image_get_active_layer($grey_img); diff --git a/plug-ins/perl/scm2scm b/plug-ins/perl/scm2scm index e1b7260549..8c470457e8 100755 --- a/plug-ins/perl/scm2scm +++ b/plug-ins/perl/scm2scm @@ -1,6 +1,6 @@ #!/usr/bin/perl -require 5.005; +use 5.005; # Copyright Marc Lehmann #