#lang debug racket (require pitfall quad/position quad/quad "attrs.rkt") (provide (all-defined-out)) (define-for-syntax debug-mode #false) (define-syntax (go stx) (datum->syntax stx (cond [debug-mode '(begin (define draw-debug? (make-parameter #true)) (define draw-debug-line? (make-parameter #true)) (define draw-debug-block? (make-parameter #false)) (define draw-debug-string? (make-parameter #true)) (define draw-debug-image? (make-parameter #false)) (define draw-debug-draw? (make-parameter #false)) (define debug-page-width (make-parameter 400)) (define debug-page-height (make-parameter 400)) (define debug-x-margin (make-parameter 50)) (define debug-y-margin (make-parameter 50)) (define debug-column-count (make-parameter 1)) (define debug-column-gap (make-parameter 36)))] [else '(begin (define draw-debug? (make-parameter #false)) (define draw-debug-line? (make-parameter #true)) (define draw-debug-block? (make-parameter #true)) (define draw-debug-string? (make-parameter #true)) (define draw-debug-image? (make-parameter #true)) (define draw-debug-draw? (make-parameter #true)) (define debug-page-width (make-parameter #f)) (define debug-page-height (make-parameter #f)) (define debug-x-margin (make-parameter #f)) (define debug-y-margin (make-parameter #f)) (define debug-column-count (make-parameter #f)) (define debug-column-gap (make-parameter #f)))]))) (go) (define (draw-debug q doc [fill-color "#f99"] [stroke-color "#fcc"] . _) (define stroke-width 0.5) (when (or (draw-debug?) (quad-ref q :draw-debug)) (save doc) ;; draw layout box (line-width doc stroke-width) ; subtracting stroke-width keeps adjacent boxes from overlapping (save doc) (apply rect doc (append (pt+ (quad-origin q)) (map (λ (x) (- x stroke-width)) (size q)))) (clip doc) (define pt (to-point q)) (circle doc (pt-x pt) (pt-y pt) (+ 3 stroke-width)) (fill doc fill-color) (restore doc) (apply rect doc (append (pt+ (quad-origin q)) (map (λ (x) (- x stroke-width)) (size q)))) (stroke doc stroke-color) (restore doc)))