lilypond-user
[Top][All Lists]
Advanced

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

Re: adding a markup ("sim.") to the end of a SustainPedalBracket


From: Thomas Morley
Subject: Re: adding a markup ("sim.") to the end of a SustainPedalBracket
Date: Sat, 15 Jun 2013 23:05:11 +0200



2013/6/14 Thomas Morley <address@hidden>


2013/6/14 Kieren MacMillan <address@hidden>
Hi Harm,

it's not completely clear to me what you want to achieve.

I want this:

1. Best Option = adjust the stencil of the bracket so that \sustainOff would print the entire grouping  "/\_  sim."

Please look at the output from the code below and tell what's good/wrong.

The "sim." is in the wrong place, and there should be an up and down and small horizontal line right before it (as if the pedal bracket was continuing). Here's a (horrible) example:



Thanks!
Kieren.

Hi Kieran,

thanks for the image. I think I understand now, will try this evening.

-Harm

Hi Kieran,

please try the code below (same attached).
Note that the \pedalSim has to be inserted before the PianoPedalBracket starts.
Behaviour at line-break is supported, though not widely tested.
Several comments in code.

\version "2.17.20"

\paper {
    ragged-right = ##t
    %% To watch the behaviour at line-break uncomment next line.
    %line-width = 80
}

pedalSim =
\once \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 #: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.8))
             
         ;; 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 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
       )))

\relative c' {
    \set Staff.pedalSustainStyle = #'bracket
    c4\sustainOn a e' f
    \pedalSim
    c\sustainOff\sustainOn a e' f'
    c4\sustainOff a e' f
}


Please shout if something is wrong.


HTH,
  Harm

Attachment: pedal-sim-02.ly
Description: Binary data

Attachment: pedal-sim-02.png
Description: PNG image


reply via email to

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