; 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.
; pre-2.8 COMPATIBILITY
(when (not (defined? 'gimp-item-get-visible))
(define gimp-item-get-visible gimp-drawable-get-visible)
(define (gimp-item-is-group item) 0) ; no layer groups
(define (gimp-image-insert-item image layer IGNORED position)
(gimp-image-add-layer image layer position) ))
(define (script-fu-sg-shadow-all-layers image
drawable
shadow-transl-x
shadow-transl-y
shadow-blur
shadow-color
shadow-opacity
allow-resize)
(define (get-visibles image)
(let loop ((layers (vector->list (cadr (gimp-image-get-layers image))))
(visibles '()) )
(if (null? layers)
(if (null? visibles)
visibles ; 'reverse' can't handle NIL
(reverse visibles) ) ; retain top-to-bottom order
(loop (cdr layers)
(if (zero? (car (gimp-drawable-get-visible (car layers))))
visibles
(cons (car layers) visibles) )))))
(gimp-image-undo-group-start image)
(let ((visibles (get-visibles image)))
(map (lambda (x) (gimp-item-set-visible x FALSE))
visibles )
(let loop ((layers visibles))
(unless (null? layers)
(gimp-item-set-visible (car layers) TRUE)
(gimp-image-set-active-layer image (car layers))
(if (= TRUE (car (gimp-item-is-group (car layers))))
(let ((layer (car (gimp-layer-new-from-visible image image "temp")) ))
(gimp-image-insert-layer image layer 0 -1)
(script-fu-drop-shadow image
layer
shadow-transl-x
shadow-transl-y
shadow-blur
shadow-color
shadow-opacity
allow-resize )
(gimp-image-remove-layer image layer)
(gimp-image-lower-item-to-bottom
image
(vector-ref (cadr (gimp-item-get-children (car layers)))
0 )))
(script-fu-drop-shadow image
(car layers)
shadow-transl-x
shadow-transl-y
shadow-blur
shadow-color
shadow-opacity
allow-resize ))
(gimp-item-set-visible (car layers) FALSE)
(loop (cdr layers)) ))
(map (lambda (x) (gimp-item-set-visible x TRUE))
visibles ))
(gimp-image-undo-group-end image)
(gimp-displays-flush)
)
(script-fu-register "script-fu-sg-shadow-all-layers"
"Shadow All Layers"
"Apply Drop Shadow to all visible layers."
"Saul Goode"
"Saul Goode"
"July 2013"
"*"
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-ADJUSTMENT _"Offset X" '(4 -4096 4096 1 10 0 1)
SF-ADJUSTMENT _"Offset Y" '(4 -4096 4096 1 10 0 1)
SF-ADJUSTMENT _"Blur radius" '(15 0 1024 1 10 0 1)
SF-COLOR _"Color" "black"
SF-ADJUSTMENT _"Opacity" '(60 0 100 1 10 0 0)
SF-TOGGLE _"Allow resizing" TRUE
)
(script-fu-menu-register "script-fu-sg-shadow-all-layers"
"<Image>/Filters/Light and Shadow"
)