Center text below hairpin dynamics: Difference between revisions

mNo edit summary
mNo edit summary
 
Line 9: Line 9:
     \once \override Voice.Hairpin.after-line-breaking =  
     \once \override Voice.Hairpin.after-line-breaking =  
       #(lambda (grob)
       #(lambda (grob)
        (let* ((stencil (ly:hairpin::print grob))
        (let* ((stencil (ly:hairpin::print grob))
              (par-y (ly:grob-parent grob Y))
                (par-y (ly:grob-parent grob Y))
              (dir (ly:grob-property par-y 'direction))
                (dir (ly:grob-property par-y 'direction))
              (staff-line-thickness
                (staff-line-thickness
                 (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
                 (ly:output-def-lookup (ly:grob-layout grob)
              (new-stencil (ly:stencil-aligned-to
                                      'line-thickness))
                (ly:stencil-combine-at-edge
                (new-stencil
                (ly:stencil-aligned-to
                  (ly:stencil-combine-at-edge
                   (ly:stencil-aligned-to stencil X CENTER)
                   (ly:stencil-aligned-to stencil X CENTER)
                   Y dir
                   Y dir
                   (ly:stencil-aligned-to
                   (ly:stencil-aligned-to
                    (grob-interpret-markup
                    (grob-interpret-markup
                      grob
                    grob
                      (make-fontsize-markup
                    (make-fontsize-markup
                        (magnification->font-size
                      (magnification->font-size
                          (+ (ly:staff-symbol-staff-space grob)
                      (+ (ly:staff-symbol-staff-space grob)
                              (/ staff-line-thickness 2)))
                          (/ staff-line-thickness 2)))
                          text)) X CENTER))
                      text))
                X LEFT))
                    X CENTER))
              (staff-space (ly:output-def-lookup
                  X LEFT))
                (staff-space (ly:output-def-lookup
                 (ly:grob-layout grob) 'staff-space))
                 (ly:grob-layout grob) 'staff-space))
              (par-x (ly:grob-parent grob X))
                (par-x (ly:grob-parent grob X))
              (dyn-text (grob::has-interface par-x 'dynamic-text-interface))
                (dyn-text (grob::has-interface par-x
              (dyn-text-stencil-x-length
                                              'dynamic-text-interface))
                (dyn-text-stencil-x-length
                 (if dyn-text
                 (if dyn-text
                  (interval-length  
                    (interval-length  
                    (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
                      (ly:stencil-extent
                  0))
                      (ly:grob-property par-x 'stencil) X))
              (x-shift  
                    0))
                 (if dyn-text  
                (x-shift  
                  (-  
                 (if dyn-text (- (+ staff-space dyn-text-stencil-x-length)
                    (+ staff-space dyn-text-stencil-x-length)
                                (* 0.5 staff-line-thickness))
                    (* 0.5 staff-line-thickness)) 0)))
                    0)))
 
          (ly:grob-set-property! grob 'Y-offset 0)
        (ly:grob-set-property! grob 'Y-offset 0)
          (ly:grob-set-property! grob
        (ly:grob-set-property! grob 'stencil  
                                  'stencil (ly:stencil-translate-axis
          (ly:stencil-translate-axis
                                            new-stencil
            new-stencil
                                            x-shift X))))
            x-shift X))))
   #})
   #})


hairpinMolto =  
hairpinMolto = \hairpinWithCenteredText \markup { \italic molto }
\hairpinWithCenteredText \markup { \italic molto }
hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo }
 
hairpinMore =  
\hairpinWithCenteredText \markup { \larger moltissimo }


\relative c' {
\relative c' {
   \hairpinMolto
   \hairpinMolto c2\< c\f
  c2\< c\f
   \hairpinMore c2\ppppp\< c\f
   \hairpinMore
  c2\ppppp\< c\f
   \break
   \break
   \hairpinMolto
   \hairpinMolto c2^\< c\f
  c2^\< c\f
   \hairpinMore c2\ppppp\< c\f
   \hairpinMore
  c2\ppppp\< c\f
}
}
</lilypond>
</lilypond>