X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fnew-fingering-engraver.cc;h=5078e2d2db9f1bcd11139528f93c469703c80c33;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=f965e63e53d4b86eb307c2112ba162b3e9a9b90c;hpb=358d6e99ada8019268ade9ba9080b2d0d88eeb7a;p=lilypond.git diff --git a/lily/new-fingering-engraver.cc b/lily/new-fingering-engraver.cc index f965e63e53..5078e2d2db 100644 --- a/lily/new-fingering-engraver.cc +++ b/lily/new-fingering-engraver.cc @@ -3,7 +3,7 @@ source file of the GNU LilyPond music typesetter - (c) 1998--2006 Han-Wen Nienhuys + (c) 1998--2008 Han-Wen Nienhuys */ #include "engraver.hh" @@ -15,6 +15,7 @@ #include "side-position-interface.hh" #include "stem.hh" #include "stream-event.hh" +#include "item.hh" #include "warn.hh" #include "translator.icc" @@ -48,7 +49,7 @@ operator< (Finger_tuple const &a, Finger_tuple const &b) class New_fingering_engraver : public Engraver { vector fingerings_; - vector string_fingerings_; + vector stroke_fingerings_; vector articulations_; vector string_numbers_; @@ -92,22 +93,22 @@ New_fingering_engraver::acknowledge_rhythmic_head (Grob_info inf) &fingerings_, ev, note_ev); else if (ev->in_event_class ("text-script-event")) - ev->origin ()->warning (_ ("can't add text scripts to individual note heads")); + ev->origin ()->warning (_ ("cannot add text scripts to individual note heads")); else if (ev->in_event_class ("script-event")) add_script (inf.grob (), ev, note_ev); else if (ev->in_event_class ("string-number-event")) add_fingering (inf.grob (), ly_symbol2scm ("StringNumber"), &string_numbers_, ev, note_ev); - else if (ev->in_event_class ("string-finger-event")) + else if (ev->in_event_class ("stroke-finger-event")) add_fingering (inf.grob (), - ly_symbol2scm ("StringFinger"), &string_fingerings_, + ly_symbol2scm ("StrokeFinger"), &stroke_fingerings_, ev, note_ev); else if (ev->in_event_class ("harmonic-event")) { inf.grob ()->set_property ("style", ly_symbol2scm ("harmonic")); Grob *d = unsmob_grob (inf.grob ()->get_object ("dot")); - if (d) + if (d && !to_boolean (get_property ("harmonicDots"))) d->suicide (); } } @@ -248,7 +249,12 @@ New_fingering_engraver::position_scripts (SCM orientations, Grob *f = ft.script_; f->set_parent (ft.head_, X_AXIS); f->set_parent (ft.head_, Y_AXIS); - + f->set_property ("avoid-slur", SCM_BOOL_F); + if (hordir == LEFT + && unsmob_grob (ft.head_->get_object ("accidental-grob"))) + Side_position_interface::add_support (f, + unsmob_grob (ft.head_->get_object ("accidental-grob"))); + 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); @@ -256,8 +262,6 @@ New_fingering_engraver::position_scripts (SCM orientations, f->set_property ("direction", scm_from_int (hordir)); } - int finger_prio = 200; - Direction d = DOWN; Drul_array< vector > vertical (down, up); do @@ -266,6 +270,7 @@ New_fingering_engraver::position_scripts (SCM orientations, { Finger_tuple ft = vertical[d][i]; Grob *f = ft.script_; + int finger_prio = robust_scm2int (f->get_property ("script-priority"), 200); f->set_parent (ft.head_, X_AXIS); f->set_property ("script-priority", scm_from_int (finger_prio + d * ft.position_)); @@ -283,7 +288,7 @@ New_fingering_engraver::position_scripts (SCM orientations, void New_fingering_engraver::stop_translation_timestep () { - position_all(); + position_all (); stem_ = 0; heads_.clear (); } @@ -306,11 +311,11 @@ New_fingering_engraver::position_all () string_numbers_.clear (); } - if (string_fingerings_.size ()) + if (stroke_fingerings_.size ()) { - position_scripts (get_property ("stringFingerOrientations"), - &string_fingerings_); - string_fingerings_.clear (); + position_scripts (get_property ("strokeFingerOrientations"), + &stroke_fingerings_); + stroke_fingerings_.clear (); } for (vsize i = articulations_.size (); i--;) @@ -339,20 +344,23 @@ ADD_ACKNOWLEDGER (New_fingering_engraver, rhythmic_head); ADD_ACKNOWLEDGER (New_fingering_engraver, stem); ADD_TRANSLATOR (New_fingering_engraver, - /* doc */ "Create fingering-scripts for notes in a new chord. " - "This engraver is ill-named, since it " - "also takes care of articulations and harmonic note heads", + /* doc */ + "Create fingering scripts for notes in a new chord. This" + " engraver is ill-named, since it also takes care of" + " articulations and harmonic note heads.", + /* create */ "Fingering " "StringNumber " - "StringFinger " - "Script " - , + "StrokeFinger " + "Script ", + /* read */ - "fingeringOrientations " - "stringFingerOrientations " - "stringNumberOrientations " - , + "harmonicDots " + "strokeFingerOrientations " + "stringNumberOrientations ", - /* write */ ""); + /* write */ + "" + );