Artifact
799196508db45b0bf23e1c8b4d7d316faa22b1b0:
0000: 23 6c 61 6e 67 20 72 61 63 6b 65 74 0a 28 72 65 #lang racket.(re
0010: 71 75 69 72 65 0a 20 66 66 69 2f 75 6e 73 61 66 quire. ffi/unsaf
0020: 65 0a 20 22 62 61 73 65 2e 72 6b 74 22 29 0a 0a e. "base.rkt")..
0030: 28 64 65 66 69 6e 65 20 6c 69 62 63 64 0a 20 20 (define libcd.
0040: 28 63 61 73 65 20 28 73 79 73 74 65 6d 2d 74 79 (case (system-ty
0050: 70 65 20 27 6f 73 29 0a 20 20 20 20 5b 28 77 69 pe 'os). [(wi
0060: 6e 64 6f 77 73 29 0a 20 20 20 20 20 28 66 66 69 ndows). (ffi
0070: 2d 6c 69 62 20 22 63 64 22 29 5d 0a 20 20 20 20 -lib "cd")].
0080: 5b 65 6c 73 65 0a 20 20 20 20 20 28 66 66 69 2d [else. (ffi-
0090: 6c 69 62 20 22 6c 69 62 63 64 22 29 5d 29 29 0a lib "libcd")])).
00a0: 0a 3b 3b 20 7b 7b 7b 20 43 6f 6e 74 65 78 74 20 .;; {{{ Context
00b0: 63 6f 6e 74 65 6e 74 20 70 6c 61 79 62 61 63 6b content playback
00c0: 0a 0a 28 64 65 66 69 6e 65 20 63 61 6e 76 61 73 ..(define canvas
00d0: 2d 70 6c 61 79 2f 70 74 72 21 0a 20 20 28 67 65 -play/ptr!. (ge
00e0: 74 2d 66 66 69 2d 6f 62 6a 0a 20 20 20 22 63 64 t-ffi-obj. "cd
00f0: 43 61 6e 76 61 73 50 6c 61 79 22 20 6c 69 62 63 CanvasPlay" libc
0100: 64 0a 20 20 20 28 5f 66 75 6e 20 5b 63 61 6e 76 d. (_fun [canv
0110: 61 73 20 3a 20 5f 63 61 6e 76 61 73 5d 20 5b 63 as : _canvas] [c
0120: 6f 6e 74 65 78 74 20 3a 20 5f 63 6f 6e 74 65 78 ontext : _contex
0130: 74 5d 0a 20 20 20 20 20 20 20 20 20 5b 78 30 20 t]. [x0
0140: 3a 20 5f 69 6e 74 5d 20 5b 78 31 20 3a 20 5f 69 : _int] [x1 : _i
0150: 6e 74 5d 20 5b 79 30 20 3a 20 5f 69 6e 74 5d 20 nt] [y0 : _int]
0160: 5b 79 31 20 3a 20 5f 69 6e 74 5d 0a 20 20 20 20 [y1 : _int].
0170: 20 20 20 20 20 5b 64 61 74 61 20 3a 20 5f 70 6f [data : _po
0180: 69 6e 74 65 72 5d 0a 20 20 20 20 20 20 20 20 20 inter].
0190: 2d 3e 20 5b 72 63 20 3a 20 5f 69 6e 74 5d 29 29 -> [rc : _int]))
01a0: 29 0a 0a 28 64 65 66 69 6e 65 20 63 61 6e 76 61 )..(define canva
01b0: 73 2d 70 6c 61 79 2f 73 74 72 69 6e 67 21 0a 20 s-play/string!.
01c0: 20 28 67 65 74 2d 66 66 69 2d 6f 62 6a 0a 20 20 (get-ffi-obj.
01d0: 20 22 63 64 43 61 6e 76 61 73 50 6c 61 79 22 20 "cdCanvasPlay"
01e0: 6c 69 62 63 64 0a 20 20 20 28 5f 66 75 6e 20 5b libcd. (_fun [
01f0: 63 61 6e 76 61 73 20 3a 20 5f 63 61 6e 76 61 73 canvas : _canvas
0200: 5d 20 5b 63 6f 6e 74 65 78 74 20 3a 20 5f 63 6f ] [context : _co
0210: 6e 74 65 78 74 5d 0a 20 20 20 20 20 20 20 20 20 ntext].
0220: 5b 78 30 20 3a 20 5f 69 6e 74 5d 20 5b 78 31 20 [x0 : _int] [x1
0230: 3a 20 5f 69 6e 74 5d 20 5b 79 30 20 3a 20 5f 69 : _int] [y0 : _i
0240: 6e 74 5d 20 5b 79 31 20 3a 20 5f 69 6e 74 5d 0a nt] [y1 : _int].
0250: 20 20 20 20 20 20 20 20 20 5b 64 61 74 61 20 3a [data :
0260: 20 5f 73 74 72 69 6e 67 2f 75 74 66 2d 38 5d 0a _string/utf-8].
0270: 20 20 20 20 20 20 20 20 20 2d 3e 20 5b 72 63 20 -> [rc
0280: 3a 20 5f 69 6e 74 5d 29 29 29 0a 0a 28 64 65 66 : _int])))..(def
0290: 69 6e 65 20 28 63 61 6e 76 61 73 2d 70 6c 61 79 ine (canvas-play
02a0: 21 20 63 61 6e 76 61 73 20 63 6f 6e 74 65 78 74 ! canvas context
02b0: 20 78 30 20 78 31 20 79 30 20 79 31 20 64 61 74 x0 x1 y0 y1 dat
02c0: 61 29 0a 20 20 28 6c 65 74 20 28 5b 63 61 6e 76 a). (let ([canv
02d0: 61 73 2d 70 6c 61 79 2f 64 61 74 61 21 20 28 69 as-play/data! (i
02e0: 66 20 28 73 74 72 69 6e 67 3f 20 64 61 74 61 29 f (string? data)
02f0: 20 63 61 6e 76 61 73 2d 70 6c 61 79 2f 73 74 72 canvas-play/str
0300: 69 6e 67 21 20 63 61 6e 76 61 73 2d 70 6c 61 79 ing! canvas-play
0310: 2f 70 74 72 21 29 5d 29 0a 20 20 20 20 28 75 6e /ptr!)]). (un
0320: 6c 65 73 73 20 28 7a 65 72 6f 3f 20 28 63 61 6e less (zero? (can
0330: 76 61 73 2d 70 6c 61 79 2f 64 61 74 61 21 20 63 vas-play/data! c
0340: 61 6e 76 61 73 20 63 6f 6e 74 65 78 74 20 78 30 anvas context x0
0350: 20 78 31 20 79 30 20 79 31 20 64 61 74 61 29 29 x1 y0 y1 data))
0360: 0a 20 20 20 20 20 20 28 65 72 72 6f 72 20 27 63 . (error 'c
0370: 61 6e 76 61 73 2d 70 6c 61 79 21 20 22 66 61 69 anvas-play! "fai
0380: 6c 65 64 20 74 6f 20 72 65 70 6c 61 79 20 67 72 led to replay gr
0390: 61 70 68 69 63 73 22 29 29 29 29 0a 0a 28 70 72 aphics"))))..(pr
03a0: 6f 76 69 64 65 0a 20 63 61 6e 76 61 73 2d 70 6c ovide. canvas-pl
03b0: 61 79 21 29 0a 0a 3b 3b 20 7d 7d 7d 0a ay!)..;; }}}.