Artifact
b7d557a7f82f5b22cba521bc83bc4c5d8618d720:
0000: 28 72 65 71 75 69 72 65 2d 6c 69 62 72 61 72 79 (require-library
0010: 20 63 61 6e 76 61 73 2d 64 72 61 77 2d 62 61 73 canvas-draw-bas
0020: 65 29 0a 0a 28 6d 6f 64 75 6c 65 20 63 61 6e 76 e)..(module canv
0030: 61 73 2d 64 72 61 77 2d 63 6c 69 65 6e 74 0a 09 as-draw-client..
0040: 28 63 6f 6e 74 65 78 74 3a 69 6d 61 67 65 20 63 (context:image c
0050: 6f 6e 74 65 78 74 3a 64 6f 75 62 6c 65 2d 62 75 ontext:double-bu
0060: 66 66 65 72 0a 09 20 63 61 6e 76 61 73 2d 69 6d ffer.. canvas-im
0070: 61 67 65 2f 72 67 62 20 63 61 6e 76 61 73 2d 69 age/rgb canvas-i
0080: 6d 61 67 65 2d 70 75 74 2f 72 67 62 21 20 63 61 mage-put/rgb! ca
0090: 6e 76 61 73 2d 69 6d 61 67 65 2d 70 75 74 2f 72 nvas-image-put/r
00a0: 67 62 61 21 29 0a 09 28 69 6d 70 6f 72 74 20 73 gba!)..(import s
00b0: 63 68 65 6d 65 20 63 68 69 63 6b 65 6e 20 66 6f cheme chicken fo
00c0: 72 65 69 67 6e 20 63 61 6e 76 61 73 2d 64 72 61 reign canvas-dra
00d0: 77 2d 62 61 73 65 29 0a 0a 3b 3b 20 7b 7b 7b 20 w-base)..;; {{{
00e0: 44 61 74 61 20 74 79 70 65 73 0a 0a 28 66 6f 72 Data types..(for
00f0: 65 69 67 6e 2d 64 65 63 6c 61 72 65 0a 09 22 23 eign-declare.."#
0100: 69 6e 63 6c 75 64 65 20 3c 63 64 2e 68 3e 5c 6e include <cd.h>\n
0110: 22 0a 09 22 23 69 6e 63 6c 75 64 65 20 3c 63 64 ".."#include <cd
0120: 69 72 67 62 2e 68 3e 5c 6e 22 29 0a 0a 28 69 6e irgb.h>\n")..(in
0130: 63 6c 75 64 65 20 22 63 61 6e 76 61 73 2d 64 72 clude "canvas-dr
0140: 61 77 2d 74 79 70 65 73 2e 73 63 6d 22 29 0a 0a aw-types.scm")..
0150: 3b 3b 20 7d 7d 7d 0a 0a 3b 3b 20 7b 7b 7b 20 43 ;; }}}..;; {{{ C
0160: 6f 6e 74 65 78 74 20 74 79 70 65 73 0a 0a 28 64 ontext types..(d
0170: 65 66 69 6e 65 20 63 6f 6e 74 65 78 74 3a 69 6d efine context:im
0180: 61 67 65 0a 09 28 66 6f 72 65 69 67 6e 2d 76 61 age..(foreign-va
0190: 6c 75 65 20 22 43 44 5f 49 4d 41 47 45 52 47 42 lue "CD_IMAGERGB
01a0: 22 20 6e 6f 6e 6e 75 6c 6c 2d 63 6f 6e 74 65 78 " nonnull-contex
01b0: 74 29 29 0a 0a 28 64 65 66 69 6e 65 20 63 6f 6e t))..(define con
01c0: 74 65 78 74 3a 64 6f 75 62 6c 65 2d 62 75 66 66 text:double-buff
01d0: 65 72 0a 09 28 66 6f 72 65 69 67 6e 2d 76 61 6c er..(foreign-val
01e0: 75 65 20 22 43 44 5f 44 42 55 46 46 45 52 52 47 ue "CD_DBUFFERRG
01f0: 42 22 20 6e 6f 6e 6e 75 6c 6c 2d 63 6f 6e 74 65 B" nonnull-conte
0200: 78 74 29 29 0a 0a 3b 3b 20 7d 7d 7d 0a 0a 3b 3b xt))..;; }}}..;;
0210: 20 7b 7b 7b 20 41 75 78 69 6c 69 61 72 79 20 66 {{{ Auxiliary f
0220: 75 6e 63 74 69 6f 6e 73 0a 0a 28 64 65 66 69 6e unctions..(defin
0230: 65 20 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d 70 e canvas-image-p
0240: 75 74 2f 72 67 62 21 0a 09 28 6c 65 74 72 65 63 ut/rgb!..(letrec
0250: 20 28 5b 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d ([canvas-image-
0260: 73 65 74 2f 72 67 62 2f 72 61 77 21 0a 09 20 20 set/rgb/raw!..
0270: 20 20 20 20 20 20 20 20 28 66 6f 72 65 69 67 6e (foreign
0280: 2d 6c 61 6d 62 64 61 2a 20 76 6f 69 64 20 28 5b -lambda* void ([
0290: 6e 6f 6e 6e 75 6c 6c 2d 63 61 6e 76 61 73 20 63 nonnull-canvas c
02a0: 61 6e 76 61 73 5d 20 5b 69 6e 74 20 64 73 74 5f anvas] [int dst_
02b0: 78 5d 20 5b 69 6e 74 20 64 73 74 5f 79 5d 0a 09 x] [int dst_y]..
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02e0: 20 5b 69 6e 74 20 73 72 63 5f 77 69 64 74 68 5d [int src_width]
02f0: 20 5b 69 6e 74 20 73 72 63 5f 68 65 69 67 68 74 [int src_height
0300: 5d 20 5b 6e 6f 6e 6e 75 6c 6c 2d 62 6c 6f 62 20 ] [nonnull-blob
0310: 64 61 74 61 5d 0a 09 20 20 20 20 20 20 20 20 20 data]..
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0330: 20 20 20 20 20 20 20 20 5b 69 6e 74 20 64 73 74 [int dst
0340: 5f 77 69 64 74 68 5d 20 5b 69 6e 74 20 64 73 74 _width] [int dst
0350: 5f 68 65 69 67 68 74 5d 0a 09 20 20 20 20 20 20 _height]..
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0370: 20 20 20 20 20 20 20 20 20 20 20 5b 69 6e 74 20 [int
0380: 73 72 63 5f 78 30 5d 20 5b 69 6e 74 20 73 72 63 src_x0] [int src
0390: 5f 78 31 5d 20 5b 69 6e 74 20 73 72 63 5f 79 30 _x1] [int src_y0
03a0: 5d 20 5b 69 6e 74 20 73 72 63 5f 79 31 5d 29 0a ] [int src_y1]).
03b0: 09 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f . "co
03c0: 6e 73 74 20 69 6e 74 20 6e 63 68 61 6e 73 20 3d nst int nchans =
03d0: 20 33 3b 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 3;\n"..
03e0: 20 20 09 22 75 6e 73 69 67 6e 65 64 20 63 68 61 ."unsigned cha
03f0: 72 20 63 68 61 6e 73 5b 6e 63 68 61 6e 73 5d 5b r chans[nchans][
0400: 73 72 63 5f 77 69 64 74 68 20 2a 20 73 72 63 5f src_width * src_
0410: 68 65 69 67 68 74 5d 3b 5c 6e 22 0a 09 20 20 20 height];\n"..
0420: 20 20 20 20 20 20 20 09 22 69 6e 74 20 69 3b 5c ."int i;\
0430: 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 n".. ."
0440: 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 \n".. .
0450: 22 66 6f 72 20 28 69 20 3d 20 30 3b 20 69 20 3c "for (i = 0; i <
0460: 20 6e 63 68 61 6e 73 20 2a 20 73 72 63 5f 77 69 nchans * src_wi
0470: 64 74 68 20 2a 20 73 72 63 5f 68 65 69 67 68 74 dth * src_height
0480: 3b 20 2b 2b 69 29 5c 6e 22 0a 09 20 20 20 20 20 ; ++i)\n"..
0490: 20 20 20 20 20 09 22 09 63 68 61 6e 73 5b 69 20 .".chans[i
04a0: 25 20 6e 63 68 61 6e 73 5d 5b 69 20 2f 20 6e 63 % nchans][i / nc
04b0: 68 61 6e 73 5d 20 3d 20 64 61 74 61 5b 69 5d 3b hans] = data[i];
04c0: 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 \n".. .
04d0: 22 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 "\n"..
04e0: 09 22 63 64 43 61 6e 76 61 73 50 75 74 49 6d 61 ."cdCanvasPutIma
04f0: 67 65 52 65 63 74 52 47 42 28 5c 6e 22 0a 09 20 geRectRGB(\n"..
0500: 20 20 20 20 20 20 20 20 20 09 22 09 63 61 6e 76 .".canv
0510: 61 73 2c 20 73 72 63 5f 77 69 64 74 68 2c 20 73 as, src_width, s
0520: 72 63 5f 68 65 69 67 68 74 2c 5c 6e 22 0a 09 20 rc_height,\n"..
0530: 20 20 20 20 20 20 20 20 20 09 22 09 63 68 61 6e .".chan
0540: 73 5b 30 5d 2c 20 63 68 61 6e 73 5b 31 5d 2c 20 s[0], chans[1],
0550: 63 68 61 6e 73 5b 32 5d 2c 5c 6e 22 0a 09 20 20 chans[2],\n"..
0560: 20 20 20 20 20 20 20 20 09 22 09 64 73 74 5f 78 .".dst_x
0570: 2c 20 64 73 74 5f 79 2c 20 64 73 74 5f 77 69 64 , dst_y, dst_wid
0580: 74 68 2c 20 64 73 74 5f 68 65 69 67 68 74 2c 22 th, dst_height,"
0590: 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 09 73 .. .".s
05a0: 72 63 5f 78 30 2c 20 73 72 63 5f 78 31 2c 20 73 rc_x0, src_x1, s
05b0: 72 63 5f 79 30 2c 20 73 72 63 5f 79 31 22 0a 09 rc_y0, src_y1"..
05c0: 20 20 20 20 20 20 20 20 20 20 09 22 29 3b 22 29 .");")
05d0: 5d 29 0a 09 20 20 28 6c 61 6d 62 64 61 20 28 63 ]).. (lambda (c
05e0: 61 6e 76 61 73 20 64 73 74 2d 78 20 64 73 74 2d anvas dst-x dst-
05f0: 79 20 73 72 63 2d 77 69 64 74 68 20 73 72 63 2d y src-width src-
0600: 68 65 69 67 68 74 20 64 61 74 61 0a 09 20 20 20 height data..
0610: 20 20 20 20 20 20 20 20 23 21 6b 65 79 20 5b 77 #!key [w
0620: 69 64 74 68 20 30 5d 20 5b 68 65 69 67 68 74 20 idth 0] [height
0630: 30 5d 20 5b 78 30 20 30 5d 20 5b 78 31 20 30 5d 0] [x0 0] [x1 0]
0640: 20 5b 79 30 20 30 5d 20 5b 79 31 20 30 5d 29 0a [y0 0] [y1 0]).
0650: 09 20 20 09 28 75 6e 6c 65 73 73 20 28 3d 20 28 . .(unless (= (
0660: 62 6c 6f 62 2d 73 69 7a 65 20 64 61 74 61 29 20 blob-size data)
0670: 28 2a 20 33 20 73 72 63 2d 77 69 64 74 68 20 73 (* 3 src-width s
0680: 72 63 2d 68 65 69 67 68 74 29 29 0a 09 20 20 09 rc-height)).. .
0690: 09 28 65 72 72 6f 72 20 27 63 61 6e 76 61 73 2d .(error 'canvas-
06a0: 69 6d 61 67 65 2d 73 65 74 2f 72 67 62 21 20 22 image-set/rgb! "
06b0: 62 61 64 20 69 6d 61 67 65 20 73 69 7a 65 22 20 bad image size"
06c0: 28 62 6c 6f 62 2d 73 69 7a 65 20 64 61 74 61 29 (blob-size data)
06d0: 20 28 2a 20 33 20 73 72 63 2d 77 69 64 74 68 20 (* 3 src-width
06e0: 73 72 63 2d 68 65 69 67 68 74 29 29 29 0a 09 20 src-height)))..
06f0: 20 09 28 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d .(canvas-image-
0700: 73 65 74 2f 72 67 62 2f 72 61 77 21 0a 09 20 20 set/rgb/raw!..
0710: 09 09 63 61 6e 76 61 73 20 64 73 74 2d 78 20 64 ..canvas dst-x d
0720: 73 74 2d 79 20 73 72 63 2d 77 69 64 74 68 20 73 st-y src-width s
0730: 72 63 2d 68 65 69 67 68 74 20 64 61 74 61 0a 09 rc-height data..
0740: 20 20 09 09 77 69 64 74 68 20 68 65 69 67 68 74 ..width height
0750: 20 78 30 20 78 31 20 79 30 20 79 31 29 29 29 29 x0 x1 y0 y1))))
0760: 0a 0a 28 64 65 66 69 6e 65 20 63 61 6e 76 61 73 ..(define canvas
0770: 2d 69 6d 61 67 65 2d 70 75 74 2f 72 67 62 61 21 -image-put/rgba!
0780: 0a 09 28 6c 65 74 72 65 63 20 28 5b 63 61 6e 76 ..(letrec ([canv
0790: 61 73 2d 69 6d 61 67 65 2d 73 65 74 2f 72 67 62 as-image-set/rgb
07a0: 61 2f 72 61 77 21 0a 09 20 20 20 20 20 20 20 20 a/raw!..
07b0: 20 20 28 66 6f 72 65 69 67 6e 2d 6c 61 6d 62 64 (foreign-lambd
07c0: 61 2a 20 76 6f 69 64 20 28 5b 6e 6f 6e 6e 75 6c a* void ([nonnul
07d0: 6c 2d 63 61 6e 76 61 73 20 63 61 6e 76 61 73 5d l-canvas canvas]
07e0: 20 5b 69 6e 74 20 64 73 74 5f 78 5d 20 5b 69 6e [int dst_x] [in
07f0: 74 20 64 73 74 5f 79 5d 0a 09 20 20 20 20 20 20 t dst_y]..
0800: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0810: 20 20 20 20 20 20 20 20 20 20 20 5b 69 6e 74 20 [int
0820: 73 72 63 5f 77 69 64 74 68 5d 20 5b 69 6e 74 20 src_width] [int
0830: 73 72 63 5f 68 65 69 67 68 74 5d 20 5b 6e 6f 6e src_height] [non
0840: 6e 75 6c 6c 2d 62 6c 6f 62 20 64 61 74 61 5d 0a null-blob data].
0850: 09 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .
0860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0870: 20 20 5b 69 6e 74 20 64 73 74 5f 77 69 64 74 68 [int dst_width
0880: 5d 20 5b 69 6e 74 20 64 73 74 5f 68 65 69 67 68 ] [int dst_heigh
0890: 74 5d 0a 09 20 20 20 20 20 20 20 20 20 20 20 20 t]..
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
08b0: 20 20 20 20 20 5b 69 6e 74 20 73 72 63 5f 78 30 [int src_x0
08c0: 5d 20 5b 69 6e 74 20 73 72 63 5f 78 31 5d 20 5b ] [int src_x1] [
08d0: 69 6e 74 20 73 72 63 5f 79 30 5d 20 5b 69 6e 74 int src_y0] [int
08e0: 20 73 72 63 5f 79 31 5d 29 0a 09 20 20 20 20 20 src_y1])..
08f0: 20 20 20 20 20 20 20 22 63 6f 6e 73 74 20 69 6e "const in
0900: 74 20 6e 63 68 61 6e 73 20 3d 20 34 3b 5c 6e 22 t nchans = 4;\n"
0910: 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 75 6e .. ."un
0920: 73 69 67 6e 65 64 20 63 68 61 72 20 63 68 61 6e signed char chan
0930: 73 5b 6e 63 68 61 6e 73 5d 5b 73 72 63 5f 77 69 s[nchans][src_wi
0940: 64 74 68 20 2a 20 73 72 63 5f 68 65 69 67 68 74 dth * src_height
0950: 5d 3b 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 ];\n"..
0960: 20 09 22 69 6e 74 20 69 3b 5c 6e 22 0a 09 20 20 ."int i;\n"..
0970: 20 20 20 20 20 20 20 20 09 22 5c 6e 22 0a 09 20 ."\n"..
0980: 20 20 20 20 20 20 20 20 20 09 22 66 6f 72 20 28 ."for (
0990: 69 20 3d 20 30 3b 20 69 20 3c 20 6e 63 68 61 6e i = 0; i < nchan
09a0: 73 20 2a 20 73 72 63 5f 77 69 64 74 68 20 2a 20 s * src_width *
09b0: 73 72 63 5f 68 65 69 67 68 74 3b 20 2b 2b 69 29 src_height; ++i)
09c0: 5c 6e 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 \n".. .
09d0: 22 09 63 68 61 6e 73 5b 69 20 25 20 6e 63 68 61 ".chans[i % ncha
09e0: 6e 73 5d 5b 69 20 2f 20 6e 63 68 61 6e 73 5d 20 ns][i / nchans]
09f0: 3d 20 64 61 74 61 5b 69 5d 3b 5c 6e 22 0a 09 20 = data[i];\n"..
0a00: 20 20 20 20 20 20 20 20 20 09 22 5c 6e 22 0a 09 ."\n"..
0a10: 20 20 20 20 20 20 20 20 20 20 09 22 63 64 43 61 ."cdCa
0a20: 6e 76 61 73 50 75 74 49 6d 61 67 65 52 65 63 74 nvasPutImageRect
0a30: 52 47 42 41 28 5c 6e 22 0a 09 20 20 20 20 20 20 RGBA(\n"..
0a40: 20 20 20 20 09 22 09 63 61 6e 76 61 73 2c 20 73 .".canvas, s
0a50: 72 63 5f 77 69 64 74 68 2c 20 73 72 63 5f 68 65 rc_width, src_he
0a60: 69 67 68 74 2c 5c 6e 22 0a 09 20 20 20 20 20 20 ight,\n"..
0a70: 20 20 20 20 09 22 09 63 68 61 6e 73 5b 30 5d 2c .".chans[0],
0a80: 20 63 68 61 6e 73 5b 31 5d 2c 20 63 68 61 6e 73 chans[1], chans
0a90: 5b 32 5d 2c 20 63 68 61 6e 73 5b 33 5d 2c 5c 6e [2], chans[3],\n
0aa0: 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 22 09 ".. .".
0ab0: 64 73 74 5f 78 2c 20 64 73 74 5f 79 2c 20 64 73 dst_x, dst_y, ds
0ac0: 74 5f 77 69 64 74 68 2c 20 64 73 74 5f 68 65 69 t_width, dst_hei
0ad0: 67 68 74 2c 22 0a 09 20 20 20 20 20 20 20 20 20 ght,"..
0ae0: 20 09 22 09 73 72 63 5f 78 30 2c 20 73 72 63 5f .".src_x0, src_
0af0: 78 31 2c 20 73 72 63 5f 79 30 2c 20 73 72 63 5f x1, src_y0, src_
0b00: 79 31 22 0a 09 20 20 20 20 20 20 20 20 20 20 09 y1".. .
0b10: 22 29 3b 22 29 5d 29 0a 09 20 20 28 6c 61 6d 62 ");")]).. (lamb
0b20: 64 61 20 28 63 61 6e 76 61 73 20 64 73 74 2d 78 da (canvas dst-x
0b30: 20 64 73 74 2d 79 20 73 72 63 2d 77 69 64 74 68 dst-y src-width
0b40: 20 73 72 63 2d 68 65 69 67 68 74 20 64 61 74 61 src-height data
0b50: 0a 09 20 20 20 20 20 20 20 20 20 20 20 23 21 6b .. #!k
0b60: 65 79 20 5b 77 69 64 74 68 20 30 5d 20 5b 68 65 ey [width 0] [he
0b70: 69 67 68 74 20 30 5d 20 5b 78 30 20 30 5d 20 5b ight 0] [x0 0] [
0b80: 78 31 20 30 5d 20 5b 79 30 20 30 5d 20 5b 79 31 x1 0] [y0 0] [y1
0b90: 20 30 5d 29 0a 09 20 20 09 28 75 6e 6c 65 73 73 0]).. .(unless
0ba0: 20 28 3d 20 28 62 6c 6f 62 2d 73 69 7a 65 20 64 (= (blob-size d
0bb0: 61 74 61 29 20 28 2a 20 34 20 73 72 63 2d 77 69 ata) (* 4 src-wi
0bc0: 64 74 68 20 73 72 63 2d 68 65 69 67 68 74 29 29 dth src-height))
0bd0: 0a 09 20 20 09 09 28 65 72 72 6f 72 20 27 63 61 .. ..(error 'ca
0be0: 6e 76 61 73 2d 69 6d 61 67 65 2d 73 65 74 2f 72 nvas-image-set/r
0bf0: 67 62 61 21 20 22 62 61 64 20 69 6d 61 67 65 20 gba! "bad image
0c00: 73 69 7a 65 22 20 28 62 6c 6f 62 2d 73 69 7a 65 size" (blob-size
0c10: 20 64 61 74 61 29 20 28 2a 20 34 20 73 72 63 2d data) (* 4 src-
0c20: 77 69 64 74 68 20 73 72 63 2d 68 65 69 67 68 74 width src-height
0c30: 29 29 29 0a 09 20 20 09 28 63 61 6e 76 61 73 2d ))).. .(canvas-
0c40: 69 6d 61 67 65 2d 73 65 74 2f 72 67 62 61 2f 72 image-set/rgba/r
0c50: 61 77 21 0a 09 20 20 09 09 63 61 6e 76 61 73 20 aw!.. ..canvas
0c60: 64 73 74 2d 78 20 64 73 74 2d 79 20 73 72 63 2d dst-x dst-y src-
0c70: 77 69 64 74 68 20 73 72 63 2d 68 65 69 67 68 74 width src-height
0c80: 20 64 61 74 61 0a 09 20 20 09 09 77 69 64 74 68 data.. ..width
0c90: 20 68 65 69 67 68 74 20 78 30 20 78 31 20 79 30 height x0 x1 y0
0ca0: 20 79 31 29 29 29 29 0a 0a 28 64 65 66 69 6e 65 y1))))..(define
0cb0: 20 63 61 6e 76 61 73 2d 69 6d 61 67 65 2f 72 67 canvas-image/rg
0cc0: 62 0a 09 28 67 65 74 74 65 72 2d 77 69 74 68 2d b..(getter-with-
0cd0: 73 65 74 74 65 72 0a 09 09 28 6c 65 74 72 65 63 setter...(letrec
0ce0: 20 28 5b 63 61 6e 76 61 73 2d 69 6d 61 67 65 2f ([canvas-image/
0cf0: 72 67 62 2f 72 61 77 0a 09 09 09 09 09 09 09 28 rgb/raw........(
0d00: 66 6f 72 65 69 67 6e 2d 6c 61 6d 62 64 61 2a 20 foreign-lambda*
0d10: 76 6f 69 64 20 28 5b 6e 6f 6e 6e 75 6c 6c 2d 63 void ([nonnull-c
0d20: 61 6e 76 61 73 20 63 61 6e 76 61 73 5d 20 5b 69 anvas canvas] [i
0d30: 6e 74 20 78 5d 20 5b 69 6e 74 20 79 5d 0a 09 09 nt x] [int y]...
0d40: 09 09 09 09 09 20 20 20 20 20 20 20 20 20 20 20 .....
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 5b 69 6e 74 [int
0d60: 20 77 69 64 74 68 5d 20 5b 69 6e 74 20 68 65 69 width] [int hei
0d70: 67 68 74 5d 20 20 5b 6e 6f 6e 6e 75 6c 6c 2d 62 ght] [nonnull-b
0d80: 6c 6f 62 20 64 61 74 61 5d 29 0a 09 09 09 09 09 lob data])......
0d90: 09 09 20 20 22 63 6f 6e 73 74 20 69 6e 74 20 6e .. "const int n
0da0: 63 68 61 6e 73 20 3d 20 33 3b 5c 6e 22 0a 09 09 chans = 3;\n"...
0db0: 09 09 09 09 09 20 20 22 75 6e 73 69 67 6e 65 64 ..... "unsigned
0dc0: 20 63 68 61 72 20 63 68 61 6e 73 5b 6e 63 68 61 char chans[ncha
0dd0: 6e 73 5d 5b 77 69 64 74 68 20 2a 20 68 65 69 67 ns][width * heig
0de0: 68 74 5d 3b 5c 6e 22 0a 09 09 09 09 09 09 09 20 ht];\n"........
0df0: 20 22 69 6e 74 20 69 3b 5c 6e 22 0a 09 09 09 09 "int i;\n".....
0e00: 09 09 09 20 20 22 5c 6e 22 0a 09 09 09 09 09 09 ... "\n".......
0e10: 09 20 20 22 63 64 43 61 6e 76 61 73 47 65 74 49 . "cdCanvasGetI
0e20: 6d 61 67 65 52 47 42 28 5c 6e 22 0a 09 09 09 09 mageRGB(\n".....
0e30: 09 09 09 20 20 22 09 63 61 6e 76 61 73 2c 5c 6e ... ".canvas,\n
0e40: 22 0a 09 09 09 09 09 09 09 20 20 22 09 63 68 61 "........ ".cha
0e50: 6e 73 5b 30 5d 2c 20 63 68 61 6e 73 5b 31 5d 2c ns[0], chans[1],
0e60: 20 63 68 61 6e 73 5b 32 5d 2c 5c 6e 22 0a 09 09 chans[2],\n"...
0e70: 09 09 09 09 09 20 20 22 09 78 2c 20 79 2c 20 77 ..... ".x, y, w
0e80: 69 64 74 68 2c 20 68 65 69 67 68 74 5c 6e 22 0a idth, height\n".
0e90: 09 09 09 09 09 09 09 20 20 22 29 3b 5c 6e 22 0a ....... ");\n".
0ea0: 09 09 09 09 09 09 09 20 20 22 5c 6e 22 0a 09 09 ....... "\n"...
0eb0: 09 09 09 09 09 20 20 22 66 6f 72 20 28 69 20 3d ..... "for (i =
0ec0: 20 30 3b 20 69 20 3c 20 6e 63 68 61 6e 73 20 2a 0; i < nchans *
0ed0: 20 77 69 64 74 68 20 2a 20 68 65 69 67 68 74 3b width * height;
0ee0: 20 2b 2b 69 29 5c 6e 22 0a 09 09 09 09 09 09 09 ++i)\n"........
0ef0: 20 20 22 09 64 61 74 61 5b 69 5d 20 3d 20 63 68 ".data[i] = ch
0f00: 61 6e 73 5b 69 20 25 20 6e 63 68 61 6e 73 5d 5b ans[i % nchans][
0f10: 69 20 2f 20 6e 63 68 61 6e 73 5d 3b 5c 6e 22 29 i / nchans];\n")
0f20: 5d 29 0a 09 09 09 28 6c 61 6d 62 64 61 20 28 63 ])....(lambda (c
0f30: 61 6e 76 61 73 20 78 20 79 20 77 69 64 74 68 20 anvas x y width
0f40: 68 65 69 67 68 74 29 0a 09 09 09 09 28 6c 65 74 height).....(let
0f50: 20 28 5b 64 61 74 61 20 28 6d 61 6b 65 2d 62 6c ([data (make-bl
0f60: 6f 62 20 28 2a 20 33 20 77 69 64 74 68 20 68 65 ob (* 3 width he
0f70: 69 67 68 74 29 29 5d 29 0a 09 09 09 09 09 28 63 ight))])......(c
0f80: 61 6e 76 61 73 2d 69 6d 61 67 65 2f 72 67 62 2f anvas-image/rgb/
0f90: 72 61 77 20 63 61 6e 76 61 73 20 78 20 79 20 77 raw canvas x y w
0fa0: 69 64 74 68 20 68 65 69 67 68 74 20 64 61 74 61 idth height data
0fb0: 29 0a 09 09 09 09 09 64 61 74 61 29 29 29 0a 09 )......data)))..
0fc0: 09 63 61 6e 76 61 73 2d 69 6d 61 67 65 2d 70 75 .canvas-image-pu
0fd0: 74 2f 72 67 62 21 29 29 0a 0a 3b 3b 20 7d 7d 7d t/rgb!))..;; }}}
0fe0: 0a 0a 29 0a ..).