]> de.git.xonotic.org Git - xonotic/mediasource.git/blob - models/misc/chatbubble/whiteborder.scm
9369ccfb67a565bae183bb8517e439cc77e67b23
[xonotic/mediasource.git] / models / misc / chatbubble / whiteborder.scm
1 ;Adds a white border and a faint glow, based on the alpha channel
2 ;Input: filesIn (wildcard * possible) borderGrow borderFeather objectShrink objectFeather glowBlur
3 ;Output: RLE compressed .tga file(s) (overwrites existing tga files)
4
5 (define (whiteborder filesIn glowBlur borderGrow borderFeather objectShrink objectFeather)
6         (let*
7         (
8             (fileList (cadr (file-glob filesIn 1)))
9             (borderColor '(255 255 255))
10             (borderGlow '(223 223 223))
11         )
12
13         (while (not (null? fileList))
14                 (let*
15                         (
16                     (file (car fileList))
17                                 (image (car (gimp-file-load 1 file file)))
18                                 (bottomLayer (car (gimp-image-get-active-layer image)))
19                                 (middleLayer (car (gimp-layer-new-from-drawable bottomLayer image)))
20                                 (topLayer (car (gimp-layer-new-from-drawable bottomLayer image)))
21                         )
22
23                 ;Add layers
24                         (gimp-image-add-layer image middleLayer -1)
25                         (gimp-image-add-layer image topLayer -1)
26
27                 ;Bottom layer: create extended glow siluette of the object
28                 (gimp-context-set-foreground borderGlow)
29                 (gimp-selection-layer-alpha bottomLayer)
30                 (gimp-selection-grow image (- borderGrow 1))
31                 (gimp-selection-feather image borderFeather)
32                 (gimp-edit-fill bottomLayer 0)
33                 (gimp-selection-none image)
34                 (plug-in-gauss-rle 1 image bottomLayer glowBlur 1 1)
35
36                 ;Middle layer: create extended siluette of the object
37                 (gimp-context-set-foreground borderColor)
38                 (gimp-selection-layer-alpha middleLayer)
39                 (gimp-selection-grow image borderGrow)
40                 (gimp-selection-feather image borderFeather)
41                 (gimp-edit-fill middleLayer 0)
42
43                 ;Top layer: reduce border of the object on the top layer
44                 (gimp-selection-layer-alpha topLayer)
45                 (gimp-selection-shrink image objectShrink)
46                 (gimp-selection-feather image objectFeather)
47                 (gimp-selection-invert image)
48                 (gimp-edit-clear topLayer)
49
50                 ;Set extension to .tga
51                         (set! file (car (strbreakup file ".")))
52                         (set! file (string-append file ".tga")) 
53
54                 ;Save image as RLE compressed tga
55                         (set! bottomLayer (car (gimp-image-merge-visible-layers image 1)))
56                         (file-tga-save 1 image bottomLayer file file 1 0)
57                 (gimp-image-delete image)
58
59                 (set! fileList (cdr fileList))
60             )
61             )
62     )
63 )