From 35d5f2e2ff40e0bd35cf00f22c2428eac354e566 Mon Sep 17 00:00:00 2001 From: David Kastrup Date: Sat, 27 Apr 2013 18:31:01 +0200 Subject: [PATCH] Let stack-lines deal properly with vertical spacing (X-empty stencils) --- scm/stencil.scm | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/scm/stencil.scm b/scm/stencil.scm index 678ba7c2e2..fe3a84e4a4 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -67,33 +67,20 @@ a list of @var{padding}." (define-public (stack-lines dir padding baseline stils) "Stack vertically with a baseline skip." - (define result empty-stencil) - (define last-y #f) - (do - ((last-stencil #f (car p)) - (p stils (cdr p))) - - ((null? p)) - - (if (number? last-y) - (begin - (let* ((dy (max (+ (* dir (interval-bound (ly:stencil-extent last-stencil Y) dir)) - padding - (* (- dir) (interval-bound (ly:stencil-extent (car p) Y) (- dir)))) - baseline)) - (y (+ last-y (* dir dy)))) - - - - (set! result - (ly:stencil-add result (ly:stencil-translate-axis (car p) y Y))) - (set! last-y y))) - (begin - (set! last-y 0) - (set! result (car p))))) - - result) - + (reduce-right + (lambda (next back) (ly:stencil-stack next Y dir back padding baseline)) + empty-stencil + (map + (lambda (s) + ;; X-empty stencils may add vertical space. A stencil that is + ;; merely Y-empty counts as horizontal spacing. Since we want + ;; those to register as lines of their own (is this a good + ;; idea?), we make them a separately visible line. + (if (and (ly:stencil-empty? s Y) + (not (ly:stencil-empty? s X))) + (ly:make-stencil (ly:stencil-expr s) (ly:stencil-extent s X) '(0 . 0)) + s)) + stils))) (define-public (bracketify-stencil stil axis thick protrusion padding) "Add brackets around @var{stil}, producing a new stencil." -- 2.39.2