; travel anim + background plugin ; 2000 MARIN Laetitia ; titix@amin.unice.fr ; ; version 0.1a Raymond Ostertag 2004/09 ; - changed menu entry (define (set-visible-and-timed img nb-layers layers-array) (if (> nb-layers 0) (begin (let ((lay (aref layers-array (- nb-layers 1))) (new-name (string-append "anim" (string-append (number->string nb-layers) "(200ms)")))) (gimp-drawable-set-visible lay TRUE) (gimp-drawable-set-name lay new-name)) (set-visible-and-timed img (- nb-layers 1) layers-array)))) (define (create-sliding-with-bg count img back-layer background original decalage sizeX intervalle) (if (> count 0) (begin (let ((copy (car (gimp-layer-copy original TRUE))) (copy-back-layer (car (gimp-layer-copy back-layer TRUE))) (copy-background (car (gimp-layer-copy background TRUE)))) (gimp-image-add-layer img copy-background 0) (gimp-image-add-layer img copy-back-layer 0) (gimp-image-add-layer img copy 0) (gimp-layer-translate copy decalage 0) (gimp-drawable-set-visible copy-background TRUE) (gimp-drawable-set-visible copy-back-layer TRUE) (gimp-drawable-set-visible copy TRUE) (gimp-drawable-set-visible (car (gimp-image-merge-visible-layers img 1)) FALSE) (create-sliding-with-bg (- count 1) img back-layer background original (+ decalage intervalle) sizeX intervalle))))) (define (script-fu-travel-anim2 img drawable back color sens) (let* ((old-bg-color (car (gimp-palette-get-background))) (old-fg-color (car (gimp-palette-get-foreground))) (img-back (car (gimp-drawable-get-image back))) (sizeX (car (gimp-image-width img))) (sizeY (car (gimp-image-height img))) (intervalle (/ sizeX 10)) (img2 (car (gimp-image-new (* sizeX 2) sizeY RGB))) (n-layer1 (car (gimp-layer-new img2 (* sizeX 2) sizeY RGBA-IMAGE "copy 1" 100 NORMAL))) (n-layer2 (car (gimp-layer-new img2 (* sizeX 2) sizeY RGBA-IMAGE "copy 2" 100 NORMAL))) (back-layer (car (gimp-layer-new img2 (* sizeX 2) sizeY RGBA-IMAGE "background image" 100 NORMAL))) (background (car (gimp-layer-new img2 (* sizeX 2) sizeY RGBA-IMAGE "background" 100 NORMAL)))) (gimp-image-undo-disable img2) (gimp-image-add-layer img2 background 0) (gimp-image-add-layer img2 back-layer 0) (gimp-image-add-layer img2 n-layer1 0) (gimp-image-add-layer img2 n-layer2 0) ;; init layers (gimp-palette-set-foreground color) (gimp-edit-fill background FG-IMAGE-FILL) (gimp-edit-clear back-layer) (gimp-edit-clear n-layer1) (gimp-edit-clear n-layer2) ;; copy current image (gimp-selection-all img) (gimp-edit-copy drawable) ;;create double copy of image (let ((sel (car (gimp-edit-paste n-layer1 TRUE)))) (gimp-floating-sel-anchor sel) (gimp-layer-translate n-layer1 (- 0 (/ sizeX 2)) 0)) (let ((sel (car (gimp-edit-paste n-layer2 TRUE)))) (gimp-floating-sel-anchor sel) (gimp-layer-translate n-layer2 (+ 0 (/ sizeX 2)) 0)) ;; copy back (gimp-selection-all img-back) (gimp-edit-copy back) (let ((sel (car (gimp-edit-paste back-layer TRUE)))) (gimp-floating-sel-anchor sel)) (gimp-drawable-set-visible background FALSE) (gimp-drawable-set-visible back-layer FALSE) (gimp-selection-none img2) ;; begin animation (let ((merged-layer (car (gimp-image-merge-visible-layers img2 1)))) (if (= sens 0) (gimp-layer-translate merged-layer (- 0 (/ sizeX 2)) 0) (gimp-layer-translate merged-layer (+ 0 (/ sizeX 2)) 0)) (gimp-drawable-set-visible merged-layer FALSE) (if (= sens 0) (create-sliding-with-bg 10 img2 back-layer background merged-layer intervalle sizeX intervalle) (create-sliding-with-bg 10 img2 back-layer background merged-layer (- 0 intervalle) sizeX (- 0 intervalle))) (gimp-image-remove-layer img2 background) (gimp-image-remove-layer img2 back-layer) (gimp-image-remove-layer img2 merged-layer)) (let* ((layers (gimp-image-get-layers img2)) (nb-layers (car layers)) (layers-array (cadr layers))) (set-visible-and-timed img2 nb-layers layers-array)) ;; resize image (gimp-image-crop img2 sizeX sizeY (/ sizeX 2) 0) (gimp-selection-none img) (gimp-palette-set-foreground old-fg-color) (gimp-palette-set-background old-bg-color) (gimp-image-undo-enable img2) (gimp-display-new img2))) (script-fu-register "script-fu-travel-anim2" "/Script-Fu/Animators/Travelling with background layer..." "make a travelling animation given a choosen image and drawable" "MARIN Laetitia" "MARIN Laetitia" "Fev 2000" "" SF-IMAGE "Image to stamp" 0 SF-DRAWABLE "Drawable to stamp" 0 SF-DRAWABLE "Background Drawable" 0 SF-COLOR "back color to use" '(0 0 0) SF-TOGGLE "inverse direction" 1)