From 1f537a12334658560f5c0d0301c4f8badbf90fc3 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Sun, 15 May 2022 13:46:40 -0700 Subject: [PATCH] start fiddling with layout --- quad2/layout.rkt | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/quad2/layout.rkt b/quad2/layout.rkt index 4eb20da4..64c9d5c9 100644 --- a/quad2/layout.rkt +++ b/quad2/layout.rkt @@ -8,13 +8,13 @@ ($point? $size? . -> . $point?) ($point (+ ($point-x p0) ($size-width p1)) (+ ($point-y p0) ($size-height p1)))) -(define/contract (size char) +(define/contract (size q) (quad? . -> . $size?) - ($size 1 1)) + (quad-size q)) -(define/contract (advance char) +(define/contract (advance q) (quad? . -> . $size?) - ($size 1 0)) + (quad-size q)) (define (min-x rect) ($point-x ($rect-origin rect))) (define (width rect) ($size-width ($rect-size rect))) @@ -44,6 +44,11 @@ (and (<= (min-x outer-aRect) (min-x inner-bRect)) (<= (max-x inner-bRect) (max-x outer-aRect)) (<= (min-y outer-aRect) (min-y inner-bRect)) (<= (max-y inner-bRect) (max-y outer-aRect)))) +(define (make-debug-size q) + ;; TODO: calculate real size. This is temp to make layout loop work + (set-quad-size! q ($size (length (or (quad-elems q) null)) 0)) + q) + (define-pass (layout qs) #:pre (list-of has-no-position?) #:post (list-of has-position?) @@ -51,8 +56,9 @@ (define (quad-fits? q posn) (rect-contains-rect? frame ($rect posn (size q)))) (for/fold ([posn0 ($point 0 0)] - #:result qs) - ([q (in-list qs)]) + #:result (filter has-position? qs)) + ([q (in-list (map make-debug-size qs))] + #:when (quad-size q)) (define first-posn-on-next-line ($point 0 (add1 ($point-y posn0)))) (define other-possible-posns (list first-posn-on-next-line)) (define posn1 (for/first ([posn (in-list (cons posn0 other-possible-posns))] @@ -60,5 +66,5 @@ posn)) (unless posn1 (error 'no-posn-that-fits)) - (set-quad-posn! q posn1) + (set-quad-origin! q posn1) (posn-add posn1 (advance q)))) \ No newline at end of file