X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Ffingering-engraver.cc;h=1c4107e686294ffd345fb9c572d2342762f7366f;hb=5b4b0d6e9a197e8f9eb085b7c2ad78b8be3e5cfc;hp=b024f4b7c57e93e49001f0fab4ffa7dffb994b0b;hpb=83ed05cef3bfcbd69f4148e8ee0669ca0664e214;p=lilypond.git diff --git a/lily/fingering-engraver.cc b/lily/fingering-engraver.cc index b024f4b7c5..1c4107e686 100644 --- a/lily/fingering-engraver.cc +++ b/lily/fingering-engraver.cc @@ -3,59 +3,69 @@ source file of the GNU LilyPond music typesetter - (c) 1998--2005 Han-Wen Nienhuys + (c) 1998--2008 Han-Wen Nienhuys */ #include "engraver.hh" -#include "side-position-interface.hh" -#include "stem.hh" +#include "pitch.hh" #include "rhythmic-head.hh" #include "self-alignment-interface.hh" -#include "pitch.hh" +#include "side-position-interface.hh" +#include "stem.hh" +#include "stream-event.hh" +#include "item.hh" +#include "translator.icc" class Fingering_engraver : public Engraver { - Link_array events_; - Link_array fingerings_; + vector events_; + vector fingerings_; public: TRANSLATOR_DECLARATIONS (Fingering_engraver); protected: - virtual bool try_music (Music *m); - PRECOMPUTED_VIRTUAL void stop_translation_timestep (); - PRECOMPUTED_VIRTUAL void process_music (); - DECLARE_ACKNOWLEDGER(rhythmic_head); - DECLARE_ACKNOWLEDGER(stem); + void stop_translation_timestep (); + void process_music (); + DECLARE_TRANSLATOR_LISTENER (fingering); + DECLARE_TRANSLATOR_LISTENER (stroke_finger); + DECLARE_ACKNOWLEDGER (rhythmic_head); + DECLARE_ACKNOWLEDGER (stem); private: - void make_script (Direction, Music *, int); + void make_script (Direction, Stream_event *, int); }; -bool -Fingering_engraver::try_music (Music *m) +IMPLEMENT_TRANSLATOR_LISTENER (Fingering_engraver, fingering); +void +Fingering_engraver::listen_fingering (Stream_event *ev) { - if (m->is_mus_type ("fingering-event")) - { - events_.push (m); - return true; - } - return false; + events_.push_back (ev); +} + +IMPLEMENT_TRANSLATOR_LISTENER (Fingering_engraver, stroke_finger); +void +Fingering_engraver::listen_stroke_finger (Stream_event *ev) +{ + /* + FIXME: should do something. + + This function is mainly here to shut up a warning + */ + (void)ev; } void Fingering_engraver::acknowledge_stem (Grob_info inf) { - for (int i = 0; i < fingerings_.size (); i++) - { - Side_position_interface::add_support (fingerings_[i], inf.grob ()); - } + for (vsize i = 0; i < fingerings_.size (); i++) + Side_position_interface::add_support (fingerings_[i], inf.grob ()); } void Fingering_engraver::acknowledge_rhythmic_head (Grob_info inf) { - for (int i = 0; i < fingerings_.size (); i++) + for (vsize i = 0; i < fingerings_.size (); i++) { Grob *t = fingerings_[i]; Side_position_interface::add_support (t, inf.grob ()); @@ -67,7 +77,7 @@ Fingering_engraver::acknowledge_rhythmic_head (Grob_info inf) void Fingering_engraver::process_music () { - for (int i = events_.size (); i--;) + for (vsize i = events_.size (); i--;) { SCM dir = events_[i]->get_property ("direction"); make_script (to_dir (dir), events_[i], i); @@ -75,11 +85,9 @@ Fingering_engraver::process_music () } void -Fingering_engraver::make_script (Direction d, Music *r, int i) +Fingering_engraver::make_script (Direction d, Stream_event *r, int i) { Item *fingering = make_item ("Fingering", r->self_scm ()); - Axis a = Y_AXIS; - Axis other = other_axis (a); /* Huh, what's this for? --hwn. @@ -94,9 +102,9 @@ Fingering_engraver::make_script (Direction d, Music *r, int i) We can't fold these definitions into define-grobs since fingerings for chords need different settings. */ - Side_position_interface::set_axis (fingering, a); - fingering->add_offset_callback (Self_alignment_interface::aligned_on_self_proc, other); - fingering->add_offset_callback (Self_alignment_interface::centered_on_parent_proc, other); + Side_position_interface::set_axis (fingering, Y_AXIS); + Self_alignment_interface::set_align_self (fingering, X_AXIS); + Self_alignment_interface::set_center_parent (fingering, X_AXIS); // Hmm int priority = 200; @@ -107,20 +115,17 @@ Fingering_engraver::make_script (Direction d, Music *r, int i) /* See script-engraver.cc */ priority += i; - fingering->set_property ("script-priority", scm_int2num (priority)); + fingering->set_property ("script-priority", scm_from_int (priority)); - if (!is_direction (fingering->get_property ("direction"))) + if (!is_direction (fingering->get_property_data ("direction"))) { if (d) - fingering->set_property ("direction", scm_int2num (d)); + fingering->set_property ("direction", scm_from_int (d)); else - fingering->set_property ("direction", scm_int2num (RIGHT)); + fingering->set_property ("direction", scm_from_int (RIGHT)); } - SCM dig = r->get_property ("digit"); - fingering->set_property ("text", scm_number_to_string (dig, scm_int2num (10))); - - fingerings_.push (fingering); + fingerings_.push_back (fingering); } void @@ -137,14 +142,19 @@ Fingering_engraver::Fingering_engraver () { } -#include "translator.icc" +ADD_ACKNOWLEDGER (Fingering_engraver, rhythmic_head); +ADD_ACKNOWLEDGER (Fingering_engraver, stem); -ADD_ACKNOWLEDGER(Fingering_engraver,rhythmic_head); -ADD_ACKNOWLEDGER(Fingering_engraver,stem); ADD_TRANSLATOR (Fingering_engraver, - /* descr */ "Create fingering-scripts", - /* creats*/ "Fingering", - /* accepts */ "fingering-event", - /* acks */ "rhythmic-head-interface stem-interface", - /* reads */ "", - /* write */ ""); + /* doc */ + "Create fingering scripts.", + + /* create */ + "Fingering ", + + /* read */ + "", + + /* write */ + "" + );