(module (s9fes char-canvas shape box) (;export ; real-shape-box ; shape-box) (import scheme utf8) (import (chicken base)) (import (chicken fixnum)) (import (chicken type)) (import record-variants) (import (s9fes char-canvas) (s9fes char-canvas rect) (s9fes char-canvas shape shape)) (include-relative "s9fes.char-canvas.types") (include-relative "s9fes.char-canvas.inlines") (: real-shape-box (fixnum fixnum #!optional box-frame-chars -> real-shape-plotter)) (: shape-box (integer integer #!optional box-frame-chars -> shape-plotter)) ;; (define (*canvas-draw-box cv rgn frm) (canvas-draw cv (%rect-x rgn) (%rect-y rgn) (frame-bl frm)) (canvas-draw cv (%rect-x-max rgn) (%rect-y rgn) (frame-br frm)) (canvas-draw cv (%rect-x rgn) (%rect-y-max rgn) (frame-tl frm)) (canvas-draw cv (%rect-x-max rgn) (%rect-y-max rgn) (frame-tr frm)) (canvas-draw-line cv (fx+ (%rect-x rgn) 1) (%rect-y rgn) (fx- (%rect-x-max rgn) 1) (%rect-y rgn) (frame-bh frm)) (canvas-draw-line cv (fx+ (%rect-x rgn) 1) (%rect-y-max rgn) (fx- (%rect-x-max rgn) 1) (%rect-y-max rgn) (frame-th frm)) (canvas-draw-line cv (%rect-x rgn) (fx+ (%rect-y rgn) 1) (%rect-x rgn) (fx- (%rect-y-max rgn) 1) (frame-lv frm)) (canvas-draw-line cv (%rect-x-max rgn) (fx+ (%rect-y rgn) 1) (%rect-x-max rgn) (fx- (%rect-y-max rgn) 1) (frame-rv frm)) ) ;; (define ((real-shape-box w h #!optional (frm ASCII-FRAME-CHARS)) #!optional cv (x0 (fx/ w 2)) (y0 (fx/ h 2))) (if cv (begin (*canvas-draw-box cv (%rect x0 y0 w h) frm) cv) (^real-info box w h frm) ) ) ;; (define ((shape-box w h #!optional (frm ASCII-FRAME-CHARS)) #!optional cv (x0 (floor (/ w 2))) (y0 (floor (/ h 2)))) (if cv (begin (*canvas-draw-box cv (%rect-real cv (%rect x0 y0 w h)) frm) cv) (^virtual-info box w h frm) ) ) #| ;outline in the canvas (: canvas-frame-chars (canvas #!optional fixnum fixnum fixnum fixnum char char char char char char -> void)) (: canvas-frame (canvas #!optional integer integer integer integer char char char char char char -> void)) ;or canvas-frame => new canvas w/ a frame chars |# ;; (define (box-shape-size shp info) (let ((w (the integer (@info 0 info))) (h (the integer (@info 1 info)))) (values w h) ) ) (register-shape-method 'box 'size box-shape-size) ) ;module (s9fes char-canvas shape box)