-/*
- 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"
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_);
}
}
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);
}
}
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 "