]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/snippets/center-text-below-hairpin-dynamics.ly
Issue 4402: Part combiner: ignore skips coinciding with rests within a part
[lilypond.git] / Documentation / snippets / center-text-below-hairpin-dynamics.ly
index 0ec93d40bb3080b6241866066b0dc2a778e12ff6..9aea589ed2c1f4334c4a7a2e14d6627135ecf6a7 100644 (file)
@@ -1,27 +1,20 @@
 %% DO NOT EDIT this file manually; it is automatically
 %% DO NOT EDIT this file manually; it is automatically
-%% generated from LSR http://lsr.dsi.unimi.it
+%% generated from LSR http://lsr.di.unimi.it
 %% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
 %% Make any changes in LSR itself, or in Documentation/snippets/new/ ,
 %% and then run scripts/auxiliar/makelsr.py
 %%
 %% This file is in the public domain.
-\version "2.12.2"
+\version "2.18.0"
 
 \header {
 
 \header {
-  lsrtags = "expressive-marks, text"
-
-%% Translation of GIT committish: 59caa3adce63114ca7972d18f95d4aadc528ec3d
-  texidoces = "
-Este ejemplo proporciona una función para tipografiar un regulador con
-texto por debajo, como @qq{molto} o @qq{poco}. El ejemplo ilustra
-también cómo modificar la manera en que se imprime normalmente un
-objeto, utilizando código de Scheme.
-
-"
-  doctitlees = "Centrar texto debajo de un regulador"
+  lsrtags = "expressive-marks, really-cool, scheme-language, text"
 
   texidoc = "
 This example provides a function to typeset a hairpin (de)crescendo
 with some additional text below it, such as @qq{molto} or @qq{poco}.
 
   texidoc = "
 This example provides a function to typeset a hairpin (de)crescendo
 with some additional text below it, such as @qq{molto} or @qq{poco}.
+The added text will change the direction according to the direction of
+the hairpin. The Hairpin is aligned to DynamicText.
+
 The example also illustrates how to modify the way an object is
 normally printed, using some Scheme code.
 
 The example also illustrates how to modify the way an object is
 normally printed, using some Scheme code.
 
@@ -31,18 +24,47 @@ normally printed, using some Scheme code.
 
 hairpinWithCenteredText =
 #(define-music-function (parser location text) (markup?)
 
 hairpinWithCenteredText =
 #(define-music-function (parser location text) (markup?)
-#{
-  \override Voice.Hairpin #'stencil = #(lambda (grob)
-    (ly:stencil-aligned-to
-     (ly:stencil-combine-at-edge
-      (ly:stencil-aligned-to (ly:hairpin::print grob) X CENTER)
-      Y DOWN
-      (ly:stencil-aligned-to (grob-interpret-markup grob $text) X CENTER))
-     X LEFT))
-#})
-
-hairpinMolto = \hairpinWithCenteredText \markup { \italic molto }
-hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo }
+  #{
+    \once \override Voice.Hairpin.after-line-breaking =
+      #(lambda (grob)
+        (let* ((stencil (ly:hairpin::print grob))
+               (par-y (ly:grob-parent grob Y))
+               (dir (ly:grob-property par-y 'direction))
+               (new-stencil (ly:stencil-aligned-to
+                 (ly:stencil-combine-at-edge
+                   (ly:stencil-aligned-to stencil X CENTER)
+                   Y dir
+                   (ly:stencil-aligned-to (grob-interpret-markup grob text) X CENTER))
+                 X LEFT))
+               (staff-space (ly:output-def-lookup (ly:grob-layout grob) 'staff-space))
+               (staff-line-thickness
+                 (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
+               (grob-name (lambda (x) (assq-ref (ly:grob-property x 'meta) 'name)))
+               (par-x (ly:grob-parent grob X))
+               (dyn-text (eq? (grob-name par-x) 'DynamicText ))
+               (dyn-text-stencil-x-length
+                 (if dyn-text
+                   (interval-length
+                     (ly:stencil-extent (ly:grob-property par-x 'stencil) X))
+                   0))
+               (x-shift
+                 (if dyn-text
+                   (-
+                     (+ staff-space dyn-text-stencil-x-length)
+                     (* 0.5 staff-line-thickness)) 0)))
+
+        (ly:grob-set-property! grob 'Y-offset 0)
+        (ly:grob-set-property! grob 'stencil
+           (ly:stencil-translate-axis
+            new-stencil
+            x-shift X))))
+  #})
+
+hairpinMolto =
+\hairpinWithCenteredText \markup { \italic molto }
+
+hairpinMore =
+\hairpinWithCenteredText \markup { \larger moltissimo }
 
 \layout { ragged-right = ##f }
 
 
 \layout { ragged-right = ##f }
 
@@ -50,5 +72,10 @@ hairpinMore = \hairpinWithCenteredText \markup { \larger moltissimo }
   \hairpinMolto
   c2\< c\f
   \hairpinMore
   \hairpinMolto
   c2\< c\f
   \hairpinMore
-  c2\< c\f
+  c2\ppppp\< c\f
+  \break
+  \hairpinMolto
+  c2^\< c\f
+  \hairpinMore
+  c2\ppppp\< c\f
 }
 }