1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
; lay-out-frames - lay out frames of animated gif to make xpenguins theme
; Copyright (C) 2001 Robin Hogan
;
; 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 (script-fu-lay-out-frames img
drawable
reversed
swap
flatten
index)
(let* ((frameWidth (car (gimp-image-width img)))
(frameHeight (car (gimp-image-height img)))
(layers (gimp-image-get-layers img))
(nFrames (car layers))
(frameList (cadr layers))
(width (* frameWidth nFrames))
(height frameHeight)
(frame 0)
(normalYoffset 0)
(reversedYoffset frameHeight)
(flattenedFrame #f))
(gimp-image-undo-disable img)
(if (= reversed TRUE)
(begin
(set! height (* frameHeight 2))
(if (= swap TRUE)
(begin
(set! normalYoffset frameHeight)
(set! reversedYoffset 0)))))
(gimp-image-resize img width height 0 0)
(while (< frame nFrames)
(let* ((currentFrame (aref frameList (- (- nFrames 1) frame)))
(offsets (gimp-drawable-offsets currentFrame))
(xoffset (car offsets))
(yoffset (cadr offsets))
(newFrame #f))
(gimp-layer-resize currentFrame
frameWidth
frameHeight
xoffset
yoffset)
(gimp-layer-set-offsets currentFrame
(* frame frameWidth)
normalYoffset)
(if (= reversed TRUE)
(begin
(set! newFrame (car (gimp-layer-copy currentFrame TRUE)))
(gimp-image-add-layer img newFrame -1)
(gimp-layer-set-offsets newFrame
(* frame frameWidth)
reversedYoffset)
(gimp-flip newFrame 0)
))
(set! frame (+ frame 1))))
(if (= flatten TRUE)
(gimp-image-merge-visible-layers img 0))
(if (= index TRUE)
(gimp-convert-indexed img 2 0 63 0 1 ""))
(gimp-image-undo-enable img)
(gimp-displays-flush)))
(script-fu-register "script-fu-lay-out-frames"
_"<Image>/Script-Fu/Utils/Lay out frames..."
"Lay out the frames of an animation side by side. This is useful for creating themes for the XPenguins program."
"Robin Hogan <R.J.Hogan@reading.ac.uk>"
"Robin Hogan"
"April 2001"
""
SF-IMAGE "Image" 0
SF-DRAWABLE "Drawable" 0
SF-TOGGLE _"Include reversed frames" FALSE
SF-TOGGLE _"Swap normal & reversed frames" FALSE
SF-TOGGLE _"Merge down frames" FALSE
SF-TOGGLE _"Convert to an indexed image" FALSE)
|