GIMP Script-fu

Hex Artifact Content
Login

Artifact d9552c30eaea6e8d9f7dcec928795373e09f488b:


0000: 3b 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69  ; This program i
0010: 73 20 66 72 65 65 20 73 6f 66 74 77 61 72 65 3b  s free software;
0020: 20 79 6f 75 20 63 61 6e 20 72 65 64 69 73 74 72   you can redistr
0030: 69 62 75 74 65 20 69 74 20 61 6e 64 2f 6f 72 20  ibute it and/or 
0040: 6d 6f 64 69 66 79 0a 3b 20 69 74 20 75 6e 64 65  modify.; it unde
0050: 72 20 74 68 65 20 74 65 72 6d 73 20 6f 66 20 74  r the terms of t
0060: 68 65 20 47 4e 55 20 47 65 6e 65 72 61 6c 20 50  he GNU General P
0070: 75 62 6c 69 63 20 4c 69 63 65 6e 73 65 20 61 73  ublic License as
0080: 20 70 75 62 6c 69 73 68 65 64 20 62 79 0a 3b 20   published by.; 
0090: 74 68 65 20 46 72 65 65 20 53 6f 66 74 77 61 72  the Free Softwar
00a0: 65 20 46 6f 75 6e 64 61 74 69 6f 6e 3b 20 65 69  e Foundation; ei
00b0: 74 68 65 72 20 76 65 72 73 69 6f 6e 20 32 20 6f  ther version 2 o
00c0: 66 20 74 68 65 20 4c 69 63 65 6e 73 65 2c 20 6f  f the License, o
00d0: 72 0a 3b 20 28 61 74 20 79 6f 75 72 20 6f 70 74  r.; (at your opt
00e0: 69 6f 6e 29 20 61 6e 79 20 6c 61 74 65 72 20 76  ion) any later v
00f0: 65 72 73 69 6f 6e 2e 0a 3b 0a 3b 20 54 68 69 73  ersion..;.; This
0100: 20 70 72 6f 67 72 61 6d 20 69 73 20 64 69 73 74   program is dist
0110: 72 69 62 75 74 65 64 20 69 6e 20 74 68 65 20 68  ributed in the h
0120: 6f 70 65 20 74 68 61 74 20 69 74 20 77 69 6c 6c  ope that it will
0130: 20 62 65 20 75 73 65 66 75 6c 2c 0a 3b 20 62 75   be useful,.; bu
0140: 74 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41  t WITHOUT ANY WA
0150: 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20  RRANTY; without 
0160: 65 76 65 6e 20 74 68 65 20 69 6d 70 6c 69 65 64  even the implied
0170: 20 77 61 72 72 61 6e 74 79 20 6f 66 0a 3b 20 4d   warranty of.; M
0180: 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 20 6f  ERCHANTABILITY o
0190: 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 41 20  r FITNESS FOR A 
01a0: 50 41 52 54 49 43 55 4c 41 52 20 50 55 52 50 4f  PARTICULAR PURPO
01b0: 53 45 2e 20 20 53 65 65 20 74 68 65 0a 3b 20 47  SE.  See the.; G
01c0: 4e 55 20 47 65 6e 65 72 61 6c 20 50 75 62 6c 69  NU General Publi
01d0: 63 20 4c 69 63 65 6e 73 65 20 66 6f 72 20 6d 6f  c License for mo
01e0: 72 65 20 64 65 74 61 69 6c 73 2e 0a 0a 3b 20 52  re details...; R
01f0: 65 76 69 73 69 6f 6e 20 68 69 73 74 6f 72 79 3a  evision history:
0200: 0a 3b 20 20 20 4a 75 6e 65 20 32 30 31 33 20 2d  .;   June 2013 -
0210: 20 73 75 70 70 6f 72 74 20 66 6f 72 20 6c 61 79   support for lay
0220: 65 72 20 67 72 6f 75 70 73 0a 0a 3b 20 70 72 65  er groups..; pre
0230: 2d 32 2e 38 20 43 4f 4d 50 41 54 49 42 49 4c 49  -2.8 COMPATIBILI
0240: 54 59 0a 20 20 28 77 68 65 6e 20 28 6e 6f 74 20  TY.  (when (not 
0250: 28 64 65 66 69 6e 65 64 3f 20 27 67 69 6d 70 2d  (defined? 'gimp-
0260: 69 74 65 6d 2d 67 65 74 2d 70 61 72 65 6e 74 29  item-get-parent)
0270: 29 0a 20 20 20 20 28 64 65 66 69 6e 65 20 28 67  ).    (define (g
0280: 69 6d 70 2d 69 74 65 6d 2d 67 65 74 2d 70 61 72  imp-item-get-par
0290: 65 6e 74 20 69 67 6e 6f 72 65 64 29 20 2d 31 29  ent ignored) -1)
02a0: 20 3b 20 61 6c 77 61 79 73 20 74 6f 70 2d 6c 65   ; always top-le
02b0: 76 65 6c 0a 20 20 20 20 28 64 65 66 69 6e 65 20  vel.    (define 
02c0: 67 69 6d 70 2d 69 74 65 6d 2d 67 65 74 2d 76 69  gimp-item-get-vi
02d0: 73 69 62 6c 65 20 67 69 6d 70 2d 64 72 61 77 61  sible gimp-drawa
02e0: 62 6c 65 2d 67 65 74 2d 76 69 73 69 62 6c 65 29  ble-get-visible)
02f0: 0a 20 20 20 20 28 64 65 66 69 6e 65 20 67 69 6d  .    (define gim
0300: 70 2d 69 74 65 6d 2d 69 73 2d 6c 61 79 65 72 20  p-item-is-layer 
0310: 67 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d 69 73  gimp-drawable-is
0320: 2d 6c 61 79 65 72 29 0a 20 20 20 20 28 64 65 66  -layer).    (def
0330: 69 6e 65 20 67 69 6d 70 2d 69 74 65 6d 2d 69 73  ine gimp-item-is
0340: 2d 6c 61 79 65 72 2d 6d 61 73 6b 20 67 69 6d 70  -layer-mask gimp
0350: 2d 64 72 61 77 61 62 6c 65 2d 69 73 2d 6c 61 79  -drawable-is-lay
0360: 65 72 2d 6d 61 73 6b 29 20 29 0a 0a 28 64 65 66  er-mask) )..(def
0370: 69 6e 65 20 28 73 63 72 69 70 74 2d 66 75 2d 73  ine (script-fu-s
0380: 67 2d 61 6c 69 67 6e 2d 64 6f 77 6e 20 69 6d 61  g-align-down ima
0390: 67 65 20 64 72 61 77 61 62 6c 65 29 0a 20 20 3b  ge drawable).  ;
03a0: 3b 20 53 65 61 72 63 68 20 66 6f 72 20 74 68 65  ; Search for the
03b0: 20 66 69 72 73 74 20 6c 61 79 65 72 20 74 68 61   first layer tha
03c0: 74 20 69 73 20 76 69 73 69 62 6c 65 20 62 65 6c  t is visible bel
03d0: 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 6c 61  ow the active la
03e0: 79 65 72 0a 20 20 3b 3b 20 72 65 74 75 72 6e 20  yer.  ;; return 
03f0: 23 66 20 6f 6e 20 66 61 69 6c 75 72 65 20 28 6e  #f on failure (n
0400: 6f 20 73 75 63 68 20 6c 61 79 65 72 29 0a 20 20  o such layer).  
0410: 3b 0a 20 20 28 64 65 66 69 6e 65 20 28 67 65 74  ;.  (define (get
0420: 2d 62 61 73 65 2d 6c 61 79 65 72 20 6c 61 79 65  -base-layer laye
0430: 72 29 0a 20 20 20 20 28 6c 65 74 2a 20 28 28 70  r).    (let* ((p
0440: 61 72 65 6e 74 20 28 63 61 72 20 28 67 69 6d 70  arent (car (gimp
0450: 2d 69 74 65 6d 2d 67 65 74 2d 70 61 72 65 6e 74  -item-get-parent
0460: 20 6c 61 79 65 72 29 29 29 0a 20 20 20 20 20 20   layer))).      
0470: 20 20 20 20 20 28 73 69 62 6c 69 6e 67 73 20 28       (siblings (
0480: 69 66 20 28 3d 20 2d 31 20 70 61 72 65 6e 74 29  if (= -1 parent)
0490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
04a0: 20 20 20 20 20 20 20 20 20 20 28 76 65 63 74 6f            (vecto
04b0: 72 2d 3e 6c 69 73 74 20 28 63 61 64 72 20 28 67  r->list (cadr (g
04c0: 69 6d 70 2d 69 6d 61 67 65 2d 67 65 74 2d 6c 61  imp-image-get-la
04d0: 79 65 72 73 20 69 6d 61 67 65 29 29 29 0a 20 20  yers image))).  
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 28 76 65 63 74 6f 72 2d 3e         (vector->
0500: 6c 69 73 74 20 28 63 61 64 72 20 28 67 69 6d 70  list (cadr (gimp
0510: 2d 69 74 65 6d 2d 67 65 74 2d 63 68 69 6c 64 72  -item-get-childr
0520: 65 6e 20 70 61 72 65 6e 74 29 29 29 20 29 29 29  en parent))) )))
0530: 0a 20 20 20 20 20 20 28 6c 65 74 20 0a 20 20 20  .      (let .   
0540: 20 20 20 20 20 6c 6f 6f 70 20 28 28 6c 61 79 65       loop ((laye
0550: 72 73 20 28 63 64 72 20 28 6d 65 6d 76 20 6c 61  rs (cdr (memv la
0560: 79 65 72 20 73 69 62 6c 69 6e 67 73 29 29 29 29  yer siblings))))
0570: 0a 20 20 20 20 20 20 20 20 20 28 69 66 20 28 6e  .         (if (n
0580: 75 6c 6c 3f 20 6c 61 79 65 72 73 29 0a 20 20 20  ull? layers).   
0590: 20 20 20 20 20 20 20 20 23 66 0a 20 20 20 20 20          #f.     
05a0: 20 20 20 20 20 20 28 69 66 20 28 3d 20 28 63 61        (if (= (ca
05b0: 72 20 28 67 69 6d 70 2d 69 74 65 6d 2d 67 65 74  r (gimp-item-get
05c0: 2d 76 69 73 69 62 6c 65 20 28 63 61 72 20 6c 61  -visible (car la
05d0: 79 65 72 73 29 29 29 20 54 52 55 45 29 0a 20 20  yers))) TRUE).  
05e0: 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72 20             (car 
05f0: 6c 61 79 65 72 73 29 0a 20 20 20 20 20 20 20 20  layers).        
0600: 20 20 20 20 20 28 6c 6f 6f 70 20 28 63 64 72 20       (loop (cdr 
0610: 6c 61 79 65 72 73 29 29 29 29 29 29 29 0a 20 20  layers))))))).  
0620: 28 69 66 20 28 6f 72 20 28 3d 20 28 63 61 72 20  (if (or (= (car 
0630: 28 67 69 6d 70 2d 69 74 65 6d 2d 69 73 2d 6c 61  (gimp-item-is-la
0640: 79 65 72 20 64 72 61 77 61 62 6c 65 29 29 20 54  yer drawable)) T
0650: 52 55 45 29 0a 20 20 20 20 20 20 20 20 20 20 28  RUE).          (
0660: 3d 20 28 63 61 72 20 28 67 69 6d 70 2d 69 74 65  = (car (gimp-ite
0670: 6d 2d 69 73 2d 6c 61 79 65 72 2d 6d 61 73 6b 20  m-is-layer-mask 
0680: 64 72 61 77 61 62 6c 65 29 29 20 54 52 55 45 29  drawable)) TRUE)
0690: 20 29 0a 20 20 20 20 28 6c 65 74 2a 20 28 28 6c   ).    (let* ((l
06a0: 61 79 65 72 20 28 69 66 20 28 3d 20 28 63 61 72  ayer (if (= (car
06b0: 20 28 67 69 6d 70 2d 69 74 65 6d 2d 69 73 2d 6c   (gimp-item-is-l
06c0: 61 79 65 72 20 64 72 61 77 61 62 6c 65 29 29 20  ayer drawable)) 
06d0: 54 52 55 45 29 0a 20 20 20 20 20 20 20 20 20 20  TRUE).          
06e0: 20 20 20 20 20 20 20 20 20 20 64 72 61 77 61 62            drawab
06f0: 6c 65 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  le.             
0700: 20 20 20 20 20 20 20 28 63 61 72 20 28 67 69 6d         (car (gim
0710: 70 2d 6c 61 79 65 72 2d 66 72 6f 6d 2d 6d 61 73  p-layer-from-mas
0720: 6b 20 64 72 61 77 61 62 6c 65 29 29 20 29 29 0a  k drawable)) )).
0730: 20 20 20 20 20 20 20 20 20 20 20 28 77 69 64 74             (widt
0740: 68 20 20 28 63 61 72 20 28 67 69 6d 70 2d 64 72  h  (car (gimp-dr
0750: 61 77 61 62 6c 65 2d 77 69 64 74 68 20 20 6c 61  awable-width  la
0760: 79 65 72 29 29 29 0a 20 20 20 20 20 20 20 20 20  yer))).         
0770: 20 20 28 68 65 69 67 68 74 20 28 63 61 72 20 28    (height (car (
0780: 67 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d 68 65  gimp-drawable-he
0790: 69 67 68 74 20 6c 61 79 65 72 29 29 29 0a 20 20  ight layer))).  
07a0: 20 20 20 20 20 20 20 20 20 28 62 6f 75 6e 64 73           (bounds
07b0: 20 28 67 69 6d 70 2d 73 65 6c 65 63 74 69 6f 6e   (gimp-selection
07c0: 2d 62 6f 75 6e 64 73 20 69 6d 61 67 65 29 29 0a  -bounds image)).
07d0: 20 20 20 20 20 20 20 20 20 20 20 28 62 61 73 65             (base
07e0: 2d 6c 61 79 65 72 20 28 67 65 74 2d 62 61 73 65  -layer (get-base
07f0: 2d 6c 61 79 65 72 20 6c 61 79 65 72 29 29 0a 20  -layer layer)). 
0800: 20 20 20 20 20 20 20 20 20 20 28 62 61 73 65 2d            (base-
0810: 78 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 20  x 0).           
0820: 28 62 61 73 65 2d 79 20 30 29 0a 20 20 20 20 20  (base-y 0).     
0830: 20 20 20 20 20 20 28 62 61 73 65 2d 77 69 64 74        (base-widt
0840: 68 20 28 63 61 72 20 28 67 69 6d 70 2d 69 6d 61  h (car (gimp-ima
0850: 67 65 2d 77 69 64 74 68 20 20 69 6d 61 67 65 29  ge-width  image)
0860: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 28 62  )).           (b
0870: 61 73 65 2d 68 65 69 67 68 74 20 28 63 61 72 20  ase-height (car 
0880: 28 67 69 6d 70 2d 69 6d 61 67 65 2d 68 65 69 67  (gimp-image-heig
0890: 68 74 20 69 6d 61 67 65 29 29 29 20 29 0a 20 20  ht image))) ).  
08a0: 20 20 20 20 28 69 66 20 28 3d 20 28 63 61 72 20      (if (= (car 
08b0: 62 6f 75 6e 64 73 29 20 54 52 55 45 29 0a 20 20  bounds) TRUE).  
08c0: 20 20 20 20 20 20 28 62 65 67 69 6e 20 0a 20 20        (begin .  
08d0: 20 20 20 20 20 20 20 20 28 73 65 74 21 20 62 6f          (set! bo
08e0: 75 6e 64 73 20 28 63 64 72 20 62 6f 75 6e 64 73  unds (cdr bounds
08f0: 29 29 0a 20 20 20 20 20 20 20 20 20 20 28 73 65  )).          (se
0900: 74 21 20 62 61 73 65 2d 78 20 28 63 61 72 20 20  t! base-x (car  
0910: 62 6f 75 6e 64 73 29 29 0a 20 20 20 20 20 20 20  bounds)).       
0920: 20 20 20 28 73 65 74 21 20 62 61 73 65 2d 79 20     (set! base-y 
0930: 28 63 61 64 72 20 62 6f 75 6e 64 73 29 29 0a 20  (cadr bounds)). 
0940: 20 20 20 20 20 20 20 20 20 28 73 65 74 21 20 62           (set! b
0950: 61 73 65 2d 77 69 64 74 68 20 20 28 2d 20 28 63  ase-width  (- (c
0960: 61 64 64 72 20 20 62 6f 75 6e 64 73 29 20 62 61  addr  bounds) ba
0970: 73 65 2d 78 29 29 0a 20 20 20 20 20 20 20 20 20  se-x)).         
0980: 20 28 73 65 74 21 20 62 61 73 65 2d 68 65 69 67   (set! base-heig
0990: 68 74 20 28 2d 20 28 63 61 64 64 64 72 20 62 6f  ht (- (cadddr bo
09a0: 75 6e 64 73 29 20 62 61 73 65 2d 79 29 29 20 29  unds) base-y)) )
09b0: 0a 20 20 20 20 20 20 20 20 28 69 66 20 62 61 73  .        (if bas
09c0: 65 2d 6c 61 79 65 72 0a 20 20 20 20 20 20 20 20  e-layer.        
09d0: 20 20 28 62 65 67 69 6e 0a 20 20 20 20 20 20 20    (begin.       
09e0: 20 20 20 20 20 28 73 65 74 21 20 62 61 73 65 2d       (set! base-
09f0: 78 20 28 63 61 72 20 20 28 67 69 6d 70 2d 64 72  x (car  (gimp-dr
0a00: 61 77 61 62 6c 65 2d 6f 66 66 73 65 74 73 20 62  awable-offsets b
0a10: 61 73 65 2d 6c 61 79 65 72 29 29 29 0a 20 20 20  ase-layer))).   
0a20: 20 20 20 20 20 20 20 20 20 28 73 65 74 21 20 62           (set! b
0a30: 61 73 65 2d 79 20 28 63 61 64 72 20 28 67 69 6d  ase-y (cadr (gim
0a40: 70 2d 64 72 61 77 61 62 6c 65 2d 6f 66 66 73 65  p-drawable-offse
0a50: 74 73 20 62 61 73 65 2d 6c 61 79 65 72 29 29 29  ts base-layer)))
0a60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 73 65  .            (se
0a70: 74 21 20 62 61 73 65 2d 77 69 64 74 68 20 20 28  t! base-width  (
0a80: 63 61 72 20 28 67 69 6d 70 2d 64 72 61 77 61 62  car (gimp-drawab
0a90: 6c 65 2d 77 69 64 74 68 20 20 62 61 73 65 2d 6c  le-width  base-l
0aa0: 61 79 65 72 29 29 29 0a 20 20 20 20 20 20 20 20  ayer))).        
0ab0: 20 20 20 20 28 73 65 74 21 20 62 61 73 65 2d 68      (set! base-h
0ac0: 65 69 67 68 74 20 28 63 61 72 20 28 67 69 6d 70  eight (car (gimp
0ad0: 2d 64 72 61 77 61 62 6c 65 2d 68 65 69 67 68 74  -drawable-height
0ae0: 20 62 61 73 65 2d 6c 61 79 65 72 29 29 29 20 29   base-layer))) )
0af0: 0a 20 20 20 20 20 20 20 20 20 20 28 6c 65 74 20  .          (let 
0b00: 28 28 70 61 72 65 6e 74 20 28 63 61 72 20 28 67  ((parent (car (g
0b10: 69 6d 70 2d 69 74 65 6d 2d 67 65 74 2d 70 61 72  imp-item-get-par
0b20: 65 6e 74 20 6c 61 79 65 72 29 29 29 29 0a 20 20  ent layer)))).  
0b30: 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65 73            (unles
0b40: 73 20 28 3d 20 2d 31 20 70 61 72 65 6e 74 29 0a  s (= -1 parent).
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 73                (s
0b60: 65 74 21 20 62 61 73 65 2d 78 20 28 63 61 72 20  et! base-x (car 
0b70: 20 28 67 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d   (gimp-drawable-
0b80: 6f 66 66 73 65 74 73 20 70 61 72 65 6e 74 29 29  offsets parent))
0b90: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
0ba0: 28 73 65 74 21 20 62 61 73 65 2d 79 20 28 63 61  (set! base-y (ca
0bb0: 64 72 20 28 67 69 6d 70 2d 64 72 61 77 61 62 6c  dr (gimp-drawabl
0bc0: 65 2d 6f 66 66 73 65 74 73 20 70 61 72 65 6e 74  e-offsets parent
0bd0: 29 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))).            
0be0: 20 20 28 73 65 74 21 20 62 61 73 65 2d 77 69 64    (set! base-wid
0bf0: 74 68 20 20 28 63 61 72 20 28 67 69 6d 70 2d 64  th  (car (gimp-d
0c00: 72 61 77 61 62 6c 65 2d 77 69 64 74 68 20 20 70  rawable-width  p
0c10: 61 72 65 6e 74 29 29 29 0a 20 20 20 20 20 20 20  arent))).       
0c20: 20 20 20 20 20 20 20 28 73 65 74 21 20 62 61 73         (set! bas
0c30: 65 2d 68 65 69 67 68 74 20 28 63 61 72 20 28 67  e-height (car (g
0c40: 69 6d 70 2d 64 72 61 77 61 62 6c 65 2d 68 65 69  imp-drawable-hei
0c50: 67 68 74 20 70 61 72 65 6e 74 29 29 29 20 29 29  ght parent))) ))
0c60: 29 29 0a 20 20 20 20 20 20 28 67 69 6d 70 2d 69  )).      (gimp-i
0c70: 6d 61 67 65 2d 75 6e 64 6f 2d 67 72 6f 75 70 2d  mage-undo-group-
0c80: 73 74 61 72 74 20 69 6d 61 67 65 29 0a 20 20 20  start image).   
0c90: 20 20 20 28 67 69 6d 70 2d 6c 61 79 65 72 2d 73     (gimp-layer-s
0ca0: 65 74 2d 6f 66 66 73 65 74 73 20 6c 61 79 65 72  et-offsets layer
0cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
0cd0: 2d 20 28 2b 20 62 61 73 65 2d 78 20 28 2f 20 62  - (+ base-x (/ b
0ce0: 61 73 65 2d 77 69 64 74 68 20 20 32 29 29 20 28  ase-width  2)) (
0cf0: 2f 20 77 69 64 74 68 20 20 32 29 29 0a 20 20 20  / width  2)).   
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d10: 20 20 20 20 20 20 20 20 20 20 20 28 2d 20 28 2b             (- (+
0d20: 20 62 61 73 65 2d 79 20 28 2f 20 62 61 73 65 2d   base-y (/ base-
0d30: 68 65 69 67 68 74 20 32 29 29 20 28 2f 20 68 65  height 2)) (/ he
0d40: 69 67 68 74 20 32 29 29 29 0a 20 20 20 20 20 20  ight 2))).      
0d50: 28 67 69 6d 70 2d 69 6d 61 67 65 2d 75 6e 64 6f  (gimp-image-undo
0d60: 2d 67 72 6f 75 70 2d 65 6e 64 20 69 6d 61 67 65  -group-end image
0d70: 29 0a 20 20 20 20 20 20 28 67 69 6d 70 2d 64 69  ).      (gimp-di
0d80: 73 70 6c 61 79 73 2d 66 6c 75 73 68 29 0a 20 20  splays-flush).  
0d90: 20 20 20 20 29 0a 20 20 20 20 28 62 65 67 69 6e      ).    (begin
0da0: 20 3b 3b 20 45 4c 53 45 20 61 63 74 69 76 65 20   ;; ELSE active 
0db0: 64 72 61 77 61 62 6c 65 20 69 73 20 61 20 63 68  drawable is a ch
0dc0: 61 6e 6e 65 6c 2c 20 63 65 6e 74 65 72 20 73 65  annel, center se
0dd0: 6c 65 63 74 69 6f 6e 20 6f 6e 20 69 6d 61 67 65  lection on image
0de0: 0a 20 20 20 20 20 20 28 67 69 6d 70 2d 69 6d 61  .      (gimp-ima
0df0: 67 65 2d 75 6e 64 6f 2d 67 72 6f 75 70 2d 73 74  ge-undo-group-st
0e00: 61 72 74 20 69 6d 61 67 65 29 0a 20 20 20 20 20  art image).     
0e10: 20 28 6c 65 74 20 28 28 6f 72 69 67 2d 73 65 6c   (let ((orig-sel
0e20: 20 28 69 66 20 28 7a 65 72 6f 3f 20 28 63 61 72   (if (zero? (car
0e30: 20 28 67 69 6d 70 2d 73 65 6c 65 63 74 69 6f 6e   (gimp-selection
0e40: 2d 69 73 2d 65 6d 70 74 79 20 69 6d 61 67 65 29  -is-empty image)
0e50: 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )).             
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 28 63 61 72              (car
0e70: 20 28 67 69 6d 70 2d 73 65 6c 65 63 74 69 6f 6e   (gimp-selection
0e80: 2d 73 61 76 65 20 69 6d 61 67 65 29 29 0a 20 20  -save image)).  
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ea0: 20 20 20 20 20 20 20 23 66 20 29 29 0a 20 20 20         #f )).   
0eb0: 20 20 20 20 20 20 20 20 20 20 28 63 68 61 6e 6e            (chann
0ec0: 65 6c 20 30 29 20 29 0a 20 20 20 20 20 20 20 20  el 0) ).        
0ed0: 28 69 66 20 6f 72 69 67 2d 73 65 6c 20 0a 20 20  (if orig-sel .  
0ee0: 20 20 20 20 20 20 20 20 28 73 65 74 21 20 63 68          (set! ch
0ef0: 61 6e 6e 65 6c 20 28 63 61 72 20 28 67 69 6d 70  annel (car (gimp
0f00: 2d 73 65 6c 65 63 74 69 6f 6e 2d 73 61 76 65 20  -selection-save 
0f10: 69 6d 61 67 65 29 29 29 0a 20 20 20 20 20 20 20  image))).       
0f20: 20 20 20 28 62 65 67 69 6e 20 0a 20 20 20 20 20     (begin .     
0f30: 20 20 20 20 20 20 20 28 73 65 74 21 20 63 68 61         (set! cha
0f40: 6e 6e 65 6c 20 28 63 61 72 20 28 67 69 6d 70 2d  nnel (car (gimp-
0f50: 63 68 61 6e 6e 65 6c 2d 63 6f 70 79 20 64 72 61  channel-copy dra
0f60: 77 61 62 6c 65 29 29 29 0a 20 20 20 20 20 20 20  wable))).       
0f70: 20 20 20 20 20 28 67 69 6d 70 2d 69 6d 61 67 65       (gimp-image
0f80: 2d 61 64 64 2d 63 68 61 6e 6e 65 6c 20 69 6d 61  -add-channel ima
0f90: 67 65 20 63 68 61 6e 6e 65 6c 20 2d 31 29 20 29  ge channel -1) )
0fa0: 29 0a 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d  ).        (gimp-
0fb0: 73 65 6c 65 63 74 69 6f 6e 2d 6c 6f 61 64 20 63  selection-load c
0fc0: 68 61 6e 6e 65 6c 29 20 3b 3b 20 21 21 21 20 42  hannel) ;; !!! B
0fd0: 55 47 20 3d 20 75 6e 61 62 6c 65 20 74 6f 20 6c  UG = unable to l
0fe0: 6f 61 64 20 66 72 6f 6d 20 71 75 69 63 6b 6d 61  oad from quickma
0ff0: 73 6b 0a 20 20 20 20 20 20 20 20 28 6c 65 74 2a  sk.        (let*
1000: 20 28 28 62 6f 75 6e 64 73 20 28 67 69 6d 70 2d   ((bounds (gimp-
1010: 73 65 6c 65 63 74 69 6f 6e 2d 62 6f 75 6e 64 73  selection-bounds
1020: 20 69 6d 61 67 65 29 29 0a 20 20 20 20 20 20 20   image)).       
1030: 20 20 20 20 20 20 20 20 28 78 20 28 63 61 64 72          (x (cadr
1040: 20 62 6f 75 6e 64 73 29 29 0a 20 20 20 20 20 20   bounds)).      
1050: 20 20 20 20 20 20 20 20 20 28 79 20 28 63 61 64           (y (cad
1060: 64 72 20 62 6f 75 6e 64 73 29 29 0a 20 20 20 20  dr bounds)).    
1070: 20 20 20 20 20 20 20 20 20 20 20 28 77 69 64 74             (widt
1080: 68 20 20 28 2d 20 28 63 61 64 64 64 72 20 62 6f  h  (- (cadddr bo
1090: 75 6e 64 73 29 20 78 29 29 0a 20 20 20 20 20 20  unds) x)).      
10a0: 20 20 20 20 20 20 20 20 20 28 68 65 69 67 68 74           (height
10b0: 20 28 2d 20 28 63 61 72 20 28 63 64 64 64 64 72   (- (car (cddddr
10c0: 20 62 6f 75 6e 64 73 29 29 20 79 29 29 0a 20 20   bounds)) y)).  
10d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6d               (im
10e0: 61 67 65 2d 77 69 64 74 68 20 28 63 61 72 20 28  age-width (car (
10f0: 67 69 6d 70 2d 69 6d 61 67 65 2d 77 69 64 74 68  gimp-image-width
1100: 20 20 69 6d 61 67 65 29 29 29 0a 20 20 20 20 20    image))).     
1110: 20 20 20 20 20 20 20 20 20 20 28 69 6d 61 67 65            (image
1120: 2d 68 65 69 67 68 74 20 28 63 61 72 20 28 67 69  -height (car (gi
1130: 6d 70 2d 69 6d 61 67 65 2d 68 65 69 67 68 74 20  mp-image-height 
1140: 69 6d 61 67 65 29 29 29 20 29 0a 20 20 20 20 20  image))) ).     
1150: 20 20 20 20 20 28 67 69 6d 70 2d 73 65 6c 65 63       (gimp-selec
1160: 74 69 6f 6e 2d 6e 6f 6e 65 20 69 6d 61 67 65 29  tion-none image)
1170: 0a 20 20 20 20 20 20 20 20 20 20 28 75 6e 6c 65  .          (unle
1180: 73 73 20 28 7a 65 72 6f 3f 20 28 63 61 72 20 62  ss (zero? (car b
1190: 6f 75 6e 64 73 29 29 20 3b 3b 20 64 6f 20 6e 6f  ounds)) ;; do no
11a0: 74 68 69 6e 67 20 69 66 20 63 68 61 6e 6e 65 6c  thing if channel
11b0: 20 69 73 20 65 6d 70 74 79 0a 20 20 20 20 20 20   is empty.      
11c0: 20 20 20 20 20 20 28 67 69 6d 70 2d 64 72 61 77        (gimp-draw
11d0: 61 62 6c 65 2d 6f 66 66 73 65 74 20 63 68 61 6e  able-offset chan
11e0: 6e 65 6c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nel.            
11f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1200: 20 20 20 20 20 20 54 52 55 45 0a 20 20 20 20 20        TRUE.     
1210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1220: 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 46 46               OFF
1230: 53 45 54 2d 42 41 43 4b 47 52 4f 55 4e 44 0a 20  SET-BACKGROUND. 
1240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1260: 20 28 2d 20 28 2f 20 28 2d 20 69 6d 61 67 65 2d   (- (/ (- image-
1270: 77 69 64 74 68 20 77 69 64 74 68 29 20 32 29 20  width width) 2) 
1280: 78 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  x).             
1290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12a0: 20 20 20 20 20 28 2d 20 28 2f 20 28 2d 20 69 6d       (- (/ (- im
12b0: 61 67 65 2d 68 65 69 67 68 74 20 68 65 69 67 68  age-height heigh
12c0: 74 29 20 32 29 20 79 29 20 29 29 29 0a 20 20 20  t) 2) y) ))).   
12d0: 20 20 20 20 20 28 69 66 20 6f 72 69 67 2d 73 65       (if orig-se
12e0: 6c 20 0a 20 20 20 20 20 20 20 20 20 20 28 62 65  l .          (be
12f0: 67 69 6e 20 0a 20 20 20 20 20 20 20 20 20 20 20  gin .           
1300: 20 28 67 69 6d 70 2d 73 65 6c 65 63 74 69 6f 6e   (gimp-selection
1310: 2d 6c 6f 61 64 20 63 68 61 6e 6e 65 6c 29 0a 20  -load channel). 
1320: 20 20 20 20 20 20 20 20 20 20 20 28 67 69 6d 70             (gimp
1330: 2d 69 6d 61 67 65 2d 72 65 6d 6f 76 65 2d 63 68  -image-remove-ch
1340: 61 6e 6e 65 6c 20 69 6d 61 67 65 20 6f 72 69 67  annel image orig
1350: 2d 73 65 6c 29 20 29 0a 20 20 20 20 20 20 20 20  -sel) ).        
1360: 20 20 28 6c 65 74 20 28 28 62 75 66 66 65 72 20    (let ((buffer 
1370: 28 63 61 72 20 28 67 69 6d 70 2d 65 64 69 74 2d  (car (gimp-edit-
1380: 6e 61 6d 65 64 2d 63 6f 70 79 20 63 68 61 6e 6e  named-copy chann
1390: 65 6c 20 22 74 65 6d 70 22 29 29 29 29 0a 20 20  el "temp")))).  
13a0: 20 20 20 20 20 20 20 20 20 20 28 67 69 6d 70 2d            (gimp-
13b0: 66 6c 6f 61 74 69 6e 67 2d 73 65 6c 2d 61 6e 63  floating-sel-anc
13c0: 68 6f 72 20 28 63 61 72 20 28 67 69 6d 70 2d 65  hor (car (gimp-e
13d0: 64 69 74 2d 6e 61 6d 65 64 2d 70 61 73 74 65 20  dit-named-paste 
13e0: 64 72 61 77 61 62 6c 65 20 62 75 66 66 65 72 20  drawable buffer 
13f0: 46 41 4c 53 45 29 29 29 0a 20 20 20 20 20 20 20  FALSE))).       
1400: 20 20 20 20 20 28 67 69 6d 70 2d 62 75 66 66 65       (gimp-buffe
1410: 72 2d 64 65 6c 65 74 65 20 62 75 66 66 65 72 29  r-delete buffer)
1420: 20 29 29 0a 20 20 20 20 20 20 20 20 28 67 69 6d   )).        (gim
1430: 70 2d 69 6d 61 67 65 2d 72 65 6d 6f 76 65 2d 63  p-image-remove-c
1440: 68 61 6e 6e 65 6c 20 69 6d 61 67 65 20 63 68 61  hannel image cha
1450: 6e 6e 65 6c 29 0a 20 20 20 20 20 20 20 20 29 0a  nnel).        ).
1460: 20 20 20 20 20 20 28 67 69 6d 70 2d 69 6d 61 67        (gimp-imag
1470: 65 2d 75 6e 64 6f 2d 67 72 6f 75 70 2d 65 6e 64  e-undo-group-end
1480: 20 69 6d 61 67 65 29 0a 20 20 20 20 20 20 28 67   image).      (g
1490: 69 6d 70 2d 64 69 73 70 6c 61 79 73 2d 66 6c 75  imp-displays-flu
14a0: 73 68 29 0a 20 20 20 20 20 20 29 0a 20 20 20 20  sh).      ).    
14b0: 29 0a 20 20 29 0a 20 20 20 20 20 20 20 20 0a 28  ).  ).        .(
14c0: 73 63 72 69 70 74 2d 66 75 2d 72 65 67 69 73 74  script-fu-regist
14d0: 65 72 20 22 73 63 72 69 70 74 2d 66 75 2d 73 67  er "script-fu-sg
14e0: 2d 61 6c 69 67 6e 2d 64 6f 77 6e 22 0a 20 20 22  -align-down".  "
14f0: 41 6c 69 67 6e 20 44 6f 77 6e 22 0a 20 20 22 41  Align Down".  "A
1500: 6c 69 67 6e 20 74 68 69 73 20 6c 61 79 65 72 20  lign this layer 
1510: 63 65 6e 74 65 72 65 64 20 77 69 74 68 20 74 68  centered with th
1520: 65 20 28 76 69 73 69 62 6c 65 29 20 6c 61 79 65  e (visible) laye
1530: 72 20 62 65 6c 6f 77 20 69 74 22 0a 20 20 22 53  r below it".  "S
1540: 61 75 6c 20 47 6f 6f 64 65 22 0a 20 20 22 53 61  aul Goode".  "Sa
1550: 75 6c 20 47 6f 6f 64 65 22 0a 20 20 22 34 2f 39  ul Goode".  "4/9
1560: 2f 32 30 31 30 22 0a 20 20 22 2a 22 0a 20 20 53  /2010".  "*".  S
1570: 46 2d 49 4d 41 47 45 20 20 20 20 22 49 6d 61 67  F-IMAGE    "Imag
1580: 65 22 20 20 20 20 30 0a 20 20 53 46 2d 44 52 41  e"    0.  SF-DRA
1590: 57 41 42 4c 45 20 22 4c 61 79 65 72 22 20 30 0a  WABLE "Layer" 0.
15a0: 20 20 29 0a 0a 28 73 63 72 69 70 74 2d 66 75 2d    )..(script-fu-
15b0: 6d 65 6e 75 2d 72 65 67 69 73 74 65 72 20 22 73  menu-register "s
15c0: 63 72 69 70 74 2d 66 75 2d 73 67 2d 61 6c 69 67  cript-fu-sg-alig
15d0: 6e 2d 64 6f 77 6e 22 0a 20 22 3c 49 6d 61 67 65  n-down". "<Image
15e0: 3e 2f 4c 61 79 65 72 22 0a 20 29 0a 0a 28 73 63  >/Layer". )..(sc
15f0: 72 69 70 74 2d 66 75 2d 6d 65 6e 75 2d 72 65 67  ript-fu-menu-reg
1600: 69 73 74 65 72 20 22 73 63 72 69 70 74 2d 66 75  ister "script-fu
1610: 2d 73 67 2d 61 6c 69 67 6e 2d 64 6f 77 6e 22 0a  -sg-align-down".
1620: 20 22 3c 4c 61 79 65 72 73 3e 22 0a 20 29 0a 0a   "<Layers>". )..
1630: 0a                                               .