;with this plugin you can generate the 2 sorts of images required for doing shadowed rollover ; -first: a shadowed picture from the selection (unpushed) ; -second: a non-shadowed picture (pushed) (define (script-fu-2states-shadowed-object img drawable shadowColor shadowBlur shadowOffset shadowOpacity pushed flatten) ;save the colors (set! saveFG (car (gimp-palette-get-foreground))) (set! saveBG (car (gimp-palette-get-background))) ;picture with shadow (unpushed) first dup the image (set! img1 (car (gimp-channel-ops-duplicate img))) ; (set! layer (car (gimp-image-flatten img1))) (set! newLayer (car (gimp-layer-copy layer TRUE))) (gimp-image-add-layer img1 newLayer -1) (gimp-image-remove-layer img1 layer) (set! layer newLayer) (gimp-selection-invert img1) (gimp-edit-clear layer) (set! width (car (gimp-image-width img1))) (set! height (car (gimp-image-width img1))) ;add the shadow layer (set! shadow (car (gimp-layer-new img1 width height 1 "shadow" shadowOpacity 0))) (gimp-image-add-layer img1 shadow -1) (gimp-image-lower-layer-to-bottom img1 shadow) (gimp-selection-all img1) (gimp-edit-clear shadow) (gimp-selection-layer-alpha layer) (gimp-palette-set-foreground shadowColor) (gimp-bucket-fill shadow 0 0 100 0 FALSE 0 0) (gimp-selection-none img1) (gimp-layer-translate shadow shadowOffset shadowOffset) (plug-in-gauss-iir2 TRUE img1 shadow shadowBlur shadowBlur) ;copy these 2 layers then make them invisible (set! layerCopy (car (gimp-layer-copy layer TRUE))) (gimp-image-add-layer img1 layerCopy -1) (gimp-image-lower-layer-to-bottom img1 layerCopy) (set! shadowCopy (car (gimp-layer-copy shadow TRUE))) (gimp-image-add-layer img1 shadowCopy -1) (gimp-image-lower-layer-to-bottom img1 shadowCopy) (gimp-layer-set-visible layer FALSE) (gimp-layer-set-visible shadow FALSE) (set! mergedLayers (car (gimp-image-merge-visible-layers img1 0))) (plug-in-autocrop TRUE img1 mergedLayers) (gimp-image-remove-layer img1 mergedLayers) (gimp-layer-set-visible layer TRUE) (gimp-layer-set-visible shadow TRUE) ;if pushed then, translate the layer the same offset by shadow then destroy shadow (if (= pushed TRUE) (begin (gimp-layer-translate layer shadowOffset shadowOffset) (gimp-image-remove-layer img1 shadow) ) ) (if (= flatten TRUE) (gimp-image-flatten img1)) (gimp-display-new img1) (gimp-displays-flush) ;restore the colors (gimp-palette-set-foreground saveFG) (gimp-palette-set-background saveBG) ) (script-fu-register "script-fu-2states-shadowed-object" "/Script-Fu/Selection/Make shadowed button..." "Create a shadowed button with the selection" "Eric COUTIER" "Eric COUTIER" "2001-07-13" "" SF-IMAGE "Image" 0 SF-DRAWABLE "Drawable" 0 SF-COLOR "Shadow color" '(0 0 0 ) SF-ADJUSTMENT "Shadow blur" '(5 0 50 0.1 1 1 1) SF-ADJUSTMENT "Shadow offset" '(5 1 30 1 10 0 1) SF-ADJUSTMENT "Shadow opacity" '(100 1 100 1 10 0 0) SF-TOGGLE "pushed" FALSE SF-TOGGLE "flatten resulting image at end" FALSE )