(require-library canvas-draw-base)
(module canvas-draw-iup
(context:iup make-canvas-action)
(import scheme chicken foreign canvas-draw-base)
;; {{{ Data types
(foreign-declare
"#include <cd.h>\n"
"#include <cdiup.h>\n")
(include "canvas-draw-types.scm")
;; }}}
;; {{{ Context types
(define context:iup
(foreign-value "CD_IUP" nonnull-context))
;; }}}
;; {{{ Auxiliary functions
(define (make-canvas-action proc)
(let ([canvas #f])
(lambda (handle x y)
(unless canvas (set! canvas (make-canvas context:iup handle)))
(call-with-canvas canvas (cut proc <> x y)))))
;; }}}
)