From 2f2c7d310467153d96111ed6281cd6e8b80388a8 Mon Sep 17 00:00:00 2001 From: Matthew Butterick Date: Mon, 3 Feb 2020 16:30:31 -0800 Subject: [PATCH] better behavior for justified tracked --- quad/qtest/test-font-tracking-tester.pdf | Bin 7847 -> 8740 bytes quad/qtest/test-font-tracking.rkt | 21 ++++++++++++-- quad/quadwriter/layout.rkt | 34 +++++++++++++---------- 3 files changed, 37 insertions(+), 18 deletions(-) diff --git a/quad/qtest/test-font-tracking-tester.pdf b/quad/qtest/test-font-tracking-tester.pdf index 2d38ddb4591ea470f7e9f17b14d5790848d1a0cc..dab47bc6d14fedfeb7d6f99a400fb5272c3b48c7 100644 GIT binary patch delta 7340 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 nfe8Iq4^MYJ*}B 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 nonspacess-count 1)))) (define justified-space-width (/ empty-hspace (sub1 nonspacess-count))) - (apply append (add-between hung-nonspacess (list (make-quad - #:from 'bo - #:to 'bi - #:draw-end q:string-draw-end - #:size (pt justified-space-width line-prototype-height)))))] + (cons (make-left-edge-filler) + (apply append (add-between hung-nonspacess (list (make-quad + #:from 'bo + #:to 'bi + #:draw-end q:string-draw-end + #:size (pt justified-space-width line-prototype-height))))))] [else (define space-multiplier (match align-value ["left" 0] @@ -400,15 +412,7 @@ (define end-hspace (- empty-hspace space-total-width)) ;; make filler a leading quad, not a parent / grouping quad, ;; so that elements can still be reached by consolidate-runs - (define fq (make-quad #:type filler-quad - #:id 'line-filler - #:from-parent (quad-from-parent q-first) - #:from 'bo - #:to 'bi - #:shift (pt (- left-tracking-adjustment) 0) - #:size (pt (* end-hspace space-multiplier) 0) - #:attrs (quad-attrs q-first))) - (list* fq + (list* (make-left-edge-filler (* end-hspace space-multiplier)) (quad-update! q-first [from-parent #f]) other-qs)])]))