Problem with perl-plugin (script-fu rip off)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello there

I have converted a script-fu script to perl-fu, but are having some
problems. While I get nearly the same pictures, the original have
transparency around the button while my perlified version doesn't.

I thought it could have something to do with the save routine

In the original script I press save and save it.
In the modified version I do #./uni -o test.gif

... and on a related note, I can't seem
to get Gimp->file_png_save($img,-1,....) to work
or           file_gif_save(....)

for that matter.

Please help
Yours Thomas
; The GIMP -- an image manipulation program
; Copyright (C) 1995 Spencer Kimball and Peter Mattis
; 
; Round Button --- create a round beveled Web button.
; Copyright (C) 1998 Federico Mena Quintero & Arturo Espinosa Aldama
; federico@xxxxxxxxxxxxxxx arturo@xxxxxxxxxxxxxxx
; ************************************************************************
; Changed on Feb 4, 1999 by Piet van Oostrum <piet@xxxxxxxx>
; For use with GIMP 1.1.
; All calls to gimp-text-* have been converted to use the *-fontname form.
; The corresponding parameters have been replaced by an SF-FONT parameter.
; ************************************************************************
; 
; 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
; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

(define (text-width extents)
  (car extents))

(define (text-height extents)
  (cadr extents))

(define (text-ascent extents)
  (caddr extents))

(define (text-descent extents)
  (cadr (cddr extents)))

(define (round-select img x y width height ratio)
  (let* ((diameter (* ratio height)))
    (gimp-ellipse-select img x y diameter height ADD FALSE 0 0)
    (gimp-ellipse-select img (+ x (- width diameter)) y
			 diameter height ADD FALSE 0 0)
    (gimp-rect-select img (+ x (/ diameter 2)) y
		      (- width diameter) height ADD FALSE 0)))
  
(define (script-fu-round-button text
			    size
			    font
			    ul-color
			    lr-color
			    text-color
			    ul-color-high
			    lr-color-high
			    hlight-color
			    xpadding
			    ypadding
			    bevel
			    ratio
			    notpressed
			    notpressed-active
			    pressed)

  (cond ((eqv? notpressed TRUE)
	 (do-pupibutton text size font ul-color lr-color
			text-color xpadding ypadding bevel ratio 0)))
  (cond ((eqv? notpressed-active TRUE)
	 (do-pupibutton text size font ul-color-high lr-color-high
			hlight-color xpadding ypadding bevel ratio 0)))
  (cond ((eqv? pressed TRUE)
	 (do-pupibutton text size font ul-color-high lr-color-high
			hlight-color xpadding ypadding bevel ratio 1))))
  
(define (do-pupibutton text
			    size
			    font
			    ul-color
			    lr-color
			    text-color
			    xpadding
			    ypadding
			    bevel
			    ratio
			    pressed)

  (let* ((old-fg-color (car (gimp-palette-get-foreground)))
	 (old-bg-color (car (gimp-palette-get-background)))
	 
	 (text-extents (gimp-text-get-extents-fontname text
					      size
					      PIXELS
					      font))
	 (ascent (text-ascent text-extents))
	 (descent (text-descent text-extents))
	 
	 (height (+ (* 2 (+ ypadding bevel))
			(+ ascent descent)))

	 (radius (/ (* ratio height) 4))

	 (width (+ (* 2 (+ radius xpadding)) bevel
		       (- (text-width text-extents)
			  (text-width (gimp-text-get-extents-fontname " "
							     size
							     PIXELS
							     font)))))
							     
	 (img (car (gimp-image-new width height RGB)))

	 (bumpmap (car (gimp-layer-new img width height
				       RGBA_IMAGE "Bumpmap" 100 NORMAL)))
	 (gradient (car (gimp-layer-new img width height
					RGBA_IMAGE "Button" 100 NORMAL))))
    (gimp-image-undo-disable img)

    ; Create bumpmap layer
    
    (gimp-image-add-layer img bumpmap -1)
    (gimp-selection-none img)
    (gimp-palette-set-background '(0 0 0))
    (gimp-edit-fill bumpmap BG-IMAGE-FILL)

    (round-select img (/ bevel 2) (/ bevel 2)
		  (- width bevel) (- height bevel) ratio)
    (gimp-palette-set-background '(255 255 255))
    (gimp-edit-fill bumpmap BG-IMAGE-FILL)

    (gimp-selection-none img)
    (plug-in-gauss-rle 1 img bumpmap bevel 1 1)

    ; Create gradient layer

    (gimp-image-add-layer img gradient -1)
    (gimp-edit-clear gradient)
    (round-select img 0 0 width height ratio)
    (gimp-palette-set-foreground ul-color)
    (gimp-palette-set-background lr-color)

    (gimp-blend gradient
		FG-BG-RGB
		NORMAL
		LINEAR
		100
		0
		REPEAT-NONE
		FALSE
		0
		0
		0
		0
		0
		(- height 1))

    (gimp-selection-none img)

    (plug-in-bump-map 1 img gradient bumpmap
		      135 45 bevel 0 0 0 0 TRUE pressed 0)

;     Create text layer

    (cond ((eqv? pressed 1) (set! bevel (+ bevel 1))))

    (gimp-palette-set-foreground text-color)
    (let ((textl (car (gimp-text-fontname
		       img -1 0 0 text 0 TRUE size PIXELS
		       font))))
      (gimp-layer-set-offsets textl
			      (+ xpadding radius bevel)
			      (+ ypadding descent bevel)))

;   Delete some fucked-up pixels.

    (gimp-selection-none img)
    (round-select img 1 1 (- width 1) (- height 1) ratio)
    (gimp-selection-invert img)
    (gimp-edit-clear gradient)

;     Done

    (gimp-image-remove-layer img bumpmap)
    (gimp-image-merge-visible-layers img EXPAND-AS-NECESSARY)

    (gimp-selection-none img)
    (gimp-palette-set-foreground old-fg-color)
    (gimp-palette-set-background old-bg-color)
    (gimp-image-undo-enable img)
    (gimp-display-new img)))

; Register!

(script-fu-register "script-fu-round-button"
		    _"<Toolbox>/Xtns/Script-Fu/Buttons/Round Button..."
		    "Round button"
		    "Arturo Espinosa (stolen from quartic's beveled button)"
		    "Arturo Espinosa & Federico Mena Quintero"
		    "June 1998"
		    ""
		    SF-STRING     _"Text" "The GIMP"
		    SF-ADJUSTMENT _"Font Size (pixels)" '(16 2 100 1 1 0 1)
		    SF-FONT       _"Font" "-*-helvetica-*-r-*-*-24-*-*-*-p-*-*-*"
		    SF-COLOR      _"Upper Color" '(192 192 0)
		    SF-COLOR      _"Lower Color" '(128 108 0)
		    SF-COLOR      _"Text Color" '(0 0 0)
		    SF-COLOR      _"Upper Color (Active)" '(255 255 0)
		    SF-COLOR      _"Lower Color (Active)" '(128 108 0)
		    SF-COLOR      _"Text Color (Active)" '(0 0 192)
		    SF-ADJUSTMENT _"Padding X" '(4 0 100 1 10 0 1)
		    SF-ADJUSTMENT _"Padding Y" '(4 0 100 1 10 0 1)
		    SF-ADJUSTMENT _"Bevel Width" '(2 0 100 1 10 0 1)
		    SF-ADJUSTMENT _"Round Ratio" '(1 0.05 20 0.05 1 2 1)
		    SF-TOGGLE     _"Not Pressed" TRUE
		    SF-TOGGLE     _"Not Pressed (Active)" TRUE
		    SF-TOGGLE     _"Pressed" TRUE)


#!/usr/bin/perl -w

use Gimp;
use Gimp::Fu;

sub text_ascent {
    return $_[2];
}

sub text_descent {
    return $_[3];
}

sub text_width {
    return $_[0];
}

sub text_height {
    return $_[1];
}

sub round_select {
    my ($img,
	$x,
	$y,
	$width,
	$height,
	$ratio)=@_;
    my $diameter =$ratio*$height;                              
    Gimp->gimp_ellipse_select($img,$x,$y,$diameter,$height,ADD,0,0,0);
    Gimp->gimp_ellipse_select($img,($x+($width-$diameter)),$y,$diameter,$height,ADD,0,0,0);
    Gimp->gimp_rect_select($img,($x+($diameter/2)),$y,($width-$diameter),$height,ADD,0,0)
}
	
sub do_pupibutton {
    my ($text,
	$size,
	$font,
	$ul_color,
	$lr_color,
	$text_color,
	$xpadding,
	$ypadding,
	$bevel,
	$ratio,
	$pressed) = @_;

    my $old_fg_color=Palette->get_foreground();
    my $old_bg_color=Palette->get_background();

    my @text_extents=Gimp->gimp_text_get_extents_fontname($text,$size,0,$font);
    my $ascent=&text_ascent(@text_extents);
    my $descent=&text_descent(@text_extents);

    
    my $height=($ascent+$descent)+2*($ypadding+$bevel);
    my $radius=($ratio*$height)/4;

    my @width_item1=Gimp->gimp_text_get_extents_fontname(" ",$size,0,$font);
    my $width_item2=&text_width (@width_item1);
    my $width_item3=&text_width (@text_extents);
    
    my $width = 2*($radius + $xpadding) + $bevel + ($width_item3 - $width_item2);

    my $img = new Image($width, $height, RGB);


    my $bumpmap = new Layer ($img, $width, $height, RGBA_IMAGE, "Bumpmap", 100, NORMAL_MODE);

    my $gradient = new Layer ($img, $width, $height, RGBA_IMAGE, "Button", 100, NORMAL_MODE);

   $img->undo_push_group_start;

    # Create bumpmap layer

    Gimp->gimp_image_add_layer($img, $bumpmap, -1);
    Gimp->gimp_selection_none($img);
    Gimp->gimp_palette_set_background([0,0,0]);
    Gimp->gimp_edit_fill($bumpmap,BG_IMAGE_FILL);

    &round_select($img, ($bevel/2), ($bevel/2), ($width-$bevel), ($height-$bevel),$ratio);
    Gimp->gimp_palette_set_background([255,255,255]);
    Gimp->gimp_edit_fill($bumpmap,BG_IMAGE_FILL);
    Gimp->gimp_selection_none($img);
    Gimp->plug_in_gauss_rle($img,$bumpmap,$bevel,1,1);


    # Create gradient layer

    Gimp->gimp_image_add_layer($img,$gradient,-1);
    Gimp->gimp_edit_clear($gradient);
    &round_select($img, 0, 0, $width, $height, $ratio);
    Gimp->gimp_palette_set_foreground($ul_color);
    Gimp->gimp_palette_set_background($lr_color);

    Gimp->gimp_blend(
		     $gradient,
		     FG_BG_RGB,
		     NORMAL_MODE,
		     LINEAR,
		     100,
		     0,
		     REPEAT_NONE,
		     0, #FALSE
		     0,
		     0,
		     0,
		     0,
		     0,
		     ($height-1),
		     );

    Gimp->gimp_selection_none($img);

    Gimp->plug_in_bump_map($img,$gradient,$bumpmap,135, 45, $bevel, 0, 0, 0, 0, 1, $pressed, 0);


#Create text layer

    if($pressed) {
	$bevel++;
    }

    Gimp->gimp_palette_set_foreground($text_color);

    my $textl=Gimp->gimp_text_fontname($img,-1,0,0,$text,0,1,$size,PIXELS,$font);
    Gimp->gimp_layer_set_offsets($textl,($xpadding+$radius+$bevel),($ypadding+$descent+$bevel));

#   Delete some fucked-up pixels.

    Gimp->gimp_selection_none($img);
    &round_select($img,1,1,($width-1),($height-1),$ratio);
    Gimp->gimp_selection_invert($img);
#    Gimp->gimp_edit_fill($gradient,0);
    Gimp->gimp_layer_add_alpha($gradient);
    Gimp->gimp_edit_clear($gradient);
#    Gimp->gimp_edit_clear($bumpmap);

    #Done

    Gimp->gimp_image_remove_layer($img,$bumpmap);
    Gimp->gimp_image_merge_visible_layers($img,EXPAND_AS_NECESSARY);

    Gimp->gimp_selection_none($img);
    Gimp->gimp_palette_set_foreground($old_fg_color);
    Gimp->gimp_palette_set_background($old_bg_color);
    

    # close the undo push group
    $img->undo_push_group_end;
#    $img->gimp_file_save(-1,,"/home/zensonic/test.gif","/home/zensonic/test.gif");
#    Gimp->file_png_save($img,-1,"/home/zensonic/test.png","/home/zensonic/test.png",0,6,1,1,1,1,1);
    return $img;


}

sub button {
    my ($text,
	$size,
	$font,
	$ul_color,
	$lr_color,
	$text_color,
	$ul_color_high,
	$lr_color_high,
	$hlight_color,
	$xpadding,
	$ypadding,
	$bevel,
	$ratio,
	$notpressed,
	$notpressed_active,
	$pressed) = @_;


    my $img1;
    my $img2;
    my $img3;
    if($notpressed) {
	$img1=&do_pupibutton($text, $size, $font, $ul_color, $lr_color,
			     $text_color, $xpadding, $ypadding, $bevel, $ratio, 0);
    }
    if($notpressed_active) {
	$img2=&do_pupibutton($text, $size, $font, $ul_color_high, $lr_color_high,
			     $hlight_color, $xpadding, $ypadding, $bevel, $ratio, 0);
    }
    if($pressed) {
	$img3=&do_pupibutton($text, $size, $font, $ul_color_high, $lr_color_high,
			     $hlight_color, $xpadding, $ypadding, $bevel, $ratio, 1);
    }

    return($img1,$img2,$img3);
}


#; Register!
#
#(script-fu-register "script-fu-round-button"
#		    "Arturo Espinosa (stolen from quartic's beveled button)"
#		    "Arturo Espinosa & Federico Mena Quintero"
#		    "June 1998"
#		    ""
#
#
register "uni",
    "Create a uniform image",  # a small description
    "A tutorial script",       # a help text
    "Dov Grobgeld",            # Your name
    "Dov Grobgeld (c)",        # Your copyright
    "1999-05-14",              # Date
    "<Toolbox>/Xtns/Perl-Fu/Tutorial/Img Uni",   # menu path
    "*",                       # Image types
    [
#    [PF_INT,       "size", "Img size", 100],
#    [PF_COLOR,     "color", "Img color", [255,127,0]],
     [PF_STRING     ,"text"        ,"Text"                 ,"The GIMP"],
     [PF_SPINNER    ,"fontsize"    ,"Font Size (pixels)"   ,16,[2,100]],
     [PF_FONT       ,"font"        ,"Font"                 ,"-*-helvetica-*-r-*-*-24-*-*-*-p-*-*-*"],
     [PF_COLOR      ,"uc"          ,"Upper Color"          ,[192, 192, 0]],
     [PF_COLOR      ,"lc"          ,"Lower Color"          ,[128, 108, 0]],
     [PF_COLOR      ,"tc"          ,"Text Color"           ,[0, 0, 0]],
     [PF_COLOR      ,"uac"         ,"Upper Color (Active)" ,[255, 255, 0]],
     [PF_COLOR      ,"lac"         ,"Lower Color (Active)" ,[128, 108, 0]],
     [PF_COLOR      ,"tac"         ,"Text Color (Active)"  ,[0, 0, 192]],
     [PF_SPINNER    ,"padx"        ,"Padding X"            ,4,[0, 100]],
     [PF_SPINNER    ,"pady"        ,"Padding Y"            ,4,[0, 100]],
     [PF_SPINNER    ,"bevel"       ,"Bevel Width"          ,2,[0, 100]],
     [PF_SPINNER    ,"round"       ,"Round Ratio"          ,1,[0.05, 20]],
     [PF_TOGGLE     ,"notpressed"  ,"Not Pressed"          ,TRUE],
     [PF_TOGGLE     ,"notpresseda" ,"Not Pressed (Active)" ,TRUE],
     [PF_TOGGLE     ,"pressed"     ,"Pressed"              ,TRUE]
    ],
    \&button;

exit main();

[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux