]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/new-dynamic-engraver.cc
Rename collision-distance beam detail property to collision-padding.
[lilypond.git] / lily / new-dynamic-engraver.cc
index 489fcf5ea6c0142b97e2a18dab9fdd5eb79e4e6f..e225d97f1fd1bf4285988c27700839ebb3bca595 100644 (file)
@@ -1,9 +1,20 @@
-/* 
-  new-dynamic-engraver.cc -- implement New_dynamic_engraver
+/*
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 2008--2011 Han-Wen Nienhuys <hanwen@lilypond.org>
 
-  (c) 2008--2009 Han-Wen Nienhuys <hanwen@lilypond.org>
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "engraver.hh"
@@ -155,16 +166,7 @@ New_dynamic_engraver::process_music ()
       if (finished_spanner_)
        finished_spanner_->set_bound (RIGHT, script_);
       if (current_spanner_)
-       {
-         current_spanner_->set_bound (LEFT, script_);
-
-         if (!Hairpin::has_interface (current_spanner_))
-           set_nested_property (current_spanner_,
-                                scm_list_3 (ly_symbol2scm ("bound-details"),
-                                            ly_symbol2scm ("left"),
-                                            ly_symbol2scm ("attach-dir")),
-                                scm_from_int (RIGHT));
-       }
+       current_spanner_->set_bound (LEFT, script_);
     }
 }
 
@@ -225,10 +227,16 @@ New_dynamic_engraver::acknowledge_note_column (Grob_info info)
   if (script_ && !script_->get_parent (X_AXIS))
     {
       extract_grob_set (info.grob (), "note-heads", heads);
-      if (heads.size ())
+      /*
+       Spacing constraints may require dynamics to be aligned on rests,
+       so check for a rest if this note column has no note heads.
+      */
+      Grob *x_parent = (heads.size ()
+                       ? heads[0]
+                       : unsmob_grob (info.grob ()->get_object ("rest")));
+      if (x_parent)
        {
-         Grob *head = heads[0];
-         script_->set_parent (head, X_AXIS);
+         script_->set_parent (x_parent, X_AXIS);
          Self_alignment_interface::set_center_parent (script_, X_AXIS);
        }
     }
@@ -242,10 +250,7 @@ New_dynamic_engraver::acknowledge_note_column (Grob_info info)
 ADD_ACKNOWLEDGER (New_dynamic_engraver, note_column);
 ADD_TRANSLATOR (New_dynamic_engraver,
                /* doc */
-               "Create hairpins, dynamic texts, and their vertical"
-               " alignments.  The symbols are collected onto a"
-               " @code{DynamicLineSpanner} grob which takes care of vertical"
-               " positioning.",
+               "Create hairpins, dynamic texts and dynamic text spanners.",
 
                /* create */
                "DynamicTextSpanner "