lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: End pedal optionally with text.


From: Kieren MacMillan
Subject: Re: End pedal optionally with text.
Date: Sat, 2 Oct 2021 13:14:31 -0400

Hi Andy,

> Optionally, it would be nice to follow it with something like:
> Ped. __________________/\ con ped.

Below, I’ve attached what I use.

Notes:

1. It’s pretty old code, so there’s probably a better way nowadays…

2. It could (and should) be abstracted so that the “sim” is a parameter, rather 
than hard-coded.

Hope this helps!
Kieren.

________________

pedalSim =
  \override Staff.PianoPedalBracket.stencil =
  #(lambda (grob)
   (let* (;; have we been split?
         (orig (ly:grob-original grob))
         ;; if yes, get the split pieces (our siblings)
         (siblings (if (ly:grob? orig)
                       (ly:spanner-broken-into orig)
                       '())))
   ;; Modify the unbroken grob-stencil or the first part of the broken
   ;; grob-stencil.
   (if (or (null? siblings)
           (and (>= (length siblings) 2)
                (eq? (car siblings) grob)))
       (let* (;; Get the default-stencil and its x-dimension and x-length.
              (stil (ly:piano-pedal-bracket::print grob))
              (stil-x-extent (ly:stencil-extent stil X))
              (stil-x-length (interval-length stil-x-extent))
              ;; Create a stencil to be added to the default-stencil.
              ;; Gets its x-dimension and x-length.
              (sim-stil
                 (grob-interpret-markup grob
                    (markup #:fontsize -1 #:hspace 0.75 #:raise -0.05 #:italic 
"sim.")))
              (sim-stil-x-extent (ly:stencil-extent sim-stil X))
              (sim-stil-x-length (interval-length sim-stil-x-extent))
              (thickness (max (layout-line-thickness grob) 0.1))
              ;; The value to shorten the default-stencil from the right side.
              ;; 0.8 will shorten about 80%.
              ;; Hard-coded, could be turned into a music-function.
              (amount 0.6))

         ;; Print a warning if the length of the default-stencil would not
         ;; warrant a sufficient output.
         (if (> sim-stil-x-length stil-x-length)
             (ly:warning "PianoPedalBracket is too short"))

         ;; Shorten the default-stencil.
         (ly:grob-set-property!
            grob
            'shorten-pair
            (cons 0 (* amount stil-x-length)))

         ;; Calculate the final stencil.
         (let* (;; Get the shortened (default-)stencil
                ;; and its y-dimension.
                (shortened-stil (ly:piano-pedal-bracket::print grob))
                (shortened-stil-y-ext (ly:stencil-extent shortened-stil Y))
                ;; Modify the sim-stil to gain a little gap to the left and
                ;; enlarge it downwards a little (otherwise the stencil-whiteout
                ;; will not work sufficient.
                (new-sim-stil
                  (ly:make-stencil
                    (ly:stencil-expr sim-stil)
                    (interval-widen sim-stil-x-extent (* 2 thickness))
                    (cons (- (car shortened-stil-y-ext) thickness)
                          (cdr shortened-stil-y-ext)))))

           (ly:stencil-add
               shortened-stil
               (ly:stencil-translate-axis
                  (stencil-whiteout-box new-sim-stil)
                  (* (- 1 amount) (- stil-x-length sim-stil-x-length))
                  X))))
       ;; TODO:
       ;; Is there any need to return #f explicitly?
       ;; Deleting it seems to make no difference.
       ;#f
       )))


reply via email to

[Prev in Thread] Current Thread [Next in Thread]