/*
- fingering-engraver.cc -- implement New_fingering_engraver
+ This file is part of LilyPond, the GNU music typesetter.
- source file of the GNU LilyPond music typesetter
+ Copyright (C) 1998--2011 Han-Wen Nienhuys <hanwen@xs4all.nl>
- (c) 1998--2007 Han-Wen Nienhuys <hanwen@xs4all.nl>
+ 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"
#include "international.hh"
+#include "item.hh"
#include "rhythmic-head.hh"
#include "script-interface.hh"
#include "self-alignment-interface.hh"
#include "side-position-interface.hh"
#include "stem.hh"
#include "stream-event.hh"
-#include "item.hh"
#include "warn.hh"
#include "translator.icc"
-
struct Finger_tuple
{
Grob *head_;
vector<Finger_tuple> articulations_;
vector<Finger_tuple> string_numbers_;
- vector<Grob*> heads_;
+ vector<Grob *> heads_;
Grob *stem_;
void position_all ();
void
New_fingering_engraver::add_script (Grob *head,
Stream_event *event,
- Stream_event *note)
+ Stream_event * /* note */)
{
- (void) note;
-
Finger_tuple ft;
Grob *g = make_item ("Script", event->self_scm ());
event->get_property ("articulation-type"), 0);
ft.script_ = g;
ft.script_->set_parent (head, X_AXIS);
-
+
+ SCM forced_dir = event->get_property ("direction");
+ if (to_dir (forced_dir))
+ ft.script_->set_property ("direction", forced_dir);
+
articulations_.push_back (ft);
}
ft.script_ = internal_make_item (grob_sym, event->self_scm (),
ly_symbol2string (grob_sym).c_str (),
- __FILE__, __LINE__, __FUNCTION__
- );
+ __FILE__, __LINE__, __FUNCTION__);
Side_position_interface::add_support (ft.script_, head);
&& unsmob_grob (ft.head_->get_object ("accidental-grob")))
Side_position_interface::add_support (f,
unsmob_grob (ft.head_->get_object ("accidental-grob")));
-
+ else if (unsmob_grob (ft.head_->get_object ("dot")))
+ Side_position_interface::add_support (f,
+ unsmob_grob (ft.head_->get_object ("dot")));
+
Self_alignment_interface::set_align_self (f, Y_AXIS);
Self_alignment_interface::set_center_parent (f, Y_AXIS);
Side_position_interface::set_axis (f, X_AXIS);
Self_alignment_interface::set_align_self (f, X_AXIS);
Self_alignment_interface::set_center_parent (f, X_AXIS);
Side_position_interface::set_axis (f, Y_AXIS);
-
+
f->set_property ("direction", scm_from_int (d));
}
}
heads_.clear ();
}
-
void
New_fingering_engraver::position_all ()
{
&stroke_fingerings_);
stroke_fingerings_.clear ();
}
-
+
for (vsize i = articulations_.size (); i--;)
{
Grob *script = articulations_[i].script_;
stem_ = 0;
}
-
ADD_ACKNOWLEDGER (New_fingering_engraver, rhythmic_head);
ADD_ACKNOWLEDGER (New_fingering_engraver, stem);
"harmonicDots "
"strokeFingerOrientations "
"stringNumberOrientations ",
-
+
/* write */
""
);