X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=scm%2Fstencil.scm;h=1e88d6c4dc8e121b533c0065183f4d39464f7a0a;hb=039d89ebe4b83ad023ed6f72fd21497e1bfb3554;hp=81869ae7f26af4d4d59f75e851ca54e0a211c345;hpb=402045837e7134cdf90d1fcf31768c62227a4936;p=lilypond.git diff --git a/scm/stencil.scm b/scm/stencil.scm index 81869ae7f2..1e88d6c4dc 100644 --- a/scm/stencil.scm +++ b/scm/stencil.scm @@ -1,46 +1,46 @@ +;;;; stenicil.scm -- +;;;; +;;;; source file of the GNU LilyPond music typesetter +;;;; +;;;; (c) 2003--2004 Han-Wen Nienhuys -(define-public (stack-stencils axis dir padding mols) - "Stack stencils MOLS in direction AXIS,DIR, using PADDING." - (if (null? mols) +(define-public (stack-stencils axis dir padding stils) + "Stack stencils STILS in direction AXIS,DIR, using PADDING." + (if (null? stils) '() - (if (pair? mols) - (ly:stencil-combine-at-edge (car mols) axis dir - (stack-stencils axis dir padding (cdr mols)) - padding - ) - ) - )) + (if (pair? stils) + (ly:stencil-combine-at-edge + (car stils) axis dir (stack-stencils axis dir padding (cdr stils)) + padding)))) - -(define-public (stack-lines dir padding baseline mols) +(define-public (stack-lines dir padding baseline stils) "Stack vertically with a baseline-skip." - (if (null? mols) + (if (null? stils) '() - (if (null? (cdr mols)) - (car mols) - (ly:stencil-combine-at-edge (car mols) Y dir - (stack-lines dir padding baseline (cdr mols)) - padding baseline - ) - ))) + (if (null? (cdr stils)) + (car stils) + (ly:stencil-combine-at-edge + (car stils) Y dir + (stack-lines dir padding baseline (cdr stils)) + padding baseline)))) (define-public (fontify-text font-metric text) "Set TEXT with font FONT-METRIC, returning a stencil." (let* ((b (ly:text-dimension font-metric text))) (ly:make-stencil - (ly:fontify-atom font-metric `(text ,text)) (car b) (cdr b)) - )) + (ly:fontify-atom font-metric `(text ,text)) (car b) (cdr b)))) -(define-public (bracketify-stencil mol axis thick protusion padding) - "Add brackets around MOL, producing a new stencil." +(define-public (bracketify-stencil stil axis thick protusion padding) + "Add brackets around STIL, producing a new stencil." - (let* ((ext (ly:stencil-get-extent mol axis)) + (let* ((ext (ly:stencil-get-extent stil axis)) (lb (ly:bracket axis ext thick (- protusion))) (rb (ly:bracket axis ext thick protusion))) - (set! mol (ly:stencil-combine-at-edge mol (other-axis axis) 1 lb padding)) - (set! mol (ly:stencil-combine-at-edge mol (other-axis axis) -1 rb padding)) - mol - )) + (set! stil + (ly:stencil-combine-at-edge stil (other-axis axis) 1 lb padding)) + (set! stil + (ly:stencil-combine-at-edge stil (other-axis axis) -1 rb padding)) + stil)) (define-public (make-filled-box-stencil xext yext) "Make a filled box." @@ -48,37 +48,35 @@ (ly:make-stencil (list 'filledbox (- (car xext)) (cdr xext) (- (car yext)) (cdr yext)) - xext yext) -) + xext yext)) (define-public (box-grob-stencil grob) "Make a box of exactly the extents of the grob. The box precisely encloses the contents. " - (let* ((xext (ly:get-extent grob grob 0)) - (yext (ly:get-extent grob grob 1)) + (let* ((xext (ly:grob-extent grob grob 0)) + (yext (ly:grob-extent grob grob 1)) (thick 0.1)) - (ly:stencil-add (make-filled-box-stencil xext (cons (- (car yext) thick) (car yext) )) - (make-filled-box-stencil xext (cons (cdr yext) (+ (cdr yext) thick) )) - (make-filled-box-stencil (cons (cdr xext) (+ (cdr xext) thick)) yext) - (make-filled-box-stencil (cons (- (car xext) thick) (car xext)) yext)))) - + (ly:stencil-add + (make-filled-box-stencil xext (cons (- (car yext) thick) (car yext))) + (make-filled-box-stencil xext (cons (cdr yext) (+ (cdr yext) thick))) + (make-filled-box-stencil (cons (cdr xext) (+ (cdr xext) thick)) yext) + (make-filled-box-stencil (cons (- (car xext) thick) (car xext)) yext)))) ;; TODO merge this and prev function. -(define-public (box-stencil mol thick padding) - "Add a box around MOL, producing a new stencil." - (let* ( - (x-ext (interval-widen (ly:stencil-get-extent mol 0) padding)) - (y-ext (interval-widen (ly:stencil-get-extent mol 1) padding)) +(define-public (box-stencil stil thick padding) + "Add a box around STIL, producing a new stencil." + (let* ((x-ext (interval-widen (ly:stencil-get-extent stil 0) padding)) + (y-ext (interval-widen (ly:stencil-get-extent stil 1) padding)) (y-rule (make-filled-box-stencil (cons 0 thick) y-ext)) (x-rule (make-filled-box-stencil (interval-widen x-ext thick) - (cons 0 thick))) - ) - (set! mol (ly:stencil-combine-at-edge mol X 1 y-rule padding)) - (set! mol (ly:stencil-combine-at-edge mol X -1 y-rule padding)) - (set! mol (ly:stencil-combine-at-edge mol Y 1 x-rule 0.0)) - (set! mol (ly:stencil-combine-at-edge mol Y -1 x-rule 0.0)) + (cons 0 thick)))) + + (set! stil (ly:stencil-combine-at-edge stil X 1 y-rule padding)) + (set! stil (ly:stencil-combine-at-edge stil X -1 y-rule padding)) + (set! stil (ly:stencil-combine-at-edge stil Y 1 x-rule 0.0)) + (set! stil (ly:stencil-combine-at-edge stil Y -1 x-rule 0.0)) - mol)) + stil))